SCL-61D超声水表与S7-200 PLC自由口通信的实现
2018-12-28吕文豹
吕文豹
(安徽理工大学 材料科学与工程学院,安徽 淮南 232001)
浮选和浓缩是选煤厂内煤泥水处理的主要环节,捕收剂、起泡剂、絮凝剂等的用量是影响浮选、浓缩效果的重要因素,故保证这些药剂用量准确非常重要。SCL-61D超声水表具有灵敏度高、精度高的特点,在煤泥水药剂检测中应用广泛。由于SCL-61D超声水表采用SCL-61D超声水表通信协议,无法直接与S7-200可编程控制器(PLC)通信,但S7-200 PLC支持自由口通信[1],故可在S7-200 PLC内通过软件程序采用自由口通信模式来实现SCL-61D超声水表数据的读取。
1 通信参数的初始化
S7-200 PLC的自由口通信模式是由用户自定义的通信协议,用于与其他支持串行通信的设备进行通信[2]。如果将S7-200 PLC通信口设置成自由口通信模式,在S7-200 PLC处于RUN状态后,用户程序就可完全控制通信端口的操作,通信协议完全受用户程序控制[3]。S7-200 PLC的通信接口在电气上是标准的RS-485特性,采用半双工异步通信方式,故需要在相关的特殊存储器上进行通信模式和参数的设置[4]。
SCL-61D超声水表的通信接口是RS-485,与S7-200 PLC的通信接口电气特性一致,因此在硬件连接方面,只需将SCL-61D超声水表通信接口的A、B端接到S7-200 PLC的PORT0口的引脚8(RS-485信号A)、3(RS-485信号B)。SCL-61D超声水表的通信参数为波特率默认2 400 bps,数据位8位,停止位1位,校验位无[5-7]。SCL-61D超声水表通信协议的命令格式为:请求命令:2AH 41H 4AH,响应命令:26H 41H 4AH LL(BCD码) ZZH。
LL(BCD码)共有13字节的数据,其具体字节内容见表1。ZZH为数据校验字节,即不包括控制和命令字节的所有数据内容按字节进行累加,不计超出FF的数值。
表1 LL(BCD码)表
根据SCL-61D超声水表的通信参数设置S7-200 PLC相关特殊存储器。选择S7-200 PLC通信端口,在其自由端口控制器SMB30设置协议选择、波特率、数据位、校验位。根据SCL-61D超声水表的通信协议命令格式可知:当S7-200 PLC发出请求命令后,才有超声水表数据响应,即超声水表数据响应与主机下次发出请求命令的这段时间内总线是空闲的,故定义S7-200 PLC接收数据的起始条件为空闲线检测。结束条件使用字符间隔定时器,即在接收到字符后,字符间隔定时器重新启动,如一个字符的结尾到下一个字符的结尾之间的时间间隔超过SMW92设定时间,则数据接收结束。在特殊存储器SMB87上设置接收消息的相关参数,并在特殊存储器SMW90上设置空闲线时间(单位:ms),空闲线时间过后接收的第一个字符即为新信息的开始。特殊存储器SMW92表示字符间定时器超时值(单位:ms),如果超过该时间,则停止接收消息。在特殊存储器SMB94上设置需要接收的最大字符数,最大为255字节。具体设置见表2。
表2 自由口通信模式和参数设置
2 软件设计
S7-200 PLC与SCL-61D超声水表的通信程序主要流程为[8]:
(1)将S7-200 PLC的PORT0端口设置成自由口通信模式。
(2)初始化自由口通讯模式参数,即将参数写入PORT0端口的自由口特殊存储器,设置发送中断条件,规定数据接收的起始条件和结束条件。
(3)定时执行XMT发送指令,将SCL-61D超声水表的数据请求命令发送给SCL-61D超声水表。
(4)执行XMT发送指令中断程序,执行RCV接收指令程序;完成数据接收,并对接收到的SCL-61D超声水表响应数据进行校验,等待下一个XMT发送指令的执行。
自由口通信流程如图1所示。
图1 自由口通信流程
S7-200 PLC通过自由口模式与SCL-61D超声水表通信的核心指令为发送(XMT)和接收(RCV)指令[9-10]。XMT用于在自由口模式下通过S7-200 PLC的通信接口PORT0发送数据,其参数设置和程序编写较为简单,XMT指令的TBL(数据缓冲区)第一个字节数据指明了发送数据的字节数(即VB200中的3),其后发送的为信息字符(即VB201中的16#2A、VB202中的16#41、VB203中的16#4A)。将需要通过S7-200 PLC自由口发送到SCL-61D超声水表的数据请求命令(2AH 41H 4AH)分别保存在S7-200 PLC中的VB201、VB202、VB203内,S7-200PLC主程序通过XMT指令定时发送SCL-61D超声水表数据请求命令。具体程序为:
LD SM0.0
MOVB 3,VB200
MOVB 16#2A,VB201
MOVB 16#41,VB202
MOVB 16#4A,VB203
在主程序中利用定时器定时向超声水表发出请求命令,其程序为:
LD T100
EU
XMT VB200,0
XMT指令发送后需要对数据发送情况进行判断,为此选用发送完成中断。选用S7-200 PLC的PORT0通信端口对应中断事件9产生一个中断,通过中断连接指令ATCH进入对应的中断程序INT_1,并执行相应的用户程序,具体为:
ATCH INT_1:INT1,9
ENI
当XMT指令完成请求命令发送后,发送完缓冲区中的最后一个字符时产生中断,并进入中断程序,在中断程序内通过自由口接收指令RCV,实现接收SCL-61D超声水表数据的响应。S7-200PLC通过XMT指令完成请求命令后,等待SCL-61D超声水表响应,响应数据到达S7-200 PLC数据缓冲区后,通过自由口接收指令RCV进行数据的接受和存储,具体程序为:
LD SM0.0
RCV VB300,0
自由口接收指令RCV的参数设置与发送指令XMT一致,RCV指令的TBL的最大字节为255,接收缓冲格式为第一个字节表示接受的字符数(VB300),其后为接受的数据字符(即VB301-VB317,表3)。
在完成数据接收后,对接收的数据按照SCL-61D超声水表通信协议进行校验。如果其与接收的校验数据一致,则数据接收正确;如果其与接收的校验数据不一致,则接收数据有问题,应弃之不用,等待SCL-61D超声水表下一次的响应数据。
通过图2、图3可以看出:VB304-VB307的数据为105,其缩小至1/1 000即为实际瞬时流量0.105 m3/h,与图3左侧的超声水表显示的瞬时流量一致;VB308-VB311的数据为9 432,其缩小至1/10即为实际瞬时流量943.20 m3,与图3右侧的超声水表显示的累计流量一致。可见S7-200PLC的自由口模式可以安全、实时、可靠地获取SCL-61D超声水表的流量等相关数据。
表3 接收数据存储表
图2 S7-200PLC状态表中的超声水表响应数据
图3 超声水表的瞬时流量和累计流量
3 结语
针对S7-200可编程控制器无法通过编程软件STEP 7-Microwin 4预设的通信协议直接读取SCL-61D超声水表数据的问题,提出了S7-200PLC在自由口模式下与SCL-61D超声水表通信的思路和方法。这种方法可靠性高、实时性强、稳定性好,投资成本低,可为其他通信协议不兼容的智能仪器仪表与S7-200 PLC之间的数据交换提供一种的手段和方法。