首页 理论教育 数据转换操作详解

数据转换操作详解

时间:2023-06-21 理论教育 版权反馈
【摘要】:图4-35 数据的转换指令如果输入IN为INF(无穷大)或NaN,或转换结果超出了OUT的数据类型允许的范围,ENO为0状态。因为浮点数的数值范围远远大于32位整数,有的浮点数不能成功地转换为32位整数。

数据转换操作详解

1.CONV指令

CONV指令的参数IN、OUT的数据类型可以是Byte、Word、DWord、SInt、Int、DInt、USInt、UInt、UDint、BCD16、BCD32和Real,IN还可以是常数。EN输入端有能流流入时,CONV指令将输入IN指定的数据转换为0UT指定的数据类型。数据类型BCD16只能转换为Int,BCD32只能转换为DInt。

如图4-35中的I0.3的常开触点接通时,执行CONV指令,将MD42中的32位BCD码转换为双整数后送MD46。如果执行时没有出错,有能流从CONV指令的ENO端流出。ROUND指令将MD50中的实数四舍五入转换为双整数后保存在MD54。

978-7-111-47789-1-Chapter04-37.jpg

图4-35 数据的转换指令

如果输入IN为INF(无穷大)或NaN(无效的数学运算结果),或转换结果超出了OUT的数据类型允许的范围,ENO为0状态。

2.浮点数转换为双整数的指令

浮点数转换为双整数有4条指令,它们将IN输入的浮点数转换为32位双整数。其中用得最多的是四舍五入的ROUND指令,CEIL和FLOOR指令用得很少。因为转换规则不同,得到的结果也不相同,表4-3给出了不同的取整格式的例子。

表4-3 不同的取整格式实例

978-7-111-47789-1-Chapter04-38.jpg

因为浮点数的数值范围远远大于32位整数,有的浮点数不能成功地转换为32位整数。如果被转换的浮点数超出了32位整数的表示范围,得不到有效的结果,ENO为0状态。

3.SCALE_X指令

图4-36中的SCALE_X指令的浮点数输入值VALUE(0.0≤VALUE≤1.0)被线性转换(映射)为参数MIN(下限)和MAX(上限)定义的数值范围之间的整数。转换结果保存在OUT指定的地址

单击方框内指令名称下面的问号,用下拉式列表设置变量的数据类型。参数MIN、MAX和OUT的数据类型应相同,可以是SInt、Int、DInt、USInt、UInt、UDInt和Real,MIN和MAX可以是常数。各变量之间的线性关系如图4-37所示。

978-7-111-47789-1-Chapter04-39.jpg

图4-36 SCALE_X与NORM_X指令

978-7-111-47789-1-Chapter04-40.jpg(www.xing528.com)

图4-37 SCALE_X指令的线性关系

978-7-111-47789-1-Chapter04-41.jpg

图4-38 NORM_X指令的线性关系

其中,OUT=VALUE(MAX-MIN)+MIN=0.4×(1000-200)+200=520

如果参数VALUE小于0.0或大于1.0,可以生成小于MIN或大于MAX的OUT,此时ENO为1。例如VALUE为12时,OUT为1160。满足下列条件之一时ENO为0状态:

1)EN输入为0状态。

2)MIN的值大于等于MAX的值。

3)实数值超出IEEE.754规定的范围。

4)有溢出。

5)输入VALUE为NaN(无效的算术运算结果)。

4.NORM_X指令

图4-36中的NORM_X指令的整数输入值VALUE(MIN≤VALUE≤MAX)被线性转换(规格化)为0.0~1.0之间的浮点数,转换结果保存在OUT指定的地址。

NORM_X的输出OUT的数据类型为Real(实数),单击方框内指令名称下面的问号,用下拉式列表设置输入VALUE的数据类型。输入参数MIN、MAX和VALUE的数据类型应相同,可以是SInt、Int、DInt、USInt、UInt、UDInt、Real,也可以是常数。各变量之间的线性关系如下(见图4-38):

OUT=(VALUE-MIN)/(MAX-MIN)=(800-200)/(1000-200)=0.75

如果参数VALUE小于MIN或大于MAX,可以生成小于0.0或大于1.0的OUT,此时ENO为1。例如图4-38中的VALUE为0时,OUT为-0.25。使ENO为0状态的条件与指令SCALE_X的相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈