?

基于IEC61131-3標準運動控制器的設計與應用*

2019-04-08 05:36李飛江李翔龍
組合機床與自動化加工技術 2019年3期
關鍵詞:功能塊單軸編程

李飛江,李翔龍

(四川大學 制造科學與工程學院,成都 610065)

0 引言

隨著人們對工業生產中的自動化程度要求越來越高,運動控制器的發展得到了越來越廣泛的重視。如今,國內外的運動控制器種類已是多種多樣。雖然運動控制器的多樣化給用戶帶來了一定的好處,方便用戶在構建運動控制系統時,可以選擇合適的控制器。然而長期以來,運動控制市場缺乏統一的編程標準[1],各個廠商的提供的控制器編程語言大多基于類Basic語言、C語言等高級編程語言,也有部分廠商采用G代碼作為編程語言[2]。這些復雜的編程語言一方面限制了運動控制器的通用性,另一方面提高了對編程人員的要求,大多程序的開發只能由高水平的編程人員才能完成,嚴重影響了程序的開發效率。本系統以IEC61131-3標準定義的5種PLC編程語言中為基礎[3-4],采用符合該標準的PLCopen功能塊,成功實現了運動控制器的圖形化編程,大大降低了程序的開發效率。即使在加工需求易變和專用運動控制行業中,用戶只需要學習簡單的PLC編程,便能對控制系統的程序進行自主開發。

文獻[1]采用PLCopen功能塊,提出一種圖形化編程的運動控制系統,但該系統是基于beremiz開源開發平臺實現的,導致其存在操作復雜,與window系統存在不兼容等問題。同時該文獻最終只驗證了單軸功能塊的可行性,并沒有對多軸功能塊進行研究。本文使用德國KW-Software公司開發的符合IEC61131-3標準的MLUTIPROG軟件作為控制系統開發平臺,該軟件使用方便[5-7],配合自行研發的“Assistnt”軟件,成功實現PLCopen規范中的多軸功能塊。最后利用該控制器完成了對貼標機的運動控制,證明了該控制器具有極大的市場應用空間,值得推廣。

1 控制系統的構成

整個控制系統由人機界面交互層、應用指令層、運動控制層、設備驅動層4大部分組成,如圖1所示。

圖1 控制系統的整體構成

人機界面交互層包括MLUTIPROG軟件和自主研發的Assistant軟件,其中MLUTIPROG用來調用PLCopen標準運動功能塊,Assistant則用來為控制器連接的電機設置軸號、軸組號等參數。二者相互配合才能實現多軸控制和多軸功能塊的功能。應用指令層包含了所有PLCopen標準的單軸和多軸功能塊,每個功能塊根據功能的不同,有的用來實現電機的運動控制(MC_Home),有的用來設置和查詢電機的狀態(MC_ReadActualPosition)。運動控制層用來處理運動相關的參數,如:位移、速度加速度等。通過內部算法,實現電機的S型和T型升降速,防止電機速度出現大的波動和位置出現偏差,保證電機運動的精確性。同時運動控制層還根據所調用運動功能塊的不同,自動切換電機工作于位移模式、速度模式或周期同步模式。設備驅動層用來接收從運動控制層傳遞下來的數據,然后將這些數據映射至不同的控制器硬件設備及現場總線設備中。4個部分協調工作,最終實現通過上層調用的圖形化指令就能完成對電機的控制。

2 PLCopenb標準功能塊的開發

2.1 PLCopen標準功能塊的模型

PLCopen規范功能塊按其功能可分為管理型功能塊和運動型功能塊,管理型功能塊主要用來檢查軸的狀態和設置軸的運動參數,運動型功能塊主要是根據設置的速度、位置、加速度等實現軸的運動。按其操作軸的數量則可以分為單軸功能塊和多軸功能塊,單軸功能塊只能控制一個軸,而多軸功能塊能控制2~4軸。

所有功能塊均由輸入/輸出變量、輸入變量、輸出變量、內部算法、功能塊類型名5大部分組成[8-9],其模型如圖2所示。每個變量的作用和數據類型都是確定的,其中輸入/輸出變量是一個用來保存軸參數的結構體。在單軸功能塊中,它是一個名為AXIS_REF的結構體。系統在該結構體中定義了一個成員AxisNo(軸號),用來確定功能塊的控制對象,它具有唯一性,且程序運行過程中不能被更改。一旦功能塊的該參數被賦值,此功能塊就只能控制具有相同軸號的電機。在多軸功能塊中,它是一個名為AXIS_GROUP_REF的結構體,系統在該結構體中定義了軸組號(AxisGroupNo)、軸的數量(AxisNum)、各軸軸號(AxisNoArray)三個成員。通過這三個參數就能在調用多軸功能塊時,確定被控電機的對象,順利實現多軸功能塊。內部算法和功能塊的接口是兩個獨立的部分,不僅能為上層提供統一的編程接口,而且實現功能塊的跨平臺移植時,只需要更改不同硬件平臺的操作硬件部分的代碼,使移植變得簡單。本控制器的內部算法是被封裝起來的,用戶不需知道其具體內容,只需操作功能塊的輸入接口便能實現相應的功能。

圖2 PLCopen標準功能塊模型

2.2 PLCopen標準功能塊庫的制作

本系統使用嵌入在VS2012中的C#模板完成各功能塊輸入輸出接口的定義,經過編譯后會生成一個保存有功能塊接口信息的FWL格式固件庫文件和3個C++文件。其中一個C++文件是用來編寫內部算法的重要文件,它是連接功能塊外部接口和內部算法的橋梁。以MC_Power為例,在該C++文件中會生成void __PInvoke__MS_PLCopen_LIB::M C_Power::__Init()和void __PInvoke__MS_ PLCopen_LIB::MC_Power::__Process()兩個函數。前者的函數內部是不能更改的,而后者的函數內部則用來編寫功能塊的內部算法,內部算法的編寫以實現PLCopen標準所規定的功能塊的功能為目的,其設計流程圖如圖3所示。3個C++文件在定制的ProConOS eCLR工程中被編譯后,會生成一個exe文件,將該文件下載到控制器中。然后只要將FWL文件添加MLUTIPROG軟件的固件庫中,便完成了PLCopen功能塊庫的開發。開發完成的功能塊不僅和PLCopen標準功能塊的模型、功能完全一樣。同時使用方便,只需將其拖動至MLUTIPGOG工程的編程界面,然后設置實例名、輸入參數、輸出參數,就能通過輸入引腳Enable或Execute啟動功能塊。

圖3 內部算法流程圖

3 多軸功能塊的實現過程

調用多軸功能塊前,必須先通過Assistant軟件為控制器上連接的被控對象電機的軸號參數賦值。將設置了軸號的電機添加到一個軸組中,并為該軸組的軸組號賦值,就能通過多軸功能塊實現該軸組2~4軸直線或圓弧插補運動。編譯MLUTIPROG工程后,“Assistant”軟件會生成一個XML格式的文件,該文件保存了所有單軸和軸組參數的信息,將該文件和PLC工程一起下載到控制器便能完成這些參數的配置。

單軸功能塊在對一個電機進行操作前,如果控制器只連接了一臺電機,功能塊則判斷結構體AXIS_REF中的AxisNo和硬件設備上連接的電機軸號(該軸號如果不通過Assistant設置,則默認為0)是否相同,如果不相同,功能塊則無法實現對該軸的控制并報錯。當控制器上連接了多臺電機時,系統會逐一判斷軸號是否相同,找到軸號相同的電機后停止判斷。如果找不到軸號相同的電機則會報錯。當多軸功能塊接收到啟動命令時,將根據存儲在AXIS_GROUP_REF中的參數AxisNum、AxisNoArray先找到連接在運動控制器上的被控電機。如果找不到相匹配的電機,功能塊的輸出引腳Error則會給出錯誤信號。當找到相匹配的電機后,功能塊則會判斷這些電機的軸組號和結構體AXIS_GROUP_REF中的AxisGroupNo是否相同,確認軸組號相同后才會啟動該功能塊,然后執行功能塊的功能。因為MLUTIPROG軟件中無法完成對電機相關參數的配置,所以僅僅依靠該軟件無法實現多軸控制和多軸功能塊的功能。自主研發的“Assistant”軟件則彌補這一缺陷。通過該軟件,不僅能為控制器上連接的電機軸號、軸組號賦值,還能為軸的部分運動參數賦值,例如,單位換算設置、操作設置、限位設置等,功能十分強大。

4 多軸功能塊的驗證

使用簡單的梯形圖編程方法,就能在MLUTIPROG中驗證多軸功能塊MC_MoveLinear_ Absolute。連接好硬件設備后,先在MLUTIPROG工程中編寫好具體的PLC程序,然后在“Assistant”軟件中配置好單軸和軸組相關參數。編譯完成后,將其下載到控制器進行測試。啟動功能塊MC_MoveLinearAbsolute前,先設置它的輸入變量,令目標位值Position=[100000,150000],目標速度Velcity=20000(該速度為兩個軸的合速度),加速度Accelration =30000,減速帶Decelaratiion=30000,加加速度Jerk=50000,因為其它參數的值對運動沒有影響,所以設置為默認值(注意:本控制器中所有功能塊中的運動參數的計量單位均為脈沖P)。完成參數設置后,便通過引腳Execute啟動該功能塊。在功能塊的執行過程中采用MLUTIPROG軟件中的邏輯分析器繪制兩個軸的位移曲線(見圖4)和合速度曲線(見圖5)。由兩圖可知,兩個軸在相同的時間內,根據設置的的目標位置和速度準確平穩的完成了運動,成功實現了該多軸功能塊。

圖4 兩軸的位移曲線

圖5 合速度曲線

5 控制系統的應用

貼標機的核心部分是將標簽貼到傳送帶上的工件的貼標機構。標簽輸送軸是間歇性運動,當傳感器檢測到工件即將到達貼標位置,先啟動延時,延時結束后軸開始轉動。當移動距離達到標簽的長度距離后便停止,等待下一次觸發信號。為了保證標簽整齊有效的貼在工件上,工件輸送軸的速度和標簽輸送軸的速度必須相同,否則會出現標簽錯位和漏貼等現象。因為貼標簽的過程中涉及2個軸的運動,屬于多軸控制,先使用Assistant軟件為兩軸賦值,標簽輸送軸的軸號為1,工件輸送軸的軸號為2。程序中使用一個定時器(TON_1)來觸發標簽輸送軸運動,定時器的定時時間為傳感器與貼標位置的距離(SensorDistance)除以軸的速度(Velocity)所得的值,這樣就能保證工件到達貼標位置時標簽軸剛好啟動。工件輸送軸的運動由PLCopen標準功能塊MC_Velocity實現,而標簽輸送軸的運動由PLCopen標準功能塊MC_MoveReltive實現,設置其輸入引腳Distance的值為標簽的長度(LableLength)。詳細的PLC程序執行流程如圖6所示??梢?,采用本控制系統編寫的PLC程序十分簡單,只需調用幾個功能塊便能完成復雜的運動控制。即便是沒有任何開發經驗的人,學習簡單的PLC編程后,就能進行獨立的程序開發控制。

圖6 PLC程序流程圖

6 結束語

根據得到的MC_MoveLinearAbsolute功能塊的兩軸位移和合速度圖,充分證明了在Assistant的配合下,電機運行平穩,成功實現了PLCopen標準功能塊中的多軸功能塊,展示了控制系統優越的性能。最后開發的貼標機控制程序,則證明了本控制系統圖形化編程的優勢,不僅編程簡單,大大提高了程序的開發效率。同時多軸控制功能強大,只需對結構體AXIS_REF中的AxisNo賦予不同的值,便能同時控制多達32個軸。但本控制系統只在ZYNQ-Soc(2個A9內核+1個FPGA)+DDR3+EMMC為核心[10]構成的運動控制器上驗證了其可行性,下一步將對本控制系統的跨平臺移植進行研究。

猜你喜歡
功能塊單軸編程
編程,是一種態度
元征X-431實測:奔馳發動機編程
單軸壓縮條件下巖石峰后第Ⅱ種類型應力——應變曲線的新解釋
廢舊輪胎橡膠顆?!ね恋膯屋S抗壓特性
編程小能手
紡織機上誕生的編程
如何編寫200SMART程序
單軸旋轉慣性導航系統的水平姿態角誤差修正方法
基于PLCopen的六軸工業機器人運動控制功能塊設計
自定義功能塊編程在反滲透膜自動清洗設備中的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合