摘" 要:为有效解决传统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 NXPs 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