沈林晖
(中石化镇海炼化分公司,浙江 宁波 315207)
Modbus RTU串口通信技术成熟可靠、应用方便、实用性强,可以很容易地实现不同系统之间的数据通信,因此在工业自动化控制系统中被广泛应用,其应用特点在于:Modbus RTU串口通信开放透明,几乎所有的自动化控制系统都支持;Modbus RTU串口通信实现成本很低;使用Modbus RTU串口通信技术,便于设备专利商设计可加密保护的专用控制系统,而不受用户其他系统的限制,这同样也有利于系统的标准化设计和集成,能够减少重复性劳动;通过Modbus RTU串口通信,可以大幅减少用户长距离铺设模拟信号电缆,降低电缆成本和人工布线成本。采用Modbus RTU通信技术,随设备引进的控制系统可以很方便地与用户DCS通信,从而实现用户所需要的指示、记录及报警等功能。
笔者在简要介绍Modbus RTU通信技术工作原理的基础上,通过几个实例来说明几种控制系统的串口通信基本参数设置方法,几种不同的电气接口和站间串口通信的接线方式,以及串口通信的软件编程组态等。
Modbus RTU通信协议是以主从(Master-Slave)方式进行数据传输的,没有主站的请求从站不会发送任何数据。在主站和从站数据传输的过程中,主站一次只发送一个请求报文到指定的从站,然后等待从站响应;从站得到请求报文后检查并分析数据包,然后执行报文的请求,之后再返回主站相应的响应报文;主站接收到响应报文检查数据包,无误之后再对接收的数据做相应处理,如果检查有误则重发请求报文。Modbus RTU串口通信总线上只允许有一个主站,从站可以有多个,而只有主站没有站地址。主站和从站之间的数据交换是通过功能码来控制的,不同的功能码访问不同的数据区,有的功能码是对状态位操作的,有的功能码是对16位寄存器操作的。功能码、数据区和用户级地址(十进制)之间的对应关系见表1。
表1 数据区用户级地址表示法及访问权限
用户只在西门子PLC的编程中用到功能码,而其余大多系统只需使用用户级地址就可以了。用户级地址“1”(00001的简写)表示“数字量输出地址1”,对应的功能码是FC01/FC05/FC15;用户级地址“10001”表示“数字量输入地址1”,对应的功能码是FC02;用户级地址“30012”表示“16位整型输入地址12”,对应的功能码是FC04;用户级地址“40012”表示“16位整型输出地址12”,对应的功能码是FC03/FC06/FC16。主站的请求报文包括从站地址、功能码、数据起始地址和数据长度;从站的响应报文包括功能码、字节计数和寄存器数据。
RS485 Modbus RTU串口通信的电缆最长可达1.2km,电缆的实际允许长度与波特率有关,波特率越大(即传输速度越快)允许的电缆长度越短。需要长距离通信时,可以增加中继器来延长通信距离。
RS485 Modbus RTU串口通信一般采用两线制接线,可以实现多点双向通信,并且接线时一般会在总线两边的末端安装终端电阻,例如:Honeywell TPS系统的Modbus RTU串口通信,当总线的长度超过305m时要在总线的末端安装120Ω的终端电阻。
要实现Modbus RTU串口通信,首先要给主站和各从站设置一致的Modbus RTU串口通信的基本参数;然后由施工人员铺设通信电缆总线并连接到各站的电气接口上;最后由组态编程工程师对主站或从站进行程序编程或软件组态。
Modbus RTU串口通信的基本参数包括:波特率、数据位、停止位和奇偶校验。其中,波特率表示的是传输速率,数据位一般默认为8位,停止位一般设为1位(也有两位),奇偶校验可选择无奇偶校验、奇校验或偶校验。对于挂在同一条Modbus RTU串口通信总线上的所有节点来说,这些基本参数都必须一致。
每个控制系统都有参数设置界面,但所需设置的内容却不尽相同。PLC、TPS、TRICON和PKS的Modbus RTU串口通信基本参数的设置界面如图1~4所示。
图1 西门子PLC从站Modbus RTU串口通信基本参数设置界面
图2 TPS主站Modbus RTU串口通信基本参数设置界面
图3 TRICON从站Modbus RTU串口通信基本参数设置界面
图4 PKS(Nport5630转换器作主站) Modbus RTU串口通信基本参数设置界面
不同控制系统或设备的Modbus RTU串口通信电气接口的成套方式也有所不同,有的是集成在系统或设备中,如西门子的S7-200 PLC及质量流量计等;有的是可插拔的通信卡件,如西门子S7-300/400 PLC采用CP341Modbus RTU串口通信卡,Honeywell TPS采用SIModbus RTU串口通信卡,TRICON系统采用TCM4351B通信卡;有的则采用第三方通信转换设备,如Honeywell新一代PKS系统采用Terminal Server将Modbus RTU串口通信数据转换为以太网通信数据。这些通信卡件或设备提供的电气接口也不尽相同,有的采用端子接线方式,有的采用9针串口,有的采用25针串口,也有的采用RJ45接口,其串口通信电气接口分别如图5~8所示。需要注意的是,即便是同样的电气接口,不同产品的引脚定义也不尽相同,接线之前一定要查看引脚的详细说明;终端电阻的要求也有差别,设计时必须根据产品标明的距离和阻值计算后再布线或接线;在Modbus RTU串口通信总线上,一个主站一般最多可以接32个从站。
图5 Honeywell TPS MC-TSIM12卡件串口通信电气接口
图6 西门子PLC CP341卡件串口通信电气接口
图7 TRICON TCM 4351B卡件串口通信电气接口
图8 Honeywell PKS NPort 5630 设备串口通信电气接口
RS485 Modbus RTU串口通信一般采用两线制接线方式,少数也有四线制接线方式。两线制接线比较简单,只要在主站和从站的电气接口之间将正端和正端相连,负端和负端相连就行。如果采用的是四线制接线方式,那么主站的发送(TxD)端要和从站的接收(RxD)端连接,主站的接收(RxD)端要和从站的发送(TxD)端连接,并且正端接正端、负端接负端。通信设备正端引脚的符号有Data+、T(B)+、R(B)+、TxD+和RxD+,负端引脚的符号有Data-、T(A)-、R(A)-、TxD-和RxD-。符号Data+和Data-只用于两线制接线方式,TxD、T(A)和T(B)是发送端,RxD、R(A)和R(B)是接收端。两线制和四线制接线示例如图9、10所示。
图9 Honeywell TPS Modbus RTU 串口通信两线制接线示例
对于用户而言,大部分设备或系统要实现Modbus RTU串口通信只需进行简单的参数设置和点组态就可以了,如Honeywell TPS和罗斯门特质量流量计的Modbus RTU串口通信组态,流量计上只需使用275或375手操器在COMM菜单下设置通信协议(RTU)、波特率、奇偶校验、停止位(1位)和本站地址即可,其他如流量计的寄存器地址是在流量计出厂前就固化好的(表2),不需要任何操作。在Honeywell TPS 中,只需新建一个Array数组点,并在该点的参数AUXDATA3上设置通信模式(图2),在参数AUXDATA4上设置波特率和奇偶校验(图2),并指定要访问的流量计地址和数据首位寄存器地址(如20247)和通信数据量(如8)就可以访问质量流量计的数据了。又如TRICON Modbus RTU串口通信组态,只要使用TS1131组态软件对Modbus RTU串口通信卡设置Modbus RTU串口通信基本参数(图3)即可,无需编写通信程序,无需定义寄存器地址(寄存器地址已在工程师定义变量申明时自动生成)。TRICON Modbus RTU串口通信的用户级地址(在TS1131软件中称之为Alias地址)的分配规则见表3。
图10 西门子PLC Modbus RTU 串口通信四线制接线示例
表2 质量流量计数据/地址对照
表3 TRICON Modbus RTU串口通信用户级地址分配规则
对于西门子PLC这类非面向Modbus RTU串口通信设计的系统而言,Modbus RTU串口通信的组态相对复杂一些。当西门子PLC作为从站时,CP341通信卡的硬件组态中要选择Modbus Slave协议,然后在Protocol中设置Modbus RTU串口通信基本参数,并在功能代码选项卡中设置寄存器区域,最后还要编写通信程序。在通信程序中,首先是在Blocks中添加发送程序块FB8和接收程序块FB7(供Modbus RTU串口通信时后台调用),然后在用户程序中调用功能块FB80,用它调用后台程序块FB7和FB8用于应答主站的数据请求。当西门子PLC作为主站时,CP341通信卡的硬件组态中要选择Modbus Master协议,然后在Protocol中设置Modbus RTU串口通信基本参数,最后编写比从站更复杂的通信程序,包括:一个用于发送请求的DB数据块,该数据块必须按照标准格式定义主站的请求内容;一个用于接收数据的DB数据块,该数据块要有有足够多的地址,使之能够存放从站返回的所有数据;程序调用发送功能块FB8,用于发送请求数据和调用接收功能块FB7,用于接收从站返回的数据。
Modbus RTU串口通信不但技术成熟可靠、开放透明,而且其应用成本很低,组态及布线等工作量也小,又是不同系统之间实现数据交换的理想方式,因此在大炼油和大乙烯装置以及新旧装置中的应用比比皆是。中石化镇海炼化分公司从美国引进一套最新版的UOP控制系统,也采用Modbus RTU串口通信技术,而且还应用了两路RS485 Modbus RTU串口通信:一路用于西门子S7-400与TRICON通信,另一路用于TRICON与横河DCS通信。可见Modbus RTU串口通信仍然是不同自动化系统实现数据交换的首选,未来其应用可能还会遍布工业自动化系统的各个角落。