PLC 模拟量转换:一个公式吃透所有场景
时间:2026-06-26
近日,一篇关于 PLC 模拟量转换的技术文章引发关注。很多 PLC 新手常困惑于如何将模拟量模块读回的 0 - 27648 数字转换为温度、压力、流量等实际物理量,即便知道是线性换算,在实际项目中仍易出错。
文章详细介绍了 PLC 模拟量转换的知识。首先阐述了基本原理,PLC 是数字系统,而工业现场存在大量模拟信号,模拟量输入模块可将连续物理量转换为 PLC 能读懂的整数值。工业上常用的模拟量信号有电压信号、电流信号、热电阻 PT100、热电偶等,各有标准范围和分辨率值范围及适用场景。转换公式为 “工程值 = (数字量 ÷ 27648) × (量程上限 - 量程下限) + 量程下限” ,或更通用形式 “Y = (X ÷ Xmax) × (Ymax - Ymin) + Ymin” 。
接着说明写转换程序的原因,包括数字量无物理意义、方便报警和逻辑判断、便于调试和排查以及实现标准化和复用。不同品牌 PLC 实现转换程序的方式略有不同,文中列举了西门子 S7 - 1200/1500(SCL 语言)、西门子 S7 - 200 SMART(梯形图)、三菱 FX 系列、汇川 / 信捷(Codesys 平台)等常用品牌的实现方法。
在实际项目应用场景方面,涵盖了温度控制(PID 调节)、压力与液位监控、流量计量与累计、称重与配料系统、位置与位移检测、速度与转速反馈、环境参数监测(GxP / 合规场景)、数据上传与 MES/SCADA 对接等。
同时,文章还指出模拟量转换实际项目中常见的问题,如 4 - 20mA 的偏移量、信号干扰导致读数跳动、量程选择错误、数据类型溢出、断线检测等,并给出相应解决办法。提供了西门子 SCL 的完整 FB 封装示例,封装好后所有模拟量通道可直接调用。
模拟量转换是 PLC 工程师的 “基本功”,搞懂它有助于理解工业自动化数据流,从 “会接线的电工” 转变为真正的工程师。
许多 PLC 新手面临将模拟量模块读取的 0 - 27648 数字转换为实际物理量的困惑,即便了解线性换算原理,在实际项目中仍易出现计算和使用错误。本文将全面介绍 PLC 模拟量转换的知识,包括基本原理、编程实现、实际应用场景、常见问题及解决办法。
二、模拟量转换的基本原理
PLC 与模拟信号:PLC 是数字系统,只能处理 0 和 1,而工业现场存在大量模拟信号,如温度、压力、液位、流量、速度、位置等。模拟量输入模块的作用是将这些连续的物理量转换为 PLC 能读懂的整数值。
标准信号范围
| 信号类型 | 标准范围 | 分辨率值范围 | 适用场景 |
| --- | --- | --- | --- |
| 电压信号 | 0 - 10V /- 10 - + 10V | 0 - 27648 /- 27648 - 27648 | 位移传感器、电位器 |
| 电流信号 | 4 - 20mA / 0 - 20mA | 0 - 27648 | 压力、温度、流量、液位 |
| 热电阻 PT100 | - 200 - 850℃ | 0 - 27648(需模块支持) | 高精度测温 |
| 热电偶 | 0 - 1300℃(K 型) | 0 - 27648 | 高温测量 |
转换公式
公式:工程值 = (数字量 ÷ 27648) × (量程上限 - 量程下限) + 量程下限
通用形式:Y = (X ÷ Xmax) × (Ymax - Ymin) + Ymin
参数说明:
X:PLC 读取到的原始数字量(0 - 27648)
Xmax:数字量值(西门子一般为 27648)
Ymin:传感器量程下限(如 0℃、4mA 对应的值)
Ymax:传感器量程上限(如 100℃、20mA 对应的值)
Y:终得到的工程实际值
示例:一个 4 - 20mA 的压力变送器,量程 0 - 1.6MPa,PLC 读到数字量 13824,工程值 = (13824 ÷ 27648) × (1.6 - 0) + 0 = 0.5 × 1.6 = 0.8 MPa
三、为什么要写转换程序
数字量无物理意义:操作工在触摸屏上应看到如 “温度 85℃”,而非 “AIW 读数是 23500”,原始值显示无法让人理解。
方便报警和逻辑判断:设置 “温度超过 90℃就报警”,若不转换需计算 90℃对应的数字量,更换传感器量程后还需重新计算;编写转换程序后,可直接在 HMI 上设置 90℃。
方便调试和排查:现场人员反馈 “压力不对” 时,查看程序中 “当前压力 = 0.35MPa” 比 “原始值 = 6055” 更直观。
标准化和复用:将转换逻辑封装成 FB(功能块),所有模拟量信号可直接调用,无需每次重新编写。
四、转换程序的编程实现
西门子 S7 - 1200/1500(SCL 语言)
// 模拟量转换功能块FB
FUNCTION_BLOCK "FB_AnalogScale"
VAR_INPUT
iRawValue : INT; // 原始值0 - 27648
rEngLow : REAL; // 工程量下限
rEngHigh : REAL; // 工程量上限
END_VAR
VAR_OUTPUT
rEngValue : REAL; // 转换后的工程值
END_VAR
BEGIN
rEngValue := INT_TO_REAL(iRawValue) / 27648.0 * (rEngHigh - rEngLow) + rEngLow;
END_FUNCTION_BLOCK
西门子 S7 - 200 SMART(梯形图)
使用库指令 S_ITR 直接完成转换,输入端填写:
Input = AIW16(模拟量输入通道)
Ish = 27648
Isl = 0(4mA 对应 5530,需注意偏移)
Osh = 量程上限
Osl = 量程下限
Output = VD100(转换结果)
三菱 FX 系列
// 假设D0 = 模拟量原始值0 - 4000
// 转换到0.0 - 100.0(温度)
// D100 = 转换结果
DMUL D0 K100 D10 // D0 * 100
DDIV D10 K4000 D100 // D100 = (D0*100)/4000
汇川 / 信捷(Codesys 平台)
// 使用标准库函数LINEAR_CONVERSION
// 或自己写ST代码
IF iRawValue < 0 THEN
rEngValue := rEngLow;
ELSIF iRawValue > 27648 THEN
rEngValue := rEngHigh;
ELSE
rEngValue := INT_TO_REAL(iRawValue) / 27648.0 * (rEngHigh - rEngLow) + rEngLow;
END_IF
五、转换程序在实际项目中的应用场景
温度控制(PID 调节)
流程:PT100 热电阻 / K 型热电偶 → 温度变送器 → 4 - 20mA → PLC 模拟量模块 → 转换程序 → 实际温度值
应用:转换后的温度值送入 PID 指令,控制加热器 SSR / 接触器通断,同时显示在触摸屏上,超过设定值报警。
压力与液位监控
压力监控:压力变送器(4 - 20mA)→ 模拟量输入 → 转换为 MPa/bar → 上下限报警
液位监控:液位计(超声波 / 雷达 / 静压)→ 转换为米 / 百分比 → 控制进料泵启停
多段压力控制:低压启动→ 中压保压 → 高压关断,依赖转换后的实际值判断
流量计量与累计
流程:电磁流量计→ 4 - 20mA 输出瞬时流量 → PLC 转换为 m?/h
应用:定时采样 + 积分累计 → 计算出总流量 → 用于贸易结算或物料平衡;小流量切断:流量低于阈值自动关闭阀门,防止滴漏。
称重与配料系统
流程:称重传感器→ 变送器 → 4 - 20mA 或 0 - 10V → PLC 转换为 kg
应用:快加料→ 慢加料 → 精加料三级控制,依赖实时重量值判断;去皮、清零、累计批次重量等功能基于准确的模拟量转换。
位置与位移检测
拉线位移传感器→ 0 - 10V → PLC → 转换为 mm → 用于液压缸位置反馈
激光测距仪→ 4 - 20mA → 转换为 m → 天车定位、堆垛机位置检测
角度传感器→ 转换为度 → 阀门开度反馈、摆臂位置控制
速度与转速反馈
流程:编码器→ 频率转模拟量模块 → 0 - 10V → PLC 转换为 m/min 或 RPM
应用:多台电机速度同步:读取每台的实际速度→ 比较 → 调整变频器输出;传送带打滑检测:主动轮 vs 从动轮速度差值超过阈值 → 报警停机。
环境参数监测(GxP / 合规场景)
温湿度变送器→ 4 - 20mA → PLC → 转换为℃和 % RH
压差变送器→ 转换为 Pa → 洁净区正压维持
CO? / O?分析仪 → 转换为 ppm → 发酵罐、气调库监控
所有数据记录、趋势曲线、审计追踪,基于转换后的工程值
数据上传与 MES/SCADA 对接
流程:PLC → OPC UA / Modbus TCP → SCADA 上位机 → 实时显示和存储
应用:MES 系统读取温度、压力、产量等数据 → 生成生产报表;设备 OEE 分析:停机时间、产量、良品率,需要准确的模拟量数据。
六、常见坑和注意事项
4 - 20mA 的偏移量:4mA 不等于 0,西门子 S7 - 1200 默认 4mA 对应数字量 5530,0mA 对应 0。使用 4 - 20mA 传感器时,公式应为:工程值 = (X - 5530) ÷ (27648 - 5530) × (Ymax - Ymin) + Ymin。
信号干扰导致读数跳动
硬件层面:使用屏蔽电缆、单端接地、远离变频器 / 动力线
软件层面:加一阶低通滤波,取 N 次平均值
// 简单的一阶低通滤波
rFiltered := rFiltered * 0.7 + rNewValue * 0.3;
量程选择错误:传感器量程与程序里设定的量程范围需一致,否则读数错误。
数据类型溢出:西门子 INT 范围是 - 32768 - 32767,做乘法运算(如 X * 1000)可能超过 32767 导致溢出,需用 DINT 或 REAL 类型。
断线检测:4 - 20mA 电流 < 4mA(如断线时 ≈ 0mA)可判断为故障。
IF iRawValue < 5530 THEN
// 低于4mA
bSensorFault := TRUE;
rEngValue := 0.0;
END_IF
七、完整 FB 封装示例(西门子 SCL)
FUNCTION_BLOCK "FB_AnalogInput"
VAR_INPUT
iRaw : INT; // 模拟量原始值
rEngMin : REAL; // 工程量下限
rEngMax : REAL; // 工程量上限
b4to20mA : BOOL; // TRUE=4 - 20mA, FALSE=0 - 20mA
rFilterCoef : REAL; // 滤波系数0.0 - 1.0
rAlarmHi : REAL; // 高报警值
rAlarmLo : REAL; // 低报警值
END_VAR
VAR_OUTPUT
rValue : REAL; // 滤波后的工程值
bFault : BOOL; // 传感器故障
bAlarmHi : BOOL; // 高报警
bAlarmLo : BOOL; // 低报警
END_VAR
VAR
rRawMin : REAL; // 4mA对应的数字量
rRawMax : REAL := 27648.0;
rTemp : REAL;
rLastValue : REAL;
END_VAR
BEGIN
// 设定4mA偏移
IF b4to20mA THEN
rRawMin := 5530.0;
ELSE
rRawMin := 0.0;
END_IF;
// 断线检测
IF iRaw < REAL_TO_INT(rRawMin * 0.9) THEN
bFault := TRUE;
rValue := rEngMin;
ELSE
bFault := FALSE;
// 线性转换
rTemp := (INT_TO_REAL(iRaw) - rRawMin) / (rRawMax - rRawMin) * (rEngMax - rEngMin) + rEngMin;
// 一阶低通滤波
rValue := rLastValue * rFilterCoef + rTemp * (1.0 - rFilterCoef);
rLastValue := rValue;
// 报警判断
bAlarmHi := rValue > rAlarmHi;
bAlarmLo := rValue < rAlarmLo;
END_IF;
END_FUNCTION_BLOCK
八、总结
PLC 模拟量转换公式的作用包括物理意义转换、控制逻辑基础、HMI 人机交互、数据上传与分析、故障诊断、程序标准化。模拟量转换是 PLC 工程师的 “基本功”,理解它有助于掌握工业自动化数据流,从 “会接线的电工” 转变为真正的工程师。