1. 通信協(xié)議與接口選擇
2. 變量聲明與數(shù)據(jù)類型
3. 組輸出信號配置
4. 中斷子程序編寫
5. 數(shù)據(jù)發(fā)送與接收
6. 調(diào)試與優(yōu)化
3. 機器人端進行數(shù)據(jù)高低位轉(zhuǎn)換 4. PLC數(shù)據(jù)類型講解 5. 分析機器人端和PLC端需要創(chuàng)建的變量數(shù)據(jù) 任務(wù)要求:回傳機器人1軸-6軸以及XYZ的坐標值 MODULE SUCC_B_station_Lmsa!B站林木森Lmsa VAR intnum intno1; !聲明一個中斷識別號 VAR num POS{9}; !聲明一個存放J1-J6 XYZ坐標的數(shù)組 VAR rawbytes rawbyte1; !聲明一個Rabytes數(shù)據(jù)類型用于存放打包與解包的數(shù)據(jù)。 VAR byte byte1{4}; !聲明存放一個浮點數(shù)數(shù)據(jù)被拆分成組成這個浮點數(shù)的4個字節(jié)數(shù)據(jù)。
VAR byte Position{36};!存放將9個坐標浮點數(shù)轉(zhuǎn)換為字節(jié)的4X9=36字節(jié)的一個數(shù)組“Position{36}” VAR num Lmsa; !聲明一個遍歷Position數(shù)組的NUM變量 CONST jointtarget Phome{8}:=[[[90,-20,-57.2,-0.59,90,0.2584],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],[[-7.85711E-7,7.00837,-7.39141,1.05234E-39,30.3831,1.45085E-37],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[4.50332,7.23671,-7.64511,-7.65159,30.7097,8.8439],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-16.693,8.55096,-1.39327,32.3497,27.7035,-37.8103],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-10.9289,-32.9271,32.5103,18.0069,32.1168,-20.9049],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,32.8987,-33.2878,45.3095,45.8053,-55.1465],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,60.5635,-0.919765,124.632,38.277,-151.317],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,37.4155,-47.9823,39.4339,-1.33303,-46.1254],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]];
PROC Position_Lmsa() !讀取機器人當前位置的子程序
VAR jointtarget Jpos; !聲明jointtarget用于存放機器人關(guān)節(jié)軸角度數(shù)據(jù) VAR robtarget Lpos; !聲明robtarget用于存放機器人XYZ數(shù)據(jù) Jpos:=CJointT(); !讀取機器人當前位置6個關(guān)節(jié)軸角度存入Jpos Pos{1}:=Jpos.robax.rax_1; !把機器人1軸角度的數(shù)據(jù)放入到Pos{1}中 Pos{2}:=Jpos.robax.rax_2; Pos{3}:=Jpos.robax.rax_3; Pos{4}:=Jpos.robax.rax_4; Pos{5}:=Jpos.robax.rax_5; Pos{6}:=Jpos.robax.rax_6;!把機器人6軸角度的數(shù)據(jù)放入到Pos{6}中 Lpos:=CRobT(); !讀取機器人當前位置的坐標存入Lpos Pos{7}:=Lpos.trans.x; !把機器人X軸坐標的數(shù)據(jù)放入到Pos{7}中 Pos{8}:=Lpos.trans.y; !把機器人X軸坐標的數(shù)據(jù)放入到Pos{8}中 Pos{9}:=Lpos.trans.z; !把機器人Z軸坐標的數(shù)據(jù)放入到Pos{9}中
ClearRawBytes rawbyte1; !清除Rwabyte1中的值 Lmsa:=1; !初始化Lmsa,用于從下標1開始遍歷Position這個數(shù)組 FOR I FROM 1 TO 9 DO !開始9次循環(huán) PackRawBytes POS{I},rawbyte1,1\Float4; !把Pos{i}的值以浮點數(shù)的形式打包放入到Rwabyte1中 FOR J FROM 1 TO 4 DO !開始4次循環(huán) UnpackRawBytes rawbyte1,J,byte1{J}\hex1;!把rawbyte1中的值拆分成四個字節(jié)以16進制的形式放入到Byte1數(shù)組的四個元素中 ENDFOR !結(jié)束4次循環(huán) FOR K FROM 4 TO 1 DO !開始4次循環(huán) Position{Lmsa}:=byte1{k};!把byte1數(shù)組中的元素從大到小賦值給Posittion數(shù)組 Incr Lmsa;!Lmsa 變量自增1 ENDFOR!結(jié)束4次循環(huán) ENDFOR!結(jié)束9次循環(huán) ENDPROC
Proc Send_Pos() SocketClose Socket1; SocketCreate Socket1; SocketConnect Socket1,'192.168.0.1',2000; SocketSend Socket1\data:=Position; SocketClose Socket1; ENDPROC
PROC main()!主程序 IDelete intno1; !刪除一個中斷識別號 CONNECT intno1 WITH HuiChuan_Lmsa; !把Huichuan_Lmsa這個程序關(guān)聯(lián)在Intno1的中斷識別號上 ITimer 0.8,intno1; !每0.8秒執(zhí)行一次HuiChuan_Lmsa程序 FOR i FROM 1 TO 8 DO for j from 1 to 8 DO MoveAbsJ phome{j},v500,z30,tool0; waittime 2; ENDFOR ENDFOR ENDPROC
TRAP HuiChuan_Lmsa !中斷程序 Position_Lmsa; !調(diào)用Position_Lmsa Send_Pos; !調(diào)用Send_Pos ENDTRAP !結(jié)束中斷
ENDMODULE |
|