登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:【转】TIA博途编程技巧和陷阱

点击:3754 回复:2

  文章标题:TIA博途编程技巧和陷阱
  文章作者:RobinLiu
  文章链接:https://mp.weixin.qq.com/s/8qxBHP4iSEztOuLA00ZIGQ
  侵权请联系论坛管理员删除

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

工控新闻

更多新闻资讯