0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DDT变量链接到定位变量方法

蓝牙 来源:工控论坛 作者: 董伟 2021-08-10 09:52 次阅读

一、概述

工业控制系统使用中,上位机组态软件、HMI触摸屏等显示设备与控制设备PLC按指定通讯协议进行数据交换是最为基本的功能了,以施耐德Modbus TCP协议为例,只要提供了支持此协议的PLC中变量的Modbus寄存器地址和数据类型,不管此PLC是哪个厂家的,都能实现HMI与PLC之间的数据交换。

二、问题的引出

目前PLC编程的主流思路不再是使用基于绝对地址的定位变量了,而是使用变量名+数据类型的非定位变量方式。以施耐德M580为例,其X80的I/O模块的通道值都是用Device DDT非定位变量表示的,并且不能直接指定%M、%MW等地址与其对应上。

这种表示方式对于OPC DA/UA及施耐德自己的HMI触摸屏来说没有什么问题,可以直接对应上,但是对于支持标准Modbus TCP协议的其它厂家触摸屏和上位机组态软件来说就不方便了,因为需要变量对应上标准Modbus寄存器地址才行。

三、解决办法

孔乙己说过,回字有四种写法。同样的,解决上述问题也有多种方法可以实现。思路是将M580里面的DDT地址对应到%M及%MW寄存器中,从而能和HMI进行MODBUS TCP通讯,

3.1复制 Device DDT变量类型直接链接绝对地址

此种方法的思路是新建一个结构体变量,类型输入与X80 I/O模块数据类型一致如T_U_DIS_STD_IN_32,然后编写程序链接上绝对地址如%MW10,详见下图:

d75927e0-f86d-11eb-9bcf-12bb97331649.png

3.2 ST编程FOR循环链接绝对地址

第一种方法比较费地址数量,适用于I/O模块不多,地址富余的工程项目。

如果I/O模块过多,可以尝试利用FOR循环编程批量链接地址的方式,如下图:每一个I/O模块使用一个FOR循环指令,将通道值(.VALUE)链接到%M或者%MW寄存器地址。

这种方式的优势在于省寄存器地址,不像方法1,不管开关量还是模拟量,都必须关联%MW寄存器地址,而且不需要的状态等DDT变量也必须链接%MW寄存器地址。不过,ST编程FOR循环链接绝对地址有一个缺点,就是因为DDT变量名称太过接近并且I/O模块通道数不一样,修改的时候容易眼花误操作。

3.3编写自定义DFB功能块链接绝对地址

举例32通道点X80的DI模块,DDT中变量众多,我们只需要转换32个通道数值即可;

新建DFB块DI_EXCHANGE,输入管脚DI_INT,数据类型T_U_DIS_STD_IN_32(调用DFB时,输入就可只填写MOD_DIS_32_2),输出管脚DO_OUT,数据类型ARRAY[0..31] OF EBOOL;

编写逻辑程序,采用ST编程方式,把输入点的值一个一个赋值到输出,链接到%M寄存器,然后在MAST里面程序段中调用DI_EXCHANG即可,实现32点的DI模块的通道值批量链接到了%M中。

同样的,32点DO模块的处理方法是类似的,新建X80_DDO_32,定义输入IN1,数据类型T_U_DIS_STD_OUT_32,输出OUT1,OUT2,数据类型INT,编写ST程序链接上%M寄存器,在MAST里面调用新建的功能块X80_DDO_32即可。

这些DFB功能块做好后直接右键导出的功能块类型XDB格式,可以再导入到其它程序段中直接调用即可,移植方便,无须再次制作此DFB块。

四 小结

针对M580的X80 I/O模块的通道值都是用Device DDT非定位变量表示,并且不能直接指定%M、%MW等地址与其对应上,但是触摸屏和上位机组态软件来说需要变量对应上标准Modbus寄存器地址的问题,提出了3种解决方法。这3种方法特点明确,各有优劣。

复制 Device DDT变量类型直接链接绝对地址法简单明晰,适合刚入施耐德编程大门的初级工程师;ST编程FOR循环链接绝对地址法和编写自定义DFB功能块链接绝对地址法对工程师编程水平要求稍高,通用性更强,适合对施耐德Unity软件编程操作有一定了解的工程师使用。

不管白猫还是黑猫,能够抓住老鼠的猫就是好猫,同样,不管使用何种方法操作,能耐解决实际问题就是工程师能力的体现,解决上述问题的方法也不止这三种,更多的可能性等待你去探索实践。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    4974

    文章

    12250

    浏览量

    454862
  • DFB
    DFB
    +关注

    关注

    1

    文章

    25

    浏览量

    9841
  • OPC
    OPC
    +关注

    关注

    7

    文章

    263

    浏览量

    45727
  • HMI
    HMI
    +关注

    关注

    9

    文章

    488

    浏览量

    47886

原文标题:施耐德M580系列的X80 I/O模块通道值非定位Device DDT变量链接到定位变量方法

文章出处:【微信号:TalkBT,微信公众号:蓝牙】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言变量应用详解

    变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
    发表于 03-18 11:18 152次阅读
    C语言<b class='flag-5'>变量</b>应用详解

    Tasking的链接选项配置,怎样影响const变量的地址定位

    Tasking的链接选项 配置 怎样影响 const 变量的地址定位
    发表于 02-02 09:19

    如何使用GPT监控变量

    在项目调试过程中,需要监控变量通常采用ICS(In Circuit Scope)和DA两种方法。使用ICS会占用MCU的资源(UART)以及增加硬件的成本(ICS硬件板);如果MCU的DA引脚已被
    的头像 发表于 01-04 12:21 782次阅读
    如何使用GPT监控<b class='flag-5'>变量</b>

    Linux环境变量配置方法

    想必大家平时工作中也会配置Linux的环境变量,但是可能也仅仅是为解决某些工具的运行环境,对于Linux环境变量本身的配置学问还没深入了解。今天浩道跟大家分享Linux环境变量的硬核干货,让你一次盘个够!
    的头像 发表于 01-04 09:51 253次阅读

    for循环里的变量是局部变量

    对于一个普通for循环而言,循环变量是局部变量。在大多数编程语言中,循环变量只在循环内部的作用域中可见。换句话说,循环变量的声明和赋值仅在循环的每次迭代中有效,并且不能在循环外部访问或
    的头像 发表于 11-23 14:50 991次阅读

    Shell脚本中的变量详解

    使用 unset 命令可以删除变量变量被删除后不能再次使用。unset 命令不能删除只读变量
    的头像 发表于 10-27 11:21 278次阅读

    什么是变量?PLC变量哪些部分组成?

    变量在 TIA Portal 中集中管理。 在程序编辑器中创建 PLC 变量与在 PLC 变量表中创建 PLC 变量没什么区别。 如果在程序或 HMI 画面的多个位置使用某个
    发表于 10-15 11:31 1986次阅读
    什么是<b class='flag-5'>变量</b>?PLC<b class='flag-5'>变量</b>哪些部分组成?

    Java变量的命名规范

    什么是变量变量就是初中数学的代数的概念,例如一个简单的方程,x,y都是变量: y=x^2+1 在Java程序设计中,变量是指一个包含值的存储地址以及对应的符号名称。 从定义上来看,
    的头像 发表于 10-10 11:49 415次阅读

    Linux环境变量的配置方法

    在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法
    发表于 09-27 09:50 157次阅读

    怎么快速进行变量和函数的命名?

    enum(枚举)类型,前缀使用“e”+枚举变量名,其成员前缀为枚举变量或者其缩写;struct(结构体)类型,前缀使用“s”+结构体变量名,其成员和变量定义规则相同;union(联合)
    发表于 08-18 10:30 232次阅读

    结构体成员变量的引用方法123

    这里采用的是常用的typedef关键字进行定义结构体类型,可以看到student_t这种数据类型里面有4个成员变量,分别是学号、姓名、分数、年龄,这些成员变量既然是变量就应该满足变量
    的头像 发表于 07-08 14:45 1676次阅读
    结构体成员<b class='flag-5'>变量</b>的引用<b class='flag-5'>方法</b>123

    ADS应用技巧—ADS的变量扫描

    在ADS中,如果要扫描一个参数,通常是定义一个变量,用这个变量给元件参数赋值,再通过控件扫描这个变量
    的头像 发表于 07-05 11:31 6746次阅读
    ADS应用技巧—ADS的<b class='flag-5'>变量</b>扫描

    博途WINCCV15:用于采集和编辑过程值的变量

    。      在 WinCC 中使用外部变量采集过程值,并访问所连接的自动化系统中的内存地址。内部变量没有链接到任何过程,只可用于相关联的 HMI 设备。 外部变量值和内部
    的头像 发表于 07-03 11:32 2806次阅读
    博途WINCCV15:用于采集和编辑过程值的<b class='flag-5'>变量</b>

    西门子博途:PLC变量

    PLC 变量表包含在整个 CPU 范围有效的变量和符号常量的定义。系统会为项目中使用的每个 CPU 自动创建一个 PLC 变量表。可以创建其它变量表用于对
    的头像 发表于 06-14 10:32 5474次阅读
    西门子博途:PLC<b class='flag-5'>变量</b>

    Bash脚本中特殊变量$0是什么?

    在 Bash 脚本中,`$0` 是一个特殊变量,它代表当前脚本的路径和名称。这个变量用于表示脚本自身,它是 Bash 环境中的一个重要组成部分。`$0` 变量是一个只读变量,无法更改。
    的头像 发表于 05-12 14:41 1511次阅读