ABB工業機器人學習 (1)——常用功能的實現
請打開RobotStudio查看幫助下的 ABB機器人的RAPID指令 手冊
基礎功能
定時器使用
ClkStart用於啓動作爲定時用秒錶的時鐘。
ClkStop用於停止作爲定時用秒錶的時鐘。
ClkRead用於讀取作爲定時用秒錶的時鐘。
ClkReset用於重置作爲定時用秒錶的時鐘。 使用時鐘之前,可以使用此指令,以確保設置爲0。
在我們使用時鐘前應使用ClkReset指令清空定時器的值,以便我們更好使用。
VAR clock myclock; !定義一個clock
VAR num time; !定義一個變量用於存儲時間
ClkReset myclock; ! 復位時鐘
ClkStart myclock; ! 開始計時
MoveJ home, v1500, z50, tool0;
ClkStop myclock; ! 停止計時
time:=ClkRead(myclock); !讀出時間
TPWrite "Time:"\Num:=time; !在面板上顯示時間
WaitTime 2;
TPErase;
拓展功能
從面板讀取輸入
TPReadFK - 讀取功能鍵;
TPReadNum(FlexPendant Read Numerical)從示教器讀取數字;
TPWrite(FlexPendant Write)用於在FlexPendant示教器上寫入文本。可將特定數據的值同文本一樣寫入。和c語言的printf一樣;
TPErase - 擦除在示教器上印刷的文本;
我的程序是從面板讀取數字:
PROC num get_pannel_input_num()
VAR num user_input_num:=0;
TPReadNum user_input_num, "How many objects should be produced?";
TPWrite "Num:"\Num:=user_input_num;
WaitTime 3;
TPErase;
RETURN user_input_num;
ENDFUNC
判斷機器人的當前位置是否是目標點
我的程序是檢查機器人是否在home點,具體精度的控制,請自行修改
用到的函數:
CRobT(Current Robot Target)
用於讀取機械臂和外軸的當前位置。 該函數返回robtarget值以及位置(x、y、z)、方位(q1 … q4)、機械臂軸配置和外軸位置。如果僅讀取機械臂TCP(pos)的x、y和z值,則轉而使用函數CPos。
示例:
VAR robtarget p1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
p1 := CRobT(\Tool:=tool1 \WObj:=wobj0);
功能函數:
targetpos :要到達的目標點
tcp: 你所使用的工具座標
FUNC bool isHomePos(robtarget targetpos,INOUT tooldata tcp)
VAR num num1:=0;
var robtarget actualpos :=[[495.981197913,0,607.935290498],[0.79335334,0,0.608761429,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
actualpos:= CRobT(\Tool:=tcp\WObj:=wobj0);
IF actualpos.trans.x>targetpos.trans.x-20 AND actualpos.trans.x<targetpos.trans.x+20 num1:=num1+1;
IF actualpos.trans.y>targetpos.trans.y-20 AND actualpos.trans.y<targetpos.trans.y+20 num1:=num1+1;
IF actualpos.trans.z>targetpos.trans.z-20 AND actualpos.trans.z<targetpos.trans.z+20 num1:=num1+1;
IF actualpos.rot.q1>targetpos.rot.q1-20 AND actualpos.rot.q1<targetpos.rot.q1+20 num1:=num1+1;
IF actualpos.rot.q2>targetpos.rot.q2-20 AND actualpos.rot.q2<targetpos.rot.q2+20 num1:=num1+1;
IF actualpos.rot.q3>targetpos.rot.q3-20 AND actualpos.rot.q3<targetpos.rot.q3+20 num1:=num1+1;
IF actualpos.rot.q4>targetpos.rot.q4-20 AND actualpos.rot.q4<targetpos.rot.q4+20 num1:=num1+1;
! "=" is logical operator.
RETURN num1=7;
ENDFUNC
測試函數
PROC HomePosTest()
IF isHomePos(home,TCPAir) THEN
TPWrite "Is home postion now!";
ELSE
MoveJ home, v200, z100, TCPAir;
TPWrite "Go Home Postion";
ENDIF
WaitTime 2;
TPErase;
ENDPROC