時間:2020-11-26 09:46:42來源:正運動技術
之前正運動技術與大家分享了,運動控制器的固件升級、ZBasic程序開發、ZPLC程序開發、與觸摸屏通訊和輸入/輸出IO的應用、運動控制器數據與存儲的應用、運動控制器ZCAN、EtherCAT總線的使用、示波器的應用、多任務運行的特點等。
今天,我們來講解一下正運動技術運動控制器中斷(掉電中斷、外部中斷、定時器中斷)的應用。
1、材料準備與控制器接線參考
1)材料準備
2)控制器接線參考
2、中斷概念
“中斷”即CPU在執行程序的時候出現了某些異常或突發情況,需要緊急處理,CPU必須暫停當前的任務去處理緊急突發事件,處理完之后,返回原程序被打斷的地方。
中斷處理分為三個階段:
1)中斷響應
打開中斷總開關,發送中斷請求。
2)中斷處理
中斷處理包括兩個部分的內容:保護斷點和現場,執行中斷程序處理。響應中斷請求后轉到中斷程序的入口,執行中斷程序。
3)中斷返回
中斷程序全部處理完成后結束中斷,等待下次中斷觸發。
3、三種中斷
控制器的中斷分為三種,分別為掉電中斷、外部中斷、定時器中斷。
使用中斷前必須開啟中斷總開關,為了避免程序沒有初始化完成便進入中斷,控制器上電時中斷開關缺省是關閉的。
這三類中斷Basic編程與PLC編程方式均支持。
1)掉電中斷
必須是全局的SUB函數。控制器只有1個掉電中斷。掉電中斷執行的時間特別有限,只能寫少數幾條語句,將數據存儲在VR里。
相關函數:INT_ENABLE,ONPOWEROFF。
2)外部中斷
可設置上升沿觸發或下降沿觸發,必須是全局的SUB函數,目前只有中斷IN口0-31可以使用。必須是支持PLC功能的固件才可使用。
相關函數:上升沿中斷INT_ONn,下降沿中斷INT_OFFn。
3)定時器中斷
達到設定時間后執行定時器中斷函數,必須是全局的SUB函數,定時器個數根據控制器型號,使用?*max打印查看。
相關函數:ONTIMERn,n的取值范圍為:“0”-“定時器最大編號減1”。
4、中斷函數
1)Basic中斷相關函數
INT_ENABLE:中斷總開關,1-開啟,0-關閉
ONPOWEROFF:掉電中斷
INT_ONn:外部輸入中斷,上升沿有效,n-輸入口編號
INT_OFFn:外部輸入中斷,下降沿有效,n-輸入口編號
ONTIMERn:定時器中斷,n-定時器編號
GLOBAL SUB:定義中斷函數
END SUB:中斷結束返回主函數
2)PLC中斷相關函數
EI:允許中斷,同BASIC命令,INT_ENABLE=1開啟
DI:禁止中斷,同BASIC命令,INT_ENABLE=0關閉
ONPOWEROFF:掉電中斷
INT_ONn:外部輸入中斷,上升沿有效,n-輸入口編號
INT_OFFn:外部輸入中斷,下降沿有效,n-輸入口編號
ONTIMERn:定時器中斷,n-定時器編號
LBL:定義中斷函數
IRET:中斷結束返回主函數
5、三種中斷使用(Basic)
三類中斷運行時,中斷程序單獨占用一個任務號。
不同類型中斷使用例程如下:
1)掉電中斷中斷使用
僅支持一個,掉電瞬間觸發執行,執行時間短,只能寫少數幾條語句。
示例:
'主程序
INT_ENABLE =1
DPOS(0)=VR(0) '上電讀取保存的數值,恢復坐標
DPOS(1)=VR(1)
DPOS(2)=VR(2)
END '主程序結束
GLOBAL SUB ONPOWEROFF () '掉電中斷
VR(0) = DPOS(0) '保存坐標到VR
VR(1) = DPOS(1)
VR(2) = DPOS(2)
END SUB
2)外部中斷(上升沿/下降沿)中斷使用
支持PLC功能的控制器才可以使用外部中斷,必須是全局的SUB過程。INT_ONn()上升沿觸發,INT_OFFn()下降沿觸發,n是IN輸入編號,只能選擇控制器自帶的編號0-31。
示例:
INT_ENABLE=1 '開啟中斷
END '主程序結束
GLOBAL SUB INT_ON0 () '外部上升沿中斷程序
PRINT "輸入IN0上升沿觸發"
END SUB
GLOBAL SUB INT_OFF0 () '外部下降沿中斷程序
PRINT "輸入IN0下降沿觸發"
END SUB
3)定時器中斷使用
定時器中斷支持同時開啟多個,中斷個數由定時器個數決定,必須是全局的SUB過程。ONTIMERn()中n是定時器編號。
定時器開啟:TIMER_START(定時器編號,定時時間ms)
定時器結束:TIMER_STOP (定時器編號)
定時器狀態:value = TIMER_IFEND (定時器編號),只讀參數,返回值:0-正在定時,1-定時完成。
示例:
INT_ENABLE=1 '開啟中斷
TIMER_START(0,100) '定時器0開啟,100ms后執行一次
END
GLOBAL SUB ONTIMER0() '中斷程序
PRINT "ontimer0 enter"
'TIMER_START(0,100) '希望周期執行中斷,在SUB里再次打開定時器
END SUB
6、三種中斷使用(PLC)
在PLC編程中,使用LBL指令定義要調用的中斷函數,中斷函數與Basic通用。
PLC編程下三類中斷使用的簡單示例如梯形圖程序所示。
外部中斷使用時要注意X編號為8進制,如:LBL @INT_ON8定義的外部中斷的觸發條件為X10的上升沿,實際接線使用IN8輸入口。
中斷程序運行時,占用一個任務號,此任務號為自動分配,不用手動設置。
如下圖,運行定時器中斷時的任務狀態。
7、中斷使用注意事項
1)必須支持PLC功能的固件才能使用外部中斷。
2)中斷函數編寫為全局SUB過程。
3)各中斷之間無優先級,支持中斷嵌套,多個中斷可以同時執行,同一時間處理的中斷函數不宜過多。
控制器內部只有一個任務在處理所有的中斷信號響應,有一個固定的中斷任務號,如果中斷處理函數過多,并且中斷處理函數的代碼太長,會造成所有的中斷響應變慢,甚至是中斷堵塞,影響其他中斷執行。
解決辦法:
1)盡量減少中斷的數量,很多應用都可以用循環掃描來處理。
2)如果有一個中斷處理函數特別長的話,調用一個單獨的任務來處理中斷中的復雜任務,這樣就不會堵塞其他的中斷響應。
中斷中開啟任務運行例程如下,定時器中斷0的大段代碼以任務3運行,此時定時器中斷0和定時器中斷1均能正常觸發,不存在中斷堵塞的情況。
例程:
INT_ENABLE=1 '開啟中斷
TIMER_START(0,1000) '定時器0開啟
TIMER_START(1,1100) '定時器1開啟
END
GLOBAL SUB ONTIMER0() '中斷處理函數
RUNTASK 3, MyIntHandler() '開任務運行
END SUB
GLOBAL SUB MyIntHandler()
DELAY 1000 '假設大量的堵塞性代碼
WAIT UNTIL IN(0) <> 0
?"第一個中斷"
END SUB
GLOBAL SUB ONTIMER1() '中斷處理函數
?"第二個中斷"
END SUB
8、中斷演示例程(Basic)
'主程序
BASE(0,1)
ATYPE=1,1 '設為脈沖軸類型
UNITS=100,100
DPOS=0,0
SPEED=100,100
ACCEL=1000,1000
DECEL=1000,1000
SRAMP=100,100
INT_ENABLE=1 '開啟中斷總開關
TIMER_START(2,1000) '定時器2開啟,1000ms后執行一次
DPOS(0)=VR(0) '上電讀取保存的數值,恢復坐標
DPOS(1)=VR(1)
PRINT "dpos(0),dpos(1)",dpos(0),dpos(1)
WHILE 1
IF SCAN_EVENT(IN(0))>0 THEN
TRIGGERBASE(0,1)
MOVEABS(0,0)
MOVECIRC2(100,100,200,0) '三點畫半圓
ENDIF
WEND '主程序結束
'中斷程序,均為全局SUB
GLOBAL SUB ONTIMER2() '定時器中斷程序
PRINT "定時器中斷2"
'TIMER_START(2,1000) '在sub里打開定時器,中斷周期執行
END SUB
GLOBAL SUB INT_ON2 () '外部上升沿中斷程序
PRINT "輸入IN2下降沿觸發..."
END SUB
GLOBAL SUB INT_OFF2 () '外部上升沿中斷程序
PRINT "輸入IN2下降沿觸發..."
END SUB
GLOBAL SUB ONPOWEROFF () '掉電中斷
VR(0) = DPOS(0) '保存坐標到VR
VR(1) = DPOS(1)
END SUB
9、中斷演示例程(PLC)
PLC語句表代碼:
//主程序 X0定時中斷0,X1-定時中斷1,X2-上升沿/下降沿中斷,X3-關閉所有中斷
LBL @MAIN
LD M8002
EI
EXE @ PRINT "VR(0)",VR(0)
LD X0
TMR T0 K2000
LD T0
OUT Y0
LD X1
ANI Y1
TMR T1 K3000
LD T1
OUT Y1
LD X3
DI
FEND
//外部中斷,由控制器上的輸入口控制
LBL @INT_ON2
LD M8000
EXE @ PRINT "外部中斷2上升沿"
IRET
LBL @INT_OFF2
LD M8000
EXE @ PRINT "外部中斷2下降沿"
IRET
//定時器0中斷,定時器到達預設值開啟中斷
LBL @ONTIMER0
LD M8000
EXE @ PRINT "定時器中斷0"
IRET
//定時器1中斷,定時器到達預設值開啟中斷
LBL @ONTIMER1
LD M8000
EXE @ PRINT "定時器中斷1"
IRET
//掉電中斷,控制器斷電執行此中斷
LBL @ONPOWEROFF
LD M8000
MOV K12345 D0
EXE @ VR(0)=MODBUS_REG(0)
IRET
END
正運動技術運動控制器中斷(掉電中斷、外部中斷、定時器中斷)的應用就分享到這里,更多精彩內容,請關注我們的公眾號。
本文由正運動小助手原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
標簽:
上一篇:快速入門丨篇十:運動控制器...
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-06-16
2025-06-09
2025-06-06
2025-05-19
2025-04-30
2025-04-11