APP下载

西门子S7-300/400PLC开放式以太网TCP通讯的研究与应用

2019-01-08郝庆伟

数字技术与应用 2019年10期
关键词:通讯

郝庆伟

摘要:近年來随着以太网与工业网络交互与融合,越来越多的工业产品需要通过TCP协议与PLC系统进行通讯,本文以西门子S7-300/400 PLC为例详细阐述其TCP通讯机理及具体的通讯实现方法。

关键词:PLC;通讯;TCP

中图分类号:TP273.5 文献标识码:A 文章编号:1007-9416(2019)10-0031-02

0 引言

随着工业以太网的发展,目前大多数工业控制系统中要实现自动化功能需要将PLC、HMI服务器、二级服务器、编程器、其他智能设备等进行联网以实现通讯交互。西门子的PLC产品在工控领域有很高的占有率,而随着多元化的发展,一条产线可能存在不同厂家的工控产品,西门子PLC与其他厂家的数据交换无法使用自家的S7协议,开放式的以太网TCP协议是一个很好的选择。

1 TCP通讯协议的特点

TCP协议位于ISO/OSI参考模型的传输层,是一种面向连接的通信,即发送方与接收方通信时,必须首先建立连接,主动方为客户端,被动方为服务器。TCP协议对发送的数据进行排序,为每个发送字节关联一个序列号,接收方根据接收到的数据序列号,对接收数据排序,从而保证了数据的顺序。TCP数据接收方利用滑动窗口提供流量控制,告知对方它能够接收数据的字节数。其传输的形式是数据流,没有传输长度及信息帧的起始、结束信息,最大报文段长度MSS=1460bytes,适合传输中等到大量的数据。其报文格式参考表1。

TCP通信传送数据前,双方必须对通信进行初始化,并得到对方的认可,即建立连接。此过程通过三次握手实现,如图1所示。

TCP通信的任意一方都可以主动关闭这个连接,发送FIN报文段,FIN置1。一个FIN报文段被确认后,这个方向的连接被关闭。只有两个方向的连接都被关闭,该TCP连接才被完全释放。如图2所示。

2 西门子S7-300/400 PLC TCP通讯方式

SIMATIC S7-300/400 PN CPU包含一个集成的 PROFINET接口,该接口除了具有PROFINET I/O功能外还具有开放式用户通信功能,支持TCP等协议。要通过该集成PROFINET 接口实现开放的TCP通信,不能在硬件组态中完成,必须在一个数据块中指定每个连接的参数。使用“Open Communication Wizard”工具可以简单明了地指定连接参数,该工具可将一个包含所有参数的UDT导出到STEP项目中。使用该UDT可建立含有连接描述的数据块。随后,需使用STEP7的标准库中的下列通信功能块编写用户程序,即可与符合以太网标准的通讯伙伴进行数据交换:

(1)用于建立连接的FB 65-"TCON";(2)用于终止连接的FB 66-"TDISCON";(3)用于发送数据的FB 63-"TSEND";(4)用于接收数据的FB 64-"TRCV"。

其数据交换机理如图3所示,数据发送方调用FB63,脉冲方式触发REQ管脚,则生成发送缓冲区,即SEND BUFFER,随后数据被压入接口堆栈,即INTERFACE BUFFER,数据通过硬件接口发送至数据接收方的接口堆栈,接收方调用FB64,并使能EN_R管脚,生成接收缓冲区,即RCV BUFFER,随后数据被传送到接收方的实际地址区,如DB区。该过程中的缓冲区及堆栈最大为8192字节,所以西门子S7-300/400 CPU TCP通信一次发送/接收的最大数据量为32K字节。

3 数据一致性

始终被一致性的同时修改的数据区被称为一致数据区。也就是说一个数据区如果不被一致性的同时修改则会造成数据不一致。打个比方,有100个字节的数据,在第一个扫描周期内修改了50个字节,在第二个扫描周期内修改了剩下的50个字节,则这100个字节在同一个扫描周期内是不一致的。FB63,FB64是异步功能块,其执行时间可能持续若干个CPU扫描周期,为了保证其数据一致性,对于发送方,FB63的发送完成位“DONE”参数置1之前,必须保证发送数据区内的数据不变,对于接收方,FC64的接收完成位“NDR”置1之后,再使用接收数据区内的数据。否则对于数据一致性要求较高的场合有可能会造成意想不到的后果。

4 常见问题

4.1 接收功能块FB64无法接收数据,显示故障代码80A1

通信双方未完成三次握手,通信连接未成功建立,使用“Open Communication Wizard”工具检查CPU型号、IP地址、端口号、是主动方还是被动方等参数,再检查通讯伙伴的相关参数设置。然后执行FB66断开连接,然后再次调用FB65重新建立连接。

4.2 接收功能块FB64可以收到数据,但顺序错乱

如前面所述,TCP通信的传输的形式是数据流,所以接收方无法检测数据流中的某条消息在何处结束以及下一条消息在何处开始,即接收方无法知道发送方一次发送多少个字节。因此,当通讯伙伴接收方的数据接收长度与发送方的数据发送长度不匹配时,就会发生数据错乱的现象。要解决此问题,需要发送方和接收方将通信数据区长度保持一致。但有时往往发送方发送的数据长度是变化的无法固定在一个值,如扫码设备扫描不同类型的条码,其长度不是固定的,发送给CPU时会出问题,针对这种情况可将接收功能块FB64的LEN参数设置为0,以启用内部Ad-hoc模式,即以报文段为单位进行接收,每接收一个报文段则认为接收完成并计算接收长度,由于TCP最大报文段长度MSS=1460bytes,则如果单次发送长度不大于1460字节,使用此方法可以完美解决变长接收问题。但如果单次发送长度大于1460字节,则需要进一步编程处理,如发送方在报文段内加入长度信息,接收方再对该信息进行解析,从而确定数据长度。

4.3 建立连接功能块FB65的DONE为什么一直为0

连接建立后,FB65的DONE参数会置1,但只是维持一个扫描周期,然后复位到0,所以直接监控是看到的状态是0。可以通过采集它的上升沿信号查看是否置1,以查看通信是否已经建立。例如,可以接一个计数器。

5 结语

TCP通信协议有着通用性强,可靠高效的特点,应用非常广泛,西门子PLC与PLC之间,PLC与第三方以太网设备的通信均可采用此种方式,由于其数据流的特性,使用时要注意一些问题,与S7通信还是有一定的区别。目前TCP通讯像S7通信一样,已成为西门子PLC以太网通信的重要连接方式。

参考文献

[1] 廖常初.S7—300/400 PLC应用技术[M].北京:机械工业出版社,2005:280-305.

[2] 崔坚.西门子工业网络通讯指南(下册)[M].北京:机械工业出版社,2006:1-149.

猜你喜欢

通讯
《茶叶通讯》简介
《茶叶通讯》简介
通讯报道
本期通讯之星:郭雨薇
本期通讯之星:王宁
通讯简史