1.数据类型的转换方式
用户程序中的操作与特定长度的数据对象有关,例如位逻辑指令使用位(bit)数据,MOVE指令使用字节、字和双字数据。
一个指令中有关的操作数的数据类型应是协调一致的,这一要求也适用于块调用时的参数设置。如果操作数具有不同的数据类型,应对它们进行转换。下面是两种不同的转换方式。
1)隐式转换:执行指令时自动地进行转换。
2)显式转换:执行指令之前使用转换指令进行转换。
(1)隐式转换
如果操作数的数据类型兼容,将自动执行隐式转换。兼容性测试可以使用两种标准:
1)使用IEC检查,采用严格的兼容性规则,允许转换的数据类型较少。
2)不使用IEC检查,采用不太严格的兼容性测试标准,允许转换的数据类型较多。
上述两种方式都不能将Bool隐式转换为其它数据类型,源数据类型的位长度不能超过目标数据类型的位长度。在博途的帮助中搜索“数据类型转换概述”,可查看转换的详细规定。
(2)显式转换
操作数不兼容时,不能执行隐式转换,可以使用显式转换指令。转换指令在指令列表的“数学函数”“转换操作”和“字符串+字符”文件夹中。
显式转换的优点是可以检查出所有不符合标准的问题,并用ENO的状态指示出来。图3-40给出了两个数据类型转换的例子。
2.设置IEC检查功能
如果激活了“IEC检查”,在执行指令时,将会采用严格的数据类型兼容性标准。
(1)设置对项目中所有新的块进行IEC检查
执行“选项”菜单中的“设置”命令,选中出现的“设置”编辑器左边窗口的“PLC编程”中的“常规”组(见图2-28),用复选框选中右边窗口“新块的默认设置”区中的“IEC检查”,新生成的块默认的设置将使用IEC检查。
(2)设置单独的块进行IEC检查
如果没有设置对项目中所有的新块进行IEC检查,可以设置对单独的块进行IEC检查。用鼠标右键单击项目树中的某个代码块,执行快捷菜单中的“属性”命令,选中打开的对话框左边窗口的“属性”(见图3-39),用右边窗口中的“IEC检查”复选框激活或取消这个块的IEC检查功能。
图3-39 设置块的属性
3.转换值指令
“转换值”指令CONVERT(CONV)的参数IN、OUT可以设置为十多种数据类型,IN还可以是常数。
EN输入端有能流流入时,CONV指令读取参数IN的内容,并根据指令框中选择的数据类型对其进行转换。转换值存储在输出OUT中。转换前后的数据类型可以是位字符串、整数、浮点数、CHAR、WCHAR和BCD码等。
图3-40中I0.3的常开触点接通时,执行CONV指令,将MD42中的32位BCD码转换为双整数后送MD46。如果执行时没有出错,有能流从CONV指令的ENO端流出。ROUND指令将MD50中的实数四舍五入转换为双整数后保存在MD54。
图3-40 数据转换指令
4.浮点数转换为双整数的指令
浮点数转换为双整数有4条指令,“取整”指令ROUND用得最多,它将浮点数转换为四舍五入的双整数。“截尾取整”指令TRUNC仅保留浮点数的整数部分,去掉其小数部分。
“浮点数向上取整”指令CEIL将浮点数转换为大于或等于它的最小双整数,“浮点数向下取整”指令FLOOR将浮点数转换为小于或等于它的最大双整数。这两条指令极少使用。
因为浮点数的数值范围远远大于32位整数,有的浮点数不能成功地转换为32位整数。如果被转换的浮点数超出了32位整数的表示范围,得不到有效的结果,ENO为0状态。
5.标准化指令
图3-41中的“标准化”指令NORM_X的整数输入值VALUE(MIN≤VALUE≤MAX)被线性转换(标准化,或称归一化)为0.0~1.0之间的浮点数,转换结果用OUT指定的地址保存。
NORM_X的输出OUT的数据类型可选Real或LReal,单击方框内指令名称下面的问号,用下拉式列表设置输入VALUE和输出OUT的数据类型。输入、输出之间的线性关系如下(见图3-42):
OUT=(VALUE-MIN)/(MAX-MIN)(www.xing528.com)
图3-41 NORM_X指令与SCALE_X指令
6.缩放指令
图3-41中的“缩放”(或称“标定”)指令SCALE_X的浮点数输入值VALUE(0.0≤VALUE≤1.0)被线性转换(映射)为参数MIN(下限)和MAX(上限)定义的范围之间的数值。转换结果用OUT指定的地址保存。
单击方框内指令名称下面的问号,用下拉式列表设置变量的数据类型。参数MIN、MAX和OUT的数据类型应相同,VALUE、MIN和MAX可以是常数。输入、输出之间的线性关系如下(见图3-43):
OUT=VALUE×(MAX-MIN)+MIN
图3-42 NORM_X指令的线性关系
图3-43 SCALE_X指令的线性关系
满足下列条件之一时ENO为0状态:EN输入为0状态;MIN的值大于等于MAX的值;实数值超出IEEE-754标准规定的范围;有溢出;输入VALUE为NaN(无效的算术运算结果)。
【例3-5】 某温度变送器的量程为-200~850℃,输出信号为4~20mA,符号地址为“模拟值”的IW96将0~20mA的电流信号转换为数字0~27648,求以℃为单位的浮点数温度值。
解:4mA对应的模拟值为5530,IW96将-200~850℃的温度转换为模拟值5530~27648,用“标准化”指令NORM_X将5530~27648的模拟值归一化为0.0~1.0之间的浮点数(见图3-41的上面的图),然后用“缩放”指令SCALE_X将归一化后的数字转换为-200~850℃的浮点数温度值,用变量“温度值”保存。
【例3-6】 地址为QW96的整型变量“AQ输入”转换后的DC0~10V电压作为变频器的模拟量输入值,通过变频器内部参数的设置,0~10V的电压对应的转速为0~1800r/min。求以r/min为单位的整型变量“转速”对应的AQ模块的输入值。
解:程序见图3-41的下面的图,应去掉OB1属性中的“IEC检查”复选框中的勾,否则不能将SCALE_X指令输出参数OUT的数据类型设置为Int。
“标准化”指令NORM_X将0~1800的转速值归一化为0.0~1.0之间的浮点数,然后用“缩放”指令SCALE_X将归一化后的数字转换为0~27648的整数值,用变量“AQ输入”保存。
7.“缩放”指令SCALE
“缩放”指令SCALE和“取消缩放”指令UNSCALE在指令列表的文件夹“\转换操作\原有”中,它们对应于STEP7V5.5的TI-S7库中的FC105和FC106,只能用于S7-1500。SCALE指令将来自AI模块的整数输入参数IN转换为以工程单位表示的实数值OUT。
Bool输入参数BIPOLAR为1时为双极性,AI模块输出值的下限K1为−27648.0,上限K2为27648.0。BIPOLAR为0时为单极性,AI模块输出值的下限K1为0.0,上限K2为27648.0。HI_LIM和LO_LIM分别是以工程单位表示的实数上、下限值。计算公式为
输入值IN超出上限K2或下限K1时,输出值将被箝位为HI_LIM或LO_LIM。
【例3-7】 某压力变送器的量程为−20kPa~100kPa,输出的4~20mA电流被AI模块转换为数字0~27648,试求名为“AI通道1”的IW4输出的整数值对应的以kPa为单位的浮点数“压力值”。
解:压力值−20kPa~100kPa对应于数字量0~27648,图3-44的左边是使用SCALE指令实现上述要求的程序(见随书光盘中的例程“数据处理指令应用”)。
仿真时令IW4为10000,OUT的值为23.40kPa,与用计算器根据式(3-3)计算出来的值相同。IW4的值超过上限27648时,OUT的值被箝位为HI_LIM(100.0kPa)。
图3-44 SCALE与UNSCALE指令
8.“取消缩放”指令UNSCALE
UNSCALE指令将以工程单位表示的实数输入值IN转换为整数输出值OUT,送给AQ模块。转换公式为
输入参数BIPOLAR分别为1和0时,AQ模块输入值的下限K1和上限K2的值与指令SCALE的相同。HI_LIM和LO_LIM分别是以工程单位表示的实数上限值和下限值。
输入值IN超出上限HI_LIM或下限LO_LIM时,输出值将被箝位为K2或K1。
【例3-8】 S7-1500的AQ模块输出的DC0~10V电压作为某变频器的模拟量输入值,通过变频器内部参数的设置,0~10V的电压对应的转速为0~1800r/min。试求以r/min为单位的浮点数变量“转速值”对应的“AQ通道1”(QW4)的输入值。
解:图3-44的右边是用UNSCALE指令实现上述要求的程序。IN的值为1000.0r/min时,OUT的值为15360,与根据式(3-4)用计算器计算出来的值相同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。