作者 | 主题 |
---|---|
昔日如诗 侠圣 ![]() ![]() 经验值:3787 发帖数:797 精华帖:3 |
楼主
![]() 主题:如何把小数(比如0.1)转转成16进制的、而且是16位的数据 小数在西门子PLC里是实数,占32位。 现在有台外围485设备接收数据的寄存器只能是小数,而且是16位的,数值范围在0.1-0.9(这是手册上规定了的) 博图里的Conv指令没有直接将32位实数转换成16位且16进制小数的功能。 有没有大侠赐教?不胜感谢。 PS: 当然可以把这样的小数乘以16,取整;再把剩余的小数乘以16,再取整......如此搞出一系列整数,把这个系列的整数输入外围485设备的寄存器,也能达到目的。但是太麻烦了。 |
甫哥 奇侠 ![]() 经验值:9786 发帖数:1453 精华帖:72 |
20楼
![]() ![]() 按线性转换对比一下: 1)65536(十进制)*0.00(十进制)=0(十进制)=0000(十六进制)=0000 0000 0000 0000(二进制); 2)65536(十进制)*0.25(十进制)=16384(十进制)=4000(十六进制)=0100 0000 0000 0000(二进制); 3)65536(十进制)*0.75(十进制)=49152(十进制)=C000(十六进制)=1100 0000 0000 0000(二进制); 4)65536(十进制)*0.85(十进制)=55,705.6(十进制)四舍五入后=D99A(十六进制)=1101 1001 1001 1010(二进制); 5)65536(十进制)*1.00(十进制)=65536(十进制)=10000(十六进制)=0001 0000 0000 0000 0000(二进制); 另外,PLC中的 整数(无符号整数、有符号整数的正数)与 十六进制数(正整数)的二进制编码相同;又:PLC中,无论是何种格式的数据,均采用二进制方式保存。 结论: 1)可以理解为:0.0~1.0对应0~65536 2)说白了就是将0.25~0.75,线性转换为,两字节无符号整数 16384~49152。也就是所需的:十六进制数 4000~C000;二者的二进制编码相同。 转换换程序还需要提示不? 模拟量标定:整数线性转换为实数; 针对本贴:实数线性转换为整数; 针对本贴:线性转换公式简化后: 65536.0*数字设定值(0.25~0.75)的积,转换为整数后的值。就是要传送出去的【数字设定值】;其中 数字设定值(0.25~0.75)是实数格式的设定值。即:有单位的工程量设定值。 SMART200:【实数】的积转换为【双精度整数】,假如保存至VD0,则低字VW2就是要传送出去的无符号整数【数字设定值】。也就是十六进制【数字设定值】; 我对1200了解甚少,不知道是否支持转为【无符号整数】,以及转为【十六进制数】。
书山有路勤为径,学海无涯苦作舟;三人行,必有我师;森林之外的树木也能成才
|