用过西门子PLC 做过通讯的各位,想必对西门子PLC之间的S7 单边通讯PUT/GET并不陌生,但是PUT/GET 通讯的数据长度到底能有多大呢?嗯,看看帮助,下面是帮助中关于PGT/GET 数据长度的图表.. 小编弱弱问一句,懂了没?有没有一种雾里看花水中望月的感觉?我估计就这个表,你去问10个人,得到的答案绝对不一样。有时候真想吐槽,德国的钢铁直男们写出来的帮助,真是不解风情,难懂!
今天,趁着疫情居家有空,小编拿出自己压箱底儿的硬货,彻底给大家拨云见日!
要真正理解PGT/GET 数据长度,首先要搞明白一个概念“PDU”:协议数据单元。如下图,以太网数据帧的长度就那么多,掐头去尾能放数据的就叫PDU,每个通讯层级都有自己可用的PDU长度,随着通讯层级上升可用PDU长度就会减小,S7 通讯是七层应用层协议,到了S7 这一层的PDU 能用的长度和PLC 的类型是有关系的。
如下表,不同的CPU,S7 的PDU长度不同。而实际通讯协商过程中,通讯双方最终协商出的PDU 一定是以最小的一方为准。这样,知道了本地CPU 和远程CPU的类型就可以知道最终通讯使用的PDU 长度。
S7通讯的PDU中除了数据外,还会包含协议层的信息,因此实际数据长度会小于PDU。理解了PDU的概念,再回到帮助中PUT/GET 数据长度就容易搞明白了。 “Data block size”就是表示本地可能的CPU和协商出来的通讯PDU,“240 (S7-300)”表示本地CPU S7-300,协商后的PDU 是240字节,比较特殊的是S7-300 CP模块,无论通讯对象和角色,虽然PDU 是240字节,但是PUT/GET 长度最大160字节。
例如“240 (S7-400)”,本地使用S7-400 CPU,能够协商出240字节的PDU,通讯对象只可能是S7-300/S7-1200,而数据长度也和PUT/GET 定义的数据区“SD_i”、“RD_i”、 “ADDR_i”有关系,每增加一个数据区,总的数据长度就会有所减少。同理,这个长度也适用于本地S7-1500。
再例如“480 (S7-400)”,本地使用S7-400 CPU,能够协商出480的PDU,通讯对象只可能是S7-400/S7-1500,而数据长度也和PUT/GET 定义的数据区“SD_i”、“RD_i”、 “ADDR_i”有关系,每增加一个数据区,总的数据长度就会有所减少。
小编通过给PUT/GET 在线帮助加了一些注释,结合上面说的概念,想必这下终于能一目了然了!