一种基于软PLC技术的通用可编程软件系统设计及实现
- 关键词:软PLC技术,IEC61131-3,软件系统
- 摘要:针对传统PLC难以构建开放硬件体系结构及性价比增长缓慢的缺点,提出了一种基于软PLC技术的通用可编程软件系统。该系统不仅符合IEC61131-3标准,支持标准定义的5 种编程语言,而且用软件实现传统硬件PLC 的控制功能。
一种基于软PLC技术的通用可编程软件系统设计及实现
黄兵1 郭月明2 计小军3
(1.2.3北京中油瑞飞信息技术有限责任公司 北京 100007)
摘要:针对传统PLC难以构建开放硬件体系结构及性价比增长缓慢的缺点,提出了一种基于软PLC技术的通用可编程软件系统。该系统不仅符合IEC61131-3标准,支持标准定义的5 种编程语言,而且用软件实现传统硬件PLC 的控制功能。
The design and realization of general programmablesoftware system based on soft PLC technology
Huang Bing1 Guo Yueming2 Ji Xiaojun3
(1.2.3 Beijing Richfit Information Technology Co., Ltd., Beijing 100007, China)
Abstract: The shortcomings of difficult to build an open hardware system and theslow growth in cost-effective can be solved by a general programmable softwaresystem based on soft PLC technology. The system is not only meetingIEC61131-3 criteria and supporting five kinds of programming languages ,butalso realizing the control function of traditional hardware PLC with software .
关键词:软PLC技术;IEC61131-3;软件系统
Key words:Soft PLC technology;IEC61131-3;Software system
1 引言
传统PLC(Programmable LogicController)因其具有高速度、高性能和高可靠性在工业控制领域得到了广泛应用[1]。然而,传统PLC由于生产厂商众多、产品互不兼容,造成难以构建开放的硬件体系结构;另外,PLC性价比增长缓慢的特点也制约了其发展[2-3]。近年来,随着计算机技术的迅速发展以及PLC方面国际标准IEC61131的制定,一项新的控制技术——软PLC(SoftPLC)技术迅速发展。所谓软PLC,即以通用操作系统和PC作为硬件支撑平台,利用软件实现传统硬件PLC的控制功能。或者说,将PLC的控制功能封装在软件内,运行于PC环境或嵌入式操作系统环境中。这样的控制系统不仅提供了PLC的相同功能,而且具备了PC机的各种优点[4]。
本文实现了一个应用于中大型控制应用场合的通用PLC可编程软件系统。该系统基于软PLC技术,且符合IEC61131-3 标准,支持标准定义的5 种编程语言。
2 通用PLC可编程软件系统的组成
通用PLC可编程软件系统实现软PLC中的运行系统,整个系统由系统软件和控制器软件组成。
2.1 系统软件
系统软件主要包括bootloader、kernel和rootfs,其主要作用是构建一个基本的嵌入式linux[5-8]操作系统,为控制器软件提供运行环境。bootloader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为最终调用操作系统内核准备好正确的环境。kernel通过文件系统来管理事件的调度和同步、进程间的通信(消息传递)。文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;进入一个文件系统,首先要挂载(mount)文件系统且挂载(mount)文件系统时必须指定一个挂载点。Linux中,rootfs是必不可少的。PC上主要实现有ramdisk和直接挂载HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从HD启动,而是从Flash启动,最简单的方法是将rootfs下载到RAM的RAMDisk,较复杂的是在Flash 上分区,并构建JFFS2 等文件系统。
2.2 控制器软件
控制器软件由eCLR模块和IO驱动模块组成,使用单一Makefile完成编译工作,编程语言采用C和C++,交叉编译工具为arm-linux-gcc/g++,最终生成名为elr22的可执行程序。该程序总共包含一个库文件和114个C/C++文件。
2.2.1 eCLR模块程序基本流程分析
eCLR模块执行PLC应用程序并创建任务。在每个任务的开始从输入区获取输入状态,经过运算后,将结果存放在输出区,其流程图如图1所示。
由上图可知,eCLR模块程序基本流程可概括为7个步骤,分别是
①创建控制器对象,并为其分配堆资源;
②设置控制器对象基本信息;
③创建APP域用于运行PLC应用程序,设置数据堆、代码堆和应用程序流;
④将APP域和pcoslib进行钩挂,便于eCLR解析PLC应用程序;
⑤初始化并加载IO驱动库;
⑥建立SOCKET,便于与运行开发环境的宿主机进行联系;
⑦顺序执行PLC应用程序代码。
2.2.2 IO模块程序基本流程分析
IO驱动模块的任务是按照PLC应用程序的需要将对应的IO设备状态存放在输入区,并将输出区的结果输出到IO模块中,整个IO驱动模块如图2所示。
由图2可知,IO驱动模块包括本地IO和非本地IO的驱动。本地IO指直接连接在本地CPU的IO端口,包括AI/AO、DI/DO和PI;非本地IO指通过MODUS TCP/RTU、ZIGBEE、CAN等有线/无线方式与RTU进行通信的外接端口与仪表设备。
eCLR规定了对应IO驱动接口文件的格式,相关驱动接口文件由一个C#模板通过工具生成。目前除eCLR模块代码外剩余的代码基本上都是IO驱动相关的代码,每种IO驱动对应于三个文件,其形式为XXX-cli.cpp、XXX.cpp、XXX.h,对应于上图的IO接口层。XXX-cli.cpp对于该种IO驱动库的元数据信息,通过调用相应INIT和loadlibary函数完成该种驱动的注册或者钩挂,使得PLC应用程序需要读取的IO组和下面的驱动对应起来。当对IO组的IO进行操作时,相应的IO驱动就会被调用。XXX.cpp和XXX.h实现对当前驱动的类定义,文件里提供了相应IO驱动的成员函数供实现,这些成员函数包括相应IO的读写和一些辅助函数。
目前代码中已经实现的IO接口包括
l 本地IO AI、AO、DI、DO和PI
l 非本地IO ZIGBEE 、MODBUS和REMOTE(CAN)
由于本地IO可即时获取,所以每当PLC任务来读取时,可通过中间层直接调用BSP库中接口函数操作硬件获取。由于非本地IO具有一定的数据间隔,因此需通过共享内存的方式来实现。其实现原理为:对每种类型的非本地IO创建一对共享内存(分为I区和Q区),同时创建一个对应的采集线程对数据进行采集,并将采集到的数据存储在共享内存上供PLC应用程序读取。
3 通用PLC可编程软件系统的运行流程
整个通用PLC可编程软件系统的运行过程如图3所示。
系统上电后,首先运行bootloader,它对必要的硬件进行初始化后,将内核镜像加载到主存,并将控制权交给内核,完成引导和加载。内核启动后会挂载根文件系统rootfs,并执行根文件系统下的init程序创建用户空间的第一个进程。Init进程会读取/etc/init.d/rcS脚本文件启动控制器软件。当前bootloader采用u-boot实现,kerenl采用2.6.39版本,rootfs使用busybox构建。
4 结束语
软PLC技术简化了工厂自动化的体系结构,把控制、通信、人机界面以及各种特定的应用全都合为一体,运用于同一个硬件平台上。它相对于传统PLC,以其开放性、灵活性和较低的价格占有很大优势。本文提出的基于软PLC技术的可编程软件系统完全符合IEC61131-3标准,支持标准定义的5 种编程语言,可广泛应用于机械制造、汽车和过程自动化行业。
参考文献:
[1] 黄延延,林跃等.软PLC技术研究及实现[J].计算机工程,2004,30(1).
[2] 罗燕华等.一种软PLC技术的研究及实现[J].计算机与数字工程.2007.35(2).
[3] 周峰等. 软件PLC 编辑系统的设计与实现[J]. 计算机工程与应用. 2005. 41(7).
[4] 彭瑜.PC控制的新近进展世界仪表与自动化[J],2001.513:14-22.
[5] 田泽.嵌入式系统开发与应用[M].北京:北京航空航天出版社,2005:1-133.
[6] 魏忠、蔡勇、雷红卫著,嵌入式系统开发详解[M].北京:电子工业出版社,2003.
[7] AlessandroRubini. Linux Device Drivers [M]. O’Reilly&Associates,Inc. 1998.
[8] Neil Matthew, Richard Stones.Beginning Linux Programming, Third Edition. 2004.