首页 > 其他分享 >组态控制方法

组态控制方法

时间:2024-04-19 17:11:43浏览次数:25  
标签:控制 False 方法 组态 RD WR IO True

什么叫组态控制?

  • 从应用场景上来看,如果现在集成了一个系统,它既包括了生产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去
  • 操作方法
    1 .在硬件组态里面勾选允许通过用户程序重新组态设备:右键PLC>选择组态控制>勾选
    2. 建立DS196数据结构如下:

    3. DS写入设备中,靠WRREC指令

//用repeat..until直到完全写入程序再往下跑
REPEAT  
    #WRREC_Instance(REQ := "_RD_WR".WR.I.REQ,
                    ID := "_RD_WR".WR.I.ID,
                    INDEX := "_RD_WR".WR.I.INDEX,
                    LEN := "_RD_WR".WR.I.LEN, //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启动速度会变得极慢,但是最终还是要起起来的。

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

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

  3. 数据记录:
	my_ctrlrec	Struct		False	True	True	True	False		
	Version	Word	16#0	False	True	True	True	False		记录版本,高01,低00
	num_of_opt_device	Word	16#0	False	True	True	True	False		实际组态中的可选设备数
	active_opt_device	Array[0..2] of HW_DEVICE		False	True	True	True	False		实际组态中的可选设备HW_IO
	active_opt_device[0]	HW_DEVICE	0	False	True	True	True	False		实际组态中的可选设备HW_IO
	active_opt_device[1]	HW_DEVICE	0	False	True	True	True	False		实际组态中的可选设备HW_IO
	active_opt_device[2]	HW_DEVICE	0	False	True	True	True	False		实际组态中的可选设备HW_IO
	num_of_port_interface	Word	16#0	False	True	True	True	False		实际组态中的端口互连数,不指定则输入0
	port_interface	Array[0..2] of "port_interface"		False	True	True	True	False		实际组态中的可选端口HW_IO
	port_interface[0]	"port_interface"		False	True	True	True	False		实际组态中的可选端口HW_IO
	port_interface[1]	"port_interface"		False	True	True	True	False		实际组态中的可选端口HW_IO
	port_interface[2]	"port_interface"		False	True	True	True	False		实际组态中的可选端口HW_IO

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

标签:控制,False,方法,组态,RD,WR,IO,True
From: https://www.cnblogs.com/xiacuncun/p/18146426

相关文章

  • 微信小程序 input 不能输入特殊字符的方法
    微信小程序开发中经常遇到有表单提交的需求,一些特殊的字段要过滤掉特殊字符。比如姓名、籍贯、地址等,都要实现不能输入特殊字符的功能,可以创建一个统一的方法来处理输入事件,并在这个方法中检查输入的字符。下面是一个简单的示例:<viewclass='flexf30ali-center'><......
  • 论TCP协议中的拥塞控制机制与网络稳定性
    TCP协议中的拥塞控制机制与网络稳定性的深度探讨随着互联网的快速发展,网络流量呈现爆炸式增长,网络拥塞问题逐渐凸显。为了维护网络的稳定运行,TCP协议中引入了拥塞控制机制。这一机制的主要目的是防止过多的数据注入网络,从而避免网络拥塞。然而,尽管拥塞控制机制在很大程度上能够减......
  • cenots7.6系统报“fork:Cannot allocate memory” 报错的解决方法(实操)
    今日早晨上班上报一台虚拟机无法ssh连接,想着大抵是关机了,又或是存储满了(经常遇到这样的事情,因为基本上都是做的厚置备,所以会导致分配容量大于实际容量)。打开后台查看报警事件,没有!预感到此事不大简单。。。。进入控制台,输入w好家伙,输出fork:Cannotallocatememory翻译一下:内......
  • 从系统设计到撸代码?我用了这些方法和工具
    大家好,我是老猫。今天和大家分享一下程序员日常的绘图思路,以及一些老猫日常使用的绘图工具。为什么要画图?我们在进行系统设计的时候,为了更加具象地呈现系统的轮廓以及各个组件或者系统之间的关系和边界以及工作流程。我们就会画逻辑架构图,模块图、流程图、时序图等等。在日常开......
  • fluent AI的常用方法
    FluentAPI是EntityFrameworkCore的一个功能,它提供了一组可以以流式、链式调用的方法来配置EF的模型。它给予你对模型的完全控制权,高于数据注解(DataAnnotations)的优先级。它通常用于DbContext中的OnModelCreating方法里。以下是一些常用的FluentAPI配置方法的例子:配置主键cs......
  • pytest多线程运行控制台日志输出异常
    开启多线程后控制台日志显示错误,但是日志文件输出正确百度了一个晚上也没有解决,AI也问不出来解决办法,希望有大佬看到。开启多线程运行用例单独运行只有一个线程【gw1】输出日志信息。【gw2,gw0,gw3】都不能输出日志信息通过main()方式运行,控制台日志信息乱码......
  • 树1-二叉树概念与遍历方法
    树1:二叉树概念与遍历方法二叉树二叉树的遍历二叉树遍历分为前序,中序,后序.序是指遍历根结点的顺序D-data,根L左R右,先序遍历ABCDE-FGH中序遍历BDCE-A-FHG后序遍历DECB-HGF-A先序遍历ABDH-I-EJCFG中序遍历HDI-B-JEAFCG后序遍历HID-J......
  • C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
    C++类方法类方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型:类内定义方法:直接在类定义内部声明和定义方法。类外定义方法:在类定义内部声明方法,并在类外部单独定义方法。类内定义方法在类定义内部可以直接声明和......
  • shell系统函数和流程控制
    系统函数:1、简单示例:点击查看代码#!/bin/bashfilename="$1"_log_$(datename+%S)echo$filenamebasename:基本语法:basename[string/pathname][suffix](功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将左右字符显示出来。basename可以理解为路......
  • 【面试准备】跨域问题解决方法
    跨域是什么浏览器对于javascript的同源策略的限制,是一种安全策略举例:用户登陆某个网站后,服务器在客户端写了一些cookie,如果cookie被其他网站读取,那么隐私信息就会泄漏,包含用户的登录状态等。跨域情况说明:域名不同域名相同,端口不同二级域名不同跨域问题解决jsonpngi......