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
    +关注

    关注

    5037

    文章

    14091

    浏览量

    476684
  • DFB
    DFB
    +关注

    关注

    1

    文章

    32

    浏览量

    10125
  • OPC
    OPC
    +关注

    关注

    7

    文章

    361

    浏览量

    47561
  • HMI
    HMI
    +关注

    关注

    9

    文章

    653

    浏览量

    50252

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用CYW20819和ModusToolbox?在闪存中的固定位定位变量

    我正在使用 CYW20819 和ModusToolbox?并尝试在闪存中的固定位定位变量。 我该怎么做? 我想我需要在链接器文件中定义一个部分,然后使用 CY_SECTION 命
    发表于 07-02 06:57

    飞凌嵌入式ElfBoard ELF 1板卡-uboot编译链接文件uboot.lds

    。uboot.lds中规定了整个uboot的程序入口点(此入口点可以在Makefile文件中进行了更改,将入口地址定位到了内存中0X87800000位置),链接器以这个入口点为基点,将各个.o文件中代码段.text
    发表于 05-22 11:20

    基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与变量内存布局优化精控方法

    的函数和变量指定section放置方法与操作流程,兼具过程记录与详细说明,旨在打造一份实用的参考指南,助力开发者精准掌控程序的内存分布与执行逻辑。文档涵盖从默认section表的介绍,到多种放置手段的阐释,以及实际配置示例的展示,为后续的开发工作奠定坚实基础。
    的头像 发表于 04-30 16:38 ?368次阅读
    基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与<b class='flag-5'>变量</b>内存布局优化精控<b class='flag-5'>方法</b>

    Ansible Playbook中的变量使用技巧

    在inventory中定义的连接变量(比如ansible_ssh_user);优先级第二。
    的头像 发表于 04-15 10:26 ?414次阅读

    在starvision2上移植FreeRTOS,objdump后发现static变量的地址是0,怎么解决?

    链接脚本还是什么的问题。objdump后发现static变量的地址是0。 没太搞懂是为什么。下面是我的链接脚本 OUTPUT_ARCH("riscv"
    发表于 03-10 07:21

    EE-88:使用21xx编译器在C中初始化变量

    电子发烧友网站提供《EE-88:使用21xx编译器在C中初始化变量.pdf》资料免费下载
    发表于 01-13 15:54 ?0次下载
    EE-88:使用21xx编译器在C中初始化<b class='flag-5'>变量</b>

    振弦式应变计测出来的应变量有什么用

    ?在工程监测与科学研究等诸多领域中,振弦式应变计扮演着十分重要的角色,它所测出来的应变量更是蕴含着关键的信息,有着广泛且重要的作用。以下就让我们深入探讨一下其具体用处。一、在土木工程领域的应用桥梁
    的头像 发表于 12-10 15:35 ?638次阅读
    振弦式应变计测出来的应<b class='flag-5'>变量</b>有什么用

    图纸模板中的文本变量

    “ ?文本变量和系统自带的内置变量,可以帮助工程师灵活、高效地配置标题栏中的信息,而不用担心模板中的文字对象被意外修改。 ? ” 文本变量的语法 文本变量以?${VARIABLENAM
    的头像 发表于 11-13 18:21 ?746次阅读
    图纸模板中的文本<b class='flag-5'>变量</b>

    如何在文本字段中使用上标、下标及变量

    在KiCad的任何文本字段中,都可以通过以下的方式实现上标、下标、上划线以及显示变量及字段值的描述: 文本变量“文本变量”可以在 原理图设置->工程->文本变量 中设置。下图中设置了一
    的头像 发表于 11-12 12:23 ?738次阅读
    如何在文本字段中使用上标、下标及<b class='flag-5'>变量</b>

    变量机器人宣布完成Pre-A与Pre-A+轮融资

    近日,具身智能创业公司自变量机器人(X Square)宣布连续完成Pre-A与Pre-A+轮融资,总融资额达到亿元级别。这一消息标志着自变量机器人在具身智能领域的发展迈出了坚实的一步。 本轮融资由德
    的头像 发表于 11-06 11:20 ?1326次阅读

    Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时
    的头像 发表于 10-23 13:39 ?856次阅读

    Xilinx设计工具怎么设置环境变量

    如果您不确定如何设置环境变量,尝试"1" 或 "TRUE"。
    的头像 发表于 10-22 13:32 ?701次阅读

    通过工业智能网关实现中间变量表达式的快速配置

    组态平台的主要功能之一就是监控下位机数据变量的变化,并通过绑定的控件进行展示。比如,很多时候,组态上的图形控件可能只绑定了一个温度变量,那么超过80度就会自动告警。但这个控件也有可能绑定多个变量
    的头像 发表于 10-08 17:10 ?732次阅读
    通过工业智能网关实现中间<b class='flag-5'>变量</b>表达式的快速配置

    Keil中变量不被初始化方法

    有些时候在我们的应用过程中要求变量有连续性,或者现场保留,例如Bootloader跳转,某种原因的复位过程中我们有些关键变量不能被初始化,在不同的编译环境下有不同的设置,本文就这个操作做总结,分别
    的头像 发表于 08-30 11:47 ?1641次阅读
    Keil中<b class='flag-5'>变量</b>不被初始化<b class='flag-5'>方法</b>

    飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之变量

    ,其与在脚本中使用方法一致)。1)变量值无空格var=value使用echo输出变量var,echo $var或者echo ${var},如图:也可以加上单引号或者双引号:var=\'value\'或
    发表于 08-29 11:04