來源:博途之友;作者:張浩杰
階段“優秀工程師之路
編者說:一次博途之友的群交流時,我問大家:軸控應用庫,大家用的多嗎?工程師作者說:最近剛剛使用上,很方便。使用官方的庫,二次封裝成多重背景數據塊,一個循環完成所有軸的實例化調用。
馬上請他分享一下應用經驗。
在最近的項目中,我遇到了多軸協同控制的需求。由于現場工藝要求,單機設備可能需要根據實際情況動態增減軸數量。如果采用逐個調用獨立指令的方式,不僅后期調試會變得異常繁瑣,而且若不符合PLCopen規范,還容易導致軸控異常報警,故障排查將十分困難——這種方案顯然不具備可行性。
雖然考慮過自行封裝軸控功能塊,但考慮到需要投入大量時間進行驗證測試,短期內難以保證穩定性,這個想法只能暫時擱置。
經過一番調研,我欣喜地發現了官方提供的標準化軸控庫解決方案。官方庫文件幾乎涵蓋了軸控的所有常見應用場景,主要提供兩種類型的控制庫:LAxisCtrl_PosAxis和LAxisCtrl_DBAnyBased。通過查閱技術手冊發現,這兩種庫在接口類型和資源占用方面存在明顯差異,后者對系統資源的消耗更大。有了官方認證的標準化軸控庫,不僅完全符合PLCopen規范,還免去了自行開發的諸多風險,這讓我對軸控封裝成標準化充滿信心!
按照常規思路,本打算創建一個FB功能塊,直接調用官方庫中的"LAxisCtrl_PosAxis"模塊。要么將其定義為數組類型,要么自定義包含軸控接口的數據結構再進行數組化(就像處理氣缸實例化那樣簡單直接)。標準化和模塊化是提升開發效率和維護便利性的關鍵。以氣缸控制為例,引入"最大氣缸數"這一全局常量,實現了氣缸實例化的標準化管理。當設備配置變更需要調整氣缸數量時,僅需修改該常量值即可自動適配所有相關控制邏輯,這種設計理念極大地簡化了系統配置和維護工作。
所有氣缸實例化
主程序調用
然而,實際情況比預期要復雜許多,經過多次試驗驗證,系統在輸入接口管腳處存在以下關鍵限制:
1、不支持對TO_PositioningAxis類型的數組引用,僅允許單個TO_PositioningAxis數據類型;
2、靜態參數引用功能缺失;
3、無法直接對官方提供的控制庫進行數組化引用。
如果不能循環引用的話,達不到我的標準化需求,那么做這個塊的意義就不大了。于是我又測試一個LAxisCtrl_DBAnyBased的庫,結果還是一樣不支持。但發現了一種新的數據類型DB_ANY,一查原來是萬能的數據類型。那么能不能指向TO_PositioningAxis呢?答案是可以的,但是不能直接使用,需要轉換一下。
經過測驗發現"LAxisCtrl_PosAxis"庫只能創建為靜態參數,那么新思路:先封裝一個單軸帶參數引腳的FB塊>>再創建一個FB軸實例塊對其單軸FB塊循環調用>>最后主程序調用FB軸實例塊。
基礎層:封裝單軸控制FB塊,集成所有運動控制、狀態監控和參數配置功能
管理層:開發軸管理FB塊,通過循環調用機制管理多個單軸實例,提供統一接口
應用層:主程序只需調用管理塊,通過修改’gi_AxisMAXNo’常量即可調整軸數
一、基礎層:單軸FB塊的封裝
二、管理層:FB軸實例化
三、應用層:
1、Main調用
2、軸限位
值得注意的是,若是想開放軟限位值,只能通過Axis DB塊下PositionLimits_SW結構體實現。
-
模塊
+關注
關注
7文章
2788瀏覽量
50362 -
運動控制
+關注
關注
4文章
720瀏覽量
33553 -
數組
+關注
關注
1文章
420瀏覽量
26540
原文標題:一個FOR循環完成多個伺服軸的實例化方法
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
FANUC伺服軸的屏蔽

評論