广东湘恒智能科技有限公司
主营产品: 西门子PLC,触摸屏,伺服电机,变频器,人机界面 ,线缆, DP接头
解读专家大讲堂——TCP/IP通信探秘
发布时间:2024-06-05

1

什么Shadow Buffer和Stack Buffer?


Shadow Buffer和Stack Buffer手册中没有定义,为了让大家理解TCP的通信原理,我们需要知道这两个Buffer。前者是在TCP的规范中定义,需要这个缓冲区缓存数据,PLC中的这个缓冲区用于DB和Stack Buffer的桥梁,而且用来决定数据一致性的大小。称为Shadow Buffer,影子Bufffer,是因为像人的影子一样,Shadow Buffer的大小都会小于等于DB区的大小。

Stack Buffer是系统决定的,ISO/OSI参考模型的第4层,用于缓存数据的打包和解包,大小为8K。

图片

2

什么是Keepalive?

图片


当网线断开,Keepalive定时器超时,会清空发送端和接收端的Shadow Buffer和Stack Buffer缓冲区中的数据。S7-1500CPU例外,不会清除接收端Shadow Buffer中的数据。

3

什么是流量定形?

图片

4

是否采用可变长度的TCP/IP协议来通信?


不推荐采用,AD-hoc模式是可以实现变长的TCP/IP通讯的,但使用AD-hoc模式需要注意两点:

(1)1500字节减去IP头20个字节,减去TCP头20个字节,即1460个字节的数据传输。大家想用第三方设备和PLC做通讯,要使用TCP协议的话,可能需要变长的模式,在1460字节范围内是可使AD-hoc模式做通讯。

(2)比较底层的原因,即使使用小于1460字节的长度去AD-hoc通信,也有可能造成数据对应不一致,可能的原因就是接收端的接收速度慢。

5

交换机的规格不一样,分别有些什么配置?


测试环境使用了Scalance 200 系列的交换机204-2,另外一个实际上不是交换机而是2个双口TAP,实现物理硬件的网络连接。对于200系列交换机,采用端口镜像来实现数据抓包;XM400,使用其TAP功能,可以捕捉IRT的数据,而且是双向IRT的数据,不需要改网卡的设置,也可以看VLAN Tag的标签。

6

设置Minimum Cycle Time对Communication Load有什么影响吗?


如果PLC不设置最小循环周期,那么程序中断加上通讯能运行多长时间就是多长时间,没有富余的时间去处理其他操作。对1500来说,设置默认的通讯负载是50%,在有大量的通讯存在的情况下,通讯负载是超不过50%的,如果设置了Minimum Cycle Time,假设程序运行的时间纯粹为2毫秒,设置的Minimum Cycle Time为10毫秒,意味着有8毫秒是free的,可以用来做通讯,此时即使设置了50%的通讯负载的上限,有大量通讯的情况下实际通讯负载照样可以超过50%。

7

TCP的通信数据量最大64k, 那么当通信传送的数据变化很快,是否有数据一致性的保证,比如发送16k数据,只有8k是一致的?


TCP/IP通讯要想保持数据一致性,只有DONE信号结束完成之后,你才能去修改数据,否则不能保证你发送的64k数据全是一致的,而只能保证每个8k的数据是一致的,即最大的一致性数据是8k。

8

交换机出现数据风暴的由来?

数据风暴其实就是所谓的广播风暴,简单理解就是本地网络中存在大量的广播报文,导致通讯无法进行甚至网络瘫痪。实际上它是一种普遍的网络问题,解决这个问题的关键是减少广播报文的出现,产生广播报文的原因有很多种,最常见的在工厂里有PC中了蠕虫病毒,向网络中发送大量的广播数据,引起网络堵塞,造成广播风暴。另外一个点是工厂使用一些测试网络工具,会周期性的向网络发送大量广播以获得网络状态信息。还有一些其他原因,比如网线短路等。

9

常用的Ping和ARP指令有什么区别?如果一台设备不知道IP,如何快速知道IP?

两者其实并不能放在一起比较。Ping指令用于检测通信方是否可达。用Ping去控制时间,可以用短时间Ping大量数据。比如:可以Ping 8k的数据,底层用的都是IP的协议。ARP是对自己的设备来说去查表,比如ARP-A,可以看到里面的ARP的IP地址和MAC地址的映射关系,只有获得对方的MAC地址才能与对方进行通信,如果没有,则发送ARP广播来获取通信方MAC地址。

10

上位机的TCP/IP 跟1500的TCP/IP传输时间一样吗?


无论是两台PC做TCP/IP还是1500之间做TCP/IP通讯,肯定的一点是网络传输的速度是一样的,打包,解包的堆栈时间,取决于网卡的性能,对于西门子网卡和市面上普通网卡这两部分的时间应该都是类似的,最后剩余的就是我发送的循环周期和接收的循环周期谁快,对于PC来说未必比PLC快。如果PC发送周期比PLC长,那么PC的TCP/IP通讯肯定会慢。如果两者发送周期一样,发送速度几乎是一样的,没有太大差距。

11

环形网络需要在交换机设置才能避免数据广播风暴?


首先以太网是不支持环网的,需要环网管理协议,比如用MRP,HSP(快速冗余环网协议)等,这些都是有管理器和客户端的,由这些协议来控制环网。这种冗余方式当有一台设备坏了,可以切换过去,保障其他设备继续进行通讯,此时是避免了数据广播风暴的。

12

扫描周期不一样,会出现丢包的问题吗?


这个扫描周期是指做CPU的扫描周期,比如说设10毫秒,20毫秒或1毫秒等。TCP/IP的丢包有很多原因,比如网线短路或者做路由通信,路由器所造成的一部分丢包等等。但丢包没关系,TCP是可靠的安全的连接,有丢包其会重新发送,与扫描周期没关系,是由TCP/IP协议来决定的。

13

轮流跟多台西门子CPU通信,周期约5s,是否需要主动建立或断开连接?


一个CPU取决于PLC的连接资源的数量,假如一个PLC可以连接16个做TCP/IP通讯,也就是可以连接16台设备,连到第17台设备的时候要想通讯,需要断开一台TCP的连接,把资源释放掉再重新跟第17台做通讯,这种情况下才可以做轮流通讯。但至于说5s,因为不知道数据量多大,如果数据通讯量很少,5s够用。

14

使用TCON建立了解发送和接受数据,会影响CPU的扫描周期吗?


首先TCON是建立一个通讯资源,通讯资源的建立注册是一个程序的执行,并没有完成发送和接受数据,所以不影响扫描周期,只是消耗数据代码的时间。

15

连接建立后,TSEND和TRCV数据量大小对扫描周期的影响?


对扫描周期的影响很大,CPU默认的通讯负载是50%的情况下,它会处理PG在线程序等等,这些都会增加通讯负载里50%的负载,那么你的数据量越大,你要消耗的CPU的时间片的通讯部分就会越大,所以对扫描周期的影响就会越大。

16

CPU通讯负载可以调节的吗?

CPU通讯负载可以调节,因为在CPU设置的属性里,通讯负载是可以调节的,对1500PLC来说,默认是50%。

17

Keepalive时间是固定间隔发的吗?那如果断线后,再连接网线,重连的时间就不固定了?

Keepalive参数open出去了,意味着允许用户修改,默认时间是30s。设置多长时间,Keepalive探测帧就按照多长时间发送。还有在Keepalive设置为0的情况下,Keepalive就被禁止了。重连的时间取决于网络端口,例如自适应的端口时间,还有就是REQ的发送频率,越快重连时间越短。

18

Keepalive是客户端行为还是服务器端行为?


Keepalive与是客户端行为还是服务器端行为没有关系,是双方根据自定义的时间间隔,周期性的向通讯伙伴发送Keepalive探测帧,然后伙伴予以应答。

19

双方设定的Keepalive时间是如何协调的?是在通信握手的时候就协商时间,按最短的设置时间发送吗?


首先在握手的时候和Keepalive没有关系,也不会协商这个时间,握手只是做连接,主要确定堆栈Buffer大小。

20

1500TCP通讯怎么清缓存区,固定长度报文,对方发送长度造成接受混乱错位?


清缓存区不是人为可以清除的,除非释放资源TDISCON。Keepalive超过30s后会清缓冲区,但清缓冲区是发生断线的时候去清,那么除了断线,也有可能是网络拥堵而造成的超时等问题。

“如果指的是发送和接收的数据不匹配的话”,在做TCP/IP通讯的时候,我们在小于1460个字节的时候,可以使用AD-hoc模式,可以进行变长的数据通讯,这时数据可以基本争取的被接收,具体看问题4。

21

CPU的缓冲区是针对所有通讯链接使用同一个缓冲区,还是不同链接开辟不同缓冲区?


这个直接关系到CPU通讯资源的问题,比如315-2PN/DP有16个TCP/IP的连接,大家首先想到的肯定是可以连接16个通讯伙伴,但实际上来说,在内部当中,就表示我有多少内存大小分配给通讯去做数据交换。说白了,就是能给一个通讯分配多大的Shadow Buffer 和堆栈Buffer。既然有16个连接,有8k的Shadow Buffer和8K的堆栈Buffer,就意味着我们以Shadow Buffer或堆栈Buffer为例,都是8k。所需要的缓冲区大小至少是2x8x16,即CPU给你资源的分配都是按照内存的大小分配好的,不是共用的,每一个TCP的通讯都是individual,去用自己的Shadow Buffer和堆栈Buffer。

22

如何理解数据一致性的概念?


例如我从A向B发送1040个字节,但是由于我PLC的性能决定它最大的一致性是800的字节,那么多了的字节需要第二次才能发送出去。如果在你第二次发送给B剩余的240个字节的时候,B的PLC修改了后240字节中的数据,那么这时我们第一次发送的800个字节和后面发送的240个字节就不一致了。不一致最重要的影响在于,如果你做项目的时候利用这1040个字节做运算,eg:复杂的工艺上的计算、运行数据上的计算,那么计算时我需要这些数据是一致的。从A到B的过程中这些数据不能出现变化,要保持同一时刻数据是一致的,这时你算出来的结果才是正确的。如果单纯传数据作为显示,大家可能不会注意到。但是计算时不能忽略数据的一致性。

23

探测帧怎么用于断线诊断?程序怎么写?


编程是不需要的,只需要修改Keepalive参数。如果你希望在5秒内判断断线故障,你就把参数设成5秒。同时REQ不能手动去使能。如果REQ 20秒使能一次,那么判断出错故障至少需要20秒。如果REQ 100毫秒的循环周期使能,那么就能在5秒钟左右发现断线故障。

24

Shadow Buffer和堆栈Buffer在CPU的哪个存储区?


这个手册中并没有说明,最近讲的都是我总结出来的。这里希望给大家展示原理的探秘。手册即使没有说,但在老s7-400的手册中有提到:通信资源建立后,要在系统存储器中建立通讯缓冲区。所以对于400来说,Shadow Buffer是存在在系统存储器中。堆栈Buffer在网卡的缓冲区里。对于300确切的位置手册里没有说。在建立通讯缓冲区时就是在建立通信资源,Buffer都是独立分开的,开启Shadow Buffer就是在占用CPU资源。堆栈Buffer都是存在的,只是用的协议不同,谁要用谁就建立连接占用这部分通信资源。然而理论上这两个缓冲区都应该存储在CPU的接口网卡中。

25

OB1程序段里先通过TCON建立通讯,最后一行再TDISCON,CPU是真的在每个扫描周期都要重新建立一次通讯,然后再断开一次释放通讯资源吗?会不会一个周期内无法完成?


我们在建立连接和断开连接的一个循环周期里,同样,如果我们使用一个wait指令,使用一个loop循环去循环三秒钟。有些事情如果大家想不清楚大家可以去延长CPU的循环周期。在最开始使用TCON建立连接,实际上并没有通讯起来,只是建立了资源和缓冲区,包括对应的端口号、IP等,都注册进去。结尾再TDISCON断开,资源就被释放了。是这样一个过程。

26

一般有多个通讯的CPU,怎么把握CPU扫描周期设为多少合适?


大家还是自己去思考,如何优化设置多少合适。如果设置最小扫描循环周期为15ms,且CPU的代码执行是5毫秒,这是为了给更多的通讯让路,给更多的通讯分配额外的资源,但这就损失了你的循环周期,进一步损失了你的响应周期。这是一把双刃剑,可能会影响你实时的控制,那么你可以设置10ms,来满足你现场的控制。还是要看通讯有多少输入量。如果现场用到很多的连接,那么必须通讯优先,通讯荷载设置50%,为了通讯响应更好,那就要设置合适的循环周期,一方面保证我的通讯,一方面保障我现场控制的实时要求。

27

在通讯时,RT通讯为什么比TCP快?


这个问题比较系统。第一,对于TCP/IP通讯和PN通讯,我们在总线上传输的速度是一样的,都是100兆,这一点大家可以忽略比较;第二,就是堆栈。上几节课我提到了关于ISO/OSI参考模型的堆栈,PN RT使用的第七层和物理层(也就是第一二层),中间没有TCP/IP,也就意味着应用层(第七层)的数据会直接加载到物理层上去,为什么PB DP也快,原因是一样的,都是第七层落到物理层。对于TCP/IP,它堆栈没有PN快,因为数据进来需要TCP的打包、需要IP的打包,再在接收时解包,堆栈角度没有PN快。还有一个条件在于我们的芯片,芯片性能要一致,要在同样的性能上做比较。还有一点在于数据处理,Shadow Buffer对于通讯的处理。PN在数据发送中能以最小的以太网GAP进行发送,以太网之间最小的时间间隔时12个字节,TCP做不到,因为他要存储、等待、加载,于是从发送的角度PN RT也比TCP快。综上三个角度,RT通讯比TCP快。

28

TCP的变长接收是什么原理呢?


原理很复杂,原因在于我们看TCP标准没有AD-hoc模式,我们只在接收方有这个参数,接收的CPU告诉网卡要截取堆栈缓冲区取得数据,然后给Shadow Buffer。如果是1460的字节,就不会出错,但如果超过1460,无法取得正确数据。例子中还按1024字节去发送,发送9次,TCP/IP接收不激活的情况下,接收端就堆满了,当滑动窗口放开,发送的数据就变为了1460字节,这样数据的位置会发生变化,导致不能收到正确的数据。ISO on TCP是zuijia的可变长度协议。

29

ISO on TCP与PC端也能通信吗?


ISO on TCP也是开放式通信协议,跟TCP UDP一样,只要 PC端支持,就可以和西门子的PLC做通信。

30

S7协议和以太网协议有什么区别?


S7协议是西门子内部私有协议,不对外公开,只在西门子产品进行使用;是以太网协议的一部分,以太网协议范围很广泛。

31

TCP 和S7 协议怎么选择?


如果使用TCP,在底层处理效率会更高,因为S7是在加载TCP基础之上的。但是差异不明显,只是使用S7协议的时候,是在西门子产品之间;如果和第三方通讯的话,就要选择TCP协议。所以根据目标对象支持的协议进行选择即可。

32

只用Wireshark 与交换机连接,不是需要做端口镜像吗?


不使用交换机,就要用TAP 或者Bany设备,Bany Scope是结合硬件设备去使用的。可以先买价格较低的TAP做测试,性能上有一些限制。如果大家想做这方面研究,性价比最高的是镜像,条件允许就买Bany设备。


展开全文
商铺首页 拨打电话 QQ联系 发送询价