实数,有的教科书称浮点数,这里主要是用于处理含有小数的数值数据,实数类型包含了REAL 及LREAL 这2 种数据类型。REAL 实数占用32 位存储空间,而LREAL 长实数占用64 为存储空间。在CoDeSys 中,实数和长实数常量有两种表示形式。
1) 十进制小数形式。它由数字和小数点组成。0.123、123.1、0.0 都是十进制小数表现形式。 2) 指数形式。如123e3 或123E3 都代表123×103。但注意字母e(或E)之前必须有数字,且e后面的指数必须为整数,如e3、2.1e3.5、.e3、e 等都是不合语法的指数形式。
一个浮点数可以有多种指数表示形式,如123.456 可以表示为123.456e0、12.3456e1、1.23456e2 等。其中的1.23456e2 称为“规范化的指数形式”。即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。
VAR
rRealVar1:REAL;
END_VAR
RealVar1:=1.23e1;
上例中,1.23e1 表示就是12.3,当然也可以直接通过表达式RealVar1:=12.3 完成上例要求。此时如果将要求更换为将0.123 赋值给rRealVar1 变量,通过上面提到的规律,只需将表达式更换为。
RealVar1:=1.23e-1; 或者, RealVar1:=0.123;
注意: 数据类型LREAL 的支持取决于目标设备。在编译时64 位类型的LREAL 是被转换为REAL(可能有信息丢失),还是保持不变,需参考不同硬件产品的相应文档。
如果 REAL 或 LREAL 类型转换成SINT, USINT, INT, UINT, DINT, UDINT, LINT 或ULINT 类型,且实型数据的值超出了整形的范围,结果将会是不确定的并且该值取决于目标系统。这种情况有可能产生异常! 为了获取与目标无关的代码,应由应用程序处理所有值域越界问题。如果REAL/LREAL 型数据在整形的值域范围内,他们之间的转换在所有系统上都可以进行。