常用場景為:流水線點膠、流水線產(chǎn)品分揀、流水線產(chǎn)品搬運等。
常見機械結(jié)構(gòu):XYZ (R)、SCARA、DELTA等。
1、指令介紹
同步跟隨是指點的跟隨,跟隨的是位置,皮帶與跟隨軸的位置之間由算子去協(xié)調(diào)位置關系,需要處理的僅僅是第一個跟隨時刻的位置。
MOVESYNC指令內(nèi)重要參數(shù)是給出皮帶的位置和跟隨軸的位置,只需要把跟隨點跟隨的這個“時刻”靜態(tài)化處理就行,即可以想象成當皮帶上物體到了傳感器mark位置時刻皮帶停止了。
跟隨軸這個時候移動到達產(chǎn)品mark點,這個時刻得到了兩組坐標位置:
支持單軸或多軸同步跟隨。
模式 | |
-1 | 同步結(jié)束模式,運動到指定的絕對位置,此模式運動如果后面緊接著其它MOVESYNC指令,會被覆蓋,此模式下syncaxis無效 |
-2 | 強制結(jié)束模式,調(diào)用時強制停止原來的MOVESYNC,運動到指定結(jié)束位置,此模式運動如果后面緊接著其它MOVESYNC指令,會被覆蓋,此模式下syncaxis無效 |
0 | BASE第1個軸(x)跟隨皮帶軸物體 |
10 | BASE第2個軸(y)跟隨皮帶軸物體 |
20 | BASE第3個軸跟隨皮帶軸物體 |
(3)syncposition:皮帶軸物體被感應到時皮帶軸的位置
(4)syncaxis:皮帶軸軸號,-1表示沒有皮帶軸,可以是電機軸,也可以是編碼器
(5)pos1:皮帶軸物體被感應到時的BASE第1個軸(一般是跟隨軸)的絕對位置
(6)posn:皮帶軸物體被感應到時的BASE第n個軸的絕對位置
5、指令使用圖解(單軸為例)
假設當產(chǎn)品到傳感器位置時實現(xiàn)跟隨;借助傳感器的信號實現(xiàn)皮帶位置鎖存,即當產(chǎn)品到達傳感器鎖存的位置時,依靠鎖存記錄下皮帶坐標(syncposition參數(shù)),此時將跟隨軸X軸運行到產(chǎn)品鎖存點位置,得到跟隨軸X軸位置為(pos1);
下面示例以單軸跟隨為例子,輔助以感應器作為位置記錄條件。
⊙第一次運行,需要進行對位操作,確認跟隨軸的位置,點擊產(chǎn)品到位,模擬產(chǎn)品放到了傳送帶上開始運動,到達鎖存位置停止,將跟隨軸移動到產(chǎn)品位置處停下。記錄下跟隨軸此時的坐標,此坐標MOVESYNC指令將會用到。
⊙配置軸號,軸的運動參數(shù),合理設置三段運動的時間。
global sub get_mark_pos(mode) '使用3或者4,其他方式修改等待條件和獲取的數(shù)據(jù)寄存器,reg_pos REG_INPUTS(belt_axis) = $0000 '映射皮帶鎖存輸入 reg_count = 0 DMSET mark_flag(0,100,-1) '每次開始前清空標志,避免誤判 WHILE 1 base(belt_axis)REGIST(mode)axis(belt_axis) wait until mark if reg_count >= 100 then '位置數(shù)組循環(huán)存儲值判斷 reg_count = 0 endif mark_pos(reg_count) = REG_POS ?REG_POS mark_flag(reg_count) = 1 reg_count = reg_count + 1 wend endsub
同步跟隨函數(shù):依靠鎖存函數(shù)給的參數(shù),設置跟隨時間,執(zhí)行同步跟隨動作,分為加速、同步和減速回原位置三個階段,注意每個階段的時間規(guī)劃合理,完成一個跟隨步驟之后等待觸發(fā)下一次跟隨。
global sub run_sync() base(sync_axis) move_count = 0 '運動計數(shù)清0 TABLE(10) = -1 '以table 10 的值,作為同步結(jié)束標志 WHILE 1 if move_count >= 100 then '循環(huán) move_count = 0 endif if mark_flag(move_count) = 1 then '判斷是否有產(chǎn)品觸發(fā) if abs(sync_star_dis + mark_pos(move_count)) >= abs(mpos(belt_axis)) then '尚在有效觸發(fā)距離內(nèi),即可以跟隨 '開始跟隨 '第一段:加速段(追趕段) 跟隨模式看機構(gòu)具體而定,一般皮帶編碼器方向與跟隨軸運動方向一致就用0 反方向就用 0 + pi/2 MOVESYNC(0, accel_time, mark_pos(move_count), belt_axis, sync_pos) '第二段:同步段與加速段唯一不同是時間 MOVESYNC(0, sync_time, mark_pos(move_count), belt_axis, sync_pos) '此處可以開啟線程去操作其他動作 '使用 move_task 指令操作 '用table 10 的值來作為其他運動的結(jié)束標志,這里使用move_table,是為了使同步完全結(jié)束,后面開發(fā)時可以將MOVE_TABLE放在其他運動的線程里面使用 MOVE_TABLE(10,10) elseif abs(sync_star_dis + mark_pos(move_count)) < abs(mpos(belt_axis)) then '超出范圍,直接跳過, TABLE(10) = 10 ?"跳過" '?abs(sync_star_dis + mark_pos(move_count)) , abs(mpos(belt_axis)) endif '判斷結(jié)束 wait UNTIL table(10) = 10 '第三段:復位段 以當前位置為停止位置,可以添加變量設置待機位。 MOVESYNC(-1, decel_time, mark_pos(move_count),-1, sync_pos) move_table(10,-1) '結(jié)束標志復位 mark_flag(move_count) = -1 '同步條件標志復位 move_count = move_count + 1 '計數(shù)+ 1 endif wend endsub