接着学习文档,第四章4.11小节,实数转换成尾数和指数,功能块RTOME
X
功能:将实数拆分成尾数和指数。某些系统浮点数占用两个WORD,需要将freelance的实数拆分成尾数和指数放入两个WORD进行传输。实数数值作为输入分配给RTME的FLV,功能块自动转换成EXP指数和尾数MNT两个WORD类型数据输出。能够做此拆分输出的师叔范围为:
+0.0001至3.2767*E38
-0.0001至-3.2768*E37
和0
值的代数符号位(z正负)于包含的尾数中(二进制最高位为1是负数,为0是证书).
算法是:首先转换成16位2进制,如果最高位是0,为正数,那么直接换成10进制就是数值,如果首位是1,为负数,将二进制减去1,然后各位取反,再转换成10进制,加上负号。
举例如下
尾数8000H,转换成二进制是1000000000000000,首位是1,负数,减去1为111,1111,1111,1111,各位取反是1000,0000,0000,0000换成10进制加负号是-32768
尾数是FFFF,转换成二进制是1111111111111111,首位是1,为负数,减去1是1111,1111,1111,1110,各位取反是1,所以最终是-1.
尾数是0000,转换成二进制是0000000000000000,首位是0,正数,十进制也是0
尾数是7FF F,转换成二进制是111111111111111,最高位是0,正数,转换成十进制是32767
这个功能块转换效果示例如下:
数值 |
指数 |
尾数 |
65432.0 |
4 |
6543 |
-1234.0 |
3 |
53196 |
12.34 |
1 |
12340 |
1.2345 |
0 |
12345 |
0.12345 |
0 |
1235 |
0.01234 |
0 |
123 |
0.001234 |
0 |
12 |
0.000123 |
0 |
1 |
32767.0 |
4 |
32767 |
123456789.0 |
8 |
12346 |
-0.1 |
0 |
64536 |
-1.0 |
上表是不是看着有点懵逼?刚开始我也是这样子的,和我理解的不太一样。ABB文档没有介绍具体算法,只有在网络上IT网站搜索一下。
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储
- 秋天掰穗人 - 博客园 (cnblogs.com)
先把这个知识点放下,以后我领会了再补充。
这个功能块无法可视化,也为u发在freelance operation运行时进行操作。
参数配置
没有参数需要填写
功能块数据
名字 |
数据类型 |
配置 |
访问 |
注释 |
输入端 |
|
|
|
|
EN |
BOOL |
YES |
RW |
使能。TRUE:功能块可用。 |
FVL |
REAL |
NO |
RW |
需要转换的实数 |
输出端 |
|
|
|
|
ENO |
BOOL |
NO |
RO |
处理状态。TRUE:功能块处理完成 |
EXP |
WORD |
NO |
RO |
指数 |
MNT |
WORD |
NO |
RO |
尾数 |
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。