ABB機器人應用程序簡述

機器人應用程序,我也是最近才開始接觸。算是入門小菜鳥,本篇文章只是介紹一個機器人程序的大概結構的簡述。

長話短說直接進入主題,這個機器人程序不是我從頭到尾開發的,是在原本的程序基礎上的。

在我們的ABB機器人的程序主要包括三個module模塊組成:

1,Admin

2,機器具體動作程序(我們稱作Job)

3,write RegPos (當執行玩job中的某個特定位置後,這個作為標記用的)

以上這部分程序中,我們主要修改的是2module模塊這個程序,就是包含很多Job,每個Job都是具體實施機器人位置移動的程序。

任何程序都有一個程序入口,機器人程序也一樣。而在我們機器人程序的入口就是在這個Admin這個程序中。其中Admin程序的main()的源碼如下,注意我們看到PROC main(),ABB機器人的編程單元是procedure,就是PROC這個簡寫,這個Admin 的main procedure基本上我們在新建一台機器之後:

PROC main()

CONNECT fTCPSpeedHigh WITH IGenRobotMoving;

CONNECT fTCPSpeedLow WITH IGenRobotMoving;

ISignalAO virt_TCPSpeed_Robot1, AIO_ABOVE_HIGH, 0.02, 0, 0, fTCPSpeedHigh;

ISignalAO virt_TCPSpeed_Robot1, AIO_BELOW_HIGH, 0.015, 0, 0, fTCPSpeedLow;

IF OpMode()=OP_MAN_PROG THEN

TPErase;

TPReadFK FunkTaste,"Select move jobs by manual mode?","","","","No","Yes";

IF FunkTaste=5 THEN

Manual;

ELSE

TPErase;

TPWrite "Robot Moving in Manual Mode";

TPWrite "Communication with Master-PLC";

ENDIF

ELSE

TypNum:=0;

JobNum:=0;

Funktaste:=0;

ENDIF

Initialize;

SpeedLimiter;

pStartingPoint:=CRobT(Tool:=tool0 WObj:=wobj0);

regStartingAngleX:=EulerZYX(X, pStartingPoint.rot);

regStartingAngleY:=EulerZYX(Y, pStartingPoint.rot);

regStartingAngleZ:=EulerZYX(, pStartingPoint.rot);

regStoppedAngleX:=EulerZYX(X, pPointAtStop.rot);

regStoppedAngleY:=EulerZYX(Y, pPointAtStop.rot);

regStoppedAngleZ:=EulerZYX(, pPointAtStop.rot);

IF (pPointAtStop.trans.X>=(pStartingPoint.trans.X+regTransDiff) OR

pPointAtStop.trans.X<=(pStartingPoint.trans.X-regTransDiff) OR

pPointAtStop.trans.Y>=(pStartingPoint.trans.Y+regTransDiff) OR

pPointAtStop.trans.Y<=(pStartingPoint.trans.Y-regTransDiff) OR

pPointAtStop.trans.Z>=(pStartingPoint.trans.Z+regTransDiff) OR

pPointAtStop.trans.Z<=(pStartingPoint.trans.Z-regTransDiff)) OR

(regStoppedAngleX>=(regStartingAngleX+regRotDiff) OR

regStoppedAngleX<=(regStartingAngleX-regRotDiff) OR

regStoppedAngleY>=(regStartingAngleY+regRotDiff) OR

regStoppedAngleY<=(regStartingAngleY-regRotDiff) OR

regStoppedAngleZ>=(regStartingAngleZ+regRotDiff) OR

regStoppedAngleZ<=(regStartingAngleZ-regRotDiff)) OR

pPointAtStop.robconf<>pStartingPoint.robconf THEN

Set DO13_RobotHasBeenMoved;

ENDIF

WHILE di8_HsStartMain=0 DO

SetGO DO32_39_HsStepCode,0;

WaitDI DI10_ReadJobCode,1;

VelSet DI40_47_Override, 7500; !Speed is set to max

SetGO DO24_31_HsJobCode,DI24_31_JobCode;

SetDO DO10_HsReadJobCode,1;

WaitDI DI10_ReadJobCode,0;

SetDO DO10_HsReadJobCode,0;

!Call Jobprogram

CallByVar "Job",DI24_31_JobCode;

ENDWHILE

ENDPROC

這個程序有點長,我也不想做過多介紹,主要想說最後這一段程序,因為這一段程序就是實現,機器人在移動位置時是怎麼實現調用在第二個module模塊的Job程序。我想這也是大多是想了解機器人程序的人最想了解和知道的:

首先,第一句 WHILE di8_HsStartMain=0 DO

注釋一下"DI8_HsStartMain" 的意思是 Handshake "Start Main done"

這是說當數字量輸入的Bool信號HsStartMain=0,表示Main這個沒有啟動完成,我們就要執行While Do 一下所有的代碼,這裡的代碼比較多,我舉一個例子如,第二條

WaitDI DI10_ReadJobCode,1; (注釋變數的意義 "DI10_ReadJobCode" 是來自於PLC的握手信號 Handshake "read Job")。

好了那到底是怎麼讓機器人執行各個Job的呢,別急就是這句:

!Call Jobprogram 這句只是注釋

CallByVar "Job",DI24_31_JobCode; 這句才是精髓所在。

這個CallByVar Procedure參數有一個String型的參數Name,和一個Num型的參數Number。

CallByVar "Job",DI24_31_JobCode, 在這句中我們賦值第一個string型參數為Job,而DI24_31_JobCode這個變數如果是1,那麼 我們就Call Job1這個程序。而"DI24_31_JobCode"這個變數是來自於PLC程序的握手信號 Handshake Job-Code。

好了,我們知道了程序中是怎麼Call Job的,那麼這個Job程序在哪呢,對了就是在第二module模塊這個基本上每個不同的機器我們就會設置不同的job,這也是每次寫新的機器人程序應用的時候要改的最多的module模塊。

這個module的第一部分就是各個位置的坐標,因為我們選用的不是相對坐標,所以每次都要自己示教位置,一下就是各個位置值。

這些值可以在機器人示教的時候,用機器人面板,移動示教後修改位置。(這裡就不具體介紹了)機器人示教只要操作過即便應該比較容易掌握。

然後就是wordzone部分:

在下面就是我們的各個Job的procedure了,未點開+號複選框之前。

具體Job1內的程序:

好了,今天先寫到這裡,明天繼續更。。。。。。不好意思,在明天繼續更。。。。。哈哈
推薦閱讀:

TAG:工業機器人 | 自動化 | 自動化設備 |