pcsms_KeFnChhO 发表于 2024-1-17 19:29:41

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

本帖最后由 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 :LW2
      资料格式:32-bit Float
      小数点以上位数:3            小数点以下位数1

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

weinview 发表于 2024-1-18 09:33:56

您好
欢迎您来威纶通论坛交流疑问。
论坛有分“HMI综合版”“Macro宏指令版”“变频器综合版”等
请大家“对号发帖”,谢谢配合。

pcsms_qymdZRB2 发表于 2024-1-22 09:10:48

被除数加小数点,比如5改成5.0就可以了,不知道算不算BUG

pcsms_a8nqvmYt 发表于 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

所以要用好宏, 可以先去学习一下高级语言编程, 以免一不小心踩在坑中.
页: [1]
查看完整版本: 奇葩的tk8072ip宏代码运算24/5,显示的运算结果不正确