1 前言
人机界面产品是工业现场常用的数字显示设备,它通过串行通信接口连接可编程逻辑控制器(Programmable Logic Controller,PLC)等工业设备,利用显示器和触摸屏或按键实现与控制设备的数据交互。由于人机界面操作简单直观,其应用领域和市场份额都在不断扩大。
目前市场上PLC厂家众多,如松下PLC、西门子PLC、三菱PLC。不同PLC产品串行通信协议基本不兼容,甚至同一厂商的不同系列PLC产品协议也不尽相同,如西门子S7-200系列PLC采用PPI协议,三菱FX系列PLC采用Computer Link通信协议,LG系列PLC可以使用两种通信协议:CNET协
议和LOAD协议。诸多PLC串行通信协议,使得人机界面在应用中面临一个问题:如果人机界面设备只能支持一种PLC通信协议,则其应用将被严重局限,其资源也被极大浪费;如果将常见的通信协议全部添加到人机界面,则不可以避免地会占用过多的人机界面内存和FLASH资源,不仅不利于功能扩展,还增加设备的维护难度。
针对上述问题,提出一种通过软件实现通信可重构的方案。该方案将多种PLC控制设备的通信协议实现代码进行独立编写和编译,根据用户选择的控制设备类型,下载特定的协议文件到人机界面存储区,再由人机界面主程序按协议文件组织串行通信数据帧,完成与PLC等控制设备的数据交互。
将以人机界面与PLC串行通信为背景,开发基于Linux平台的触摸屏人机界面,介绍协议可重构理论在人机界面通信程序中的设计方法,以松下FP系列PLC为例,解决人机界面与PLC的可重构通信互联问题。
2 背景描述
2.1 PLC串行通信特性
PLC串行通信层次结构可划分为三个部分:链路层、设备层、数据层。链路层负责数据在通信介质上的传输;设备层完成设备的通信单元数据整理,将数据组合成特定的协议帧;数据层负责对设备层的数据进行后续处理,包括生成显示任务、形成新的通信任务。
PLC串行通信常用的参数包括:波特率、数据位位数、停止位位数、校验方式。可以通过软件修改这些参数的配置以实现不同速率、校验方式的通信。
2.2 基于Linux的人机界面系统结构
Linux作为一款优秀的嵌入式操作系统,具有许多优点:
(1)系统稳定,功能强大,体积小巧,支持多种体系结构的硬件平台,应用软件多,开发工具完善。
(2)成本低廉,只要遵守GPL(General Pubfic License。GNU)的规定,就可以免费获得拷贝。Linux下有同样遵循GPL规定的C、C++、Java等一系列的软件工具开发包,可以极大地降低开发成本。
(3)高度模块化的设计,使得用户定制Linux内核极其方便,驱动程序和其他模块可以在运行时动态的编译添加到内核中啪。
综合考虑人机界面的功能、性能需求及成本,采用Linux作为人机界面嵌入式操作系统是较佳方案。
人机界面的框架系统,可以设计为三大模块:硬件平台、组态软件、嵌入式Linux应用程序Ⅲ。图1给出了人机界面框架结构示意图。硬件系统接收用户输入操作、完成屏幕显示和通信数据收发。组态软件按用户操作将各种被控资源进行组态,绑定用户所选择的协议,下载组态文件和协议文件到人机界面存储区。嵌入式Linux应用程序根据存储设备中的组态文件提取任务,并按协议文件组织和收发通信数据。
图1人机界面系统框架结构图
如何根据串行通信的特点,设计一个具有可重构通信接口的Linux系统,使其适应不同协议的差异,实现数据帧的组织和发送,是本文要解决的关键问题。
3 可重构通信设计
所谓通信可重构是指在明确了通信对象的前提下,给系统重新加载通信协议。如果系统的某一个功能组件是模块化、标准化的,则可以用具有相同接口的、模块化和标准化的可重构组件去替代该组件。对于串行通信,按PLC串行通信层次关系的分析,可以将设备层设计为—个可重构模块,完成数据帧组织和收发。
在设备层中实现可重构通信,首先必须定义重构接口。重构接口的制定需要遵循两个原则:接口最小化原则和信息最大化原则。
信息最大化原则是指通信接口必须充分满足内外信息交流的需要。当接口包含了通信时所有必要的信息时,才能保证人机界面与被控对象能够进行正常的稳定的数据交换。接口最小化原则指接口不能过于复杂,不应带有多余信息,只需要包含通信时必须的数据。接口最小化一方面可以减轻开发和维护的压力,另一方面可以使得二次开发变得更为简单易操作。
这两个原则相互矛盾,但却可以相互统一。如前所述,虽然各个PLC支持的通信协议内容不尽相同,但是通过对PLC的通信协议进行分析和比较,可以提取出重构接口与应用程序层进行信息交换必须具备的内容,包括:
(1)通信命令:表示单元执行的操作类型,包括读写操作。
(2)通信单元站号:表示当前控制设备在网络中的编号。
(3)通信单元类型:分位单元和字节序单元两种。位寄存器用于表示线圈等的位状态。字节/字寄存器用于表示数值寄存器的数值状态。
(4)通信单元地址:通常字节序单元是直接按其字节,字变量的地址作为通信地址,位单元的表示方法稍复杂,部分PLC以位寄存器的地址作为通信地址,还有部分PLC以字节地址加位地址作为通信地址。
(5)通信单元字节数:指—次通信时单元包含的字节数量。
(6)通信单元数值:读写操作时通信单元所赋的数值,读操作时表示单元的当前返回值,写操作时表示将要装入单元的耋瞄。
为保证可重构通信的稳定性,在设备层还需要提供如下的信息:
(1)接收和发送缓冲区地址。
(2)返回帧的帧长,发送帧的帧长。
在发送数据时,设备层根据重构接口中的发送缓冲区的地址,填充缓冲区中的帧数据,数据长度由接口中发送帧帧长确定。在数据接收时,设备层根据返回帧的帧头和返回帧的帧长,接收返回帧的数据,并存放在接口中指定的接收缓冲区地址中。根据上述提取出的信息来定义通信重构接口,足以满足不同PLC串行通信的要求。
在通信时,人机界面嵌入式应用程序的应用层将这些信息提供给设备层,设备层加载特定的协议文件并结合应用层提供的信息,填充数据帧的帧头帧尾、通信命令等字段,组织生成相应的通信数据帧,最后通过链路层将通信数据帧发送到串行通信线路上。当链路层接收到线路上的通信数据帧后,嵌入式应用程序的设备层将按协议文件,去掉数据帧的帧头帧尾等附加信息,然后判断其通信命令,并分析通信单元类型、地址和数值,最后将解析后的数值交由应用层,以完成显示等后续操作。由此可得如图2所示重构接口结构图。
图2可重梅接口结构图
经过可重构设计后,被控设备的协议实现不再绑定在人机界面嵌入式应用程序内部,而是以可重构模块的形式独立于应用程序之外。嵌入式应用程序提供一个标准的可重构接口,所有的可重构通信模块都按该接口确定通信数据。在进行通信时,嵌入式应用程序只需要加载特定的模块,获取其帧头帧尾、通信命令、通信单元类型等信息。就可以与被控对象进行数据交互。用户还可以根据人机界面的应用需求,选择两种以上不同的通信协议,通过多个串行口收发数据,完成同时对多个PLC等被控对象的监控。
由于人机界面已经预留可重构通信接口,用户还可以进行通信协议的二次开发,只要是按标准编写的通信协议代码,都可被人机界面加载并运行。当被控对象的通信单元被组态后,通信可重构的代码同样可以将通信单元组织成特定的数据帧。