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