BoneSkier Posted February 9, 2012 Share Posted February 9, 2012 How do I obtain the current axis position in a part program (as opposed to the current motor position). I need this to do my regression testing. I know I can do "&1p" to get the position of all axes at the terminal, but I need the position of just "X", "Y", or "Z". I need to know the Raw Position as well as the Kinematic Position effected by kinematics (scaling, rotation, etc). Link to comment Share on other sites More sharing options...
curtwilson Posted February 9, 2012 Share Posted February 9, 2012 Power PMAC does not automatically compute the axis ("tool-tip") positions on an ongoing basis. It converts the commanded axis positions for a move end point (for a non-segmented move) or move segment point (for a segmented move) to motor positions through the transformation matrix (if any) and then through either the axis definitions or the inverse kinematic subroutine. From that point on, all automatic calculations of command and actual position are done in motor coordinates. If you want tool-tip data for various reporting purposes, we provide the axis data querying functions, of which your "&1p" is one form. The on-line commands for these functions provide the data for all used axes in text form. It seems that you would rather not parse this text response to isolate your X, Y, and Z axis values. It looks like using the buffered program equivalent "pread" command from a PLC program would be a better option for you. This puts the axis positions calculated from the present (actual) motor positions into local "D" variables for the coordinate systems: the X position is in D6, Y in D7, and Z in D8. It does this by processing the motor positions either through the automatically inverted axis definition statements or through the forward kinematic subroutine. If there is an axis transformation matrix, these "base" axis positions are then processed through the automatically inverted axis transformation matrix to get the "transformed" (programmed) axis positions. Your PLC program can then process these values further and/or send them somewhere for logging etc. If you want the "base" (which is what I think you call "raw") axis positions, you can multiply these values by the transformation matrix values. For example: MyBaseX = Tdata[1].Diag[6] * D6 + Tdata[1].XYZ[0] * D7 + Tdata[1].XYZ[1] * D8 + Tdata[1].Bias[6] MyBaseY = Tdata[1].XYZ[2] * D6 + Tdata[1].Diag[7] * D7 + Tdata[1].XYX[3] * D8 + Tdata[1].Bias[7] MyBaseZ = Tdata[1].XYZ[4] * D6 + Tdata[1].XYZ[5] * D7 + Tdata[1].Diag[8] * D8 + Tdata[1].Bias[8] Link to comment Share on other sites More sharing options...
dzrong Posted February 24, 2012 Share Posted February 24, 2012 Hello Curtwilson, I want to get the tool-tip posion to display in the HMI,and i used the "pread" in the plc,it seems not work in the plc but in program.The code like this: Ldata.coord =1; fread; d32=$1ff; p1=d1 p2=d2 p3=d3 p4=d4 p5=d5 p6=d6 p7=d7 p8=d8 I can get P1..8 value when using in program.but plc can't. Could you give some suggestion? Thanks Link to comment Share on other sites More sharing options...
Guest DavisG Posted February 24, 2012 Share Posted February 24, 2012 I want to get the tool-tip posion to display in the HMI,and i used the "pread" in the plc,it seems not work in the plc but in program.The code like this: Ok - from a plc (my coord system was CS0) this works: open plc 1 cmd"&0p p1=d6 p2=d7" close The values displayed in P1 and P2 match the axis positions. Link to comment Share on other sites More sharing options...
curtwilson Posted February 24, 2012 Share Posted February 24, 2012 I have no trouble using the "pread" command in a PLC program to get the axis ("tool-tip") positions from the selected coordinate system. You should be reading D32, not writing to it. It tells you which axes have been reported. If you know already, you don't need to bother reading it, but it is a good diagnostic tool -- what value does it return for you? My PLC program text: open plc 17 Ldata.coord = 1; dread; P6 = D6; P7 = D7; P8 = D8; disable plc 17; close Link to comment Share on other sites More sharing options...
dzrong Posted February 27, 2012 Share Posted February 27, 2012 Haha,it's strange! It's my plc14. open plc 14 p1=p1+1 cmd"&1p p11=d6 p12=d7 p13=d8" p2=p2+1 Ldata.coord =1; dread; p3=p3+1 p1001=d1 p1002=d2 p1003=d3 p1004=d4 p1005=d5 p1006=d6 p1007=d7 p1008=d8 p1009=d32 pread; p4=p4+1 p2001=d1 p2002=d2 p2003=d3 p2004=d4 p2005=d5 p2006=d6 p2007=d7 p2008=d8 p2009=d32 close pread.bmp Everything return to me is zero. It maybe have a relationship with forward program,but i'm not sure. Here is my code for anyone would like to check. usrcode.txtforward.txt Thanks for your replay! Link to comment Share on other sites More sharing options...
Omron Forums Support Posted February 27, 2012 Share Posted February 27, 2012 I believe the problem may be in your forward kinematics script file. Try using this as your forward kinematics Script file and then try pread in your PLC again: #define Forward_Kinematics_State 0 #define Inverse_Kinematics_State 1 #define KinematicsType1 1 #define KinematicsType2 2 // Define storage flags for the error code returns &1 csglobal ForwardKin1ErrCode,ForwardKin2ErrCode,InvKin1ErrCode,InvKin2ErrCode; open forward (1) if (KinVelEna) callsub 100; KinAxisUsed = $1C6; // X, Y, Z, B, and C axis results N100: ForwardKin1ErrCode = CfromScript(1,Forward_Kinematics_State,KinematicsType1,0,0,0,0); return; close Please let me know if that works for you. Link to comment Share on other sites More sharing options...
dzrong Posted February 28, 2012 Share Posted February 28, 2012 Hello CharlesP, It seems not work still,but D32 has the right value. pread.bmp Thank for your reply! Link to comment Share on other sites More sharing options...
Omron Forums Support Posted February 28, 2012 Share Posted February 28, 2012 dzrong, I was able to get pread to work just fine while using CfromScript kinematics. I have attached a sample project for your reference so you can compare any differences between my and your code. Also, make sure you have UserAlgo.CFunc=1 since it seems you are calling pread (which then calls CfromScript) from a background PLC, which requires this structure to be set to 1. dzrong dread problem.zip Link to comment Share on other sites More sharing options...
dzrong Posted February 29, 2012 Share Posted February 29, 2012 Hello CharlesP, I'm sure i never hear the parameter,and i will try that next week. Thank you very much! Link to comment Share on other sites More sharing options...
dzrong Posted March 5, 2012 Share Posted March 5, 2012 Yes,no problem! That works well. Link to comment Share on other sites More sharing options...
Recommended Posts