陈雄姿,龙 辛,黄 波,朱方镇,戴建利
(1.湘潭大学 智能计算与信息处理教育部重点实验室,湖南 湘潭 411105;2.湘电风能有限公司,湖南湘潭 411101;3.长沙优利泰克信息技术有限公司,湖南 长沙 410000)
软PLC基于计算机网络技术,具有极强的网络通信能力和通用性能,它可以支持多种远程终端,这就需要一种通用的协议来实现分布式不同远程终端间的网络通信。RPC(remote procedure call,远程过程调用)是一种不需要了解底层网络技术,只需通过网络从远程计算机程序上请求服务的建立在TCP或者UDP之上的应用层协议,用户只需按照协议规定对数据包进行打包、解包即可实现通信。本文针对软PLC与不同平台进行通信的需求,采用SUN公司的ONC/RPC协议来实现PLC控制系统中RPC库的开发,通过RPC库提供远程数据访问接口,集成身份验证,搭配远程管理终端实现跨平台通信。
采用3S公司的CoDeSys软件为开发环境,以结合了PowerPC处理器的VxWorks实时操作系统为运行环境,构成嵌入式软PLC系统中RPC的应用平台。现有的远程管理终端是HMI监控系统和上位机软件,使用ONC/RPC协议与VxWorks操作系统进行通讯。整个嵌入式软PLC系统的结构如图1所示。
RPC是一种典型的C/S模式,服务端分布在PLC各模块上,客户端分布在远程管理终端。客户端请求服务,服务端响应请求。首先,由客户端进程对包含本地过程调用的相关信息进行打包,通过网络调用程序发送给服务端,请求一次过程调用服务,然后客户端进程阻塞,进入响应等待过程。而服务端进程处于阻塞状态,直到接收到一个远程过程调用请求。服务端对数据包进行解析,获得服务请求参数的同时进行相关处理,将得到的运算结果进行打包返回给客户端,然后服务端程序进入一个休眠状态,等待下个服务请求的到来。客户端进程根据得到返回结果继续执行程序。图2对一次远程过程调用进行了详细的说明。
图1 嵌入式软PLC系统的结构
PLC控制器中的RPC服务系统结构见图3,分为底层PLC服务模块和上位机客户模块。底层PLC服务模块根据标准 ONC/RPC编写,已实现Login、MIO、HMI子RPC模块,根据以后的需求,可继续添加其他功能的RPC模块。RPC模块通过VxWorks集成的ONC/RPC组件,可提供相应的RPC调用功能,同时VxWorks还具有高效任务管理、快速中断响应等优点,保证了RPC调用过程中的实时性。上位机与PLC间通过TCP/IP或者UDP协议进行通信。
图2 ONC/RPC标准流程
图3 RPC服务系统结构
登录模块的设计应满足RPC的服务器端和客户端安全共享资源的需求,为RPC的应用提供安全保障。它包含初始化读取用户名密码配置信息和身份验证主调函数等,为了降低登录模块数据存储和验证的时间消耗,保证整个系统的实时性,采用了uthash这种最高效、最简单的哈希实现结构,其处理流程如图4所示。
用户身份信息HASH表结构定义如下:
会话信息HASH表结构定义如下:
安全登录模块服务器端主程序如下:
安全登录模块客户端主程序如下:
图4 登录模块初始化以及调用流程
MIO模块是供远程RPC调用的封装层,它基于底层MIO_LIB库而设计,MIO_LIB库主要为PLC控制系统提供统一的硬件模块操作接口,包括数据的传输、状态检测、配置信息的读取更换等,用于支持上位机对硬件模块的控制、管理、监控,实现IO通道值读写、重启PLC模块、读取和设置PLC时间、获取通道状态等功能。该模块集成登录模块身份验证功能,实现了简单的身份有效性校验。最上层是标准ONC/RPC调用接口,在身份验证获许通过后,根据RPC客户端传入的参数去寻找并执行mio函数,并将执行结果通过RPC返回给客户端。其调用实现流程见图5。
图5 MIO RPC库调用实现流程
其中,mio封装函数有:mio_getvalue封装函数、mio_reboot封装函数、mio_reboot封装函数、mio_geterror封装函数等。
MIO模块服务器端程序完成的工作主要是在调用mio封装库之前先做一次有效性判断,即是否登录,再根据传入的参数来调用不同的mio封装函数。
MIO模块客户端程序完成的工作主要是在安全登录之后构建MIO库请求包,并填充登录句柄、底层MIO函数名、参数数据格式、卡号、通道号等。请求包如下:
然后将 mio_input作为参数传入 mio_client.rpc_mio_funcall_1(mio_input)中,获取 mio数据,并保存。
HMI模块是为HMI触摸屏程序开发的底层数据采集模块,且HMI触摸屏是安装在风机里面,在安全系数上已经得到足够的保证,可以不集成身份验证功能。RPC取值调用入口函数和RPC写值调用入口函数是RPC自动生成的接口函数,组成了RPC服务调用的最上层进口。根据RPC客户端传入的参数去调用本地HMI读写函数,获取底层IEC变量或者写入IEC变量,并将执行结果通过RPC返回给客户端。该模块程序调用流程如图6所示。
图6 HMI RPC模块调用流程
HMI服务端主程序主要完成的工作是根据传入的IEC变量名去调用该变量的读取函数,如果调用成功则返回变量值。
HMI客户端主程序如下:
用Eclipse框架开发的上位机软件通过调用RPC库来获取PLC控制系统上AIO模块数据的实验过程如下:首先进入上位机软件的登录界面,输入客户端的用户名和密码,如图7所示;通过身份验证之后,进入模块选择界面,选择AIO模块,如图8所示;AIO的数据实时地上传到上位机并显示,如图9所示。嵌入式软PLC控制系统实物见图10。
图7 登录界面
图8 模块选择界面
图9 数据显示界面
图10 PLC控制系统实物照片
本文设计与实现的RPC服务系统能很好地满足嵌入式软PLC控制系统中跨平台通信的需求,凭借其在通信方面的实时可靠,目前已经在风力发电控制系统中发挥了很好的作用,并且具有良好的开放性与可扩展性,可根据实际需求添加其他功能的RPC模块,为嵌入式软PLC工程实践中的远程多平台通信奠定了基础。
[1] Andrew S Tanenbaum.分布式操作系统[M].杨剑峰,常晓波,李敏,译.北京:电子工业出版社,2008.
[2] 许琼,蔡文皓.一种嵌入式RPC的设计与实现[J].电子设计工程,2011,19(5):127-129,133.
[3] 刘巍巍,软PLC技术及开发系统研究[J],科技信息,2010(10):32-32.
[4] Dissanaike S,Wijkman P,Wijkman M.Utilizing XML-RPC or SOAP on an embedded system[G]//Proc of Distributed Computing Systems Workshop.[s.l.]:[s.n.],2004:438-440.
[5] 刘家芬.安全协议形式化分析中认证测试方法研究[D].成都:电子科技大学,2008:5-10.