APP下载

嵌入式Linux软逻辑控制器及其图形开发软件设计

2012-09-19李月恒孙德辉李志军

自动化仪表 2012年10期
关键词:功能块控制程序图形化

李月恒 孙德辉 赵 恺 李志军 李 超

(北方工业大学现场总线及自动化北京市重点实验室,北京 100144)

0 引言

软逻辑控制是一种利用软件实现标准硬件可编程控制器(PLC)基本功能的技术。传统硬件可编程控制器受相应硬件PLC制造商专利技术的限制,具有各厂商产品互不兼容、通用性和可扩展性差等缺陷[1]。采用软逻辑控制技术,可以提供硬件PLC的各种功能,同时具备PC领域的技术优势和价格优势。

目前,软逻辑控制系统实现方案有很多种,如基于PC的实现方案、基于嵌入式控制器的实现方案等。在各种软逻辑控制系统实现方案中,利用嵌入式控制器实现的软逻辑控制以其体积小、功耗低、可靠性高、硬件资源和操作系统可裁剪的优势,在近年来获得日益广泛的应用。

本文基于嵌入式Linux和ARM微处理器构建了一台软逻辑控制器,并开发了一款图形化的编程软件。用户可以在PC机上通过功能块编程方式编写软逻辑控制程序,并编译成二进制代码下载到控制器上直接运行。此外,处理器基于Modbus/TCP协议实现了在线调试以及与人机界面(human machine interface,HMI)交互的功能。

1 系统整体架构

系统整体结构由开发系统和运行系统两个部分组成。开发系统完成软逻辑编程和编译调试的任务;运行系统完成输入信号处理、控制程序执行及控制信号输出等工作。系统整体架构如图1所示。

图1 系统整体架构Fig.1 Architecture of overall system

2 控制器硬件结构

控制器硬件采用核心板、底板结构,可通过I2C接口连接扩展板[2],其硬件结构如图2所示。

图2 控制器硬件结构Fig.2 Hardware structure of the controller

核心板处理器采用Atmel的ARM9芯片AT91RM9200。它是一款高性能的32位工业级ARM9处理器,片上集成了USB、以太网、EBI、MCI、SSC 和 SPI等多种通信接口,主频为180 MHz,内含电源管理控制器 (power management controller,PMC)。该处理器在工业控制及智能仪表等领域内得到大量的应用[3]。控制器底板具有8路数字量输入通道(DI)、8路数字量输出通道(DO)、8路模拟量输入通道(AI)、4路模拟量输出通道(AO)、I2C扩展接口(可扩展I/O模块)、RS-485通信接口及其他功能模块。

3 控制器软件结构

控制器采用嵌入式Linux2.6.21,该内核支持周期为1 ms的抢先式调度策略。嵌入式Linux操作系统的移植,DI、DO、AI、AO驱动程序以及其他外设的驱动程序在本试验之前的研究成果中已经实现[3],在此不再赘述。控制器端的软件架构如图3所示。

图3 控制器软件架构Fig.3 Software framework of the controller

目标代码接收和启动功能由进程NetDaemon实现,基于Modbus/TCP协议的远程监控由进程TcpServd实现。控制逻辑和算法由用户通过在PC机上的图形化编程软件以梯形图的方式编辑完成,并编译成可以直接在控制器操作系统下运行的二进制目标代码。该目标代码由 NetDaemon接收、保存,并启动为进程CtrlProgram。

为实现各进程间的数据共享,利用Linux的POSIX共享的内存机制,分别建立DI量、DO量、AI量、AO量和全局内存变量共享的内存区域,并采用Linux的System V信号量来保证各进程对共享内存区域访问的互斥性[4]。

此外,为使用户控制逻辑和算法中间代码尽可能简化,减少中间代码发生错误的可能性和图形化编程软件的复杂程度,在控制器端单独增加一个输入量扫描和输出控制进程Scanner。该进程根据控制器I/O驱动调用时间确定的固定周期完成DI量和AI量采集,将数据写入到共享内存区域,并从共享内存区域读出DO量和AO量,控制相应输出通道。这样用户控制程序只需直接从共享内存区域读取DI/AI量的值,并将计算得到的DO/AO量写到共享内存即可,不需要再直接调用I/O驱动程序。进程Scanner和用户控制程序之间通过System V二值信号量进行同步[5]。

进程TcpServd提供基于Modbus/TCP协议的远程监控服务[6]。Modbus/TCP数据帧格式如图4所示。

图4 Modbus/TCP数据帧格式Fig.4 Format of Modbus/TCP data frame

Modbus协议定义了一些公共功能码,并允许用户自行定义功能码。TcpServd能够响应的公共功能码有:读输入寄存器功能码0x04、读保持寄存器功能码0x03、写单个输出寄存器功能码0x06以及写多个输出寄存器功能码0x10。

本设计中,DI/DO量在共享内存中的存储单元大小为2 B,占1个寄存器;AI/AO量在共享内存中的存储单元大小为4 B,占2个寄存器。全局内存变量的类型包括 bool、byte、short、unsigned short以及 float这几种数据类型。前面4种数据类型在共享内存中的存储单元大小均为1个寄存器,但变量的取值范围按变量类型不同而各不相同;后一种数据类型的存储单元大小为2个寄存器。

在进程TcpServd中,DI、AI量归为输入寄存器,DO、AO和内存变量归为保持(输出)寄存器。各类型的寄存器地址分配示意图如图5所示。

图5 寄存器地址分配Fig.5 Register address allocation

当TcpServd接收到来自客户端的请求时,应首先检查功能号是否为能够响应的功能号;然后根据请求的起始地址判断是读写何种数据,并根据请求的寄存器数量判断操作的对象寄存器是否超出该类型数据的范围。如果上述检查均通过,则返回相应的寄存器值或对相应寄存器进行写操作。

4 图形化编程软件

传统的嵌入式设备一般都需要用户通过C语言等文字编程语言编写程序,对于采用Linux系统的嵌入式设备,还需要在Linux操作系统下建立交叉编译工具链,对程序代码进行交叉编译,从而得到能够在目标设备上运行的二进制文件。该编程方法对一般用户而言过于复杂,且容易出现各种错误。

本文所设计的图形编程软件旨在为用户提供更直观的功能块图编程方式。该软件将用户编写的功能块形式的控制程序预编译为C语言形式的中间代码,最终编译链接为嵌入式Linux控制器下能够运行的二进制文件并下载到目标控制器中运行[7]。

4.1 图形化编程软件的功能划分

图形化编程软件包括以下9个功能模块:功能块模板库管理模块、功能块功能实现代码编辑模块、控制程序编辑模块、项目管理模块、控制程序预编译模块、编译链接模块、下载模块、离线仿真模块和在线调试模块。

各功能模块具体实现的功能如下。

①功能块模板库管理模块为开发人员或用户提供功能块模板的添加、删除和保存等管理功能。具体功能块的实现代码由开发人员通过功能实现代码编辑模块实现。

②功能块功能实现代码编辑模块为具有一定C语言编程基础的开发人员或用户提供编辑功能块功能实现代码的平台。

③控制程序编辑模块为用户提供功能块程序编辑环境。

④项目管理模块用于管理目标控制器硬件配置,以及项目包含的控制程序、全局变量等信息。

⑤控制程序预编译模块将用户的控制工程和控制程序预编译成C语言形式的中间代码。

⑥编译链接模块负责将开发人员通过功能块功能实现代码编辑模块编写的功能块功能实现代码编译成目标文件,并归档到功能块功能函数库中,或将预编译模块生成的C语言中间代码编译链接为能够在目标控制器平台下运行的二进制代码。

⑦下载模块通过以太网将程序下载到目标控制器。

⑧离线仿真模块用于在PC机平台下进行控制程序的仿真。

⑨在线调试模块与控制器之间建立基于Modbus/TCP协议的通信连接,使用户能够通过以太网在线调节目标控制器的控制程序参数,以取得预期的控制效果。

各功能模块之间的关联关系如图6所示。本软件最重要的2个功能模块是控制程序预编译模块和编译链接模块。

图6 图形编程软件功能模块关联图Fig.6 Conjunction of graphical programming software functional modules

4.2 预编译模块的功能实现

预编译模块首先对用户编辑的控制程序进行错误检查,错误检查通过后,根据控制工程配置信息生成定义头文件,并按照预先设定的控制程序模板生成控制程序主程序文件。控制程序主函数中调用的通用功能函数的目标文件预先归档在静态库comLib.a中,各控制程序函数主体定义在对应的控制程序预编译生成的C语言中间代码文件中。控制程序的预编译流程如图7所示。

图7 控制程序预编译流程图Fig.7 Flowchart of pre-compiling of the control program

预编译模块首先遍历控制程序文件中的所有功能块,将所有只有输入接口没有输出接口的功能块(如DO、AO模块和作为输出节点的内存变量模块等)组成一个输出节点表,并根据输出节点的位置(自上到下、从左到右)进行排序;然后依次应用递归的方法处理输出节点表中的每个功能块和由各级输入节点组成的树型结构;最终生成该控制程序文件的C语言中间代码。

4.3 编译链接模块的功能实现

预编译模块将控制程序预编译成C语言形式的中间代码后,编译链接模块通过Cygwin下构建的交叉工具链,将该中间代码编译为可在目标设备下运行的程序。

Cygwin是由Cygnus Solutions最初开发的许多自由软件的集合,用于在各种版本的Windows操作系统下运行Unix类系统。Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。开发人员可以通过在Cygwin平台下构建交叉编译工具链,实现在Windows平台下编译生成能够在不同类型Linux平台下运行的应用程序。交叉编译工具链可以通过下载源代码程序直接在Cygwin平台下编译得到[8]。

本文针对采用的目标控制器Linux内核和glibc函数库版本,在Cygwin下构建了ARM Linux gcc3.4.3版本的交叉编译工具链。

编译链接模块首先根据工程路径、工程配置信息以及工程包含的控制程序文件信息,在工程路径下生成该工程中间代码的Makefile。Makefile的格式如下。

然后,生成脚本文件,以跳转到工程路径下执行编译链接操作。在Cygwin的启动脚本中添加该脚本文件的执行操作,之后添加退出Cygwin操作的命令行。

完成上述操作后,编译链接模块启动Cygwin,在后台完成控制程序的编译链接操作。

本图形编程软件采用Visual Studio 2008作为开发工具,开发语言采用Visual C++。

5 结束语

基于嵌入式Linux和ARM微处理器,构建了一台软逻辑控制器及其图形化编程软件。用户可以在PC机上通过图形化编程软件以功能块编程方式编写软逻辑控制程序。图形化编程软件将功能块图程序预编译为C语言形式的中间代码,通过Cygwin下构建的交叉编译工具链编译成二进制代码,并下载到控制器上直接运行。此外,本系统还基于Modbus/TCP协议实现了控制程序在线调试以及控制器与人机界面(HMI)交互的功能。

本文实现的软逻辑控制器及其图形化编程软件具有一定的试验应用价值。实际工业应用的控制器结构更加复杂,对编程软件调试功能的要求也更高,要将目前实现的成果投入到实际应用,还需要进行较多后续工作。

[1]李坚强,裴海龙,廖俊.基于Linux系统的软PLC设计[J].制造业自动化,2005,27(11):1 -4.

[2]赵旭,杜红彬,李奇,等.ARM I2C总线接口模块在数据采集中的应用[J].自动化仪表,2006,27(10):23 -25.

[3]霍朝宾.楼宇控制器驱动程序开发及组态设计[D].北京:北方工业大学,2010.

[4]Wall K,Warson M,Whitis M,et al.GNU/Linux编程指南[M].王勇,王一川,林花军,等,译.北京:清华大学出版社,2000.

[5]Stevens W R,Rago S A.UNIX环境高级编程[M].2版.尤晋元,张亚英,戚正伟,译.北京:人民邮电出版社,2006.

[6]Open Modbus/TCP Specification[S].Andy Swales,Schneider Electric,1999.

[7]李慧强,程广河,韩凌燕,等.两种嵌入式PLC执行机制的比较分析与验证[J].自动化仪表,2010,31(1):17 -22.

[8]王兴顺.Cygwin环境下构建 arm-linux-gcc-4.5.0 工具链[J].可编程控制器与工厂自动化(PLC FA),2011(3):84-88.

猜你喜欢

功能块控制程序图形化
基于Arduino图形化编程的教学应用研究
基于PLC的变电站备用电源自动投入装置控制程序的研究
基于IEC61131-3标准运动控制器的设计与应用*
基于PLCopen的六轴工业机器人运动控制功能块设计
LKJ自动化测试系统图形化技术研究
自定义功能块编程在反渗透膜自动清洗设备中的应用
Ovation系统FIRSTOUT和FIFO跳闸首出比较
未成年人刑事案件撤回起诉制度立法思考
重型车辆协同式自适应巡航控制系统的车际通信控制程序和信息交互
网络图形化界面在高速公路机电设施养护管理系统中的应用