史秀玉,何 平,王志成,吳文江,張玉磊
(1.中國科學院大學,北京 100049;2.中國科學院沈陽計算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168;3.沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)
嵌入式伺服控制器調(diào)試軟件的研究*
史秀玉1,2,何 平2,3,王志成2,3,吳文江2,3,張玉磊1,2
(1.中國科學院大學,北京 100049;2.中國科學院沈陽計算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168;3.沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)
隨著工業(yè)控制領(lǐng)域的不斷發(fā)展,傳統(tǒng)的控制器已經(jīng)無法滿足用戶在線調(diào)試的需求,只能通過仿真得到實驗結(jié)果,這種系統(tǒng)仿真具有一定的理想性。針對傳統(tǒng)控制器的缺陷,提出設(shè)計一種嵌入式伺服控制器調(diào)試軟件,能有效彌補這一缺陷。文章采用.NET Framework平臺及Visual Studio集成開發(fā)環(huán)境,基于嵌入式伺服控制器設(shè)計了編輯器、匯編器以及調(diào)試器(硬件在回路仿真測試系統(tǒng))。運用硬件在回路(Hardware-in-the-loop,HIL)技術(shù),讓處理器運行仿真模型來模擬電機的運行狀態(tài),滿足了用戶實時調(diào)試的需求。
Visual Studio;HIL;嵌入式伺服控制器;調(diào)試軟件
隨著微控制器的快速發(fā)展,其應用已經(jīng)遍及各個領(lǐng)域,如:電機控制、工業(yè)自動化等。傳統(tǒng)控制器中,單軸控制器和伺服驅(qū)動器采用分立的設(shè)計結(jié)構(gòu),系統(tǒng)成本高、通訊時延長、靈活性差。因此,嵌入式單軸控制器應運而生,它將單軸控制器和伺服驅(qū)動器結(jié)合在一起,解決了傳統(tǒng)控制器的缺陷;嵌入式單軸控制器的出現(xiàn)也對調(diào)試工具提出了新的要求,在對指令進行編輯編譯的同時,也需要滿足用戶的實時調(diào)試的需求。目前國內(nèi)尚無成熟的嵌入式伺服控制器調(diào)試軟件,因此在參考文獻[1]的基礎(chǔ)上,文章設(shè)計了基于嵌入式伺服控制器的調(diào)試軟件。嵌入式伺服控制器調(diào)試軟件可用于實現(xiàn)運動控制器監(jiān)控、編碼器角度檢測、Osci控制等功能,其核心功能是編輯、匯編以及調(diào)試,其中,調(diào)試功能采用了硬件在回路的仿真設(shè)計,硬件在回路仿真已逐漸成為控制系統(tǒng)設(shè)計的重要工具[2],滿足了用戶實時調(diào)試的需求。
1.1 伺服控制系統(tǒng)
伺服控制系統(tǒng)整體的工作流程如圖1所示:用戶在上位PC機的調(diào)試軟件上編寫程序,通過USB端口將程序指令代碼序列下載到嵌入式單軸控制器中,解釋器模塊對下載的代碼序列進行解釋處理并調(diào)用相應的處理函數(shù),得到電機的運動參數(shù),因為單軸控制器和伺服驅(qū)動器共享內(nèi)存,伺服驅(qū)動器可以根據(jù)參數(shù)直接控制電機的運動軌跡,不需要再使用通訊接口。其中,運動控制器中變量監(jiān)測模塊保存記錄數(shù)據(jù),并將各個變量同樣通過USB接口反饋給上位PC機調(diào)試軟件中的調(diào)試器,便于用戶實時調(diào)試,控制電機的運轉(zhuǎn)軌跡。
圖1 伺服控制系統(tǒng)結(jié)構(gòu)
1.2 伺服驅(qū)動指令
伺服驅(qū)動指令由匯編器匯編,具有一定的指令格式,包括指令標識符和相關(guān)的參數(shù)。統(tǒng)一編譯為二進制代碼,根據(jù)指令標識符的不同,調(diào)用不同的指令處理函數(shù),當然這就是解釋器的功能了,不是我們討論的范疇。根據(jù)參考文獻[1]設(shè)計的伺服驅(qū)動指令集,設(shè)計一個類,定義統(tǒng)一的指令規(guī)范格式,定義各個變量,分別存儲助記符的名稱、指令代碼、參數(shù)個數(shù)以及各個參數(shù)。定義該類型的數(shù)組,數(shù)組中存放的是所有的指令集合,最后定義所有輸入輸出參數(shù)可能的類型指令。
2.1 編輯器的設(shè)計
采用Visual Studio平臺的richTextBox組件,在C# winForm程序中作為匯編器的編輯界面,同時采用label控件為代碼添加行號。為Label控件添加Paint事件,來實現(xiàn)行號的添加。具體代碼設(shè)計如圖2所示:
圖2 繪制行號
其中,lineNumPoint是一個List數(shù)組,存放的是Point類型的數(shù)。LineNumPoint中的坐標是由LineNumPoint.Add()函數(shù)逐一添加的。遍歷該數(shù)組得到數(shù)組中元素的個數(shù)(即行數(shù)),g.DrawString()函數(shù)繪制行號。此中存在一個設(shè)計難點,就是滾動條的問題。隨著滾動條的滾動,行號需要不斷的刷新才能滿足正常的需要。為此設(shè)計一個滾動條的垂直滾動事件(richTextBox的VScroll事件),實現(xiàn)行號的刷新。首先用clear()函數(shù)將坐標數(shù)組清空,重新計算字符串坐標,我們知道文本框的行數(shù),即richTextBox.Line.Length,先用GetFirstCharIndexFromLine()函數(shù)從行號得到給定行第一個字符的索引,再根據(jù)函數(shù)GetPositionFromCharIndex()得到字符在指定索引處的位置,進而得到每行行號的坐標。
到此為止,編輯器已經(jīng)做好了,但是為了使其更加美觀實用,這里為其實現(xiàn)了關(guān)鍵字高亮。高亮代碼如圖3所示。
圖3 關(guān)鍵字高亮
2.2 匯編器的設(shè)計
匯編器需要在上位PC機調(diào)試軟件中使用,在上位PC機調(diào)試軟件的編輯器的編輯框里輸入相關(guān)的匯編指令,匯編器將這些匯編指令一一進行匯編,即編譯為可執(zhí)行的二進制代碼,如果編譯不通過,則需進行相應的代碼調(diào)試,直至編譯通過為止。匯編過程的流程圖如圖4所示。
圖4 匯編程序流程圖
2.2.1 定義用戶輸入指令
定義用戶輸入指令類,包括的變量有:用戶輸入命令的名稱name,參數(shù)argX,參數(shù)argY,參數(shù)a-rgZ,行號line,String類型的輸入?yún)?shù)數(shù)組inArg,Int32類型的輸出參數(shù)數(shù)組outArg,以及byte類型的數(shù)組bin,長度等于8,一條指令的長度,8個字節(jié),用于保存編譯后的二進制指令。
2.2.2 設(shè)計難點
設(shè)計過程中需要考慮的兩大問題,第一:若用戶輸入的有空白行,則必須先去除空白行,否則就算編程讓編譯通過,遇到跳轉(zhuǎn)指令也不能正確執(zhí)行,因此需要去除空白行,Array.FindAll(codeLines,line=> !string.IsNullOrEmpty(line))。將輸出去除空白行之后的內(nèi)容與之前對比,如果沒有空行則說明已經(jīng)成功去除。
第二是跳轉(zhuǎn)指令中的line,在去除了空白行之后的所有行號都會發(fā)生變化,所以不能靠行號的變化來識別,這里設(shè)計了另一種思路:當跳轉(zhuǎn)指令,第一個參數(shù)是line類型的,將此字符串的line轉(zhuǎn)化成int型,那么需要跳轉(zhuǎn)到的字符串就是codeLines[newLine],codeLines是原來的文本數(shù)組。然后遍歷新的文本數(shù)組,如果新數(shù)組中哪個元素與該字符串一樣,則說明這個元素就是我們要找的元素,然后把該元素的序號i賦值給newLine,再將其轉(zhuǎn)換為字符串即可。
2.3 調(diào)試器的設(shè)計
2.3.1 編譯調(diào)試
在編譯的過程中,檢查不符合規(guī)則的錯誤,停止繼續(xù)編譯,并報告給用戶錯誤指令,即錯誤的類型和具體內(nèi)容。為此,定義一個錯誤類,該類有兩個變量,錯誤序號id以及對應序號的錯誤內(nèi)容如圖4流程圖所示,每當發(fā)生一個編譯錯誤,就向用戶發(fā)出該錯誤報告,告訴用戶錯誤的類型以及具體的內(nèi)容,以方便用戶調(diào)試代碼,修正錯誤,從而通過編譯。
為了輸出錯誤信息給用戶,再次設(shè)計一個richTextBox,與之前編輯器的richTextBox組件放在同一個winForm中。當有錯誤報告時,就將錯誤信息在此輸出。除此之外,設(shè)計一個指針箭頭指向當前編輯、編譯的行號,如果編譯出錯,則指向出錯的行。
2.3.2 硬件在回路
硬件在回路(Hard-in-the-Loop,HIL)是系統(tǒng)的一種半實物仿真,通過實際的控制器和虛擬對象來模擬電機的運行狀態(tài)。與傳統(tǒng)的軟件仿真技術(shù)不同,硬件在回路技術(shù)將實際硬件設(shè)備引入到仿真系統(tǒng)環(huán)境中,利用仿真平臺的計算能力、輔助工具等系統(tǒng)資源,實現(xiàn)動態(tài)的功能測試,檢查設(shè)計過程中可能存在的錯誤與缺陷[3]。
目前,硬件在回路的仿真系統(tǒng)主要有dSPACE,Mathworks xPC Target,Opal-RT RT-Lab等,這些系統(tǒng)控制器運算能力較強、擴展性較好,但是部分接口需要具備相關(guān)專業(yè)知識的用戶編程實現(xiàn),用戶交互能力較弱[2],因此不適用于伺服控制器程序的開發(fā)實現(xiàn),所以設(shè)計了如圖5所示硬件在回路的系統(tǒng)結(jié)構(gòu)圖。此硬件在回路的變量監(jiān)測系統(tǒng)的需要的硬件支持是伺服驅(qū)動器,軟件支持是.NET Framework平臺及Visual Studio集成開發(fā)環(huán)境。
圖5 硬件在回路系統(tǒng)結(jié)構(gòu)圖
實現(xiàn)的具體流程如圖6。在上位PC機通過調(diào)試器實時監(jiān)控,將仿真數(shù)據(jù)發(fā)送給運動控制器,運動控制器將數(shù)據(jù)做記錄,即將所有的數(shù)據(jù)存儲在一個數(shù)組中,同時,將數(shù)據(jù)發(fā)送給伺服控制器,由伺服控制器根據(jù)數(shù)據(jù)的大小情況控制電機的運轉(zhuǎn)。電機運轉(zhuǎn)情況由伺服驅(qū)動器采集并反饋,之后進行數(shù)據(jù)記錄保存,運動控制器重新將反饋的數(shù)控發(fā)送給上位PC機的調(diào)試器,由用戶實時監(jiān)測控制。運動控制器變量監(jiān)測模塊會將變量實時反饋給上位機的調(diào)試器如圖1所示,觀察電機運行的結(jié)果是否與預期一樣,反饋的各個實時參數(shù)是否與設(shè)置相同。
與此同時,根據(jù)電機上電情況和運行情況,設(shè)計了labelPC值實時反映當前電機的狀態(tài)以及程序運行的狀態(tài),并將該PC值返回給指針箭頭函數(shù),使得箭頭指向當前正在執(zhí)行的語句。
圖6 伺服控制器程序流程圖
3.1 實驗平臺的搭建
此次實驗平臺搭建如圖7所示。圖中從左到右依次是伺服電機、嵌入式伺服驅(qū)動器和上位機調(diào)試軟件。
圖7 實驗平臺的搭建
3.2 編輯器、匯編器的實現(xiàn)
上位機調(diào)試工具的編輯器的界面如圖8所示。分為編輯界面和顯示界面,其中,顯示界面主要用于代碼調(diào)試錯誤信息的輸出,此時驅(qū)動器處于未上電狀態(tài),運動控制器處于停機狀態(tài)。
圖8 編輯界面
當用戶給驅(qū)動器上電,輸入?yún)R編指令,并點擊編譯按鈕,則匯編器進行編譯,如果沒有錯誤則編譯通過,調(diào)試顯示框會輸出“編譯成功”和當前開始編譯的時間,黃色箭頭指向當前執(zhí)行的命令行,如圖9所示。
圖9 編譯運行界面
3.3 調(diào)試器的實現(xiàn)
編譯執(zhí)行命令行后,打開運動控制器變量監(jiān)測窗口,可以清晰的看到各個變量值的情況如圖10,以此來監(jiān)測電機的運轉(zhuǎn)狀況,觀察是否符合預期的期望。若不符合,及時調(diào)整相關(guān)值的大小,以達到預期期望。
圖10 運動控制器變量監(jiān)測
文章在解決了傳統(tǒng)單軸控制器成本高、延時長、靈活性差的嵌入式伺服控制器的基礎(chǔ)上,采用 .NETFramework平臺及Visual Studio集成開發(fā)環(huán)境設(shè)計并實現(xiàn)了編輯器、匯編器以及采用了硬件在回路技術(shù)的調(diào)試器。彌補了傳統(tǒng)控制器無法滿足用戶實時調(diào)試的缺陷,對伺服控制器調(diào)試軟件的開發(fā)具有一定的借鑒作用。
[1] 黃昭縣,王志成,趙鴻博.嵌入式單軸控制器的設(shè)計與實現(xiàn)[J]. 組合機床與自動化加工技術(shù),2014(8):62-66.
[2] 朱淵渤,白瑞林,吉峰,等.交流伺服硬件在回路系統(tǒng)的設(shè)計[J].江南大學學報(自然科學版),2012,11(6):631-636.
[3] 杜少華,于東,黃艷,等.一種基于硬件在環(huán)的可重構(gòu)數(shù)控系統(tǒng)驗證方法[J].機械工程學報,2011,47(21):139-145.
[4] 趙鴻博,王志成,何鵬飛,等.軸控制通信技術(shù)的研究與實現(xiàn)[J].組合機床與自動化加工技術(shù),2015(4):55-58,62.
[5] 肖賀,劉佩林.針對DSP指令生成與二進制翻譯的匯編器實現(xiàn)[J].信息技術(shù),2011(3):47-50.
[6] 劉洋,胡育文,黃文新,等.交流伺服系統(tǒng)調(diào)試軟件設(shè)計[J].伺服控制,2008(1):60-63.
[7] 柴宇,欒勇,王志成.可重構(gòu)伺服驅(qū)動調(diào)試工具的設(shè)計與實現(xiàn)[J].組合機床與自動化加工技術(shù),2013(7):75-77.
[8] 許娜,張曉彤,王沁,等.基于宏指令集的專用匯編器的研究與實現(xiàn)[J].計算機工程,2010,36(2):249-251.
[9] 楊光,冉峰.單片機匯編器的設(shè)計與實現(xiàn)[J].微計算機應用,2005,26(2):231-233.
[10] R Leupers.Compiler Design Issues for Embedded Processors[J].IEEE Design and Test of Computers,2002,19(4):51-58.
[11] K Kennedy,JR Allen.Optimizing compilers for modern architectures: a dependence-based approach[M].Morgan Kaufman Publ Inc,2001.
(編輯 李秀敏)
Researches on the Debugging Software of Embedded Servo Controller
SHI Xiu-yu1,2,HE Ping2,3,WANG Zhi-cheng2,3,WU Wen-jiang2,3,ZHANG Yu-lei1,2
(1.University of Chinese Academy of Sciences,Beijing 100049,China;2.National Engineering Research Center for High-end CNC,Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 110168,China)
With the development of the field of industrial control,the traditional controller has been unable to meet the needs of user’s online debugging.The experimental results can only be obtained by simulation,but it’s a pure simulation system with certain ideals.Aiming at the defects of the traditional controller,the paper puts forward a debugging software of embedded servo controller, which can effectively compensate for this defect.Based on embedded servo controller designed editor, assembler and debugger (Hard-in-the-Loop simulation test system) on the .NET Framework platform and Visual Studio IDE.Therefore, the processor will run with simulation model to simulate running state of the motor and meet the needs of user’s online debugging.
Visual Studio;HIL;embedded servo controller;debugging software
1001-2265(2017)01-0085-04
10.13462/j.cnki.mmtamt.2017.01.023
2016-03-02;
2016-04-08
“高檔數(shù)控機床與基礎(chǔ)制造裝備”國家科技重大專項:國產(chǎn)高檔數(shù)控機床、系統(tǒng)及其技術(shù)在航空領(lǐng)域的綜合應用驗證及工藝研究(2014ZX04001051)
史秀玉(1992—),女,山西忻州人,中科院沈陽計算所碩士研究生,研究方向為伺服控制,(E-mail)1058946261sxy@sina.com。
TH166;TG659
A