有沒有大佬幫忙的,之前同事弄了iee754,32位單精度16進制轉換十進制浮點,但是離職了。下面分享一下他編寫的,給大佬們看看
if check == 9 and response[0]==0x02 and response[2]==0x04 then
ma=response[5]
mb=response[6]
ma=ma<<8
ma=ma+mb
output=ma
mc=response[3]
mc=mc>>4
mc=mc+1
if mc-8>0 then
mc=mc-8
bin[16]=1
end if
if mc-4>0 then
mc=mc-4
bin[17]=1
end if
if mc-2>0 then
mc=mc-2
bin[18]=1
end if
if mc-1>0 then
mc=mc-1
bin[19]=1
end if
//IEEE754
output=output+1
if output-32768>0 then
output=output-32768
bin[0]=1
end if
if output-16384>0 then
output=output-16384
bin[1]=1
end if
if output-8192>0 then
output=output-8192
bin[2]=1
end if
if output-4096>0 then
output=output-4096
bin[3]=1
end if
if output-2048>0 then
output=output-2048
bin[4]=1
end if
if output-1024>0 then
output=output-1024
bin[5]=1
end if
if output-512>0 then
output=output-512
bin[6]=1
end if
if output-256>0 then
output=output-256
bin[7]=1
end if
if output-128>0 then
output=output-128
bin[8]=1
end if
if output-64>0 then
output=output-64
bin[9]=1
end if
if output-32>0 then
output=output-32
bin[10]=1
end if
if output-16>0 then
output=output-16
bin[11]=1
end if
if output-8>0 then
output=output-8
bin[12]=1
end if
if output-4>0 then
output=output-4
bin[13]=1
end if
if output-2>0 then
output=output-2
bin[14]=1
end if
if output-1>0 then
output=output-1
bin[15]=1
end if
ieee=bin[1]*128+bin[2]*64+bin[3]*32+bin[4]*16+bin[5]*8+bin[6]*4+bin[7]*2+bin[8]
ieee=ieee-127
select case ieee
case 0
ieee2=1
break
case 1
ieee2=2+bin[9]
break
case 2
ieee2=4+bin[9]*2+bin[10]
break
case 3
ieee2=8+bin[9]*4+bin[10]*2+bin[11]
break
case 4
ieee2=16+bin[9]*8+bin[10]*4+bin[11]*2+bin[12]
break
case 5
ieee2=32+bin[9]*16+bin[10]*8+bin[11]*4+bin[12]*2+bin[13]
break
case 6
ieee2=64+bin[9]*32+bin[10]*16+bin[11]*8+bin[12]*4+bin[13]*2+bin[14]
break
case 7
ieee2=128+bin[9]*64+bin[10]*32+bin[11]*16+bin[12]*8+bin[13]*4+bin[14]*2+bin[15]
break
case 8
ieee2=256+bin[9]*128+bin[10]*64+bin[11]*32+bin[12]*16+bin[13]*8+bin[14]*4+bin[15]*2+bin[16]
break
case 9
ieee2=512+bin[9]*256+bin[10]*128+bin[11]*64+bin[12]*32+bin[13]*16+bin[14]*8+bin[15]*4+bin[16]*2+bin[17]
break
case 10
ieee2=1024+bin[9]*512+bin[10]*256+bin[11]*128+bin[12]*64+bin[13]*32+bin[14]*16+bin[15]*8+bin[16]*4+bin[17]*2+bin[18]
break
case 11
ieee2=2048+bin[9]*1024+bin[10]*512+bin[11]*256+bin[12]*128+bin[13]*64+bin[14]*32+bin[15]*16+bin[16]*8+bin[17]*4+bin[18]*2+bin[19]
break
end select
//ieee754
if bin[0]==0 then//負數時不輸出
//SetData(output, "Local HMI", LW, 50, 1)
//SetData(ma, "Local HMI", LW, 100, 1)
//SetData(ieee2, "Local HMI", LW, 50, 1)
//SetData(ieee2, "Local HMI", LW, 100, 1)
ma=ieee2
end if
end if