恭喜,你发布的帖子
发布于 2024-06-23 22:42:26
38楼
我给你道歉。
我又回去看了问题,确实是没看仔细。
说它是补码表示的数,不对,引起不良误导,十分抱歉。
这个温度模块,放弃更为合适的补码,而采取最初级的符号数表示,非常不通用。
单纯以最高位表示符号,不能直接使用现有的加减法进行运算。
使用前,把它变成一个补码方式表示的数,处理起来就更方便。
参考的方法:
假如VW0是传上来的那个数
LDW<= 16#8000, VW0 // 判断最高位是否为1
ANDW 16#7FFF, VW0 // 去掉符号位,变成正值
*I -1, VW0 // 变成补码表示的负数
转成LAD:
如果,数据自身要表达1位小数,可再继续转成浮点数,并除以10.0。
比如,VW0存放补码方式表示的16位整数:
LD Always_On:SM0.0
ITD VW0, AC0 // 扩展16位数至32位,存于AC0
DTR AC0, AC0 // 32位整数转浮点数
/R 10.0, AC0 // 含1位小数
转成LAD:
不用道歉的哈,同时也非常感谢你给我这么详细的解答,正是因为我的数据基础知识不过关,导致我即使理解了解析规则,也没法写出解析指令程序来,说明我的学习还不够,给各位大佬带来困扰,是我抱歉。同时看到各位这么积极热情的帮我解决问题,让我感觉到了西门子这个大家庭的温暖,再次感谢大家,这次让我学到了好几种解析方案
请填写推广理由:
分享
只看
楼主