ABB工業機器人學習 (1)——常用功能的實現

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章