1. 西门子通信场景
西门子作为一个老牌工控企业,在中国市场拥有很高的市场占有率。如果要说起西门子的通信协议,相信大家多多少少能说出一些,比如MPI、PPI、USS、Profibus、Profinet、S7等,本文介绍的就是S7协议。由于完整、详细、周到,可读性强的S7文章较少,所以抛砖引玉,欢迎各位大神共同交流。
S7协议即S7 protocol,它是一种专有的通信协议,主要用于西门子S7系列PLC之间的通信, 主要用于将PLC连接到PC工作站,是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在,S7通信协议是指西门子公司用于其S7系列PLC(可编程逻辑控制器)之间进行通信的标准通信协议。它是一种基于串行通信方式进行通信的协议,通常采用RS485/RS232传输介质,支持点对点和多点通信方式,能够实现PLC之间的数据传输和互相控制。S7通信协议允许在MASTER和SLAVE之间的传输数据协调运动、时间、报警等等实现自动化,广泛应用于工业自动化控制系统、自动化生产线和设备I/O控制等领域。
S7通信协议一般由以下四个部分组成:
1.物理层:S7通信协议通常采用RS485和RS232两种物理层传输协议,也可以使用光纤和以太网等高速传输方式。
2.数据链路层:包括帧头和帧尾的标志符、控制信息等,主要用于数据分段以及数据的校验和恢复。
3.传输层:主要包括数据的传输引导和通讯的控制流程,以及数据的应答和复位等操作。
4.应用层:主要完成通信的应用功能,例如读写数据,请求数据等等。
其中,第1~4层会由计算机自己完成(底层驱动程序);
第5层TPKT,应用程数据传输协议,介于TCP和COTP协议之间;这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁;
第6层COTP,按照维基百科的解释,COTP 是 OSI 7层协议定义的位于TCP之上的协议。COTP 以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;
第7层,S7 communication,这一层和用户数据相关,对PLC数据的读取报文在这里完成;
刚看到TPKT和COPT也许会很迷惑,其实在具体的报文中,TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);COTP的作用是定义了数据传输的基本单位(在S7Comm中 PDU TYPE:DT data);
总之,S7通信协议是一种特定的通信协议,被广泛用于PLC控制系统之间的数据传输和控制。它的优点是速度快、可靠性强、通信距离远等,从而满足了工业自动化控制系统中对数据传输和控制的要求。
2. s7协议和modbusTCP协议区别
Modbus协议分三种:运行在串行总线(多为RS485)上的modbus-RTU协议和modbus-ASCII协议,以及运行在以太网上的modbus-TCP协议。
三种协议功能相同、编码不同。
Modbus-RTU:二进制,如命令01,发送一个字节,值为1。
Modbus-ASCII:ASCII码,如命令01,发送两个字节,值为字符’0’和’1’。命令总是以’:’开始。由于发送数据量多一倍,实际很少用。
Modbus-TCP:使用TCP协议,默认端口502,命令和应答均以四字节标识和两字节数据长度开始,应答回复相同的标识。标识由事务标识和协议标识构成,实际由命令发送方自定。
ModbusTCP是一种基于以太网通信的应用层协议,因此它需要在以太网的网络传输协议上运行。ModbusTCP和以太网并不是一回事,以太网是用于局域网和广域网互联的一种通信技术,而ModbusTCP是一种基于以太网的通信协议。在ModbusTCP协议中,Modbus协议数据通过TCP/IP协议进行封装并进行传输,从而实现了在以太网上的通信。因此,ModbusTCP协议可以被视为以太网协议的一种应用形式。
S7协议和modbusTCP协议都是工业自动化领域中常用的通信协议,其中S7协议是传统的工控领域常用的通信协议,而modbusTCP是近年来出现的基于以太网的工业通信协议。它们之间主要的区别如下:
1.工作方式:S7协议是基于串行通信方式进行通信的,而modbusTCP协议则采用了基于以太网的通信方式,可以实现更高的数据传输速度和数据量。
2.通信速度:S7通信速度相对较慢,一般为12Mbps以下;modbusTCP协议则支持更高的通信速度和更广的数据带宽,可达到100Mbps或以上的速度。
3.网络拓扑:S7协议在网络拓扑方面相对简单,通常采用星形网络拓扑;而modbusTCP协议支持基于以太网的网状拓扑结构,可以实现更复杂的网络配置和更完备的自组网功能。
4.实时性:modbusTCP协议具有更高的实时性能,可满足工业自动化领域的实时控制要求。
尽管这些协议之间有所不同,但它们都是在工控自动化领域中相互竞争和协同发展的,它们各自的特点也为工业自动化的不同应用环境和需求提供了选择和应用的机会。
可以看下以下设备应用情况
3.S7协议数据结构
S7以太网协议属于TCP/IP协议族的一种,它位于应用层,不能的单纯的使用Socket来进行通讯,下图为S7以太网协议在OSI参考七层模型中的位置
S7以太网通讯客户端从建立TCP连接到读取到服务端数据的整个过程
1.握手
当客户端192.168.1.101(PC机)与服务端192.168.1.200(西门子PLC)通过Socket建立连接时,会进行“三次握手”,这是标准的TCP连接方式,这个过程会由Socket自动完成;
2.通讯请求
在“握手”之后,并不能马上进行数据交换,还需要“通讯请求”过程。
这个过程包含两次报文交换:
客户端发送COTP报文给服务端,在COTP报文中包含“连接请求”和“Destination TSAP”,以明确CPU的机架号和槽号;服务端应答COTP报文,包含“连接确认”;这样服务端就清楚了客户端需要和哪个CPU来进行数据通讯;
客户端发送S7 Communicaton报文给服务端,在S7Communicaton报文中包含“通讯请求”; 服务端反馈S7 Communicaton报文。
交换数据
通讯应用就在这个过程内完成,可以组织报文来实现需要的功能。这个过程内的报文是S7 communicaton,具体实现时,需要对S7协议中的第5、6、7层进行编程。
注意,如果不进行“第2步-通讯请求”而直接发送交换数据报文,则服务端会将连接断开。
大体的层次结构(TPKT、COTP、S7)
4.S7协议的工作流程
client与server 通过socket和标准的TCP的方式建立连接client发送COTP,请求连接PLC,报文中包含Source TSAP和Destination TSAP,从而标识出CPU的机架号和槽号PLC返回COTP,确认连接,报文中包含Source TSAP和Destination TSAP,此时server确定client与哪个CPU进行通讯client发送S7 Communication给server,报文中包含Setup communication,即通讯请求,包含PDU的长度server返回S7 Communication给client,报文的ROSCTR为ACK_DATA,有确认的意思,包含PDU的长度client与server发送交换数据的报文,仍以S7 Communication完成备注:2-5的步骤中,2与3完成数据传输前连接的功能,4与5则完成连接之后的通讯请求,如果绕过通讯请求的建立,在有TCP时就进行数据交换,服务器一般会直接断连。
大多数情况下,西门子通信遵循传统的主从模式(master-slave)或者CS模式(client-server )。其中PC(master/client)将S7请求发送到现场设备(slave/server)。这些请求用于从设备查询或向设备发送数据或发出某些命令
S7协议相当复杂,必须通过程序访问,而不是直接解析协议报文,但它是开机即用,无需配置(串口和modebusTCP则必须首先编程配置才能使用),但我们关注点限于数据的读取和写入,类似modbus协议支持的功能,但稍多一些。
当我谈到“S7协议”时,我指的是以太网S7通信,主要用于将PLC连接到PC站(/PC - PLC通信)。不要将此与西门子设备使用的不同现场总线协议混淆,如MPI、Profibus、IE和Profinet (Profinet是一种基于以太网的协议,用于将plc连接到IO模块,而不是设备的管理协议),大多数时候,西门子通信遵循传统的主从或客户端-服务器模型,也就是说这是C/S的通信模式,PC(主/客户端)向现场设备(从/服务器)发送S7请求。这些请求用于向设备查询、向设备发送数据或发出某些命令,最后再次回顾请求流程:
建立Socket连接:进行TCP三次握手-COTP的握手请求(请求建立通信)整个S7的握手请求(请求建立操作通信)进行读写操作(S7协议报文)5.干货介绍
网上关于s7协议的解析随便你搜索一下,资料是一堆又一堆,有写得好的,有复制的,看起来都是抽象的理论,几乎全是理论性的介绍,缺少实战应用,更没有针对一个工业应用软件开发的角度来谈协议的应用实践,更没有使用一种具体的开发语言来灵巧应用,本系列文章由浅入深,循循升级,慢慢地向更强大的应用,就象谈恋爱一样,教你认识它,把握它,全场使用C#开发语言手写通讯库,分析每个报文字节,然后应用通讯库开发桌面级应用程序,效果那可比新疆的葡萄还甘甜,可以这样讲,全网没有如此优质的知识文章,从此江湖不再寂寞。
走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,动动你的金手指,财务自由