发表于:2015/11/11 15:23:24
#10楼
以下是引用305456779在2015/11/11 11:35:06的发言:
4 0 E C C C C D
0100 0000 1110 1100 1100 1100 1100 1101
我现在找到的规律就是把40EC的最高1位去掉,然后变成100 0000 111=7*1=7,这是整数位数,小数位数比较麻烦0 1100=0.03125*12=0.375,CCCD是小数的后面数据,忽略。
现在就是把高位那位去掉,不知道怎么去!!!
4 0 E C C C C D
0100 0000 1110 1100 1100 1100 1100 1101
我现在找到的规律就是把40EC的最高1位去掉,然后变成100 0000 111=7*1=7,这是整数位数,小数位数比较麻烦0 1100=0.03125*12=0.375,CCCD是小数的后面数据,忽略。
现在就是把高位那位去掉,不知道怎么去!!!
最高位31位那是符号位,0代表正数
然后100 0000 1 (23~30位)为整数部分,他代表的是一个偏移量,转换为10进制就是129,减去127就是2.
110 1100 1100 1100 1101 代表小数位:
从左到右分别是2的-1次方.....2的-23次方,现在就是0.5+0.25+0.0625+....
然后将上面的小数部分+1.0,就得到了1.8125(当然不够准确,因为后面我没有算下去)
然后将1.8125去乘以上面算下来的偏移量,2的2次方就是4.
算法就是:
首先通过与操作,将23~30位的数据取出,然后右移23位,减去127,结果保留备用。
然后通过与操作指令,将0~22位的数据取出。
使用循环指令,计算小数部分的和
将小数部分+1.0构成最终的值,然后乘以2的偏差值次方(偏差就是上面第一步算出的)
最后使用与指令来提取符号位,判断正负,如果是负的,将上面算的乘以-1.0就可以了。
如果使用ST语言编程的话,大概在20行左右的程序。
精通富士POD,富士PLC的编程
有问题可以直接电邮:FUJIFA@yeah.net
有问题可以直接电邮:FUJIFA@yeah.net