3. 过程控制中的模拟量信号处理
在S7-1500过程控制系统中,模拟量信号是连接现场传感器、执行器与PLC控制逻辑的桥梁。温度、压力、流量、液位、阀门开度等连续变化的物理量,最终都要通过模拟量输入/输出模块进入或送出CPU。这一节围绕模拟量信号处理的完整链路展开:从模块接线、量程卡设置、信号类型选择,到程序中的标准化与缩放指令应用,再到工程单位转换,形成一条可落地的技术路径。
模拟量输入/输出模块的接线与量程卡
S7-1500常用的模拟量输入模块如AI 8xU/I/RTD/TC BA,支持电压、电流、热电阻和热电偶多种信号类型。接线时首先要区分两线制、三线制和四线制变送器。以两线制4~20mA压力变送器为例,变送器正端接模块的M+端子,负端接M-端子,模块内部为变送器提供24V回路供电。四线制变送器则有独立的电源和信号线,信号正负分别接入模块的U+/I+和对应的负端。接线错误最常见的后果是信号超限或通道报断线故障。
量程卡(Range Card)是模块侧面的一个可插拔小卡,用于设定通道的测量范围。以AI 8xU/I/RTD/TC为例,量程卡有A、B、C、D四个位置,分别对应不同的电压/电流/热电阻范围。例如A位置对应电压±10V和电流±20mA,B位置对应电压0~10V和电流0~20mA,C位置对应热电阻和热电偶。量程卡设置必须与STEP 7中的通道参数一致,否则会出现“组态与硬件不匹配”的模块诊断错误。实际调试中,先断电插拔量程卡,再在硬件组态中设置对应通道的测量类型和测量范围,两者缺一不可。
信号类型选择与通道参数
在TIA Portal的硬件组态中,每个模拟量通道需要独立设置以下参数:测量类型(电压/电流/热电阻/热电偶)、测量范围(如4~20mA、0~10V、Pt100、Type K)、干扰频率抑制(50Hz/60Hz/400Hz)、以及断线诊断是否启用。对于4~20mA信号,测量范围选择“4~20mA”后,模块会将4mA对应为0,20mA对应为27648,这是S7-1500模拟量通道的标称满量程值。如果选择“0~20mA”,则0mA对应0,20mA对应27648。这个标称值体系是后续NORM_X和SCALE_X指令的基础。
标准化与缩放:NORM_X与SCALE_X
NORM_X和SCALE_X是S7-1500中处理模拟量的两个核心指令,通常配合使用。NORM_X(标准化)将原始模拟量值映射到0.0~1.0的浮点数区间,SCALE_X(缩放)再将这个0.0~1.0的值映射到实际的工程单位范围。
NORM_X的参数:MIN为原始值下限,VALUE为当前原始值,MAX为原始值上限,OUT为标准化结果。对于4~20mA信号,MIN=0,MAX=27648。当VALUE=13824时,OUT=0.5,表示50%量程。SCALE_X的参数:MIN为工程单位下限,VALUE为标准化值,MAX为工程单位上限,OUT为最终工程值。例如量程为0~1.6MPa的压力变送器,MIN=0.0,MAX=1.6,当VALUE=0.5时,OUT=0.8MPa。
// 示例:4~20mA压力变送器,量程0~1.6MPa
// 原始值存储在IW100中
#tempRaw := "IW100"; // 读取原始值
"NORM_X"(MIN := 0, // 原始下限
VALUE := #tempRaw, // 当前原始值
MAX := 27648, // 原始上限
OUT => #tempNorm); // 标准化结果0.0~1.0
"SCALE_X"(MIN := 0.0, // 工程下限
VALUE := #tempNorm, // 标准化值
MAX := 1.6, // 工程上限
OUT => #tempEng); // 工程值MPa
实际编程中,通常将NORM_X和SCALE_X封装在一个FC或FB中,输入参数为原始值、原始上下限、工程上下限,输出为工程值。这样不同通道只需调用同一功能块,传入不同参数即可。需要注意的是,NORM_X的MIN和MAX必须与模块组态的测量范围一致,否则标准化结果会偏移。
工程单位转换与异常处理
工程单位转换不仅仅是线性缩放。对于热电阻和热电偶,模块直接输出温度值(如Pt100输出实际温度×10),此时不需要NORM_X/SCALE_X,而是直接除以10得到摄氏度。对于差压流量计,流量与差压的平方根成正比,需要在SCALE_X之后增加SQRT指令。例如差压变送器量程0~100kPa对应流量0~500m³/h,原始值标准化后先开平方,再乘以500得到流量值。
异常处理同样重要。当原始值超出27648时,说明信号超限,应触发报警并保持上一个有效值或输出安全值。当原始值低于0(4~20mA断线时模块输出负值)时,应判断为断线故障。在程序中可以这样处理:
IF #tempRaw > 27648 THEN
#tempEng := 1.6; // 上溢,输出量程上限
#alarmHigh := TRUE;
ELSIF #tempRaw < 0 THEN
#tempEng := 0.0; // 断线或下溢
#alarmWire := TRUE;
ELSE
// 正常执行NORM_X和SCALE_X
END_IF;
调试时,可以用信号发生器输入4mA、12mA、20mA三个点,观察HMI上工程值是否分别为0、0.8、1.6MPa。如果偏差较大,检查量程卡位置、通道组态和NORM_X的MIN/MAX参数是否一致。对于输出模块,AO 4xI的接线和参数设置与输入类似,但SCALE_X的方向相反:先将工程值缩放到0~27648,再通过NORM_X反向或直接写入输出通道。实际项目中,建议为每个模拟量通道建立一张参数表,记录通道地址、信号类型、量程卡位置、原始上下限、工程上下限和报警阈值,便于后期维护和故障排查。
总结来看,模拟量信号处理的核心在于“两端对齐”:一端是硬件侧的量程卡和通道组态,另一端是程序侧的NORM_X/SCALE_X参数。两端参数一致,工程值才能准确。调试时用信号发生器验证三个关键点(4mA、12mA、20mA),配合异常判断逻辑,就能覆盖大多数现场场景。对于热电阻、热电偶和差压流量等特殊信号,在标准缩放之后增加相应的数学处理,即可完成工程单位转换。