金 石,施伟锋,张 威,李伟翔
(上海海事大学物流工程学院,上海 201306)
随着技术的发展,电力系统的拓扑结构越来越复杂,传统的依靠经验进行故障判断的方法已经满足不了需要,依靠现代化设备进行故障诊断成为必然。而故障现象、数据的采集和处理方式也悄然发生了变化。
传统的工业数据传输主要采用RS-232或RS-485接口,这就导致传输的距离短、速度慢,应用受到了限制。信息化今天,网络已成为人们获取各种信息的重要方式,在工业领域也是如此。而基于TCP的Modbus协议,由于它开放、简单、易于理解且性能稳定,成为了工业以太网通讯的标准之一。
本文运用Matlab软件编程实现了Modbus/TCP通讯,远程实时采集下位机PLC中的数据,为故障的数据采集和处理打下了基础。
Modbus协议是应用于工业电子控制设备上的一种通用协议。自从1979年Modicon公司(即现在的Schneider Electric施耐德公司)免费向社会开放了其开发的Modbus协议以来,由于其可以轻松地实现不同厂家的控制设备之间的通讯,Modbus在工业现场应用越来越广。协议既支持传统的RS-232、RS-485总线设备,也支持以太网总线设备[1]。本文中所采用的是基于以太网的Modbus通讯协议,即Modbus/TCP协议。Modbus/TCP是基于以太网技术和标准TCP/IP技术发展起来的。
Modbus/TCP是用于主从通讯方式的简单的、开放式的网络传输协议。基本的工作原理就是Modbus协议帧嵌入到TCP/IP下层的协议帧中,在物理层进行传输。因此Modbus/TCP可以被理解为以太网上的Modbus,不过是采用TCP/IP的标准,简单地把Modbus信息包打包压缩而已。这样Modbus/TCP设备就可以通过以太网和光纤网络进行连接和通信。与RS-485接口相比,Modbus/TCP还允许使用更多的地址、可以采用多主站架构、传送速率可以达到GB/s的水平。Modbus/TCP网络的从站数量仅受限于网络物理层的能力。通常从站的最大数量一般在1024个左右。
与Modbus RTU或ASC的一个重要区别就是Modbus虽然包括了从站地址、功能码和传输的数据,但是不需要校验控制码,这是因为Modbus/TCP校验功能已经在TCP/IP协议和链路层的校验机制得到了保证。
因为Modbus/TCP是一种应用层的协议,上层为Modbus协议,下层为TCP协议,它规定了网络互联节点间的请求/应答的通信方式。它的帧格式必须严格遵守协议所规定的ADU(Application Data Unit)格式,才能在以太网上实现数据的传输[2],[3],如图 1 所示。
图1 Modbus/TCP和标准Modbus传输帧的比较
MBAP(Modbus Application Protocol Header)帧头采用的是TCP/IP专用的报文头,以识别Modbus后续的数据单元。它一共有7个字节,是由4个标识符描述的,如表1。事务元标识符是Modbus请求/响应事物处理的标志码;协议标识符标示Modbus协议;长度用于描述后续数据总字节数;单元标识符用于与串行链路上的其他远程总线相区别。
表1 MBAP帧头
功能码规定了客户端和服务器端需要执行的相关功能,可以分为位操作和字操作两种。在Modbus协议的标准中,相应的功能与特定的功能码已经定义好。实现标准的Modbus协议的关键就是使用正确的功能码,如表2。之后的数据域,可长可短,所需的数据域大小是与之前的功能码相关的。数据域一般由后续数据的长度、操作所对应的寄存器地址和寄存器数量三种数据构成[4]。
表2 功能码举例
另外,Modbus/TCP协议还有专用的端口号-502,利用TCP发送的所有Modbus/TCP ADU数据,都经过502端口发送。Modbus/TCP是唯一一个能分配到互联网端口的工业以太网通讯协议。
Modbus/TCP数据帧和串行链路上的Modbus RTU有很大的区别:(1)它用单个字节的单元标识符取代了RTU中的从站地址;(2)TCP上携带Modbus信息时,可以将其报文分成多个信息包来发送,因MBAP中有报文的长度信息,方便接收者识别信息包的边界;(3)接收者可以用验证完成报文的方式来设计所有Modbus的请求和响应,例如,对于那些PDU(Protocol Data Unit)有固定长度的功能码,仅功能码就足够表示完整的信息了[5]。
整个Modbus/TCP通信系统可以包括各种不同类型的设备:连在TCP/IP网络上的Modbus/TCP工控机;TCP/IP网络和串行链路之间的网关;以及负责数据采集的电子仪器和PLC等设备,如图2所示。
图2 通讯系统结构
所有连到Modbus通信网络的设备都是通过Modbus协议来实现客户端和服务器端之间的通信任务。网关等互联设备的功能是把串行链路上的Modbus通信设备连入到Modbus/TCP网络。
出于数据处理的需要,本文采用Matlab软件。Matlab软件是美国MathWorks公司出品的商业数学软件,是用于算法开发、数据分析、计算的高级技术计算语言和交互式环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。
Matlab作为一种应用广泛的科学计算软件,不仅可以通过直接交互的指令和操作方式进行强大的数值计算、绘图等,还可以像 C、C++等高级程序语言一样,根据自己的语法规则来进行程序设计。编写的程序文件以.m作为扩展名,称之为M文件。本文编程方式即采用调用M文件函数的方式。
首先建立与外部Modbus传输设备的链接。
其次需要完成MBAP报文头,事务元标识符按照默认0,占两个字节;协议标识符按照默认0,占两个字节;后续字节长度需要计算,占两个字节;单元标识符为0xff,占一个字节,共7个字节。
接下来要填充数据,以读单个线圈为例。由三部分组成:功能码,读单个线圈为03,一个字节;请求数据起始地址,两个字节;请求数据长度,两个字节。
接下来需要等待远端Modbus主机的回复,处理传回的数据。图3为用网络监测工具检测得到的本地和远端Modbus主机传输的数据。
图3 网络监测数据截图
得到的数据的第六个字节为后续数据的长度,再往后数第三个字节为返回的寄存器的数据,每个数据由两个字节组成。以下为处理数据的代码。
最终,data为得到的传输数据。以上仅为读取单个寄存器的举例,实际应用中,为了实现快速读取,采用的是将数据存放在连续的地址,一次读取多个数据的方式,以实现数据的快速传输。
在实际应用中,本系统的结构如图4所示。
图4 系统结构图
PM800系列电力数据监测仪,是由施耐德公司出品的先进的数字仪表设备。数据通过RS-485连通网关,再由施耐德公司的Twido型和M340型PLC采集整合。最后,PC端通过网络远程实时获取电力检测数据。
图5为采样得到的电机转速数据图。采样时间间隔为0.2 s,可以将采样得到的数据保存到Matlab的Workspace中进行进一步的处理。
图6为电机调速时的电压电流等数据。采样时间间隔为1 s,左上方为远程数据源的地址和端口,下边是电压电流值的实时曲线,右边为实时数据显示。
本文主要介绍了运用Matlab软件实现Modbus/TCP通讯,实现了电力数据的远程传输和远程实时获取,为在PC端运用Matlab软件处理数据和进行远程故障诊断创造了条件。对于有Modbus协议组网的现场设备,都可以通过此方式运用Matlab软件进行数据处理,不仅方便了数据的采集和处理工作,同时,也发挥了Matlab软件本身在数据计算和处理方面的巨大优势。
图5 电机转速曲线
图6 电压电流数据
[1]蒋 近,毛六平,戴瑜兴.基于Modbus和TCP/IP协议的远程网络通信[J].低压电器,2005,(01):43-46.
[2]翁建年,张 浩,彭道刚,李 辉.基于嵌入式ARM的Modbus/TCP协议的研究与实现[J].计算机应用与软件,2009,(10):36-38,68.
[3]郭振市,江 兵,李达平.Modbus/TCP通信协议在MATLAB/Simulink环境下的实现[J].微计算机信息,2011,(03):236-238.
[4]张海源,任春梅,张 冉.Modbus协议在电力系统中的应用[J].继电器,2007,(17):31-34,57.
[5]高旭彬.基于MSP430单片机的Modbus协议软件设计方法[J].工矿自动化,2013,(04):35-38.
[6]高旭彬.基于Modbus协议的数据采集系统上位机仿真软件设计[J].电气开关,2013,(04):44-47.