一種用于伺服驅(qū)動器中的 精簡可編程邏輯腳本
文:施耐德電氣(中國)有限公司2021年第四期
1 前言
伺服驅(qū)動器作為一個位置跟隨控制設備,往往只有控制電機跟隨運動指令的功能,因此常常與PLC或運動控制器一起構(gòu)成一個運動控制系統(tǒng),完成期望的運動。
某些伺服驅(qū)動器具有運動序列表(Motion Sequence)功能。用戶可以通過配置運動序列表在伺服里定義一系列需要的運動動作,并通過一些條件來連接這些運動動作。但是通過運動序列表只能完成相對簡單的系統(tǒng)定義過的邏輯功能,因此只能在一些很簡單的邏輯運動場合下替代PLC或運動控制器。
在很多行業(yè)應用中,出于壓縮成本的考慮,很多客戶希望在伺服驅(qū)動器中實現(xiàn)部分PLC邏輯功能和運動控制功能,使得在系統(tǒng)方案設計中可以不需要PLC或者使用僅有簡單邏輯控制的價格便宜的PLC來代替帶有運動控制功能的價格高的PLC,
以此來降低系統(tǒng)設計復雜度和減低成本。因此,帶有邏輯控制功能的伺服驅(qū)動器將大有用武之地。
2 系統(tǒng)方案設計
2.1設計方案選擇
在伺服控制器中實現(xiàn)邏輯控制,主要有兩種方法:
(1)將PLC設計到伺服控制器中,使用PLC軟件來編寫梯形圖,下載到伺服控制器中運行。
(2)在伺服控制器中設計一個腳本解釋器,來解釋用戶編寫的腳本邏輯。
方法1需要在伺服控制器中增加相應PLC的硬件來執(zhí)行PLC的固件系統(tǒng),因此伺服控制器硬件成本會增加,不符合用戶降
低成本的初衷。
方法2是一種純軟件的方案,可以在伺服控制器的處理器中實現(xiàn)腳本解釋執(zhí)行的功能,因此不需要增加成本,符合用戶需求。
因此在本方案中選擇方法2作為解決方案。用戶可以在PC上編寫腳本邏輯,并通過USB線纜下載到伺服控制器中。如圖1所示。
圖 1
2.2腳本的組成結(jié)構(gòu)
腳本整體由兩大部分組成:
? PC端的腳本邏輯編寫及翻譯
? 伺服驅(qū)動器端的腳本邏輯解釋器
圖 2
3 腳本的設計實現(xiàn)
3.1腳本語言的設計
腳本語言的設計需要完成:
? 指令集的設計
? 語法的設計
? 指令及語法的錯誤檢查
3.1.1指令集的設計
根據(jù)設備需要完成的基本邏輯行為,設計相應的指令集。
對于伺服驅(qū)動器來說,基本邏輯行為主要有以下幾點:
(1)邏輯運算相關指令
? 內(nèi)存讀寫指令
? 加減乘除取模指令
? 與或非指令
? 比較指令
? 跳轉(zhuǎn)指令
? 循環(huán)指令
(2)運動相關
? 速度值設置指令
? 加減速度值設置指令
? 位置值設置指令
? 速度運動指令
? 相對位置運動指令
? 絕對位置運動指令
? 點動指令
? 尋原點指令
? 速度/位置/電流讀取指令
(3)外設
? 定時器時間設置指令
? 定時器計時完成讀取指令
3.1.2語法的設計
所有語句以 “S::” 開頭,以”;”結(jié)束。
整個程序結(jié)構(gòu)由下面3種功能塊組成:
? Param block
? Init block
? Motion block
Param Block用于用戶參數(shù)配置。腳本為用戶提供16個32位的可配置參數(shù)空間,用戶可工藝所需的速度位置信息等。例如:
nit Block用于初始化腳本所需變量和配置系統(tǒng)參數(shù)。腳本為用戶提供50個32位的內(nèi)存空間(MD),用戶可以用于存儲腳本邏輯編程中的中間變量。比如讀取到的速度位置值,或者計算的中間結(jié)果等。
Motion Block是用于腳本邏輯編寫。其中每個Motion Block由1個或多個Event組成。每個event包括一個IF條件語句和一個THEN執(zhí)行語句。例如:
一個motion block就是一個死循環(huán)(圖3中紅色箭頭),跳轉(zhuǎn)指令NextMotionID就是這個死循環(huán)的出口。而在motion block內(nèi),腳本語句按event號順序執(zhí)行。如圖3所示。
圖 3
3.2腳本編譯器的設計
腳本編譯器的設計需要完成:
? 編譯方法的選擇
? 腳本語法的解析
? 編譯目標的結(jié)構(gòu)設計
3.2.1編譯方法的選擇
程序文本的編譯執(zhí)行通常有兩種方法:
? 把文本整體編譯成CPU可執(zhí)行的二進制文件,如PLC等;
? 由解釋器直接來解釋源代碼執(zhí)行,如EXCEL VBA等。
伺服驅(qū)動器是一個沒有操作系統(tǒng)或微多任務操作系統(tǒng)的嵌入式系統(tǒng),因此如果采取方式一,先編譯器整體編譯再執(zhí)行的方式,伺服自身的代碼與腳本編譯的代碼之間的鏈接難度較大,而且腳本源碼的調(diào)試會面臨很大的問題。
伺服驅(qū)動器是CPU和內(nèi)存資源都比較少的嵌入式系統(tǒng),因此如果采取方式二,邊解釋邊執(zhí)行的方式,直接對腳本文本代碼的字符串處理會消耗大量的CPU資源,所以也并不適用。
結(jié)合以上分析,我們采取了折中的方式,在PC端先進行一次編譯,將腳本文本代碼邏輯編譯成一種特定的數(shù)據(jù)結(jié)構(gòu),并將數(shù)據(jù)結(jié)構(gòu)下載到伺服驅(qū)動器中。在伺服驅(qū)動器里的解釋器再來解釋執(zhí)行數(shù)據(jù)結(jié)構(gòu)里的內(nèi)容。
根據(jù)腳本代碼的特點,數(shù)據(jù)結(jié)構(gòu)分為Motion和Event兩種,并有各自的數(shù)據(jù)結(jié)構(gòu)池,每個數(shù)據(jù)結(jié)構(gòu)池里包含一個對應的數(shù)據(jù)結(jié)構(gòu)數(shù)組,如圖4所示。
圖 4
Motion和Event 數(shù)據(jù)結(jié)構(gòu)池的本質(zhì)是結(jié)構(gòu)體數(shù)組,也是整個腳本功能承上啟下的核心。
3.2.2腳本語法的解析
在PC上的編譯下載小工具中,通過字符串解析來處理出所需信息,步驟如下:
(1)讀取腳本文件中一行信息,摘取”S::”到”;”之間的字符串
(2)判斷該行是MotionID/EventID/IF/THEN行
(3)以 “AND”和”O(jiān)R”關鍵字把拆分該行字符串拆解成n份
(4)將每一份信息填寫到對應Motion和Event數(shù)據(jù)結(jié)構(gòu)池的目標結(jié)構(gòu)體中相應的IF/THEN位置
(5)將目標結(jié)構(gòu)體通過USB線纜下載到伺服驅(qū)動器中。
3.2.3編譯目標的結(jié)構(gòu)設計
目標數(shù)據(jù)結(jié)構(gòu)分為Motion和Event兩種,并有各自的數(shù)據(jù)結(jié)構(gòu)池,每個數(shù)據(jù)結(jié)構(gòu)池里包含一個對應的數(shù)據(jù)結(jié)構(gòu)數(shù)組。例如有一個腳本邏輯,用到了3個Motion。第一個Motion里包含5個Event,第二個里也包含5個Event,第三個里包含3個Event。則總共用到了13個Event。
MotionPool 與Event Pool之間的聯(lián)系如圖5所示。
圖 5
Motion Pool由多個Motion結(jié)構(gòu)組成,結(jié)構(gòu)體大致如下:
Event Pool由多個Event結(jié)構(gòu)組成,一個Event結(jié)構(gòu)體由一個條件結(jié)構(gòu)體和一個行為結(jié)構(gòu)體兩部分組成。
條件結(jié)構(gòu)體
一個條件結(jié)構(gòu)體就相當于腳本代碼中一個IF語句拆分后的條件表格,比如:
行為結(jié)構(gòu)體
一個行為結(jié)構(gòu)體就相當于腳本代碼中一個THEN語句拆分后的行為表格。
編譯結(jié)束后,我們將得到MotionPool和EventPool兩個記錄有腳本邏輯信息的結(jié)構(gòu)體數(shù)組。通過USB電纜,將這兩個結(jié)構(gòu)體數(shù)組下載到伺服驅(qū)動器中,由伺服驅(qū)動器中的腳本解釋器來解釋執(zhí)行結(jié)構(gòu)體中記錄的腳本邏輯信息。
3.3腳本解釋器的設計
腳本解釋器的設計需要完成:
? 解釋器的執(zhí)行流程設計
? 對編譯目標結(jié)構(gòu)體中條件的判斷
? 對編譯目標結(jié)構(gòu)體中行為的執(zhí)行
3.3.1解釋器的執(zhí)行流程設計
解釋器默認從Motion0開始執(zhí)行,從 Motion0中Event0開始順序執(zhí)行每個Event,執(zhí)行到motion0中的最后一個Event后回到Event0循環(huán)執(zhí)行。如果執(zhí)行到某個Event中的行為表(THEN)中的NextMotionID指令,則直接跳轉(zhuǎn)到下一個Motion,并從Event0開始循環(huán)執(zhí)行。流程圖如圖6所示。
圖 6
3.3.2對編譯目標結(jié)構(gòu)體中條件的判斷
在每個Motion循環(huán)周期的開始,都要先讀取伺服驅(qū)動器的所有有關變量,包括當前位置,當前速度,當前電流值, 當前時鐘狀態(tài),當前數(shù)字量輸入值,和當前運動狀態(tài)等信息。這些信息會在條件判斷時使用。
在目前的LXM16產(chǎn)品中,為了簡單起見,邏輯條件中只有“與”,而沒有“或”和“非”兩個條件。因此,對條件的判斷得到了大大的簡化。解釋器只需要對Event結(jié)構(gòu)體中的條件結(jié)構(gòu)體中的每一個條件進行判斷,只有所有條件都為“TRUE”,才算條件成立。
3.3.3對編譯目標結(jié)構(gòu)體中行為的執(zhí)行
當Event結(jié)構(gòu)體中相應的Event條件滿足時,解釋器開始執(zhí)行該Event結(jié)構(gòu)體中對應的行為結(jié)構(gòu)體的內(nèi)容。在行為結(jié)構(gòu)體中,會記錄每一個語句的執(zhí)行順序,解釋器會按照執(zhí)行順序號,按順序執(zhí)行。執(zhí)行時,解釋器會先按照順序號讀取行為結(jié)構(gòu)體中的相應數(shù)據(jù),并調(diào)用伺服驅(qū)動器內(nèi)部的命令函數(shù)來完成執(zhí)行。
比如對于指令:
S:: THEN DO_0=HIGH ANDRelativeTarget Position=10000;
解釋器會順序執(zhí)行:
? 調(diào)用伺服內(nèi)部DO強制輸出函數(shù),并將1作為參數(shù)傳給該函數(shù),使DO_0輸出高
? 調(diào)用伺服內(nèi)部相對運動函數(shù),并將10000作為參數(shù)傳給該函數(shù),使電機向正方向運行10000個脈沖。
3.4 腳本調(diào)試器的設計
3.4.1調(diào)試器界面
圖 7
斷點設置區(qū):用來設置斷點在腳本代碼中的位置
當前狀態(tài)區(qū):用來顯示當前腳本運行狀態(tài)
變量選擇區(qū):用來選擇需要寫或監(jiān)視的變量
變量監(jiān)視區(qū):用來實時顯示監(jiān)視變量的值
變量賦值區(qū):用來給所選變量寫入一個值
調(diào)試操作區(qū):設置斷點/全速/單步/暫停/退出
3.4.2斷點列表
在LXM16D中,最多同時可以設置4個斷點,另外還有一個為單步調(diào)試服務的臨時斷點,因此斷點列表能記錄5個斷點位置。
用戶設置的斷點位置信息存放在斷點列表中。斷點列表中每個斷點位置信息包含以下幾點:
? Motion號
? Event號
? 斷點位置(IF或THEN的前面)
? 該斷點是否使能
例如:
圖 8
其中有一個為單步執(zhí)行服務的臨時斷點。當使用單步調(diào)試時,表中臨時斷點行記錄的是當前斷點位置的下一個位置。腳本解釋器一邊執(zhí)行腳本邏輯一邊檢查當前位置是否在斷點列表中,如果當前位置在列表中,則停止執(zhí)行腳本邏輯。
斷點列表的大小可根據(jù)系統(tǒng)內(nèi)存情況裁剪。如果系統(tǒng)內(nèi)存允許,可以設置更多的斷點。
3.4.3調(diào)試器流程設計
與其他代碼調(diào)試器一樣,腳本調(diào)試器的設計也必須要滿足以下兩點:
? 在斷點處停下后,整個腳本不再執(zhí)行;
? 在斷點處停下后,再執(zhí)行全速或單步,腳本要從斷點處開始執(zhí)行。
腳本功能為一個獨立的功能塊,該功能塊在伺服驅(qū)動器固件中的主循環(huán)中被調(diào)用,每個主循環(huán)周期調(diào)用一次。圖9為調(diào)試器流程圖,從“開始”到“結(jié)束”為腳本功能塊執(zhí)行 一次。
圖9
4 小結(jié)
終端設備的智能化是一個發(fā)展趨勢,它可以讓系統(tǒng)終端設備處理局部數(shù)據(jù),從而大大降低整個系統(tǒng)核心設計的復雜度,從而更好地控制系統(tǒng)成本。帶有腳本功能的伺服驅(qū)動器LXM16D,在機床刀庫、物流分揀、碼垛機械臂等領域都得到了成功應用。
中傳動網(wǎng)版權(quán)與免責聲明:
凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權(quán)利。
關注伺服與運動控制公眾號獲取更多資訊
關注直驅(qū)與傳動公眾號獲取更多資訊
關注中國傳動網(wǎng)公眾號獲取更多資訊
- 運動控制
- 伺服系統(tǒng)
- 機器視覺
- 機械傳動
- 編碼器
- 直驅(qū)系統(tǒng)
- 工業(yè)電源
- 電力電子
- 工業(yè)互聯(lián)
- 高壓變頻器
- 中低壓變頻器
- 傳感器
- 人機界面
- PLC
- 電氣聯(lián)接
- 工業(yè)機器人
- 低壓電器
- 機柜