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

    关注

    5052

    文章

    14930

    浏览量

    489409
  • DFB
    DFB
    +关注

    关注

    1

    文章

    34

    浏览量

    10338
  • OPC
    OPC
    +关注

    关注

    7

    文章

    376

    浏览量

    49487
  • HMI
    HMI
    +关注

    关注

    9

    文章

    736

    浏览量

    52460

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自定义卡片编辑---编辑变量

    决定。 变量的类型有String、Number、Array、Object、Object(聚合链接)和Boolean,Object(聚合链接)的配置方式参见跳转(跳转是指点击卡片跳转至对应的应用、元服务
    发表于 04-27 15:07

    深度解析 RK 平台 U-Boot 环境变量(env):原理、配置与实战

    定制化设计。本文将从通用概念、RK 平台特殊处理、工作流程、调试方法等维度,全面拆解 RK 平台环境变量的底层逻辑与实操技巧。 一、环境变量的通用概念 1.1 什么是环境变量? 环境
    的头像 发表于 04-27 07:11 636次阅读
    深度解析 RK 平台 U-Boot 环境<b class='flag-5'>变量</b>(env):原理、配置与实战

    组态屏变量地址映射 / 数据类型不匹配解决方法

    、控制失效问题屡见不鲜。这些问题轻则造成数值跳变、按钮无响应,重则引发设备误动作,甚至危及生产安全。因此,掌握变量地址映射与数据类型不匹配的系统性解决方法,是每一位自
    的头像 发表于 04-22 10:41 329次阅读
    组态屏<b class='flag-5'>变量</b>地址映射 / 数据类型不匹配解决<b class='flag-5'>方法</b>

    如何为 S32DS 中的特定变量(RAM、闪存、数据闪存)强制使用特定内存区域?

    我正在使用S32K358并使用S32 设计工作室 (S32DS)作为我的 IDE。我想预留特定内存区域对于某些变量,并确保这些分配是在构建期间不受编译器或链接器的影响——尤其是当项目后期引入新变量
    发表于 04-16 06:52

    飞凌嵌入式ElfBoard-环境变量之删除清空环境变量environ

    使用这种方法,除非明确知道这么操作是为了做什么。因此,最好在需要清除某个特定环境变量时使用 unsetenv()函数显式地删除它,以释放其占用的内存。
    发表于 03-26 10:23

    如何在EtherCAT从站上增加模拟量输入AI变量

    要在EtherCAT从站增加模拟量输入AI变量,首先需更新从站设备程序,定义新的AI变量并初始化。
    的头像 发表于 03-11 16:30 292次阅读
    如何在EtherCAT从站上增加模拟量输入AI<b class='flag-5'>变量</b>

    “明牌”对局,自变量开源模型超越pi0

    “明牌”对局,自变量开源模型超越pi0
    的头像 发表于 01-10 12:00 5843次阅读
    “明牌”对局,自<b class='flag-5'>变量</b>开源模型超越pi0

    用户对变量或寄存器进行位操作的方法

    嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 考察点: 1:不知道
    发表于 12-23 08:16

    C语言全局变量重点使用

    重要的循环中我们不建议使用全局变量。 如果函数过多的使用全局变量,比较好的做法是拷贝全局变量的值到局部变量, 这样它才可以存放在寄存器。这种方法
    发表于 12-12 06:58

    第7章 变量进阶与点阵LED(7.1 7.2)

    走在马路上的时候,经常会看到马路两侧有一些LED点阵的广告牌,这些广告牌看起来绚烂夺目,非常吸引人,而且还会变化很多种不同的显示方式。本章就会学习到点阵LED的控制方式,同时也会学习C语言变量的进阶
    的头像 发表于 12-10 16:25 552次阅读

    常用变量的介绍

    extern:用在全局变量上表示该变量在其他文件中已经定义;用在函数上作用同全局变量; static:用在全局变量上,和非静态全局变量相比,
    发表于 11-21 07:05

    变量控件实验

    数据、变量、数字等等显示。2、实验设备下载软件一个,HMIMaker下载软件链接,http://www.gz-yixian.com/Download.asp,单片机智能
    的头像 发表于 11-20 15:04 2436次阅读
    <b class='flag-5'>变量</b>控件实验

    影响同步带模组成本的五大核心变量分析

    影响同步带模组成本的五大核心变量
    的头像 发表于 10-15 17:52 820次阅读
    影响同步带模组成本的五大核心<b class='flag-5'>变量</b>分析

    PLC中Static和Temp变量的区别

    大家好,收到粉丝投稿,让博主讲下Static变量和Temp变量的区别,新入行的兄弟可能会对这两个概念不太能理解。
    的头像 发表于 09-24 14:51 1742次阅读
    PLC中Static和Temp<b class='flag-5'>变量</b>的区别

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

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