最近在网上遇到一个用户反馈的问题,是关于EM277的,我简单介绍一下,讲起来还挺有意思。
S7-200是西门子很成功的一款CPU,在国内拥有大量的用户,也使用了很多年(图1)。
图1 S7-200系列PLC
EM277是S7-200用于DP通讯的模块(图2)。
图2 EM277用于DP通讯
用户反馈的一个问题,是关于EM277与CPU 315连接,在通讯设置过程中,如果输入地址长度为“字(Word)”,一致性设置为“总长度(Total length)”,此时最多只能设置为8个字(Word);如果将一致性设置为“单元(Unit)”,则最多可设置16个字(Word)。如果超过这个设置长度,则下载后会报错,模块不能正常工作。
当时看到这个反馈,我的第一反应是有点不可思议:首先是这个产品已经用了这么多年了,并且拥有大量的用户,从来没听说过类似情况的反映;其次,EM277产品本身似乎也没有什么问题,因此在我们平时支持的过程中,也几乎没怎么接到过EM277使用过程中有类似问题的反馈,并且这个产品已经非常成熟了,因此我们这边也很少再针对这个产品做什么测试了,结果居然有这样的问题反馈,这倒是令我感到有些意外,同时也有点怀疑用户的反馈是否正确。
于是我做了一个简单的组态(图3)。
图3 组态EM277
在组态过程中,可以发现:
1)在右侧的可选字节长度中,可以看到有32个字(Word)的IO可以选择;
2 )在组态成为自定义长度的过程中,IO的字长系统可以允许最长64个字(Word)。
因此,我基本上判断用户可能是使用上有些错误的地方。
但按照客户的描述,似乎又是实际的情况……
于是,我们决定做个测试。
测试的过程我就不详述了,我们用各种字节长度进行了组合,得到一些测试结果:
1)组态通用模块,输入输出类型,一致性选择为“Total Length(总长度)”,如果长度超过8个字(Word),则报错(见图4,5)。
图4 通讯字节设置超过8个word
图5 报错信息
2)组态通用模块,输入输出类型,64个字(Word)输入/64个字(Word)输出,一致性选“Unit(单元)”,可以正常通讯(见图6)。
图6 总长度的设置为64个字
因此,从测试的结果看,我们最终得到这样一个结果,对于S7-300与EM277进行DP通讯来讲:
一致性选择为“Total Length(总长度)”,长度最多设置为8个字(Word)。
一致性选“Unit(单元)”,长度最多可设置64个字(Word)。
至此,可以说我们得到了设备配置方面的结论。但其实还有个问题,即从结果上看,设置总长度时,貌似一致性数据的长度比设置单元的要小,这是什么原因,为什么会是这样的结果?
于是我们进一步检查了数据一致性的相关内容,发现如果我们去查看S7-300的数据一致性,可以看到,大多数情况下,数据一致性在访问点刷新时,应该是不大于32个字节(有的CPU是8个字节);而在DP通讯过程中,由于DP通讯并非直接的访问点刷新,因此此时在一致性选择为“总长度(Total Length)”时,其一致性也是有限制的,例如此时最大仅可设置8个字,如果超限就会报错;但如果一致性设置是“单元(Unit)”,则其一致性仅为一个“字(Word)”或者“字节(Byte)”—取决于设置,因此,此时最大通讯数据可设置为64个字,但实际的一致性数据仅为1个“单元(Unit)”。
至此,我们才找到这个问题背后的真实原因。另外,我们也看到,数据一致性也取决于设备、通讯方式等等因素,因此,这个Case 分享给大家,抛砖引玉,如果您对数据一致性的话题感兴趣的话,大家可以一起查些资料,继续讨论一下。