问:刚接触西门子S7-300 PLC与MM440变频器通过DP通信,其中资料提到PKW PZD,比如在读写0002-1999的参数时,"如读P1082, 1082=43A(HEX)
PLC PKW输出=143A,0000,0000,0000 1为读请求。PLC PKW输入=243A,0000,4248,0000 返回2为双字长。值为42480000(HEX)=50.0(REAL)"其中“值为42480000(HEX)=50.0(REAL)是怎么算的?
答:实数也称单精度数 符号位1位,阶码8位,尾数23位
第一步,化为2进制
第二步:因为IEEE754使用1个符号,8个阶码,23个尾数,
第三步:根据公式写出实际数值大小
二:基础知识扩展
-----------------------------------------------------------------------
值 存储为 指数偏移量
real*4 1位符号位(s)、8位指数(e),23位尾数(m,共32位) 127(7FH)
real*8 1位符号位(s)、11位指数(e),52位尾数(m,共64位) 1023(3FFH)
real*10 1位符号位(s)、15位指数(e),64位尾数(m,共80位) 16383(3FFFH)
-----------------------------------------------------------------------
符号位1位,阶码8位,尾数23位
30.0
十进制30.0转换成二进制
11110.0
规格化二进制数
1.1110*2^4
计算指数
4+127=131
符号位 指数部分 尾数部分
0 10000011 11100000000000000000000
以单精度(real*4)浮点格式存储该数
0100 0001 1111 0000 0000 0000 0000 0000
4 1 F 0 0 0 0 0
十六进制表达式为41F0 0000H
50.0
十进制50.0转换成二进制
110010.0
规格化二进制数
1.10010*2^5
计算指数
5+127=132
符号位 指数部分 尾数部分
0 10000100 10010000000000000000000
以单精度(real*4)浮点格式存储该数
0100 0010 0100 1000 0000 0000 0000 0000
4 2 4 8 0 0 0 0
十六进制表达式为4248 0000H
问题补充:
DW#16#42480000用2进制表示是0100 0010 0100 1000 0000 0000 0000 0000.
根据IEEE(32)REAL的定义你可以手动进行计算把这些2进制转为REAL=【1+(2的22次方+2的19次方)*2的(-23)次方】*2的(132-127)次方=50.0