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 工程师的 “基本功”,理解它有助于掌握工业自动化数据流,从 “会接线的电工” 转变为真正的工程师。
上一篇:利用波特图显示控制环路特性
下一篇:插件焊接缺陷分类与机理分析

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料