和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float

和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float

代码截图

验证

完整可导入代码

复制到记事本中,保存为xml文件,在和利时M6 AutoThink中导入

<?xml version="1.0" encoding="ISO-8859-1"?>
<pou>
<path><![CDATA[USER]]></path>
<name>IEEE754</name>
<secondName></secondName>
<description>4Byte数据转换为单精度浮点数</description>
<flags>2048</flags>
<auto-sort>0</auto-sort>
<exporttime>2023-06-17 11:40:43</exporttime>
<amendtime>2023-06-17 11:38:00</amendtime>
<downloadtime></downloadtime>
<modifier>AAAA</modifier>
<PouPaperSize>A4</PouPaperSize>
<PouPrintType>1</PouPrintType>
<PouExcuteOrder>0</PouExcuteOrder>
<interface>
<![CDATA[FUNCTION IEEE754 : REAL
VAR
S1(2112): INT := 0;
E1(2112): INT := 0;
F1(2112): DWORD := 0;
END_VAR
VAR_INPUT
IB0(2113): BYTE := 0;
IB1(2113): BYTE := 0;
IB2(2113): BYTE := 0;
IB3(2113): BYTE := 0;
END_VAR
VAR_IN_OUT
END_VAR]]>
</interface>
<st>
<body>
<![CDATA[(*
2023年6月17日 11:36 周六
注意:当4个byte数据均为0时,输出是一个非常小的数值,而不是0
原因在与 EXPT(2, INT_TO_REAL(E1 - 127)) 不为0,该问题暂未解决
*)
(*--------数据位传输--------*);
F1 := PUTBIT(F1, 0, EXTRACT(IB0,0));
F1 := PUTBIT(F1, 1, EXTRACT(IB0,1));
F1 := PUTBIT(F1, 2, EXTRACT(IB0,2));
F1 := PUTBIT(F1, 3, EXTRACT(IB0,3));
F1 := PUTBIT(F1, 4, EXTRACT(IB0,4));
F1 := PUTBIT(F1, 5, EXTRACT(IB0,5));
F1 := PUTBIT(F1, 6, EXTRACT(IB0,6));
F1 := PUTBIT(F1, 7, EXTRACT(IB0,7));
F1 := PUTBIT(F1, 8, EXTRACT(IB1,0));
F1 := PUTBIT(F1, 9, EXTRACT(IB1,1));
F1 := PUTBIT(F1, 10, EXTRACT(IB1,2));
F1 := PUTBIT(F1, 11, EXTRACT(IB1,3));
F1 := PUTBIT(F1, 12, EXTRACT(IB1,4));
F1 := PUTBIT(F1, 13, EXTRACT(IB1,5));
F1 := PUTBIT(F1, 14, EXTRACT(IB1,6));
F1 := PUTBIT(F1, 15, EXTRACT(IB1,7));
F1 := PUTBIT(F1, 16, EXTRACT(IB2,0));
F1 := PUTBIT(F1, 17, EXTRACT(IB2,1));
F1 := PUTBIT(F1, 18, EXTRACT(IB2,2));
F1 := PUTBIT(F1, 19, EXTRACT(IB2,3));
F1 := PUTBIT(F1, 20, EXTRACT(IB2,4));
F1 := PUTBIT(F1, 21, EXTRACT(IB2,5));
F1 := PUTBIT(F1, 22, EXTRACT(IB2,6));
(*--------指数位传输--------*)
E1 := PUTBIT(E1, 0, EXTRACT(IB2,7));
E1 := PUTBIT(E1, 1, EXTRACT(IB3,0));
E1 := PUTBIT(E1, 2, EXTRACT(IB3,1));
E1 := PUTBIT(E1, 3, EXTRACT(IB3,2));
E1 := PUTBIT(E1, 4, EXTRACT(IB3,3));
E1 := PUTBIT(E1, 5, EXTRACT(IB3,4));
E1 := PUTBIT(E1, 6, EXTRACT(IB3,5));
E1 := PUTBIT(E1, 7, EXTRACT(IB3,6));
(*--------符号位传输--------*)
S1 := PUTBIT(S1, 0, EXTRACT(IB3,7));
IEEE754 := EXPT(-1, INT_TO_REAL(S1)) * EXPT(2, INT_TO_REAL(E1 - 127)) * ( DWORD_TO_REAL(F1) * (EXPT(2, -23)) + 1);]]>
</body>
</st>
</pou>

__EOF__

  • 本文作者: 生命在等待中延续
  • 本文链接: https://www.cnblogs.com/guyk/p/17487307.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • posted @   生命在等待中延续  阅读(282)  评论(2编辑  收藏  举报
    相关博文:
    阅读排行:
    · 本地部署 DeepSeek:小白也能轻松搞定!
    · 如何给本地部署的DeepSeek投喂数据,让他更懂你
    · 在缓慢中沉淀,在挑战中重生!2024个人总结!
    · 从 Windows Forms 到微服务的经验教训
    · 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
    点击右上角即可分享
    微信分享提示