來源:博途之友;作者:張浩杰
階段“優(yōu)秀工程師之路
編者說:一次博途之友的群交流時,我問大家:軸控應用庫,大家用的多嗎?工程師作者說:最近剛剛使用上,很方便。使用官方的庫,二次封裝成多重背景數據塊,一個循環(huán)完成所有軸的實例化調用。
馬上請他分享一下應用經驗。

在最近的項目中,我遇到了多軸協(xié)同控制的需求。由于現場工藝要求,單機設備可能需要根據實際情況動態(tài)增減軸數量。如果采用逐個調用獨立指令的方式,不僅后期調試會變得異常繁瑣,而且若不符合PLCopen規(guī)范,還容易導致軸控異常報警,故障排查將十分困難——這種方案顯然不具備可行性。
雖然考慮過自行封裝軸控功能塊,但考慮到需要投入大量時間進行驗證測試,短期內難以保證穩(wěn)定性,這個想法只能暫時擱置。
經過一番調研,我欣喜地發(fā)現了官方提供的標準化軸控庫解決方案。官方庫文件幾乎涵蓋了軸控的所有常見應用場景,主要提供兩種類型的控制庫:LAxisCtrl_PosAxis和LAxisCtrl_DBAnyBased。通過查閱技術手冊發(fā)現,這兩種庫在接口類型和資源占用方面存在明顯差異,后者對系統(tǒng)資源的消耗更大。有了官方認證的標準化軸控庫,不僅完全符合PLCopen規(guī)范,還免去了自行開發(fā)的諸多風險,這讓我對軸控封裝成標準化充滿信心!
按照常規(guī)思路,本打算創(chuàng)建一個FB功能塊,直接調用官方庫中的"LAxisCtrl_PosAxis"模塊。要么將其定義為數組類型,要么自定義包含軸控接口的數據結構再進行數組化(就像處理氣缸實例化那樣簡單直接)。標準化和模塊化是提升開發(fā)效率和維護便利性的關鍵。以氣缸控制為例,引入"最大氣缸數"這一全局常量,實現了氣缸實例化的標準化管理。當設備配置變更需要調整氣缸數量時,僅需修改該常量值即可自動適配所有相關控制邏輯,這種設計理念極大地簡化了系統(tǒng)配置和維護工作。
所有氣缸實例化

主程序調用

然而,實際情況比預期要復雜許多,經過多次試驗驗證,系統(tǒng)在輸入接口管腳處存在以下關鍵限制:
1、不支持對TO_PositioningAxis類型的數組引用,僅允許單個TO_PositioningAxis數據類型;
2、靜態(tài)參數引用功能缺失;
3、無法直接對官方提供的控制庫進行數組化引用。
如果不能循環(huán)引用的話,達不到我的標準化需求,那么做這個塊的意義就不大了。于是我又測試一個LAxisCtrl_DBAnyBased的庫,結果還是一樣不支持。但發(fā)現了一種新的數據類型DB_ANY,一查原來是萬能的數據類型。那么能不能指向TO_PositioningAxis呢?答案是可以的,但是不能直接使用,需要轉換一下。


經過測驗發(fā)現"LAxisCtrl_PosAxis"庫只能創(chuàng)建為靜態(tài)參數,那么新思路:先封裝一個單軸帶參數引腳的FB塊>>再創(chuàng)建一個FB軸實例塊對其單軸FB塊循環(huán)調用>>最后主程序調用FB軸實例塊。
基礎層:封裝單軸控制FB塊,集成所有運動控制、狀態(tài)監(jiān)控和參數配置功能
管理層:開發(fā)軸管理FB塊,通過循環(huán)調用機制管理多個單軸實例,提供統(tǒng)一接口
應用層:主程序只需調用管理塊,通過修改’gi_AxisMAXNo’常量即可調整軸數
一、基礎層:單軸FB塊的封裝

二、管理層:FB軸實例化

三、應用層:
1、Main調用

2、軸限位
值得注意的是,若是想開放軟限位值,只能通過Axis DB塊下PositionLimits_SW結構體實現。


-
模塊
+關注
關注
7文章
2837瀏覽量
53291 -
運動控制
+關注
關注
5文章
821瀏覽量
34537 -
數組
+關注
關注
1文章
420瀏覽量
27360
原文標題:一個FOR循環(huán)完成多個伺服軸的實例化方法
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
LabVIEW一個程序中放置多個多個While循環(huán),其中的一個循環(huán)執(zhí)行緩慢
如何使用動態(tài)事件停止多個while循環(huán)
使用ODDR轉發(fā)多個時鐘是否必須實例化幾個ODDR?
請問如何在Vivado項目中實例化hdl系統(tǒng)生成器輸出的多個實例》
FANUC伺服軸的屏蔽
伺服軸的屏蔽方法
一種自動生成循環(huán)摘要的方法
如何使用一個PLC控制兩個或多個伺服電機同步運行
一個FOR循環(huán)完成多個伺服軸的實例化方法
評論