03
模拟量与数字量的转换
在实际的工程项目中,读者往往采集温度、压力、流量等信号,那么在程序中如何处理这些模拟量信号呢?换句话说编写模拟量程序的目的是什么呢?编写模拟量程序的目的是将模拟量转换成对应的数字量,最终将数字量转换成工程量(物理量)。
模拟量转换为工程量分为单极性和双极性两种。双极性的-27648对应工程量的最小值,27648对应工程量的最大值。
单极性模拟量分为两种,即4-20mA和0-10V、0-20mA。
(1)第一种为4-20mA,是带有偏移量的。
因为4mA为总量的20%,而20mA转换为数字量为27648,所以4mA对应的数字量为5530。模拟量转换为数字量是S7-1200PLC完成的,读者要在程序中将这些数值转换为工程量。
(2)第二种是没有偏移量的
没有偏移量的是如0-10V、0-20mA等模拟量,27648对应最大工程量,0对应工程量的最小值。
(3)模拟量信号(0-10V、0-5V或0-20mA)在S7-1200PLC CPU内部用0-27648的数值表示(4-20mA对应5530-27648),这两者之间有一定的数学关系,如图3-5-5
图3-5-5 模拟量信号与数字量曲线
04
标准化指令和缩放指令
(1)标准化指令(NORM_X)
NORM_X指令:使用“NORM_X”指令,可将输入VALUE中变量的值映射到线性标尺对其标准化。使用参数MIN和MAX定义输入VALUE值范围的限值:
LAD | 参数 | 数据类型 | 说明 |
EN | BOOL | 允许输入 | |
ENO | BOOL | 允许输出 | |
MIN | 整数、浮点数 | 取值范围的下限 | |
VALUE | 整数、浮点数 | 要标准化的值 | |
MAX | 整数、浮点数 | 取值范围的上限 | |
OUT | 浮点数 | 标准化结果 |
注意:可以从指令框“<???>”下拉列表中选择该指令的数据类型。
标准化指令的计算公式是:OUT= (VALUE - MIN) / (MAX - MIN),其中 (0.0 <= OUT <= 1.0),计算原理如图3-5-6
图3-5-6 标准化指令公式对应计算原理图
用一个例子来说明标准化指令(NORM_X)的使用,梯形图如图3-5-7所示:
当I0.0闭合激活标准化指令,要标准化的VALUE存储在MW10中,VALUE的范围是0-27648,将VALUE标准化的输出范围是0.0-1.0。假设MW10中是13824,那么MD12中的标准化的结果是0.5。
图3-5-7 标准化指令示例
(2)缩放指令(SCALE_X)
SCALE_X指令:使用“SCALE_X”指令,可将输入VALUE的值映射到指定的值范围来对其缩放。当执行缩放指令时,输入VALUE的浮点值会缩放到有参数MIN和MAX定义的值范围。缩放结果为整数,存储在OUT输出中。缩放指令参数见下表:
LAD | 参数 | 数据类型 | 说明 |
EN | BOOL | 允许输入 | |
ENO | BOOL | 允许输出 | |
MIN | 整数、浮点数 | 取值范围的下限 | |
VALUE | 整数、浮点数 | 要标准化的值 | |
MAX | 整数、浮点数 | 取值范围的上限 | |
OUT | 浮点数 | 标准化结果 |
注意:可以从指令框“<???>”下拉列表中选择该指令的数据类型。
缩放指令的计算公式是:OUT= VALUE (MAX - MIN) + MIN,其中 (0.0 <= VALUE <= 1.0),计算原理如图3-5-8;
用一个例子来说明标准化指令(NORM_X)的使用,梯形图如图3-5-8所示,当I0.0闭合激活标准化指令,要标准化的VALUE存储在MD16中,VALUE的范围是0-27648,将VALUE标准化的输出范围是0-27648。假设MD10中是0.5,那么MW20中的标准化的结果是13824。
图3-5-8 缩放指令示例
四、任务实施
本任务的实施步骤主要分为PLC接线、IO地址分配以及程序设计思路:
01
IO地址分配
输入地址 | 说明 | 温度显示地址 | 说明 |
IW64 | 模拟量输入 | MD24 | 温度显示 |
02
程序设计思路
1)使用标准化指令,把采集过来的模拟量值进行标准化,标准化后的范围值在0.0-1.0之间。
2)再使用缩放指令,把标准化后的数值进行缩放,缩放后的范围值在温度传感器量程(-50.0-200.0℃)范围之间。
03
程序设计
五、经验与总结
1、模拟量的换算,主要是要理解模拟量与数字量之间的关系。
2、在本任务中,主要使用的是标准化和缩放指令进行模拟量采集换算,换算的时候要注意数字量及工程量数值的填写,以免换算错误。
3、在上述例子中,温度传感器的量程为-50℃-200℃,所以在缩放指令中需要正确填写数值。
4、如果现场有多个温度传感器,可以使用带参数子程序的方式编写更加方便。
5、如果现场的传感器是4-20mA电流输出的,那么在标准化指令中的MIN管脚填写的数值应该是5530,而不是0。