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

關(guān)注伺服與運(yùn)動控制公眾號獲取更多資訊

關(guān)注直驅(qū)與傳動公眾號獲取更多資訊

關(guān)注中國傳動網(wǎng)公眾號獲取更多資訊

掃碼關(guān)注小程序
時刻關(guān)注行業(yè)動態(tài)


填寫郵件地址,訂閱更多資訊:
撥打電話咨詢:13751143319 余女士
郵箱:chuandong@chuandong.cn
- 運(yùn)動控制
- 伺服系統(tǒng)
- 機(jī)器視覺
- 機(jī)械傳動
- 編碼器
- 直驅(qū)系統(tǒng)
- 工業(yè)電源
- 電力電子
- 工業(yè)互聯(lián)
- 高壓變頻器
- 中低壓變頻器
- 傳感器
- 人機(jī)界面
- PLC
- 電氣聯(lián)接
- 工業(yè)機(jī)器人
- 低壓電器
- 機(jī)柜