時(shí)間:2020-11-26 10:47:21來(lái)源:正運(yùn)動(dòng)技術(shù)
之前正運(yùn)動(dòng)技術(shù)與大家分享了,運(yùn)動(dòng)控制器的固件升級(jí)、ZBasic程序開(kāi)發(fā)、ZPLC程序開(kāi)發(fā)、與觸摸屏通訊和輸入/輸出IO的應(yīng)用、運(yùn)動(dòng)控制器數(shù)據(jù)與存儲(chǔ)的應(yīng)用、運(yùn)動(dòng)控制器ZCAN、EtherCAT總線的使用、示波器的應(yīng)用、多任務(wù)運(yùn)行的特點(diǎn)、運(yùn)動(dòng)控制器中斷的應(yīng)用、U盤接口的使用、ZDevelop 編程軟件的使用以及運(yùn)動(dòng)控制器的基礎(chǔ)軸參數(shù)與基礎(chǔ)運(yùn)動(dòng)控制指令等。
今天,我們來(lái)講解一下正運(yùn)動(dòng)技術(shù)運(yùn)動(dòng)控制器運(yùn)動(dòng)緩沖。
視頻教程:《視頻教程:運(yùn)動(dòng)控制器運(yùn)動(dòng)緩沖簡(jiǎn)介》
以下是圖文詳解
01 材料準(zhǔn)備與接線參考
02運(yùn)動(dòng)緩沖
1.運(yùn)動(dòng)緩沖原理
在運(yùn)行運(yùn)動(dòng)指令時(shí),為了防止程序堵塞,控制器提供了一個(gè)緩沖區(qū)來(lái)保存進(jìn)入運(yùn)動(dòng)緩沖的運(yùn)動(dòng)緩沖隊(duì)列,把這個(gè)功能叫做運(yùn)動(dòng)緩沖,這樣程序就能正常向下掃描,不會(huì)堵塞。
ZMotion運(yùn)動(dòng)控制器具有多級(jí)的運(yùn)動(dòng)緩沖,當(dāng)運(yùn)動(dòng)緩沖開(kāi)啟的時(shí)候,程序在掃描識(shí)別到程序任務(wù)的第一條運(yùn)動(dòng)指令時(shí),將運(yùn)動(dòng)指令分配到指定軸的運(yùn)動(dòng)緩沖區(qū),電機(jī)開(kāi)始運(yùn)動(dòng),此時(shí)程序繼續(xù)向下掃描到第二條運(yùn)動(dòng)指令時(shí),再往運(yùn)動(dòng)緩沖區(qū)中存,在不斷掃描存入運(yùn)動(dòng)指令的同時(shí),從運(yùn)動(dòng)緩沖區(qū)中依次取出運(yùn)動(dòng)指令執(zhí)行。
MTYPE,NTYPE分別是當(dāng)前運(yùn)行的運(yùn)動(dòng)指令和第一個(gè)緩沖運(yùn)動(dòng)指令。
任意一段程序的運(yùn)動(dòng)指令都可以進(jìn)入任意軸的運(yùn)動(dòng)緩沖區(qū),由軸號(hào)指定。
每個(gè)軸的運(yùn)動(dòng)緩沖區(qū)都是獨(dú)立的,互不干擾。
緩沖多條運(yùn)動(dòng)指令時(shí),為了判斷當(dāng)前運(yùn)動(dòng)執(zhí)行到哪一條,提供MOVE_MARK運(yùn)動(dòng)標(biāo)號(hào)和MOVE_CURMARK當(dāng)前運(yùn)動(dòng)標(biāo)號(hào)指令。MOVE_MARK運(yùn)動(dòng)標(biāo)號(hào)每掃描一條運(yùn)動(dòng)指令+1;MOVE_CURMARK指令為當(dāng)前運(yùn)動(dòng)的標(biāo)號(hào),提示當(dāng)前運(yùn)動(dòng)到第幾條運(yùn)動(dòng)指令,所有運(yùn)動(dòng)完成后為-1。
當(dāng)前運(yùn)動(dòng)完成后會(huì)自動(dòng)執(zhí)行運(yùn)動(dòng)緩沖區(qū)內(nèi)的下一條運(yùn)動(dòng)。運(yùn)動(dòng)指令全部執(zhí)行完后,運(yùn)動(dòng)緩沖區(qū)為空,或者使用CANCEL/RAPIDSTOP指令清空運(yùn)動(dòng)緩沖區(qū)。
SP指令也屬于運(yùn)動(dòng)指令,使用SP運(yùn)動(dòng)指令(如MOVESP、MOVECIRCSP等直接在運(yùn)動(dòng)指令后方加上SP)時(shí),SP速度FORCE_SPEED、ENDMOVE_SPEED和STRATMOVE_SPEED會(huì)隨SP運(yùn)動(dòng)指令寫入運(yùn)動(dòng)緩存區(qū)。
SP運(yùn)動(dòng)指令與運(yùn)動(dòng)指令的區(qū)別:
MOVE(100)的速度是SPEED=100,MOVESP(100)的速度是FORCE_SPEED=200。
2.運(yùn)動(dòng)緩沖區(qū)堵塞
每個(gè)軸的運(yùn)動(dòng)緩沖空間是有限的,當(dāng)掃描太多運(yùn)動(dòng)指令放入運(yùn)動(dòng)緩沖區(qū)時(shí),多級(jí)運(yùn)動(dòng)緩沖區(qū)全部被塞滿,如果程序繼續(xù)掃描到更多的運(yùn)動(dòng)指令,程序也會(huì)被堵塞,直到運(yùn)動(dòng)指令依次完成并退出,運(yùn)動(dòng)緩沖區(qū)有了空位,運(yùn)動(dòng)指令才會(huì)繼續(xù)進(jìn)入運(yùn)動(dòng)緩沖區(qū)。
例:以V3.10版本仿真器為例,默認(rèn)為4096個(gè)運(yùn)動(dòng)緩沖,下圖例程中顯示該控制器的運(yùn)動(dòng)緩沖區(qū)最多能存459條圓弧插補(bǔ)指令,下載程序后后打印i的值為458,表示當(dāng)前FOR循環(huán)并未執(zhí)行完,程序堵塞了。
下圖中,當(dāng)從運(yùn)動(dòng)緩沖區(qū)取出部分運(yùn)動(dòng)指令執(zhí)行之后,緩沖區(qū)有了空間,F(xiàn)OR循環(huán)繼續(xù)執(zhí)行,并存入運(yùn)動(dòng)指令到運(yùn)動(dòng)緩沖區(qū)。指令執(zhí)行退出運(yùn)動(dòng)緩沖區(qū)后,只要運(yùn)動(dòng)緩沖區(qū)的空間夠,新的運(yùn)動(dòng)指令一條條往運(yùn)動(dòng)緩沖區(qū)中存。
每個(gè)軸的運(yùn)動(dòng)緩沖都是獨(dú)立的,互不干擾,且緩沖區(qū)大小相同,通過(guò)指令REMAIN_BUFFER(MTYPE) AXIS(n)查看某個(gè)軸的剩余可用緩沖區(qū)的個(gè)數(shù)。
ZMC4系列運(yùn)動(dòng)控制器每個(gè)軸可支持多達(dá)4096段運(yùn)動(dòng)緩沖(不同型號(hào)的控制器緩沖個(gè)數(shù)有區(qū)別,具體情況參見(jiàn)控制器硬件手冊(cè)說(shuō)明或使用?*max打印查看),可以手動(dòng)設(shè)置LIMIT_BUFFERED運(yùn)動(dòng)緩沖限制。
不同的運(yùn)動(dòng)指令占用的緩沖空間是不同的,越復(fù)雜的運(yùn)動(dòng)占用的運(yùn)動(dòng)緩沖空間越多。
例如:
ZMC432控制器,運(yùn)動(dòng)緩沖區(qū)大小為4096,緩沖區(qū)一次性可緩沖的MOVE直線插補(bǔ)指令和MOVECIRC圓弧插補(bǔ)指令個(gè)數(shù)是不同的。
插補(bǔ)運(yùn)動(dòng)緩沖在主軸的運(yùn)動(dòng)緩沖區(qū)。
3.運(yùn)動(dòng)緩沖例程
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
BASE(0,1)
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
DPOS=0,0
MERGE=OFF '關(guān)閉連續(xù)插補(bǔ)
TRIGGER
LIMIT_BUFFERED=3 '軸0/1運(yùn)動(dòng)緩沖區(qū)可緩沖運(yùn)動(dòng)指令個(gè)數(shù)設(shè)為3
MOVE(60,40 '進(jìn)入MTYPE,Buffer0
MOVE(70,50) '進(jìn)入NTYPE,Buffer1
MOVE(50,40) 'Buffer2
MOVE(60,50) '緩沖區(qū)滿,暫不進(jìn)入
?"軸0當(dāng)前緩沖指令個(gè)數(shù)=" MOVES_BUFFERED(0) '結(jié)果2
?"軸0剩余緩沖區(qū)個(gè)數(shù)=" REMAIN_BUFFER(1) AXIS(0) '結(jié)果0
?"軸1剩余緩沖區(qū)個(gè)數(shù)=" REMAIN_BUFFER(1) AXIS(1) '結(jié)果3
END
將軸的運(yùn)動(dòng)緩沖區(qū)可緩沖運(yùn)動(dòng)指令個(gè)數(shù)限制為3,此時(shí)運(yùn)動(dòng)緩沖區(qū)最多能裝3條直線插補(bǔ)指令。
共有4個(gè)直線插補(bǔ)指令,MOVE(60,40)占用軸0的MTYPE,軸0還能緩沖2個(gè)運(yùn)動(dòng)指令,軸0剩余緩沖數(shù)為0,且還有1條直線指令因?yàn)橹鬏S軸0的運(yùn)動(dòng)緩沖區(qū)已滿,還未進(jìn)入運(yùn)動(dòng)緩沖區(qū)。
等到MOVE(60,40)運(yùn)動(dòng)完成,MOVE(60,50)才能進(jìn)軸0的運(yùn)動(dòng)緩沖區(qū)。
插補(bǔ)運(yùn)動(dòng)緩沖在主軸軸0里,故軸1的運(yùn)動(dòng)緩沖區(qū)是沒(méi)有指令的,剩余緩沖大小為3。每條MOVE指令占用一個(gè)緩沖空間。
4.普通輸出與運(yùn)動(dòng)緩沖中輸出的區(qū)別
普通輸出指令程序掃描到該行指令便執(zhí)行輸出。
運(yùn)動(dòng)緩沖中輸出指令在程序掃描之后,將其存入運(yùn)動(dòng)緩沖區(qū),運(yùn)動(dòng)緩沖區(qū)按先進(jìn)先出的順序依此取出指令執(zhí)行,直到取出該輸出指令時(shí)才會(huì)執(zhí)行輸出。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0) '選擇軸0
DPOS=0
UNITS=100 '脈沖當(dāng)量
SPEED=100 '速度
ACCEL=1000 '加速度
DECEL=1000 '減速度
TRIGGER '觸發(fā)示波器采樣
OP(0,3,$0) '關(guān)閉輸出口0-3
DELAY(1000) '延時(shí)
MOVE(100)
MOVE_OP(1,ON) '運(yùn)動(dòng)緩沖中輸出
OP(0,ON) '普通輸出
例子運(yùn)行效果:延時(shí)1s之后,程序掃描到OP指令,輸出口0立即執(zhí)行輸出。
MOVE_OP把IO操作指令填入運(yùn)動(dòng)緩沖區(qū),所以在運(yùn)行完MOVE(100)之后,輸出口1才輸出。
03 運(yùn)動(dòng)緩沖相關(guān)指令
1.MOVE_OP -- 緩沖輸出
語(yǔ)法:MOVE_OP (輸出編號(hào),輸出狀態(tài))
此指令隨其他運(yùn)動(dòng)指令一起進(jìn)入運(yùn)動(dòng)緩沖區(qū),從運(yùn)動(dòng)緩沖區(qū)中取出執(zhí)行時(shí)才操作OP輸出,可以控制某個(gè)輸出口單獨(dú)輸出信號(hào),也可以批量輸出,不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
TRIGGER '自動(dòng)觸發(fā)示波器
OP(0,3,0) '關(guān)閉輸出口0-3
MOVE(100)
MOVE_OP (0,ON) '等待上條運(yùn)動(dòng)完成后,OUT0輸出信號(hào)
MOVE(100)
MOVE_OP (0,OFF) '等待上條運(yùn)動(dòng)完成后,OUT0關(guān)閉信號(hào)
MOVE_OP(1,3,5) '批量輸出,OUT1,3輸出信號(hào),OUT2不輸出,5對(duì)應(yīng)二進(jìn)制101
例子運(yùn)行效果:第11-15行的運(yùn)動(dòng)指令依此存入運(yùn)動(dòng)緩沖區(qū),按先進(jìn)先出的順序執(zhí)行,MOVE(100)運(yùn)動(dòng)完后,MOVE_OP操作OUT0輸出,繼續(xù)執(zhí)行第二個(gè)MOVE(100),然后MOVE_OP操作OUT0關(guān)閉,緊接著控制OUT1-3批量輸出。
2.MOVE_OP2 -- 緩沖輸出2
語(yǔ)法:MOVE_OP2(輸出編號(hào),輸出狀態(tài),輸出多少ms后翻轉(zhuǎn))
BASE軸運(yùn)動(dòng)緩沖加入一個(gè)輸出口操作,指定時(shí)間后輸出狀態(tài)翻轉(zhuǎn)。
此指令隨其他運(yùn)動(dòng)指令一起進(jìn)入運(yùn)動(dòng)緩沖區(qū),從運(yùn)動(dòng)緩沖區(qū)中取出執(zhí)行時(shí)才操作OP輸出,保持輸出一定時(shí)間后關(guān)閉輸出。
單個(gè)軸同一時(shí)間只支持一個(gè)脈沖輸出,第二個(gè)MOVE_OP2指令會(huì)自動(dòng)關(guān)閉前面指令的脈沖。不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=200
ACCEL=1000
DECEL=1000
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
OP(0,OFF) '關(guān)閉OUT0口
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(500)
MOVE_OP2 (0,ON,1000) '等待上條運(yùn)動(dòng)完成,輸出口0保持輸出1s后關(guān)閉,輸出時(shí)不會(huì)阻礙下一條運(yùn)動(dòng)執(zhí)行
MOVE(-300)
3.MOVE_DELAY -- 緩沖延時(shí)
語(yǔ)法:MOVE_DELAY(延時(shí)ms數(shù))
BASE軸運(yùn)動(dòng)緩沖加入一個(gè)延時(shí)。
這個(gè)指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只延時(shí)指定時(shí)間。
延時(shí)使前面的運(yùn)動(dòng)指令結(jié)束時(shí)速度會(huì)自動(dòng)降為0,會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。?
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(100)
MOVE_DELAY(500) '兩個(gè)MOVE中間等待500ms
MOVE(200)
4.MOVE_AOUT -- 緩沖輸出模擬量
語(yǔ)法:MOVE_AOUT(DA編號(hào),輸出值)
BASE軸運(yùn)動(dòng)緩沖加入一個(gè)AOUT指令。
這個(gè)指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只修改AOUT值,不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
// 例子
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
AOUT(0)=0 'DA0通道賦值0
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(200)
MOVE_AOUT(0, 30.5) '第一個(gè)運(yùn)動(dòng)完成后,將DA0通道賦值30.5
MOVE(200)
5.MOVE_PAUSE——運(yùn)動(dòng)暫停
暫停軸運(yùn)動(dòng),只有在單軸或多軸插補(bǔ)運(yùn)動(dòng)時(shí)有效,多軸聯(lián)動(dòng)時(shí)一起暫停。
可以通過(guò)AXISSTATUS來(lái)查詢是否有暫停,暫停中軸的IDLE狀態(tài)為0。
當(dāng)軸已經(jīng)暫;虿辉谶\(yùn)動(dòng)中時(shí),調(diào)用這個(gè)指令會(huì)有警告輸出,但不影響程序運(yùn)行。某些運(yùn)動(dòng)不支持暫停,如VMOVE、同步運(yùn)動(dòng)指令等。
語(yǔ)法:MOVE_PAUSE(模式值)
模式值0例子:MOVE_PAUSE(3)的執(zhí)行效果與MOVE_PAUSE(0)類似。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
MOVE(100) '當(dāng)前運(yùn)動(dòng)
MOVE(200)
MOVE_PAUSE(0) '暫停當(dāng)前運(yùn)動(dòng)
DELAY(1000)
?DPOS(0) '打印結(jié)果:0,此時(shí)當(dāng)前運(yùn)動(dòng)只運(yùn)行了極短時(shí)間,掃描到MOVE_PAUSE時(shí)直接暫停
模式值1例子:模式2在運(yùn)動(dòng)標(biāo)號(hào)MOVE_MARK自動(dòng)編號(hào)時(shí)效果與模式1類似,因?yàn)槊織l運(yùn)動(dòng)的標(biāo)號(hào)都是不同的,運(yùn)動(dòng)完一條運(yùn)動(dòng)指令后,運(yùn)動(dòng)標(biāo)號(hào)發(fā)生改變,MOVE_MARK(2)生效,立即暫停。
模式2在手動(dòng)設(shè)置MOVE_MARK時(shí)才與模式1不同。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(100) '當(dāng)前運(yùn)動(dòng)
MOVE(200)
MOVE_PAUSE(1) '當(dāng)前運(yùn)動(dòng)運(yùn)行完暫停
DELAY(2000)
?DPOS(0) '打印結(jié)果:100
MOVE_PAUSE(1)或MOVE_PAUSE(2)
模式值2例子:手動(dòng)設(shè)置MOVE_MARK,通過(guò)MOVE_PAUSE(2)指令可以在MARK不同的邊界處暫停。
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON
TRIGGER
MOVE_MARK =1 '設(shè)置為標(biāo)號(hào)1
MOVE(100)
MOVE_MARK =1 '設(shè)置為標(biāo)號(hào)1
MOVE(150)
MOVE_MARK =2 '設(shè)置為標(biāo)號(hào)2
MOVE(200)
MOVE_PAUSE (2) '標(biāo)號(hào)不一樣時(shí)暫停
DELAY(5000)
?DPOS(0) '打印結(jié)果:250
MOVE_PAUSE(2)
6.MOVE_RESUME -- 運(yùn)動(dòng)恢復(fù)
當(dāng)BASE軸暫停暫停時(shí),從暫停處繼續(xù)運(yùn)動(dòng)。
可以通過(guò)AXISSTATUS來(lái)查詢是否有暫停,AXISSTATUS顯示800000h,表示軸進(jìn)入了暫停狀態(tài)。
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON
TRIGGER
MOVE(100) '當(dāng)前運(yùn)動(dòng)
MOVE(200) '緩沖運(yùn)動(dòng)
MOVE_PAUSE(1) '當(dāng)前運(yùn)動(dòng)完成后暫停
DELAY(2000) '等待當(dāng)前運(yùn)動(dòng)完成
?DPOS(0) '打印結(jié)果:100
MOVE_RESUME '繼續(xù)運(yùn)行
WAIT IDLE(0)
?DPOS(0) '打印結(jié)果:300
7.MOVE_TABLE -- 緩沖輸出TABLE
BASE軸運(yùn)動(dòng)緩沖加入一個(gè)TABLE。
指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只修改TABLE,不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
語(yǔ)法:MOVE_TABLE(TABLE編號(hào), 要修改的值)
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON
TABLE(0)=0 '初始值設(shè)為0
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(100)
MOVE_TABLE(0, 60) '等待運(yùn)動(dòng)完成后,TABLE(0)賦值60
MOVE(160)
WAIT IDLE(0)
?TABLE(0) '打印修改后TABLE(0)的值,打印結(jié)果,60
軸0運(yùn)動(dòng)100后,TABLE(0)賦值60
8.MOVE_PARA -- 緩沖參數(shù)
BASE軸運(yùn)動(dòng)緩沖修改參數(shù)。
這個(gè)指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只修改參數(shù),不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
語(yǔ)法:MOVE_PARA(參數(shù)名,參數(shù)編號(hào),參數(shù)值)
參數(shù)名必須是?*set里面的非只讀參數(shù)。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100 '初始速度
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
TRIGGER '自動(dòng)觸發(fā)示波器
MOVE(200) '速度100
MOVE_PARA(SPEED,0,200) '修改軸0的SPEED參數(shù)值為200
MOVE(200) '速度200
WAIT IDLE(0) '等待軸0停止
?SPEED '打印結(jié)果:200
9.MOVE_PWM -- 緩沖PWM
BASE軸運(yùn)動(dòng)緩沖操作PWM。
指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只操作PWM。
PWM只能通過(guò)設(shè)置占空比為0來(lái)關(guān)閉,不能通過(guò)設(shè)置PWM頻率為0實(shí)現(xiàn),PWM頻率一定要在PWM開(kāi)啟之前調(diào)整。
語(yǔ)法:MOVE_PWM(編號(hào),占空比[,頻率])
編號(hào)為支持PWM功能的輸出口編號(hào),查看硬件手冊(cè)確認(rèn)。
占空比指有效電平占整個(gè)周期的比例;范圍0-1,設(shè)置0時(shí)關(guān)閉pwm;一個(gè)周期中先輸出有效電平,再輸出無(wú)效電平。
頻率缺省為1KHz,硬件最大為1MHz,軟件最大為2KHz。
RAPIDSTOP(2)
WAIT IDLE(0)
MOVE_PWM(0, 0, 1000) '關(guān)閉PWM
BASE(0)
ATYPE=1
UNITS=100
SPEED=100 '初始速度
ACCEL=1000
DECEL=1000
DPOS=0
TICKS = 10000
MOVE(10)
MOVE_PWM(0, 0.111, 2000) '軸0運(yùn)行到10時(shí),操作PWM0輸出
MOVE_DELAY(100)
MOVE_PWM(0, 0.555, 3000) '延時(shí)100ms,修改PWM0輸出
MOVE(20)
MOVE_PWM(0, 0, 1000) '關(guān)閉PWM
WHILE NOT IDLE(0) 'IDLE(0)=-1后退出while循環(huán)
? -TICKS,PWM_DUTY(0),PWM_FREQ(0)
DELAY(30)
WEND
例子運(yùn)行效果:初始化關(guān)閉PWM輸出,MOVE(10)運(yùn)動(dòng)完后,操作PWM0輸出,保持100ms之后,修改PWM0輸出的占空比和頻率,再運(yùn)行MOVE(20)后關(guān)閉PWM輸出。WHILE循環(huán)在軸0運(yùn)行時(shí),每隔30ms打印一次PWM輸出的占空比和頻率,在軸0停止后,退出WHILE循環(huán),不在打印。
10.MOVE_SYNMOVE -- 緩沖觸發(fā)其他軸
BASE軸運(yùn)動(dòng)緩沖觸發(fā)其他軸運(yùn)動(dòng),當(dāng)前軸等待,等待其他軸運(yùn)動(dòng)完成,當(dāng)前軸才繼續(xù)運(yùn)動(dòng)。
語(yǔ)法:MOVE_SYNMOVE(axisnum,dis[,ifsp])
axisnum:需要同步運(yùn)動(dòng)的軸號(hào)
dis:相對(duì)運(yùn)動(dòng)距離
ifsp:是否使用SP運(yùn)動(dòng), 缺省值0不使用,設(shè)為其他值使用
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
BASE(0,1)
DPOS=0,0
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
MERGE=ON,ON
TRIGGER
MOVE(100)
MOVE_SYNMOVE(1,120,0) '軸0運(yùn)行到100時(shí),軸1開(kāi)始運(yùn)動(dòng)120
MOVE(100) '待軸同步完成,軸0再繼續(xù)運(yùn)動(dòng)
使用SP運(yùn)動(dòng)后的效果如下,將最后一位參數(shù)設(shè)置非0值 ,此時(shí)觸發(fā)軸1的運(yùn)動(dòng)速度為FORCE_SPEED=200。
11.MOVE_ASYNMOVE -- 緩沖觸發(fā)其他軸2
BASE軸運(yùn)動(dòng)緩沖觸發(fā)其他軸運(yùn)動(dòng),當(dāng)前軸不等待,仍繼續(xù)運(yùn)動(dòng)。
語(yǔ)法:MOVE_ASYNMOVE(axisnum,dis[,ifsp])
axisnum:需要同步運(yùn)動(dòng)的軸號(hào)
dis:相對(duì)運(yùn)動(dòng)距離
ifsp:是否使用SP運(yùn)動(dòng), 缺省值0不使用,設(shè)為其他值使用
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
BASE(0,1)
DPOS=0,0
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
MERGE=ON,ON
TRIGGER
MOVE(100)
MOVE_ASYNMOVE(1,120,0) '軸0運(yùn)行到100時(shí),軸1開(kāi)始運(yùn)動(dòng)120
MOVE(100) '待軸同步完成,軸0再繼續(xù)運(yùn)動(dòng)
12.MOVE_TASK -- 緩沖開(kāi)啟任務(wù)
BASE軸運(yùn)動(dòng)緩沖加入啟動(dòng)TASK。
這個(gè)指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只啟動(dòng)任務(wù),不會(huì)打斷插補(bǔ)運(yùn)動(dòng)的連續(xù)性。
語(yǔ)法:MOVE_TASK(任務(wù)號(hào), 函數(shù)名)
從運(yùn)動(dòng)緩沖全區(qū)取出MOVE_TASK指令執(zhí)行時(shí),將task_move標(biāo)記的程序作為任務(wù)1開(kāi)啟,在任務(wù)窗口可以看到任務(wù)1已啟動(dòng)。
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON
TRIGGER
MOVE(100)
MOVE_TASK(1,task_move) '第一個(gè)運(yùn)動(dòng)完成后,將task_move作為任務(wù)1啟動(dòng)
MOVE(100)
END
'任務(wù)1
task_move:
PRINT "TASK_MOVE"
END
13.MOVE_WAIT -- 緩沖等待
BASE軸運(yùn)動(dòng)緩沖加入一個(gè)條件判斷。
指令緩沖執(zhí)行時(shí)不做任何運(yùn)動(dòng),只等待指定的條件滿足,前面的運(yùn)動(dòng)指令結(jié)束時(shí)速度會(huì)自動(dòng)降為0。
語(yǔ)法:MOVE_WAIT(參數(shù)名, 參數(shù)編號(hào), 比較條件, 比較值)
參數(shù)可以為:DPOS,MPOS,IN,AIN,VPSPEED,MSPEED,MODBUS_REG,MODBUS_IEEE,MODBUS_BIT,VECTOR_BUFFERED,REMAIN
比較條件:1 參數(shù)值≥比較值;-1 參數(shù)值≤比較值;0 不建議使用
RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
TRIGGER
MOVE(100)
MOVE_WAIT(IN, 0, 1, 1) '等待IN(0)有信號(hào),才執(zhí)行下一條運(yùn)動(dòng)
MOVE(100)
14.MOVE_CANCEL--緩沖停止
把CANCEL指令寫入運(yùn)動(dòng)緩沖。
語(yǔ)法:MOVE_CANCEL(軸號(hào),模式值)
0:取消當(dāng)前運(yùn)動(dòng),繼續(xù)取緩沖區(qū)指令指令
1:取消緩沖區(qū)的運(yùn)動(dòng),當(dāng)前運(yùn)動(dòng)仍然要執(zhí)行完
2:取消當(dāng)前運(yùn)動(dòng)和緩沖區(qū)的運(yùn)動(dòng),軸立即停止
3:立即中斷脈沖的發(fā)送
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
BASE(0,1)
DPOS=0,0
ATYPE=1,1
UNITS=100,100
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
MERGE=ON,ON:
TRIGGER
MOVE(50) AXIS(0) '軸0當(dāng)前運(yùn)動(dòng)
MOVE(80) AXIS(1) '軸1當(dāng)前運(yùn)動(dòng)
MOVE_CANCEL(1,2) AXIS(0) '軸0緩沖里面寫入停止軸1的指令
MOVE(60) AXIS(0) '軸0緩沖運(yùn)動(dòng)
MOVE(70) AXIS(1) '軸1緩沖運(yùn)動(dòng),被取消
例子運(yùn)行效果:軸0運(yùn)動(dòng)50后,MOVE_CANCEL(1,2) AXIS(0)指令生效,CANCEL(2)模式取消軸1的當(dāng)前運(yùn)動(dòng)和緩沖運(yùn)動(dòng),軸1立刻停止,軸0繼續(xù)運(yùn)動(dòng)。
15.LOADED -- 緩沖空
用于判斷軸的運(yùn)動(dòng)緩沖區(qū)是否為空,只讀參數(shù),返回值0表示運(yùn)動(dòng)緩沖區(qū)還有指令,返回值為-1表示運(yùn)動(dòng)緩沖區(qū)空。
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=1000
DECEL=1000
DPOS=0
MERGE=ON '開(kāi)啟連續(xù)插補(bǔ)
OP(0,OFF)
TRIGGER
MOVE(100) '當(dāng)前運(yùn)動(dòng)
MOVE(50) '緩沖運(yùn)動(dòng),此時(shí)緩沖區(qū)只有這一條運(yùn)動(dòng)
'當(dāng)本條運(yùn)動(dòng)執(zhí)行時(shí),緩沖區(qū)就已經(jīng)清空
WAIT LOADED '運(yùn)動(dòng)緩沖空即可往下執(zhí)行
OP(0,ON) '打開(kāi)OP0
WAIT LOADED 等待緩沖區(qū)空
WAIT IDLE 等待軸停止
16.MOVE_MARK -- 運(yùn)動(dòng)標(biāo)號(hào)
下一條要調(diào)用的運(yùn)動(dòng)指令的MARK標(biāo)號(hào),這個(gè)標(biāo)號(hào)會(huì)和運(yùn)動(dòng)指令一起寫入運(yùn)動(dòng)緩沖。
每調(diào)用一條運(yùn)動(dòng)指令,MOVE_MARK會(huì)自動(dòng)加一。
如果要強(qiáng)制指定MOVE_MARK,需要每次運(yùn)動(dòng)前都設(shè)定一次。
通過(guò)MOVE_PAUSE (2)指令可以在MARK不同的邊界處暫停。
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=OFF '關(guān)閉連續(xù)插補(bǔ)
OP(0,OFF)
TRIGGER
MOVE_MARK=0 '初始值:0
MOVE(100) '運(yùn)動(dòng)指令1
MOVE_DELAY(1000) '運(yùn)動(dòng)指令2
MOVE(50) '運(yùn)動(dòng)指令3
MOVE_OP(0,ON) '運(yùn)動(dòng)指令4
MOVE(80) '運(yùn)動(dòng)指令5
PRINT MOVE_MARK '打印結(jié)果:5
17.MOVE_CURMARK -- 當(dāng)前運(yùn)動(dòng)標(biāo)號(hào)
返回當(dāng)前軸正在運(yùn)動(dòng)指令的MOVE_MARK標(biāo)號(hào),編號(hào)默認(rèn)從0開(kāi)始,到運(yùn)動(dòng)指令總數(shù)減1。
在軸參數(shù)窗口可以監(jiān)控當(dāng)前程序掃描到的運(yùn)動(dòng)指令個(gè)數(shù),查看MOVE_MARK;和軸當(dāng)前運(yùn)行到了第幾個(gè)運(yùn)動(dòng)指令,查看MOVE_CURMARK。
BASE(0)
ATYPE=1
UNITS=100
DPOS=0
SPEED=100
ACCEL=1000
DECEL=1000
MERGE=ON
OP(1,OFF)
TRIGGER
MOVE_MARK =1
MOVE(50)
MOVE_MARK =2
MOVE(100)
MOVE_MARK =3
MOVE(150)
WAIT UNTIL MOVE_CURMARK = 2 '等待MOVE(100)開(kāi)始執(zhí)行的時(shí)候,開(kāi)輸出口1
OP(1,ON)
正運(yùn)動(dòng)技術(shù)運(yùn)動(dòng)控制器運(yùn)動(dòng)緩沖就講到這里。更多學(xué)習(xí)視頻及圖文請(qǐng)關(guān)注我們的公眾號(hào)“正運(yùn)動(dòng)小助手”。
本文由正運(yùn)動(dòng)小助手原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.wangxinlc.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
相關(guān)資訊
產(chǎn)品新聞
更多>2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹(shù)莓派軟件鏡像構(gòu)建的終...
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測(cè)節(jié)拍...
2025-03-31
激光閃耀 智慧引領(lǐng) | WISE MASER 黑武士...
2025-03-20