威纶通官方论坛

宏指令-运算

[复制链接]
发表于 2020-8-13 17:23:15 | 显示全部楼层 |阅读模式
宏指令初学者求各位大师指点,最好有例子。拜谢!!!

邮箱:409843441@qq.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2020-8-28 12:04:13 | 显示全部楼层
搞好没?变量LW最好改RW停电保持地址,免得开机又要输入数据
发表于 2021-5-12 17:16:53 | 显示全部楼层
GetData(a, "Local HMI", LW, 60, 1)
GetData(b, "Local HMI", LW, 62, 1)
c=a*b
SetData(c, "Local HMI", LW, 64, 1)
发表于 2021-5-13 22:36:58 | 显示全部楼层

macro_command main()
unsigned char baifenbi,cishu           //定义变量类型
unsigned short canshu[10]                       //参数值
unsigned int guocheng[10]              //过程变量
unsigned short jieguo[10]                       //结果值
GetData(baifenbi, "HMI", LW, 0, 1)     //读取LW0的当前值
GetData(canshu[0], "HMI", LW, 10, 10)  //读取LW10到LW19的值分别存入canshu[0]到canshu[9]
for cishu = 0 to 9 step 1              //变量cishu从0到9一次计算,每次cishu值+1
        guocheng[cishu] = baifenbi * canshu[cishu]        //百分比*参数值
        jieguo[cishu] = guocheng[cishu] / 100                     
next
SetData(jieguo[0], "HMI", LW, 101, 10)                //将运算结果写入HMI,方便查看运算结果是否正确
SetData(jieguo[0], "MODBUS RTU", 3x, 1, 10)           //将运算结果写入目标设备

end macro_command
发表于 2021-5-13 22:46:33 | 显示全部楼层
可能有人会有疑问,为什么要定义一个无符号的int变量
因为:百分比×参数的值会超过short变量,造成运算位丢失
我就吃过这个亏,比如我直接写成jieguo[cishu]=baifenbi*canshu[cishu]/100
HMI的运行逻辑是,把baifenbi*canshu[cishu]运算出来的值存入canshu[cishu],然后在除以100
因为上面定义的canshu[cishu]是无符号short类型数据,数据上限是65535,那么百分比50*参数5000,结果是250000,超过了65535,所以溢出的高位数据就失效了,最后造成计算结果不对.
威纶通开发人员估计没考虑让大家用宏进行复杂的计算,希望能改一改.
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2024-4-25 16:33

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表