串口服务器在Modbus通讯中的应用及实践
2018-01-18谢颖奎
彭 芸,谢颖奎
(1.上海应用技术大学,上海 200231;2.上海康泰斯化学工程有限公司,上海 201203)
过程控制的项目中,经常会遇到DCS和下位机PLC或现场仪表的通讯问题。现在很多的化工厂建设时采用总包加分包的模式,供应商各自提供自己的控制系统(通常大部分是PLC),但在工厂的中控室里,操作人员又希望能监控到这些控制系统的运行参数。因此,这些PLC的运行数据就需要通过通讯传送到DCS来。另外一些大的仪表,提供的数据比较多,通常也采用通讯的方式。Modbus推出的时间比较早,也较成熟,现在绝大多数的PLC厂家和大的仪器仪表厂家都支持Modbus协议,因此从一开始工程设计时就约定使用Modbus的话就会做到方便统一、省时省力。
1 串口服务器介绍
DCS系统和下位机的通讯从硬件上主要还是以串口的方式进到DCS系统,这是因为一方面DCS的内部以太网一般不会直接开放给下位机,另一方面下位机与DCS直接经过以太网进行数据交换也比较困难,因而必须要有一个串口服务器或串口通讯卡件来实现数据交换。有的DCS厂家,如横河、爱默生等,采用自己的串口通讯卡件,而霍尼韦尔等一些厂家,是采用串口服务器,用SCADA的组态方法来实现。串口服务器以MOXA公司的经过认证的Nport 5630为例,一般有8口和16口。
MOXA NPort 5630-8提供简单方便的联网方式,不但可以保证现有的硬件资源,更确保未来网络的扩充可能性。通过简单的设置,就可以将现有的串口设备立即联网。再者MOXA NPort 5630-8可以在串口和以太网络界面之间轻易的执行双向数据传输。使用MOXA NPort 5630-8,可以达到同时集中管理串口设备和于网络中分散管理主机的目的。如图1所示为采用Nport 5630的系统配置图[1]。
图1 系统配置Fig.1 System configuration
在安装完随机所带的MOXA NPort 5630-8的Real COM/tty驱动程序后,MOXA NPort 5630-8上的串口会被Windows操作系统视为Real COM端口,或被Linux操作系统视为tty端口。NPort提供基本的传输/接收数据功能,以及 RTS、CTS、DTR、DSR、DSD等控制信号功能。其串口可以接RS232、RS422、4线制 RS485、2线制 RS485等接口形式,其具体引脚如图2所示[1]。
图2 串口引脚Fig.2 COM pins
2 串口服务器设置
在MOXA的设置页面里主要包括网络设置、串口设置、操作设置等。在网络设置里主要设置网络的IP地址、UDP通道的地址,一般都设置成静态地址,IP地址和DCS控制器要在一个网段内。服务器的串口设置主要是串口通讯参数的设置,包括波特率、数据位、停止位、奇偶校验等。这个要和下位机的通讯参数匹配起来,不同的下位机串口参数是不一样的,所以串口参数也要随之改动。操作设置主要包括模式,基本设成TCP SERVER模式,TCP在线检查时间(0~99 min),最大连接数量(1~4),本地TCP 端口(如 4001~4008)等。
3 Modbus通讯协议
3.1 Modbus通讯协议的功能码
Modbus的Slave端是根据Master端发送过来的功能码进行相应的动作的。表1所示为Modbus协议常用的功能码,使用它们即可对Slave端的数字量和模拟量进行读写操作[2]。
表1 Modbus协议常用功能码Tab.1 Modbus ordinary function code
3.2 Modbus通讯协议帧结构
Modbus协议可使用ASCII和RTU 2种模式进行通讯,这2种模式在报文结构、功能命令上是相同的,仅帧信息的表示方法不同而已。它们的区别为采用RTU模式通讯时,信息是以8位二进制方式传输的,而采用ASCII时,信息是以字符为基本单位传输的,每个字符都用ASCII码表示。ASCII的优点是通用性好、读取容易,但在相同传输速率下,RTU模式比ASCII模式传输效率提高一倍,适合在工业网络中应用,大多数的PLC及大型智能仪表都支持Modbus RTU。
表2 Modbus协议帧结构Tab.2 Modbus frame structure
表3 主机请求示例Tab.3 Host request example
表4 以协议从机应答读取整数数据示例Tab.4 Client response example as integer data
4 SCADA组态
利用霍尼韦尔的SCADA软件进行通讯组态,先组通道,然后是控制器,最后再组通讯点,其基本原理就是按照Modbus的定义来做的。工程实际中按部就班,一点一点地做,一般不会有大的问题,也可以把下位机的Modbus地址表用Excel标准格式直接粘贴到通讯点组态里。但有一点,读模拟量的时候会需要一个解码符,对于不同的数据类型需要带不同的解码符,如16位有符号数的解码符是C16,浮点数的是FLOAT等。因为下位机厂家五花八门,再加上每个编程人员的编程习惯也不一样,因此下位机传上来的数据格式也是多种多样,所以有时在现场要多试几次。做开关量的时候,有的是把开关量打包到一个整形数据里,有的是直接开关量。因此,和下位机的编程人员的沟通是很重要的。如果万一碰到沟通不畅,或者下位机编程者本身就糊涂,那即使能读到数据,也是雾里看花,很难还原数据本来面目了,而在工程实际中又时常碰到这种窘况。有时候为了避免猜猜猜,经常会用Modscan这样的调试小软件来帮忙,Modscan这个小软件很小巧,又很实用,它开关量和模拟量都可以读。可以把模拟量转成2进制、16进制、整形、实型、浮点等。而且它读取的范围可以很大,最多一次可以扫100个地址。以及可以清楚地看到每个16位数据的每个位的变化。因此是调试和验证Modbus通讯非常得力的助手。举个例来说,下位机编程人员给出的16位数据定义如下:其第三位代表循环水泵A运行,我们按照他的定义,用SCADA组态出来的值和实际运行的值总是对不上,不知道怎么回事,这时就用Modscan软件来帮忙了。如上例,假设只有循环水泵A在运行,那除了第三位,其余的位数据都是零,那看到的数应该是0001000000000000,但是我们实际用MODSCAN看到的数据是0000000000010000,原来是把数据的高8位和低8位交换了。用SCADA组态的时候,由于它是一个位一个位地读,视野所限,很难发现类似的错误,用Modscan来读的话,读的数据比较多,视野比较开阔,所以比较容易发现类似的问题[3]。
在实际工程中我们还经常遇到接地问题。按理来说,下位机和DCS控制电源都应该由中控室UPS供电,这样它们之间的信号电平才能匹配。但实际现场下位机PLC电源供电有可能是由现场动力电源供的,因此很有可能它的信号电平和DCS的信号电平不能统一,因此通讯连接不上。解决的办法一个是现场PLC改由中控室UPS供电,还有一个办法是把现场PLC电源的接地接到全厂的接地网在现场最近的等电位接线端子上,这样就可以解决通讯双方电平不等的问题。另外大多数的应用都是采用RS485两线制的接法,因此通讯电缆只放两芯线。在实际应用中,接两根线也足够了,也不会出什么问题。但如果现场PLC不是由控制室UPS供电,距离又比较远的话,只接两根线就有可能会由于干扰比较大造成通讯的误码率比较高,甚至通讯不上。解决的办法是把通讯电缆的屏蔽线接到RS485的接地端子上,这样可以很好地解决通讯的干扰问题[4]。
5 结语
采用MOXA NPort 5630可以较好地,较方便地解决现场串口设备和以太网络界面之间的执行双向数据传输问题。和其他一些厂家采用串口通讯卡件的方式比较起来,具有价格便宜、灵活方便等特点。但从带载能力来说,它的带载能力不如串口通讯卡件。笔者曾经做过试验,按照Modbus通讯协议的定义,一根通讯总线理论上最多可以挂248个从站通讯设备,但用NPort5630一个串口同时接几台设备进行通讯的话,确实不太容易实现。如果采用其他厂家用的通讯卡件的话,一根通讯总线上挂多台设备在实际应用中是没有什么问题的。
[1]MOXA Nport 5630设备使用说明书[Z].2014.
[2]Modicon Modbus Protocol Reference Guide[Z].1996.
[3]Experion PKS系统组态实验手册[Z].2013.
[4]董明明,孙万蓉,陈梓馥,等.基于RTU油井远程测控系统的数据采集与传输层软件设计[J].物联网技术,2012,2(2):35-36.