XPLC006E功能簡介
XPLC006E是正運動運動控制器推出的一款多軸經濟型EtherCAT總線運動控制器,XPLC系列運動控制器可應用于各種需要脫機或聯機運行的場合。
?XPLC006E自帶6個電機軸,最多12軸運動控制(含虛擬軸數),支持12軸直線插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等功能。
XPLC006E支持多任務同時運行,同時可以在PC上直接仿真運行,編程方式多種可選,支持ZDevelop軟件的Basic/PLC梯形圖/HMI組態和常用上位機軟件編程。
XPLC006E只支持EtherCAT總線軸,不支持脈沖軸和編碼器軸。采用EtherCAT總線與驅動器通訊,1ms的刷新周期。
XPLC006E支持PLC、Basic、HMI組態三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。
?→此款產品有XPLC004E、XPLC006E、XPLC008E三個不同軸數的型號可選。
XPLC864E功能簡介
?
XPLC864E在XPLC006E的功能基礎上做了升級(即上節介紹的XPLC006E的功能都支持),部分資源空間優于XPLC006E,使用方法基本一致,不同之處在于XPLC864E,硬件支持32點輸入、32點輸出、2個ADC、2個DAC,支持脈沖軸和總線軸混合使用,總實軸軸數為8,除了帶EtherCAT接口之外,輸出口硬件上可配置為8個軸的脈沖方向信號輸出,另帶兩路編碼器輸入,可由輸入口配置
XPLC864E支持PLC、Basic、HMI組態三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。
XPLC系列經濟型EtherCAT總線運動控制器支持多種編程方式,支持使用正運動技術自主研發的ZDevelop開發環境的Basic語言和PLC梯形圖,上一節講解了ModbusRTU或ModbusTcp與觸摸屏通訊,本節內容主要講解控制器多任務運行的優勢。
? 一多任務概念
1.什么是任務
任務是執行I/O刷新和用戶程序等一系列指令處理的功能,控制器內的程序均以任務的方式運行,一個任務是指一個正在運行的程序。
2.任務編號的作用
任務編號用于區分任務,沒有特殊的含義,任務編號的范圍在控制器支持的任務數量內選取。
3.任務類型
任務的類型無需指定,用戶可用的任務分兩類,自定義的任務和中斷任務。自定義任務由用戶自行開啟,指定任務編號,并編寫任務內的代碼;中斷任務在觸發了控制器支持的中斷后才會被使用,中斷程序執行完成中斷任務便停止,中斷任務無需指定任務號,按系統默認的任務號運行。
4.任務優先級
任務默認是無優先級的,需要優先執行的任務支持PROC_PRIORITY設置優先級,任務的優先級高表現在一個系統周期中優先執行,再執行其他的任務。
5.多任務
多任務即多個程序模塊同時執行,并且能夠互不干擾的同時運行,任務的使用由用戶自行分配,但不能超過控制器支持的最大任務數。
6.任務數量查詢
XPLC006E支持多任務,不同的控制器支持的任務數量不同,支持的具體任務數量,可連接控制器之后,在ZDevelop軟件菜單欄“控制器狀態”查看或在線命令發送?*max指令查看,如下圖,表示該控制器用戶可自定義的任務有10個,任務編號范圍為0-9。
二多任務作用
?
多任務可以將復雜的程序分成幾個部分,分別開任務來同時執行,每個部分的任務是獨立的,這樣就可以使設備的復雜運動過程變得簡單明了,編程更靈活,例如參數更新、加工、急停、IO掃描等可以劃分不同的任務模塊,沒有多任務的場合程序只能順序執行,使得程序的執行效率十分低下。
在一個控制周期內,不同的任務根據當前執行的指令的差異,任務占用的時間也會有差異,并不完全相同,任務在默認情形下不存在優先級,可通過PROC_PRIORITY指令去設置某個任務的優先級。
如下圖所示,設置任務5優先級為3,優先級范圍1-10,10最高。
?
三多任務運行特點
1.運動控制器每個運動控制周期(SERVO PERIOD)包含MC、SS、以及用戶多任務程序的運行,如下圖所示。
?
(1)Motion Control:運動控制、EtherCAT通訊、中斷的實現。
(2)運動控制包含:單軸運動控制、多軸插補運動、機械手正反解算法等;EtherCAT通訊包含PDO通訊與SDO通訊。
(3)System Service:包含RS232串口通訊、RS485串口通訊、CAN通訊、EtherNET通訊(MODBUS RTU主從通訊以及ZDevelop相關軟件服務)
(4)TASK0、…、TASK21:對應于各個任務的運行,任務編號從0開始,第0個任務到第21個任務。
2.不同類型文件的任務執行規則。
Basic的所有任務只掃描運行一次便停止(除非程序內有WHILE死循環才會一直運行)。一個工程項目下Basic文件支持同時存在多個自動運行任務,自動運行任務是上電后同時開啟的,無先后順序。
由于PLC程序是自行循環掃描的,故在一個工程項目下建議PLC只設置一個主任務循環,PLC子程序若以任務開啟,只運行一次。設置方法為給PLC文件只一個自動運行任務號或者在其他任務中開啟一個PLC任務,那么這個PLC任務便為PLC的主任務。
HMI程序必須要以一個任務去啟動,否則下載程序后無法運行HMI,初始化函數只掃描執行一次,周期函數循環掃描。一個工程項目下HMI文件僅支持一個,組態程序要運行只能通過給HMI文件設置自動運行任務號。
控制器同時處理四個任務,如上圖,任務0123之間是并行的,互不干擾,控制器下載程序之后這四個文件任務同時啟動,同時還能在文件任務執行的時候,使用任務指令開啟SUB子程序任務或標記任務,SUB子程序任務或標記任務一旦開啟,便與主程序無關,任務運行停止后可重復觸發任務執行。
?
3.控制器多任務的優勢。
?
(1)程序模塊化:用戶可以將程序編寫成多個較小的、特定的程序,來實現客戶設備指定的功能。
(2)并發性:每個任務可以獨立運行,任務開啟后,不受其他任務的影響。
(3)簡化錯誤處理:劃分多任務運行后錯誤處理變得簡單,只需處理出錯的任務。
(4)命令交互:程序處于運行狀態時,用戶也可以隨時進行命令交互,如在線修改運動參數,在線命令欄發送指令等,其他程序不受影響。
?
四多任務狀態查看
?
任務狀態有三種,正在運行、停止和暫停,任務狀態查看有如下3種方式。
1.任務指令查看。
PROC_STATUS:任務狀態查看,只讀參數。返回值:0-任務停止,1-任務正在運行,3-任務暫停中。
示例:
?
PRINT PROC_STATUS(0)? ? ? ? ?'打印任務0狀態
?*PROC_STATUS '打印控制器支持的所有任務的狀態
如下圖 4-7,Basic任務0和1已運行完停止,PLC任務2正在運行。
2.任務窗口查看。
在菜單欄“調試”→“啟動/停止調試”打開任務窗口(如下圖所示),任務窗口可以查看已經開啟的任務的任務編號、運行狀態、當前文件和運行行號,看不到未開啟的任務。
Basic的任務在程序掃描完成后,任務變為Stopped狀態,PLC主任務由于會循環掃描,所以一直處于Running狀態。
3.打開菜單欄“調試”→“故障診斷”窗口。
可查看控制器的支持的所有任務編號的狀態、所處的文件和運行的行號。窗口也可以顯示各任務報錯的故障信息,如下圖所示。
?
五多任務啟動與停止
?
1.多任務操作指令
多任務主要操作指令如下:
(1)END:當前任務正常結束
(2)STOP:停止指定文件運行的任務
(3)STOPTASK :停止指定任務
(4)HALT :停止所有任務
(5)RUN :啟動新任務運行一個文件
(6)RUNTASK:啟動新任務運行一個SUB或者運行一個帶標簽的程序
(7)PAUSETASK:暫停指定任務
(8)RESUMETASK:恢復指定任務,恢復后任務從停止處繼續往下執行
Basic和PLC的任務操作均是使用以上指令。
?
2.多任務啟動
?
任務啟動有三種方式,分別是自動運行任務號設置、RUN指令和RUNTASK指令,使用指令開啟任務時,程序掃描執行到該指令后再開啟任務。(開啟任務時注意任務編號的填寫,任務不能重復開啟)
(1)自動運行任務號:在“文件視圖”窗口設置自動運動任務號。控制器上電后首先執行帶自動運行任務號的文件,自動運行任務號Basic文件可設置多個,PLC文件和HMI文件僅支持一個。自動運行文件為并行運行,上電后同時開啟。
(2)RUN指令將文件作為一個任務啟動。
示例:RUN "TuXing_001.bas",2 '將TuXing_001.bas文件作為任務2啟動
(3)RUNTASK指令將SUB子程序或帶標簽程序作為一個任務啟動。可跨文件開啟全局定義的SUB子程序,要開啟任務的標簽程序只能存在本文件內。
示例:RUNTASK 1,task_home '以任務1啟動task_home子程序
?
3.多任務停止
?
停止任務指令有STOPTASK,STOP,HALT三種。(任務停止再啟動就會從頭執行任務)
開啟任務時,一般先使用STOPTASK停止任務,再RUNTASK開啟,避免任務出現重復開啟報錯。
(1)STOPTASK支持停止文件任務、SUB子程序任務和帶標簽的任務。
示例:STOPTASK 2?'停止任務2
(2)STOP指令支持停止Basic文件任務,推薦使用STOPTASK指令,操作更簡單。
(3)HALT指令停止所有任務
示例:HALT?'停止項目內的所有任務
→快速停止所有任務還可以使用軟件菜單欄的“緊急停止”按鈕、如下圖,項目內有兩個任務,下載運行后,任務0和任務1正在運行中。
→發送在線命令:STOPTASK 0
→發送在線命令STOPTASK后停止任務0。
→再次啟動任務可以再次下載程序。
上方程序不能使用RUN指令開啟自動運行文件任務0,因為任務0中自動開啟的任務1仍在運行,若使用指令再次開啟任務0,會導致任務1重復開啟。若停止的任務1,則可以使用RUNTASK指令單獨開啟任務1。
?
4.任務暫停與恢復
?
暫停任務使用PAUSETASK指令,恢復任務使用RESUMETASK指令。恢復后任務從暫停處繼續向下執行。暫停的任務支持停止。
(1)PAUSETASK:暫停指定任務
示例:PAUSETASK 1?'暫停任務1
(2)RESUMETASK:恢復指定任務
示例:RESUMETASK 1?'繼續運行任務1
→如下圖,項目內有兩個任務,下載運行后,任務0和任務1正在運行中。
→發送在線命令控制任務的暫停或恢復。
→在線命令發送:PAUSETASK 0 '任務0被暫停
→在線命令發送:RESUMETASK 0?'任務0恢復運行狀態
?
六多Basic和PLC任務相互調用
?
1.Basic調用PLC任務
?
(1)Basic文件內使用RUN指令調用PLC文件,如下圖所示。
(2)Basic文件內使用RUNTASK指令調用PLC內LBL指令定義的子程序,如下圖。
2.PLC調用Basic任務
?
PLC內使用EXE或EXEP(脈沖執行)指令,調用Basic的任務指令,從而調用Basic文件任務或子程序任務,如下圖所示。
?
?
七多任務調用示例
?
由于XPLC864E控制器ZDevelop的三種編程方式都支持,同時還支持多種插補功能,給出下面兩個不同的多任務程序案例參考。
程序下載運行,首先啟動帶自動運行任務號的文件,自動運行任務號可設置多個,也可以只設置一個,其他的文件任務采用RUN指令開啟。
之后根據要調用的程序所處位置,在自動運行的文件中加入RUN或RUNTASK指令調用其他任務執行。
最后在編程時按功能進行模塊劃分,每個模塊指定一個任務號運行,模塊程序塊在需要時才調用任務執行,減少程序掃描時間,提高控制器的執行效率。
?
1.Basic多任務編程
?
示例程序分為兩個Basic文件,Main文件上電自動以任務0運行,其他任務在任務0中使用指令開啟,如下圖所示。
→示例程序多任務調用的框架如下圖所示。
?
(1)文件一:Main.bas
?
RAPIDSTOP(2)
WAIT IDLE
GlobalInit? ? ?'參數定義
AxesInit? ? ? ?'軸參數初始化
WHILE 1
? ?IF? SCAN_EVENT(IN(0))> 0 THEN? ? ?'啟動主運動? ??
? ? ? STOPTASK 2??
? ? ? 'Basic開啟任務調用Basic文件
? ? ? RUN "TuXing_001.bas",2? ?'以任務2運行主運動程序? ??
? ?ENDIF
? ?IF? SCAN_EVENT(IN(1))> 0 THEN? ? ? '停止
? ? ? sub_stop
? ?ENDIF
? ?IF? SCAN_EVENT(IN(2))> 0 THEN? ? ? '回零
? ? ? RUNTASK 1,task_home? '以任務1啟動回零
? ?ENDIF
WEND
END '主程序結束
?
'''參數定義
GLOBAL SUB GlobalInit()??
? ?'主程序
? ?GLOBAL CONST AXISNUM = 3? ? '總軸數
? ?GLOBAL g_state'控制器狀態
? ?g_state = 0? ?'0--初始狀態;1--待機;2--回零;3--運行
? ?GLOBAL deal_home? '回零標志
? ?deal_home = 0? ??
END SUB
?
''' 軸參數以及IO的定義
GLOBAL SUB AxesInit()
? ?BASE(0,1,2)
? ?DPOS=0,0,0
? ?MPOS=0,0,0
? ?UNITS = 100,100,100? '脈沖當量
? ?ATYPE = 1,1,1? '步進方式
? ?SPEED=100,100,100
? ?LSPEED=0,0,0? '起始速度
? ?CREEP=10,10,10? '回零反找速度
? ?ACCEL=1000,1000,1000
? ?DECEL=1000,1000,1000
? ?SRAMP = 20,20,20? 'S曲線時間設置?
? ?DATUM_IN=8,9,10? '原點輸入配置
? ?REV_IN=-1,-1,-1? '負向限位,與原點連到一起
? ?FWD_IN=-1,-1,-1? ? '正向限位
? ?ALM_IN = -1,-1,-1
? ?'特殊IO反轉改為常開輸入
? ?INVERT_IN(8,ON)
? ?INVERT_IN(9,ON)
? ?INVERT_IN(10,ON)
? ?MERGE = ON? '缺省配置以主軸0進行的為連續插補
? ?CORNER_MODE = 2'啟動拐角減速
? ?DECEL_ANGLE = 15 * (PI/180)'開始減速的角度 15度
? ?STOP_ANGLE = 45 * (PI/180)'降到最低速度的角度45度
END SUB
?
GLOBAL SUB task_home()
? ?g_state = 2? ?'回零中?
? ?FOR i = 0 TO AXISNUM - 1
? ? ? BASE (i)? '選擇參與運動的軸
? ? ? CANCEL(2)? '停止
? ? ? WAIT IDLE
? ?NEXT? ??
? ?FOR i=0 TO AXISNUM-1
? ? ? SPEED(i)=50? ? ? '回零速度
? ? ? HOMEWAIT(i)=100? ? '反找等待時間
? ? ? DATUM(3) AXIS(i)? '回零方式
? ?NEXT?
? ?WAIT UNTIL IDLE(0) AND IDLE(1) AND IDLE(2)
? ?WA 10
? ?PRINT "回零完成..."? ??
? ?BASE(0,1,2)? ??
? ?DPOS=0,0,0
? ?MPOS=0,0,0? ??
? ?g_state = 1? ? '回零完成,回到待機狀態?
? ?deal_home = 1? ?'回零完成標志
END SUB
?
GLOBAL SUB sub_stop()? ? '停止
? ?STOPTASK 2? ? ? ?'停止運動主程序
? ?STOPTASK 1? ? '
? ?RAPIDSTOP(2)
? ?WAIT IDLE
? ?g_state = 1? ? '軸停止,回到待機狀態? ?
END SUB
?
(2)文件二:TuXing_001.bas
?
IF deal_home = 1 THEN? ? ? ? '判斷回零是否完成,執行主程序模塊
? ?g_state = 3? ? ?'運動中
? ?PRINT "開始運動..."
? ?TRIGGER
? ?BASE(0,1,2)
? ?MOVEABS(0,0,0)
? ?MOVE(100) AXIS(2)
? ?MOVECIRC(200,0,100,0,1)? ? '半徑100順時針畫半圓
? ?MOVE(0,-200)
? ?MOVECIRC(-200,0,-100,0,1)
? ?MOVE(0,200)
? ?WAIT IDLE(0)??
? ?WAIT IDLE(2)
? ?PRINT "結束運動..."
? ?g_state = 1? ? ?'運動完成?
ELSE
? ?PRINT "軸未回零,請先回零..."
ENDIF
END
?
示波器采樣各軸位置曲線和XY模式下的合成軌跡。
位置曲線
XY模式下的合成軌跡
2.Basic和PLC多任務混合編程
?
PLC文件任務建議只設置一個,若同時運行兩個PLC文件任務,會提示告警信息:Warn file:"PLC2.PLC" line:1 task:2, can not set PLC main task, task:1 already be set.
含義是PLC已經有一個主任務1了,但任務2仍能正常運行,如下所示。
PLC文件或Basic文件內使用RUNTASK指令開啟的PLC子程序任務只能運行一次,與PLC內開啟PLC子程序效果一致。
→Basic文件內使用RUNTASK指令開啟的PLC子程序任務,如下圖:
→PLC文件內使用RUNTASK指令開啟的PLC子程序任務,如下圖:
示例:如下圖所示,Basic文件用于參數初始化,PLC文件用于條件控制軸運行。Basic文件由自動運行任務號0開啟,PLC文件由Basic文件內的RUN指令開啟,開啟之后循環掃描。
?
示例程序:
?
(1)Basic文件程序
?
RAPIDSTOP(2)
WAIT IDLE(0)
WAIT IDLE(1)
'參數初始化
BASE(0,1)? ? ? ? ? '選擇XY
DPOS = 0,0
MPOS = 0,0
ATYPE=1,1? ? ? ? ? '脈沖方式步進或伺服
UNITS = 100,100? ? '脈沖當量
SPEED = 100,100
ACCEL = 500,500
DECEL = 500,500
FASTDEC=2000,2000
SRAMP=100,100? ? ? 'S曲線
MERGE = ON? ? ? ? ?'啟動連續插補
RUN "PLC1.PLC" ,1? '調用PLC文件任務
?
(2)PLC文件梯形圖程序,上方Basic程序用PLC梯形圖實現如下圖。
(3)PLC梯形圖對應語句表程序。(注意:PLC梯形圖和語句表之間支持互相轉換)
?
//直線插補運動
LD M8002
ZRST M0 M10
LDP X0
DEMOV K300 D0
DEMOV K400? D2
// IN1上升沿啟動運行,IN2按下運動快速停止
LDP X1
OR? M0
ANI? M1
ANI? X2
OUT M0
EXEP? ? @TRIGGER
MOVE D0 D2
LD M8100
PLS M1
END
?
(4)直線插補運動效果圖。位置曲線,XY模式下的合成軌跡。
?
位置曲線
XY模式下的合成軌跡
?本次,正運動技術經濟型EtherCAT運動控制器(五):多任務運行,就分享到這里。
?
評論
查看更多