Modbus协议在涩宁兰SCADA系统中的应用
赵国辉

摘要:
  工业控制已进入网络时代,在如今工控技术和工控产品百家争鸣的时代,各种不同设备之间的通讯已成为一个系统的关键所在。Modbus工业网络协议就是解决这一问题的一种利器。本文简单阐述了Modbus协议的基本原理,并结合涩宁兰输气管线SCADA系统中Modbus协议的实际应用,介绍了Modbus应用的一般方法和注意事项。

主题词:
Modbus 帧 ASCII模式 RTU模式 SCADA RS-485

  Modbus 协议是Modicon 公司开发的一种数据通讯协议,通过这个协议,各种不同的设备和网络可相互进行通讯,由于其具有高度的可操作性和开放性,Modbus 协议已经成为一种通用性很强的工业控制网络通讯协议。许多不同品牌、不同厂家的设备之间都可通过该协议交换数据。涩宁兰输气管线SCADA系统应用了多种通讯和网络协议,使各种设备有机的结合在一起,成为一个完整的三级集散控制系统,Modbus 协议是其中一种重要的协议。

Modbus 协议简介
一、 Modbus的通讯过程
  Modbus协议定义了一种信息结构,这种信息结构可以被所有支持该协议的各种设备在通讯时认可和使用。它描述了控制器向其他设备发出查询的过程以及其他设备如何进行应答,以及错误的检测和报告。
  Modbus协议采用master-slave(主-从)的技术。在一个Modbus总线上,只能有一个master,而slave最多可有247个,地址为1——247。进行通讯时,只有master才可以发起一个“查询”,充当slave的设备不断的检测,当检测到有自己地址的“查询”时,就会向master发出一个“回应”,或者根据master的命令采取相应的动作。当master发出的“查询”是一个“广播”(地址码为0)时,所有的slave都执行master的命令,但不向master发出回应信息。

二、 Modbus的帧
  在网络通信中,数据都是以“包”(Packet)或 “帧”(Frame)的形式进行传输,“包”和“帧”含义基本相同,均指通信中的一个数据块。对于某种具体通信网络,一般使用术语“帧”。在Modbus协议中,引用了“帧”(Frame)作为通讯过程中的数据单位,Modbus中的“帧”由以下几部分组成:
1、标志位:表示一个“帧”的开始。
2、地址位:表示该“帧”的信息是发给哪一个slave的,或是由哪个slave发出的信息。
3、功能代码:表示指令,在Modbus协议中,有一系列代码表示不同的指令,例如:代码“3”表示读数据。
4、数据位:是对功能代码的进一步补充与说明,说明指令的具体内容。
5、校验位:CRC或LRC校验。
6、停止位:表示该“帧”的结束。
每部分的位数和表示方法依采取的模式不同而略有区别,下文将详细论述。

三、 Modbus的两种通讯模式
  在Modbus协议中,依数据在传输的过程中的具体形式不同,分为两种模式:ASCII 和 RTU,采用哪种模式由用户自己根据需要进行选择。在选择时,同一Modbus网络中的所有设备的模式选择必须一致。

1、 ASCII模式
  ASCII(American Standard Code for Information Interchange),即美国信息交换标准代码。在这种模式中,每个8比特的字节被转换两个ASCII字符进行传送。这种模式的主要优点是传送的每相邻的两字节之间允许最大的时间间隔是1秒。


表一:ASCII模式的帧格式


在此帧中:
 帧是以一个冒号(:)来做为开始的标志;以CRLF(carriage return-line feed即“回车-换行”)为结束标志;
 代码系统采用十六进制,ASCII字符0...9,A...F
 每个ASCII字符由一个16进制的字符组成;
 每个字节中包括:1个开始位;7个数据位(低位先传送);1个奇偶校验位(无奇偶校验时为0位);1个(有奇偶校验时)或2位(无奇偶校验时)停止位;
 ASCII模式采用LRC(纵向冗余校验)检错方法。

2、 RTU模式
  RTU(Remote Terminal Unit),即远程终端单元,这种模式的特点是信息中每个8比特的字节被转换为两个4比特的十六进制字符来传输。它的优点是更大的数据密度使它在相同的波特率下比ASCII模式有更强的数据吞吐能力。

表二:RTU模式的帧格式


在此帧中:
  该帧是以一个相当于至少3.5个字节传输时间的空闲做为开始和结束的标志;整个帧的所有数据必须连续传送,如果中间间隔超过1.5个字符传输时间,接收设备会认为下一个字符为一个新帧的开始,即为一个地址码;
 代码系统采用8位二进制,十六进制数0...9,A...F;
 信息的每个8比特字符由两个16进制的字符组成;
 每个字节中包括:一个开始位;8个数据位(低位先传送);1个奇偶校验位(无奇偶校验时为0);1个(有奇偶校验时)或2位(无奇偶校验时)停止位;
 ASCII模式采用CRC(循环冗余校验)检错方法。

四、 Modbus与其他网络的通讯
  Modbus网络可以通过设备内置的部件或网络适配器与其他兼容Modbus的网络进行通讯。在其他网络上,Modbus协议的有关信息将被植入该网络的帧或数据包结构中,以完成信息的转换,这种转换还可以解译节点的地址、路径和检错方法等。
  在其它网络上,控制器使用对等(peer-to-peer)技术通信,故任何控制器都能发起一个和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备(master)也可作为从设备(slave)。多个内部通道可允许多个传输进程同时进行。
  在传送消息时,尽管网络通信方法是“对等”的方式,但Modbus协议仍然遵循“主—从”原则。当一个控制器发送一个消息,并期望从其他设备得到回应时,它是做为“主”设备,。同样,当该控制器接收到一消息,它将建立一个“回应”格式的信息返回给发送的控制器。这时,他充当的是“从”设备

Modbus 协议在涩宁兰SCADA系统中的应用

应用原理
  在涩宁兰SCADA系统中,Modbus充当的是连接流量计算机和PLC的数据桥梁。流量计算机从现场仪表采集相应的数据,计算出瞬时流量、累计流量等流量参数,再通过Modbus将必要的数据传至PLC中,经PLC进行必要的处理后,显示在上位机上供生产运行之用。流程如下图:

图1:流量参数的数据流向示意图

调试过程

一、 接线
  涩宁兰SCADA系统的PLC采用的是A-B公司的contrologix,其远程I/O机架上有一块通讯模板,叫做MCM(Modbus Conmminication Model),即Modbus通讯模板。MCM模板在Modbus和PLC的背板之间充当一个网桥,同时也是Modbus总线的Master。若干台流量计算机与MCM模板按照RS-485接口标准,通过DB9串口连接器连接成一个Modbus网络,接线图如下(以两台流量计算机为例,多台可顺次并联):

图2:MCM模板与流量计算机通讯接线图


注意事项:
1、 MCM模板提供的是RJ45的接口,可利用厂家提供的RJ45-- DB9转接线,也可以直接用RJ45接线,方法为:RJ45玻璃体从前直视,自左向右依次为1-8,与DB9接头1-8端一一对应。本工程采用后者,好处是减少接线次数,提高通讯的稳定性。
2、 通讯介质采用超五类屏蔽双绞线,主要是考虑RJ45接头的连接。我们在实验时曾用过一般导线,对通讯效果并无影响。可见Modbus对通讯介质并无特殊要求。
3、 连线应尽量短,够用即可,不仅看起来整齐,而且对于不同设备间的通讯,尽量短的线总是稳定性要好的多。
4、 导线一定要保证完好无损,接头一定连接紧固,要反复测试确认。因为在调试过程中,任何一点的虚接都可能造成通讯的失败,而且极难查找原因。一个可靠的硬件连接可省去调试过程中很多不必要的故障和故障查找的步骤。
5、 RS-485总线通讯在连线时只需遵循一个原则,那就是收对发,发对收。确认此连接无误,若其他没有问题,一定会成功。

二、 设备组态
  在此网络中,MCM模板充当Master,流量计算机为slave。对所用的MCM模板的端口设置如表三,流量计算机相应端口设置如表四:

表三:MCM模板的端口设置


表四:流量计算机的端口设置

  其他相关设置项根据实际需要进行设置。
  设备设置时一定要注意根据不同设备的不同要求,两端的设置相对应的项一定要相同。

三、 调试中出现的问题及解决方法:
1、 在利用Modbus通讯的过程中,遇到这样一个问题,即浮点数的传输问题。因为一般浮点数都是32位,而Modbus总线中只能传输最多16位的数据。
  解决方法:可以利用两个整形数传送一个浮点数(即将一个32位的二进制数分割成两个16位的二进制数),传送完以后,再将两个整形数整合为一个浮点数。

2、 在调试过程中,当数据传输至PLC中后,最初发现数据并不是原来的数值,而是一些莫名其妙的数据,要么大的离谱,要么是负的多位数。

  经过反复的尝试,终于发现问题所在,原来,在Modbus总线中,数据传输时是低位字节先传送,传送过来后如果不进行交换,二进制的数值排列是反向的,即原来的低字节在高位,高字节在低位,所以得到的数据和原数据相差甚远。只要将数据的高低位字节进行交换(swap位置1<