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