组态控制方法

什么叫组态控制?

  • 从应用场景上来看,如果现在集成了一个系统,它既包括了生产A要用的全部I/O系统,又包括可生产B和C等等要用的全部I/O系统。但是ABC的生产I/O不一样(硬件组态不尽相同)。
  • 这个时候我就想用一套程序(包括硬件组态)就能适配全部的ABC生产。另外我在切换硬件组态的时候还要要求不能停机。
    以上的案例就衍生出来了组态控制。它实现了一种只需要一套程序和硬件组态,通过程序的方式(意味着可以通过HMI,WEB,上位机等更多方式)轻松的选择和设置相应的设备型号的方法。
    如图:

    如果想要现成的程序和实例,请直接访问sios,输入文档编号29430270获取详细资料官网有详细的LCC库文件来实现用户的组态控制需求。本文是纯折腾用的,不想折腾就不用往下看了。

1. 在1500中央机架上做组态控制

  • 先来介绍一下硬件配置数据的记录格式(直接截图了,累了):

    • 块长度计算:[4bytes+(slot数量*(bytes in per slot))],simtic1500系列每个slot占1个字节数量
    • ID:DS196,它是组态控制专用DS
    • 版本:用来区分产品类别(ET200MP,ET200SP或者SIMATIC S71500中央机架),中央机架我们就填4;另外subversion子版本1500填0。
    • 组态slot0,值16#0表示正在使用,值16#FF表示此模块在实际安装系统中不存在
    • slot1:表示CPU,因为CPU始终只能在插槽1里面,值16#1表示实际安装系统中正在使用
    • slot2~n:表示对应模块在实际安装系统中的插槽号,16#FF表示不存在。(比如中央机架最大插槽数是31,那么结构可以到slot31去
    • 实际没有的slot标记为16#FF,可以在组态里面把该插槽位忽略掉
  • 操作方法
    1 .在硬件组态里面勾选允许通过用户程序重新组态设备:右键PLC>选择组态控制>勾选

    1. 建立DS196数据结构如下(空缺运行的注释写错了,这里和空缺运行没有任何关系):
    2. DS写入设备中,靠WRREC指令
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      //用repeat..until直到完全写入程序再往下跑
      REPEAT
      #WRREC_Instance(REQ := "_RD_WR".WR.I.REQ,
      ID := "_RD_WR".WR.I.ID,//对于集中式设备,始终填写33(Local~Configuration
      INDEX := "_RD_WR".WR.I.INDEX,
      LEN := "_RD_WR".WR.I.LEN, //byte0中填写的字节数。
      DONE => "_RD_WR".WR.O.DONE,
      BUSY => "_RD_WR".WR.O.BUSY,
      ERROR => "_RD_WR".WR.O.ERROR,
      STATUS => "_RD_WR".WR.O.STATUS,
      RECORD := "_DS196");
      //status memerary
      IF "_RD_WR".WR.O.ERROR THEN
      #memerary := "_RD_WR".WR.O.STATUS;
      END_IF;
      //configDown
      IF 16#0070_0200 = "_RD_WR".WR.O.STATUS THEN
      #ConfigDown := TRUE;
      "_RD_WR".WR.I.REQ := FALSE;
      END_IF;
      UNTIL #ConfigDown END_REPEAT;

      .实测过,配置组态控制之后CPU启动速度会变得极慢,但是最终还是要起起来的。

2. 在I/O上做组态控制

  • 在I/O上做组态控制的场景如图:
  • 继续介绍IO系统的组态控制的数据格式
  • 操作方法
  1. 网络视图IO通信下面更改标签,使能可选IO设备,如图:

  2. 如果还需要通过程序重新定义端口互连的话,则还需要去设置以太网口端口的伙伴端口连接选项改为伙伴由用户程序设置,如图:

  3. 数据记录:
  4. 调用ReconfigIOSystem
    1
    2
    3
    4
    5
    //IO的组态控制
    #ReconfigIOSystem_Instance(REQ:="_RD_WR".WR.I.REQ,
    MODE:=2,//本质调用D_ACT_DP=1则禁用IO系统中的所有网络,=3启用IO系统中的所有网络,=2按照CTRCREC重新组态IO网络
    LADDR:=64,//CPUPN接口硬件标识符
    CTRLREC:="resys_IO".my_ctrlrec);//上面建立的resys_IO的数据结构的内容

3. 1200系统中的组态控制

如图:

  • 1200依旧使用DS196来完成组态控制
  • 实际没有的slot标记为16#FF,理解如上图

4. ET200MP_ET200SP_ET200PRO_ET200AL的控制组态

  • 总体方法和SIMATIC 1500上差不多,但是细节和DS结构上会有一些差别,详情参考TIA博图帮助信息。
  • ET200MP的version是3,ET200SP的version是2,AL和PRO也有自己的version
  • ET200SP,ET200MP,AL,PRO除了使用DS196写入(WRREC)配置之外,都可以使用DS197回读(RDREC)配置
  • ET200SP和ET200MP中slot不存在用值127表示。(ET200SP/ET200MP支持。AL和PRO没了解)
  • WRREC的ID填写输入扩展名为“∼Head”的 IM 子模块的硬件标识符。(ET200SP/ET200MP支持。AL和PRO没了解)
  • ET200SP在建立DS时除了需要slot之外,还有一个变量叫info_slot,info_slot=1表示打开新的电位组,DS197回读的时候结构需要注意一下。
  • 实际使用的时候请参见博图帮助,因为这一节是摘抄的帮助的相关信息,没有自己动手做。

组态控制方法
http://example.com/2024/07/21/组态控制方法/
作者
xiao cuncun
发布于
2024年7月21日
许可协议