Forum Migration Notice
We're transitioning to a more modern community platform by the end of this year. Learn about the upcoming changes and what to expect.

How to input the XYZ coordinate and Quaternion data from externl file or matrix?

I am using MoveL to program the robot:

MoveL Target_20,v1000,fine,tRM62_22\WObj:=Workobject_1;

and the target_20 is :

CONST robtarget Target_20:=[[-12.830311995,192.144032798,119.012999948],[0.618084702345011,0.492475524331876,0.299763882874037,0.534397579696431],[-1,1,-3,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

The first array is the XYZ coordinate and the second array is the quaternion. I am calculating both array in Matlab.

The problem is I will have huge number of points. It is time consuming to copy and paste them one by one to the Rapid program.

Is there a better way to input these points to the MoveL?  For example, I can store the data in an excel file or txt file. How can Rapid read the excel or txt file? Otherwise, can I use a matrix to store all the points and read them one by one in the Rapid?

 

Thanks!

Best Answer

Answers

  • You can use a iodev to read from a for example a text file. Here is just an ex. where I read a values seperated with ; The text file is stored in the home folder on the robot controller PROC ReadTest() VAR iodev testsFile; VAR string strRead; VAR num nArrayPosition; VAR bool bEmptyFile; ! nArrayPosition:=1; bEmptyFile:=FALSE; ! Open file Open "tests.txt",testsFile\Read; WHILE bEmptyFile=FALSE DO ! Write into array strRead:=ReadStr(testsFile\Delim:=";"\RemoveCR); IF strRead<>EOF THEN arrDefinedTests{nArrayPosition}.TestNo:=strRead; strRead:=ReadStr(testsFile\Delim:=";"\RemoveCR); arrDefinedTests{nArrayPosition}.Chapter:=strRead; strRead:=ReadStr(testsFile\Delim:=";"\RemoveCR); arrDefinedTests{nArrayPosition}.Description:=strRead; Incr nArrayPosition; ELSE bEmptyFile:=TRUE; ENDIF ENDWHILE ! Close file Close testsFile; ERROR Close testsFile; RAISE ; ENDPROC

    Hi, PerSvensson,

    Thanks for your reply!

    I wrote the following program:

    PROC ReadTest()

    VAR iodev file;

    VAR num input;

    Open "HOME:/Q4_coordinate.txt", file\Read;

    input :=ReadNum(file);

    ENDPROC

    and the Q4_coordinate.txt is an array like follow:

    -17 191 165; -12.8303 192.144 180.987; -4.87965 192.5664 195.3; 5.608169 192.6152 208.2366; 18.10037 191.9184 219.4036; 32.02475 190.1629 228.4619; 46.8055 187.1379 235.1362; 61.88993 182.7559 239.2236; 76.76652 177.0579 240.6; 90.97897 170.2096 239.2236;

    Those values should be put into 'input'. However, my input is always 0.

    Could you please suggest the data type, which I should declare for 'input'? Or how should I arrange the values in the .txt file?

    Thanks!

  • I have figured out the problem. I need to write a loop to read the data in the file, like PerSvensson's answer. Thanks!