威纶通官方论坛

奇葩的tk8072ip宏代码运算24/5,显示的运算结果不正确

[复制链接]
发表于 2024-1-17 19:29:41 | 显示全部楼层 |阅读模式
本帖最后由 pcsms_KeFnChhO 于 2024-1-18 08:11 编辑

macro_command main()
float a
a=24/5
SetData(a, "Local HMI", LW, 2, 1)
end macro_command

上面这个简单的代码,在数值元件中,本来应该显示为4.8的,但是离线模拟只能显示4.0,


注:数值元件地址:Local HMI W2
      资料格式:32-bit Float
      小数点以上位数:3              小数点以下位数1

经过摸索,发现仅仅是公式:a=24/5或240/50或2400/500......(如此类推,在数值元件里显示的数值不能正确显示)其它的
没毛病,
请教一下各位老师,到底哪出错了?

1705490859624.png
1705490883232.png
1705490900060.png
发表于 2024-1-18 09:33:56 | 显示全部楼层
您好
欢迎您来威纶通论坛交流疑问。
论坛有分“HMI综合版”“Macro宏指令版”“变频器综合版”等
请大家“对号发帖”,谢谢配合。
发表于 2024-1-22 09:10:48 | 显示全部楼层
被除数加小数点,比如5改成5.0就可以了,不知道算不算BUG
发表于 2024-1-29 16:43:56 | 显示全部楼层
这个取决于威纶通使用的宏编译器. 一般的编译器按你的写法计算出来, 结果都会是4.0. 但是如果你写成 24.0/5 或 24/5.0或24.0/5.0, 结果就会是4.8了. 编译器计算时, 会根据变量的类型, 自动按最高级的数据类型进行计算, 把低级的数据转化为高级的数据后进行计算. 写成 24/5都是整型, 会按整型进行计算, 最后赋值给a的时候进行数值类型转换, 所以只有4.0了.
你按这样写, 就会变成4.8, 因为a已经被赋值24了, 在赋值时会强制转换为浮点数24, 后续计算时, 由于a已经是浮点数, 5会先被强制转换为浮点数后再进行计算.
macro_command main()
float a = 24
a = a / 5
SetData(a, "Local HMI", LW, 2, 1)
end macro_command

所以要用好宏, 可以先去学习一下高级语言编程, 以免一不小心踩在坑中.
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

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

GMT+8, 2024-5-7 14:34

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

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