5 程序和注釋
//標(biāo)題:用脈沖輸出進(jìn)行定位控制
//主程序
ld sm0.1
//僅首次掃描周期sm0.1才為1。
r m0.0,128
//md0至md12復(fù)位
atch 0,19
//把中斷程序0分配給中斷事件19(脈沖串終止)
eni
//允許中斷
//脈沖輸出功能的初始化
movw 500,smw68
//脈沖周期t=500us
movw 0,smw70
//脈沖寬度為0(脈沖調(diào)制)
movd 429496700,smd72
//為參考點(diǎn)設(shè)定的最大脈沖數(shù)
//設(shè)置逆時(shí)針旋轉(zhuǎn)
ldn m0.1 //若電機(jī)停止
a i1.5 //且旋轉(zhuǎn)方向開(kāi)關(guān)=1
s q0.2,1 //則逆時(shí)針旋轉(zhuǎn)(q0.2=1)
//設(shè)置順時(shí)針旋轉(zhuǎn)
ldn m0.1 //若電機(jī)停止
an i1.5 //且旋轉(zhuǎn)方向開(kāi)關(guān)=0
r q0.2,1 //則逆時(shí)針旋轉(zhuǎn)(q0.2=0)
//聯(lián)鎖
ld i1.1
//若按“stop”(停止)按鈕
s m0.2,1 //則激活聯(lián)鎖(m0.2=1)
//解除聯(lián)鎖
ldn i1.1
//若“start”(啟動(dòng))按鈕松開(kāi)
an i1.0
//且“stop”(停止)按鈕松開(kāi)
r m0.2,1 //則解除聯(lián)鎖(m0.2=0)
//確定操作模式(參考點(diǎn)定位控制)
ld i1.4
//若按“設(shè)置/取消參考點(diǎn)”按鈕
eu //上升沿
call 1 //則調(diào)用子程序1
//啟動(dòng)電機(jī)
ld i1.0
//若按“start”(啟動(dòng))按鈕
eu //上升沿
an m0.1 //且電機(jī)停止
an m0.2 //且無(wú)聯(lián)鎖
ad≥ smd72,1
//且步數(shù)≥1,則
movb 16#85,smb67
//置脈沖輸出功能(pto)的控制位
pls 0 //啟動(dòng)脈沖輸出(q0.0)
s m0.1,1
//“電機(jī)運(yùn)行”標(biāo)志位置位(m0.1=1)
//定位控制
ld m0.3
//若已激活“定位控制” 操作模式
an m0.1 //且電機(jī)停止
call 2 //則調(diào)用子程序2
//停止電機(jī)
ld i1.1
//若按“stop”(停止)按鈕
eu //上升沿
a m0.1 //且電機(jī)運(yùn)行,則
call 0 //則調(diào)用子程序0
mend //主程序結(jié)束
//子程序1
sbr 0 //子程序0停止電機(jī)
movb 16#cb,smb67
//激活脈寬調(diào)制
pls 0 //停止輸出脈沖到q0.0
r m0.1,1
//“電機(jī)運(yùn)行”標(biāo)志位復(fù)位(m0.1=0)
ret //子程序0結(jié)束
sbr1
//子程序1,“確定操作模式”
ld m0.1 //若電機(jī)運(yùn)行
call 0
//則調(diào)用子程序0,停止電機(jī)
//申請(qǐng)“參考點(diǎn)曲線”
ld m0.3
//若已激活“定位控制”,則
r m0.3,1
//參考點(diǎn)標(biāo)志位;復(fù)位(m0.3=0)
r q1.0,1
//取消“定位控制激活”信息(q1.0=0)
movd 429496700,smd72
//為新的“參考點(diǎn)曲線”設(shè)定最大的脈沖數(shù)。
cret
//條件返回到主程序。
//申請(qǐng)“定位控制”
ldn m0.3
//若未設(shè)置參考點(diǎn)(m0.3=0),則
s m0.3,1
//參考點(diǎn)標(biāo)志位置位(m0.3=1)
s q1.0,1
//輸出“定位控制激活”信息(q1.0=1)
ret //子程序1結(jié)束
//子程序2
sbr2 //子程序2,“定位控制”
movb ib0,mb11
//把定位角度從ibo拷到md8的最低有效字節(jié)mb11。
r m8.0,24
//mb8至mb10清零
p 9,md8
//角度/9=q1+r1
movw mw8,mw14
//把r1存入md12
mul 25,md8
//q1×25→md8
mul 25,md12
p 9,md12
// r1×25/9= q2+r2
call 3
//在子程序3中循環(huán)步數(shù)
movw 0,mw12 //刪除r2
+d md12,md8
//把步數(shù)寫(xiě)入md8
movd md8,smd72
//把步數(shù)傳到smd72
ret //子程序2結(jié)束
//子程序3
sbr3 //子程序3,“循環(huán)步數(shù)”
ldw≥mw12,5 //如果r2≥5/9,則
incw mw14 //步數(shù)增加1。
ret
//子程序3結(jié)束
//中斷程序0,“脈沖輸出終止”
int0 //中斷程序0
r m0.1,1
//“電機(jī)運(yùn)行”標(biāo)志位復(fù)位(m0.1=0)
ret //子程序0結(jié)束
6 結(jié)束語(yǔ)
通過(guò)對(duì)硬件和軟件的合理設(shè)計(jì),用較為價(jià)廉的西門(mén)子s7-200系列plc作為核心控制部件,構(gòu)成的定位系統(tǒng)能夠達(dá)到精確定位的目的。特別應(yīng)指出的是通過(guò)靈活、巧妙的應(yīng)用plc的指令系統(tǒng),可使系統(tǒng)實(shí)現(xiàn)高精度定位。
轉(zhuǎn)載請(qǐng)注明出處。