Data consistency in PLC data transmission (2)
大家知道对于西门子PLC的部分s7通讯,如WINCC和PLC的s7通讯,PLC作为数据服务端,无通讯功能块的调用,整个通讯由PLC系统来控制。当WINCC对PLC数据的读写使用非基本数据类型,如原始数据类型。当原始数据类型的大小超过PLC规定的PDU大小时,PLC系统将不能保证通讯数据的一致性。
使用博途新建项目,添加数据块DB1,DB1中添加一个包含5000字节的数组。 WINCC添加s7-1200通讯驱动,对于DB1这个数组的读写访问使用原始数据类型。在驱动中建立原始数据类型变量tag1,地址属性:选中原始数据类型,长度设置5000(此值已经超过了s7-1200的PDU=240尺寸) 在PLC的OB1中添加如下测试程序用来验证数据的不一致性: 在WINCC画面中添加一按钮,在按下按钮事件中添加c脚本,以写入数据到原始数据变量tag1。 脚本的功能:修改DB1.DBB0和DB1.DBB4999的值为100,根据PLC的逻辑来置位%M1000.1 按下按钮触发脚本后,在线监视PLC,发现%M1000.0也被置位了,这就是因为系统控制的通讯数据不一致导致。 对于 S7 PLC,在操作系统的循环控制点,系统在保持数据一致性的情况下是将通信数据大小有限的块逐个复制到用户存储器中。而对于大型数据区,使用CPU有限时间片工作的通讯任务在CPU的一个循环周期内不能同时更新这一数据区,也就无法确保数据的一致性。
如果WINCC要和PLC进行大批量的数据量交换,又要保证数据的一致性,可以使用BSEND/BRCV通讯功能块实现。 由用户程序控制数据的一致性,如使用BSEND功能块的“DONE"信号、BRCV功能块的“NDR”信号。
下表是各PLC BSEND/BRCV功能块支持的最大数据容量(可惜s7-1200 plc并不支持)
|