和利时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>