










摘" 要:為有效解決傳統PLC存在的缺陷,以及國內PLC市場長期被國外廠商壟斷,進而導致PLC供貨周期漫長、價格昂貴的問題,經深入研究,設計了一種基于CoDeSys的嵌入式軟PLC系統。該系統采用NXP的MIMXRT1176CVM8A微處理器為主控芯片,實時操作系統采用FreeRTOS,同時搭載CoDeSys實時運行系統,以此實現符合IEC 61131-3標準的軟PLC系統。經嚴格試驗驗證,此設計的嵌入式軟PLC系統具有顯著的開放性、通用性,在工業控制領域展現出較好的應用價值。
關鍵詞:CoDeSys;嵌入式;軟PLC
中圖分類號:TP273+.5 文獻標識碼:A 文章編號:2096-4706(2025)04-0026-06
Design and Research of Embedded Soft PLC System Based on CoDeSys
HE Yunfei
(China Railway Construction Heavy Industry Co., Ltd., Changsha" 410100, China)
Abstract: In order to effectively address the deficiencies existing in traditional PLCs, and the issue that the domestic PLC market has long been monopolized by foreign manufacturers, which consequently leads to a long supply cycle and high prices of PLCs, an in-depth study has been carried out and an embedded soft PLC system based on CoDeSys is designed. This system uses NXP’s MIMXRT1176CVM8A microprocessor as the main control chip, adopts FreeRTOS as the real-time operating system, and is equipped with the CoDeSys real-time running system simultaneously, so as to realize a soft PLC system that complies with the IEC 61131-3 standard. Through strict experimental verification, the designed embedded soft PLC system has remarkable openness and versatility, and demonstrates good application value in the field of industrial control.
Keywords: CoDeSys; embedded; soft PLC
0" 引" 言
隨著工業技術的發展,PLC已成為工業控制領域不可或缺的核心技術之一。然而傳統PLC存在諸多缺陷,不同廠家PLC軟硬件體系架構區別很大,編程語言和指令系統都存在差異,使得傳統PLC擴展性差,兼容性差,維護及開發成本高。隨著計算機技術和工業現場總線的發展,這種傳統PLC在工業控制領域難以滿足要求[1]。
軟PLC技術以程序邏輯的形式來實現傳統PLC的基本功能,可以彌補傳統PLC擴展性與兼容性等缺點[2-4]。IEC 61131是PLC編程技術的國際標準,其中IEC61131-3對PLC的編程提供了一套統一的語法和規范,在IEC 61131國際標準的出臺,掀起了軟PLC技術研究的高潮。IEC61131規范的編程系統獨立于具體的目標系統,可以運行與不同的PLC系統,這種跨平臺兼容性使得程序代碼在目標平臺可重復使用[5-6]。
本文結合嵌入式技術和PLC技術,設計了一種基于CoDeSys的嵌入式軟PLC系統,系統的主控芯片采用NXP的MXRT1176CVM8A微處理器,任務調度的操作系統采用FreeRTOS,CoDeSys實時運行系統用來實時調度用戶程序執行,同時集成以太網通信技術實現數據的傳輸控制。
1" 硬件系統設計
系統硬件總體結構如圖1所示,主控芯片采用NXP的i.MX RT系列32位微處理器MIMXRT1176CVM8A,該微處理器采用高達800 MHz的Arm Cortex-M7內核和主頻400MHz的Cortex-M4內核,外設資源豐富,具有強有力的運算能力,滿足硬件系統所需的資源。外圍模塊包括電源模塊、電源檢測模塊、撥碼開關模塊、指示模塊、RTC模塊、JTAG模塊、存儲模塊和通信模塊。
電源模塊通過轉換電路給硬件系統提供不同的供電電壓要求;電源檢測模塊用于微處理器檢測系統供電的通斷狀態,以實現對掉電狀態下的數據保存的功能;撥碼開關模塊采用三態開關和微處理器的GPIO連接,三種不同的狀態,以實現對用戶程序的啟動、停止以及系統的復位操作;指示模塊設計三個指示燈,通過GPIO和微處理器連接,通過控制指示燈的亮、滅或閃爍分別來指示電源狀態、錯誤診斷指示和用戶程序運行狀態;RTC模塊選用RX8010SJ芯片,用于提供系統的日期和時間信息,同時增加紐扣電池,用于在斷電下持續給RX8010SJ芯片供電保持芯片參數不丟失;JTAG模塊采用SWD模式,用于系統的仿真調試;存儲模塊外擴FLASH、SDRAM和SD,其中FLASH用于存儲微處理器的系統固件;SDRAM用于存儲用戶程序的代碼、數據等;SD以文件的形式存儲用戶程序、掉電保持性數據和系統參數。
1.1" 電源模塊設計
硬件系統采用24 V直流電壓供電,如圖2所示。為了保護硬件系統,電路增加防反接保護和過流保護功能,同時為了降低電源對其他器件的電磁干擾,提高設備的性能和可靠性,電路增加濾波模塊,抑制高頻干擾,減少對設備的電磁干擾現象。電路增加超級電容,在系統上電后對超級電容進行充電,當系統斷電后,超級電容在短時間內持續放電,用于微處理器檢測到系統掉電后,保證微處理器有足夠的運行時間來保存用戶程序的保持性數據[7]。
硬件系統所需要的供電電壓包括5、3.3 V和1.8 V,電路上采用TPS54335ADDAR芯片將24 V轉5 V,采用MP2143DJ-LF-P芯片將5 V轉3.3 V,采用TLV75718PDBVR芯片將3.3 V轉1.8 V,得到硬件系統所有的供電電壓。
1.2" 電源檢測模塊
電源檢測模塊通過比較器電路以及基準電壓2.5 V進行比較輸出,如圖3所示。比較電路的輸出引腳PWR_DETECT_24 V和微處理器的GPIO相連,微處理器采用中斷方式檢測GPIO,當下降沿觸發中斷的狀態下,則表示電源已斷電。基準電壓通過TL431AIPK三端可控精密基準芯片產生高精度的基準電壓2.5 V。
1.3" 存儲模塊設計
存儲模塊包括FLASH、SDRAM和SD。FLASH采用IS25WP128串行閃存,采用SPI接口Quad模式與微處理器的FLEXSPI連接,供電電壓為1.8 V,如圖4所示。
SDRAM的設計選用W9825G6KH芯片,W9825G6KH共有4個L-Bank,每個L-Bank有4 MB存儲單元,每個存儲單元大小是16 bit,容量為32 MB。為了實現每個周期傳輸數據寬度32位,設計上采用兩片W9825G6KH芯片組合實現。SD卡是一種基于NAND Flash設計的存儲介質,體積小、數據傳輸速度快且支持熱插拔。SD卡支持的通信模式有SPI總線模式和SDIO總線模式,SDIO總線模式有4根數據線,而SPI總線模式只有一根數據輸入接口,采用SDIO總線模式讀寫SD卡效率要比SPI總線模塊更加快,在設計上采用SDIO總線模式設計。
1.4" 通信模塊設計
通信模塊采用以太網通信方式,電路設計上選用RTL8211FDI網口PHY芯片來實現以太網的連接,如圖5所示。微處理器通過MDIO接口和PHY芯片相連,用來實現對PHY芯片的參數配置和管理功能。微處理器和PHY芯片之間的數據通信采用RGMII接口連接。PHY芯片的差分信號通過隔離變壓器轉換接入RJ45提供給用戶使用。
2" 軟件系統設計
軟件系統功能設計上要求實現CoDeSys編程工具通過以太網連接到PLC系統,CoDeSys編程工具將編譯后的用戶程序下載到系統內,系統能夠實時的執行所下載的用戶程序,CoDeSys編程工具能夠在線調試監控用戶程序的執行狀態,同時SD支持保存用戶程序和保持性數據,在系統上電后,能夠自動加載用戶程序執行。為了滿足以上功能要求,軟件系統設計劃分為驅動層、系統層、組件層和應用層,如圖6所示。
驅動層實現所有的硬件驅動,提供接口通信驅動接口。系統層采用輕量級實時操作系統FreeRTOS,用于實現軟件系統的多任務管理、時間管理、信號量、消息隊列、內存管理等功能,FreeRTOS配置成時間片搶占式工作模式,高優先級的任務自動搶占優先級低的任務執行,當任務優先級相同的狀態下,利用操作系統滴答時鐘節拍切換任務的執行,以此來保證任務執行的實時性要求[8]。
組件層包括LwIP、Fatfs和CoDeSys Run Time System(RTS)。LwIP是一種輕量化的TCP/IP協議棧,占用少量的RAM資源實現較完整的TCP/IP協議棧,用于滿足以太網的傳輸控制[9-10]。Fatfs是一種專用于嵌入式系統而設計的通用的FAT文件系統,便于系統對SD卡文件的讀寫操作。RTS是3S公司設計的符合IEC61131-3標準的實時運行系統,它提供了一種可靠高效的運行環境,采用搶占式調度算法,能夠實時快速精準的執行用戶程序的任務調度,確保用戶程序在實時任務規定的時間內處理,從而達到實時應用的要求[11-12]。
應用層除RTS調度的用戶程序的執行,還實現了掉電保存、系統參數配置、NTP授時、撥碼開關和診斷指示功能。掉電保存功能用于系統在檢測到供電電源斷開的狀態下,及時將用戶程序的保持類型數據(RETAIN和PERSISTENT)保存到SD卡;系統配置參數用于上位機配置以太網的通信參數;NTP授時用于周期性向NTP服務器對時來校正RTC的時間;撥碼開關用于微處理器檢測開關狀態操作用戶程序運行、停止或系統復位;診斷指示用于系統自檢,檢查系統的異常情況,通過指示燈指示運行狀態。
軟件系統的開發是基于NXP的微處理器MIMXRT1176CVM8A的M7核執行的,NXP提供了一套完整的軟件開發工具和軟件開發工具包(SDK),其中軟件開發工具采用的是MCUXpreesso IDE v11.6,SDK采用的是SDK_2_12_1_MIMXRT1176,如圖7所示。
SDK提供了一套靈活的外設驅動程序,用戶直接調用驅動接口實現驅動的設計開發,同時SDK包含FreeRTOS、LwIP和Fatfs等中間件,簡化了嵌入式應用程序的開發。在軟件系統開發過程中,將SDK導入軟件開發工具里創建工程,選擇所需的驅動程序、FreeRTOS、LwIP和Fatfs完成工程創建。MCUXpresso軟件開發工具提供了時鐘、引腳和外設配置的界面,通過配置界面完成所有外設的驅動程序,然后根據實際的功能需求,完成CoDeSys實時運行系統以及應用功能的設計開發。
2.1" 實時運行系統的設計
在CoDeSys應用開發中需要在CoDeSys編程工具添加設備描述文件,設備描述文件是一種用戶描述硬件特性的XML文件,CoDeSys編程工具只有在添加設備描述文件后,才可以在添加的設備中找到對應的設備組件,XML文件所描述的硬件特性必須和RTS所支持的組件特性保持一致,否則會出現RTS組件不可用的情況。
實時運行系統RTS是以不同組件的形式構成,每個組件提供標準的函數接口實現特定的功能,組件和組件之間通過函數接口實現通信。RTS利用這種組件模塊化的設計形式可單獨對不同的組件進行開發,降低系統的開發難度[13-15]。
為了保證RTS組件的完整性,通過引導工具RtsConfigurator選擇所需要的組件和所依賴的組件,通過工具將組件自動生成組件代碼,并添加到工程。RTS提供了完整的基礎組件和系統組件,每種組件包括*Dep.h、*.c和*itf.h三個文件,*Dep.h文件描述的是組件的依賴關系,*itf.h描述的是組件的函數接口,*.c文件描述的是函數接口的具體實現。系統組件是用于適配不同的硬件和操作系統所抽象的組件,系統組件提供函數接口,用戶需要根據硬件特性來實現對應的驅動,以達到移植的要求[16]。所添加的系統組件包括SysCpuHandling、SysEvent、SysExcept、SysFile、SysInternalLibDefault、SysMsgQ、SysSem、SysSocket、SysTarget、SysTime、SysTask和SysMem。
SysFile組件用于實現文件的操作;SysSocket組件需要根據LwIP協議棧的特性實現以太網的通信操作;SysTime組件利用硬件定時器資源實現高精度的計時操作;SysTask用于實現多任務的操作,為了保證任務的實時調度性,RTS對所創建的任務進行了等級劃分,設計上需要將RTS的任務等級和FreeRTOS的任務優先級建立映射關系以達到任務優先級的要求。
SysMem組件用于分配存儲資源來存儲用戶程序運行的代碼和數據,用戶程序的存儲區域劃分四個區域:1)分配1 MB,用于存儲用戶程序代碼、常量數據;2)分配512 KB,用于存儲用戶程序的數據、輸入、輸出;3)分配256 KB,用于存儲用戶程序RETAIN類型的保持性數據;4)分配256 KB,用于存儲PERSISTENT類型永久保持性數據。系統的存儲資源包括微處理器片上RAM區和片外區(FLASH、SDRAM和SD),不同的存儲資源讀寫速度存在差異,為了提升用戶程序的執行效率,對用戶程序的區域存放在不同的位置進行了驗證測試,通過重復執行IL語言的LD、AND和ST指令1 000次,計算所消耗的時間,如表1所示。
以上實驗表明,用戶程序的數據存放在片上RAM的狀態下,用戶程序的執行效率最快,而用戶程序的代碼不管存放在片上RAM還是SDRAM,對用戶程序的影響不明顯。由此對系統的需要存儲的資源設計如表2所示,其中SD上存儲的內容用于在系統上電后加載運行的備份內容。
2.2" 系統流程
整個系統軟件采用多任務方式執行,主流程如圖8所示。系統上電后,首先初始化所有驅動,然后初始化系統參數,包括以太網參數和NTP服務參數,在設置參數時,參數被同時存儲于SD卡和FLASH,初始化優先從SD卡讀取配置參數,若兩者均讀取失敗則采用默認參數。在初始化參數后,創建系統軟件的任務,包括rts_task、Tcpip_thread和config_task,rts_task用于初始化RTS組件,循環調度管理所有RTS組件,同時執行周期性NTP對時和診斷指示功能;Tcpip_thread用于實現以太網數據的收發管理;config_task用于實現接收以太網的配置參數并存儲。
RTS組件在rts_task任務初始化,在RTS組件初始化完成后,自動創建BlkDrvUdp、SchedProcessorLoad0、Schedule、TaskGapTask、SchedException任務,BlkDrvUdp用于和CoDeSys編程工具通信,實現用戶程序的下載和在線調試監控;SchedProcessorLoad0用于檢測用戶程序任務執行的負載情況;Schedule用于實現控制用戶程序實時調度;TaskGapTask用于處理調度過程中的空閑時隙;SchedException用于對RTS的異常情況的處理。
RTS初始化后自動加載用戶程序,從SD卡讀取用戶程序進行校驗,在校驗通過的狀態下,將用戶程序讀取到內存,同時讀取掉電保持性數據到內存,創建用戶程序任務并執行。
3" 系統性能測試
本文對軟PLC系統進行了功能性驗證測試,通過網線將PLC和電腦連接,同時配置兩者在相同網段,插入SD卡之后,上電啟動PLC,通過CoDeSys編程工具能夠正常掃描掃PLC設備,下載用戶程序能夠在線監控用戶程序的執行狀態,同時上電后用戶程序自動加載運行。同時對掉電情況下,驗證了數據的保存情況,如圖9所示是示波器測量的掉電的波形數據。
曲線1表示微處理器供電電壓;曲線2表示電源檢測的IO接口電壓值;曲線3表示供電電源的電壓值。首先系統上電,微處理器電壓是3.3 V,電源檢測電壓是3.3 V,供電電源電壓是24 V,在系統正常運行之后突然斷開電源。電源電壓在超級電容放電的作用下緩慢下降,如曲線3。當供電電壓下降到18.8 V的情況下,電源檢測模塊通過比較器比較,輸出電壓由高電平跳變到低電平,即微處理器檢測到電源掉電,記錄檢測掉電時間759.6 ms。在這個時候微處理器還處于正常工作狀態,當電源電壓下降到6.8 V的情況下,微處理器的供電被切斷,見曲線2,微處理器停止工作,記錄時間848.8 ms,從微處理器檢測到電源掉電到停止工作時間為89.2 ms,也就是說保持性數據在檢測到電源掉電后,89.2 ms之內必須保存完畢。經過多次驗證測試,實測掉電保存時間41~53 ms之間,滿足實際要求。
4" 結" 論
本文設計的基于CoDeSys的嵌入式軟PLC系統,實現了CoDeSys用戶程序自動加載運行、下載及在線監控調試功能。通過試驗驗證,系統將嵌入式技術、軟PLC技術及以太網通信技術融合為一體,以IEC61131-3為標準基礎,MIMXRT1176CVM8A為控制核心,搭建的軟PLC系統具有完全開放性、兼容性和擴展性,具有較好的市場應用前景。
參考文獻:
[1] 陳銘.嵌入式軟PLC系統的研究和實現 [J].電子元器件與信息技術,2020,4(4):58-59+68.
[2] 張凱.軟PLC技術在三維虛擬物流生產線的應用研究 [D].綿陽:西南科技大學,2019.
[3] 李方軍.基于軟PLC的嵌入式控制系統設計 [J].電力信息與通信技術,2019,17(6):69-73.
[4] 郭財發,周伯榮.基于嵌入式平臺的PLC系統設計與應用 [J].南京工程學院學報:自然科學版,2022,20(4):31-34.
[5] 譚良良,陳宏君,張磊,等.支持IEC61131-3標準的編程軟件設計 [J].工業控制計算機,2019,32(6):1-3.
[6] 康永玲.基于IEC61131-3標準的嵌入式軟PLC的應用 [J].煤礦機電,2018(4):44-47+50.
[7] 李延法,王科,彭永金,等.基于CODESYS掉電保存數據方法的研究 [J].工業控制計算機,2019,32(11):13-14+17.
[8] 張龍彪,張果,王劍平,等.嵌入式操作系統FreeRTOS的原理與移植實現 [J].信息技術,2012,36(11):31-34.
[9] 張文亮,田沛,劉暉,等.基于FreeRTOS的lwip協議棧的移植與測試 [J].自動化技術與應用,2015,34(11):25-29.
[10] 沈鑫,侯若鵬,毛臻,等.FreeRTOS和LwIP嵌入式設備的以太網通信研究 [J].單片機與嵌入式系統應用,2023,23(7):29-32.
[11] 王麗麗,康存鋒,馬春敏,等.基于CoDeSys的嵌入式軟PLC系統的設計與實現 [J].現代制造工程,2007(3):54-56.
[12] 申超,龍辛,黃波,等.基于CoDeSys的軟PLC標準數據接口研究與實現 [J].機械工程與自動化,2014(1):7-9.
[13] 池煒賓,劉強,李明.工程機械通用控制系統的研究與設計 [J].微型機與應用,2015,34(16):93-96.
[14] 翟源康,蔣毅,安偉,等.基于ARM開發平臺的軟PLC系統設計與實現 [J].機電信息,2023(20):42-45.
[15] 王紫瑞,關旭,冀雯馨.基于CANopen的工程機械控制器設計 [J].成都信息工程大學學報,2020,35(5):487-492.
[16] 郭勇,龔雙,瞿勝,等.通用型工程機械控制器的研究與開發 [J].工程機械,2022,53(10):6-11+170.
作者簡介:賀云飛(1986—),漢族,湖南株洲人,工程師,工學碩士,研究方向:嵌入式系統。
收稿日期:2024-08-20