技术论坛

 • 产品分类
 • 咱工程师的故事
 • 培训与认证答疑专区
 • 服务合作伙伴专区

 如何把小数(比如0.1)转转成16进制的、而且是16位的数据

返回主题列表
作者 主题
昔日如诗
侠圣

经验值:3809
发帖数:803
精华帖:3
楼主    2023-11-14 11:10:55
主题:如何把小数(比如0.1)转转成16进制的、而且是16位的数据

    小数在西门子PLC里是实数,占32位。

    现在有台外围485设备接收数据的寄存器只能是小数,而且是16位的,数值范围在0.1-0.9(这是手册上规定了的)

    博图里的Conv指令没有直接将32位实数转换成16位且16进制小数的功能。

    有没有大侠赐教?不胜感谢。

    PS: 当然可以把这样的小数乘以16,取整;再把剩余的小数乘以16,再取整......如此搞出一系列整数,把这个系列的整数输入外围485设备的寄存器,也能达到目的。但是太麻烦了。

甫哥
奇侠

经验值:9787
发帖数:1453
精华帖:72
20楼    2023-11-25 16:43:06
精华帖  主题:回复:如何把小数(比如0.1)转转成16进制的、而且是16位的数据

按线性转换对比一下:

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了解甚少,不知道是否支持转为【无符号整数】,以及转为【十六进制数】。



书山有路勤为径,学海无涯苦作舟;三人行,必有我师;森林之外的树木也能成才
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。