欢迎来到西门子工业支持中心网站!
欢迎来到西门子工业支持中心网站!
![]() |
“西家技术派”公众号拥有如下功能: 1.专家知识经验分享 2.发布技术派活动的信息 3.申请加入技术派 4.技术派支持案例分享 5.常见问题搜索 6.技术资料链接 |
专家大讲堂《PLC通信原理探秘》系列视频:https://www.ad.siemens.com.cn/service/elearning/series/288.html
最新更新:
连载之二十: 【PLC通信原理探秘】大讲堂幕后彩蛋之之遥
连载之二十一: 【PLC通信原理探秘】大讲堂幕后彩蛋之残余
连载之二十二: 【PLC通信原理探秘】大讲堂幕后彩蛋之新敌
连载之二十三: 【PLC通信原理探秘】大讲堂幕后彩蛋之老生
连载之二十四: 【PLC通信原理探秘】大讲堂幕后彩蛋之常谈
前面的故事中,在探索和测试通信的各种概念和理论的时候,实际上已经把S7的林林总总都介绍一遍。包括,同步异步,数据一致性等。在这里,我想把关于PLC的S7通信的这些概念再重新总结一下。
关于S7协议,首先它是西门子私有的,S7产品通信的协议,例如前面介绍的300PLC和400PLC之间建立S7连接。但是它并不是单独存在的一种协议,而是一个协议集合。例如使用BSEND/BRECV和PUT/GET两者的通信行为不一样,那么协议必然不一样,虽然在S7 PDU的格式上可能看不出差别,但是内部的字段含义不同,所以行为结果也不同。即使都称为S7协议。
对于BSEND/BRECV的功能块中的Done与TSEND/TRECV的TCP/IP的Done的行为不截然不同。因为S7协议是第7层的协议,需要协议层应答,即发送的每一段S7数据必须要有接收方的应答,才能发送下一段S7数据。也就是说此时的Done信号是真正接受方收到后给予应答后Done,表示对方的DB块接收到该数据。对于NDR没有太大的不同,因为从接收方来说,只要数据进入DB块,则表示NDR。
S7-300PLC的S7 PDU的大小是240B,400PLC的S7 PDU的大小是480B,1500PLC则为960B。对于300PLC的BSEND/BRECV通信的数据一致性是204B,206B,206B……。Shadow Buffer的大小与Stack Buffer的大小一致。而与400PLC通信时,S7-400PLC向下兼容,即使用300PLC的数据一致性。
然而对于1500有很大的特殊性,通过类似前面的测试发现,对S7-1500之间的S7数据通信,Shadow Buffer的大小是固定的1024B,需要注意的是Shadow Buffer的大小不取决于S7PDU的用户数据大小,它决定了数据一致性的大小。然而通过Wireshark抓包发现,S7 PDU是960B,那么Stack Buffer则表明承载数据的协议开始对数据进行封装,Stack Buffer的大小取决于S7PDU的用户数据大小。
而1500PLC与300PLC进行S7的BSEND/BRECV通信时,S7-1500的表现则与400PLC不同,不再向下兼容,而是按照1500自己的数据一致性来接收数据的,即1024B。当两台1500PLC进行S7的BSEND/BRECV通信时,对于发送测的数据一致性是1024B,而接收侧则为512,1024,1024,1024,1024,512……这样的循环来实现的。这是很特殊的地方。
对于减少数据通信的响应时间,与TCP通信的一样,即BRECV尽可能出现在最小的循环时间中。因为只有这样它才能给与发送端更快速的应答,这样才能提高通信的速度。否则,例如如果接受方的循环周期为2s,那么则发送方发送数据的频率则为2s一次,那么如果发送8K数据,约8个帧,那么需要16s才能发送完毕。
除了PLC之间的S7通信,那么剩下的主要是PLC和WinCC的S7通信,而我并不是支持WinCC的技术支持工程师,WinCC只是通信上的一个终端。然而我却被客户经常问道相关与WinCC通信的话题,例如:为什么S7-300PLC与WinCC的通信这么慢?而400就不会呢?于是我需要研究对于PLC和WinCC通信具有什么样的通信特性和行为,这样我就可以给我们的客户去讲解这些原因了。我想这与PLC的S7通信会更加复杂吧,毕竟本质上是和PC做通信,不管如何,还是要踏上新的征程,看一看PLC与WinCC的通信奥秘吧。
----------未完待续----------
连载之二十六: 【PLC通信原理探秘】大讲堂幕后彩蛋之风云
连 载 汇 总: 【PLC通信原理探秘】系列连载故事汇总
小釉:2楼2020-05-21 14:53:25
对于BSEND/BRECV的功能块中的Done与TSEND/TRECV的TCP/IP的Done的行为不截然不同。因为S7协议是第7层的协议,需要协议层应答,即发送的每一段S7数据必须要有接收方的应答,才能发送下一段S7数据。也就是说此时的Done信号是真正接受方收到后给予应答后Done,表示对方的DB块接收到该数据。对于NDR没有太大的不同,因为从接收方来说,只要数据进入DB块,则表示NDR。
对于PUT GET指令的NDR,又是什么情况呢? 从在接收端 数据从shadow buffer推到接收端中的DB完成后,NDR就变为1了吗?
这个地方没有想明白,还需赵工解惑一下
///////////////////////////////////////////////////////////////////////////////////////////////////////
这个点是不用太纠结,你要想想,PUT/GET和BSEND/BRECV的区别在于传输机制的不同,前者只有一方在操作,后者双方在操作。前者适用于HMI的操作,后者适用PLC的操作。但总而言之,都需要应用层确认。所以Done和NDR的方式是一样的。
对于BSEND/BRECV的功能块中的Done与TSEND/TRECV的TCP/IP的Done的行为不截然不同。因为S7协议是第7层的协议,需要协议层应答,即发送的每一段S7数据必须要有接收方的应答,才能发送下一段S7数据。也就是说此时的Done信号是真正接受方收到后给予应答后Done,表示对方的DB块接收到该数据。对于NDR没有太大的不同,因为从接收方来说,只要数据进入DB块,则表示NDR。
对于PUT GET指令的NDR,又是什么情况呢? 从在接收端 数据从shadow buffer推到接收端中的DB完成后,NDR就变为1了吗?
这个地方没有想明白,还需赵工解惑一下
请填写推广理由: