『7x24小时有问必答』

写在前面

很多  PLC 新手最困惑的问题之一就是:
模拟量模块读回来一个  0~27648 的数字,怎么变成温度、压力、流量?
还有人觉得这个转换公式很简单,不就是线性换算吗?但到了实际项目中,很多人还是会算错、用错,甚至搞不清楚  4~20mA 和 0~10V 的区别。
今天这篇文章,就带你彻底搞懂  PLC 模拟量转换的全部知识——从数学原理、编程实现,到实际项目中到底哪些地方需要用到它。

一、模拟量转换的基本原理

先说清楚一个概念:PLC 是数字系统,只能处理 0 和 1。但工业现场有大量模拟信号——温度、压力、液位、流量、速度、位置等等。
“模拟量输入模块”的作用,就是把这些连续的物理量,转换成 PLC 能读懂的整数值。

1.1 标准信号范围

工业上最常用的模拟量信号有两类:
信号类型
标准范围
分辨率值范围
适用场景
电压信号
0~10V / -10~+10V
0~27648 / -27648~27648
位移传感器、电位器
电流信号
4~20mA / 0~20mA
0~27648
压力、温度、流量、液位
热电阻  PT100
-200~850℃
0~27648(需模块支持)
高精度测温
热电偶
0~1300℃(K型)
0~27648
高温测量

1.2 核心转换公式

这是所有  PLC 工程师必须刻在脑子里的公式:
工程值  = (数字量 ÷ 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
简单吧?但这个公式的价值远不止于此。

二、为什么要写转换程序?

很多人觉得:直接把模拟量读出来用不行吗?为什么要多写一段转换程序?
答案很简单:

2.1 数字量没有物理意义

操作工在触摸屏上看到的应该是“温度 85℃”,而不是“AIW 读数是 23500”。
如果你直接把原始值显示出来,现场没人看得懂。

2.2 方便报警和逻辑判断

假设你要设置“温度超过 90℃ 就报警”——如果你不转换,就得算 90℃ 对应多少数字量;如果换了传感器量程,又要重新算。
写了转换程序之后,直接在  HMI 上设置 90℃ 就行,一劳永逸。

2.3 方便调试和排查

当现场人员说“压力不对”的时候,你打开程序看到“当前压力 = 0.35MPa”,比看到“原始值 = 6055”要直观一万倍。

2.4 标准化和复用

把转换逻辑封装成  FB(功能块),以后所有模拟量信号直接调用,不用每次重新写一遍。

三、转换程序的编程实现

不同品牌的  PLC 实现方式略有不同,但核心思路完全一致。以下以最常用的几种为例:

3.1 西门子 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

3.2 西门子 S7-200 SMART(梯形图)

// 使用库指令 S_ITR 直接完成转换 // 输入端填写: // Input = AIW16(模拟量输入通道) // Ish      = 27648 // Isl      = 0(4mA对应5530,需注意偏移) // Osh      = 量程上限 // Osl      = 量程下限 // Output = VD100(转换结果)

3.3 三菱 FX 系列

// 三菱使用 SCL 指令或自己编写 // 假设 D0 = 模拟量原始值 0~4000 // 转换到 0.0~100.0(温度) // D100 = 转换结果   DMUL D0 K100 D10 // D0 * 100 DDIV D10 K4000 D100      // D100 = (D0*100)/4000

3.4 汇川 / 信捷(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

四、转换程序在实际项目中的应用场景

这才是本文的重点——知道公式不难,知道用在哪里才是关键。下面列出工业现场最典型的应用场景:

4.1 温度控制(PID 调节)

加热炉、反应釜、注塑机料筒、烘干线……几乎每条产线都有温度控制。
PT100 热电阻 / K型热电偶 → 温度变送器 → 4~20mA → PLC 模拟量模块 → 转换程序 → 实际温度值
转换后的温度值送入  PID 指令,控制加热器 SSR/接触器通断
同时显示在触摸屏上,超过设定值就报警

4.2 压力与液位监控

储罐、管道、液压站、气源系统都需要压力或液位监控:
压力变送器(4~20mA)→ 模拟量输入 → 转换为 MPa/bar → 上下限报警
液位计(超声波/雷达/静压)→ 转换为米/百分比 → 控制进料泵启停
多段压力控制:低压启动→ 中压保压 → 高压关断,全部依赖转换后的实际值判断

4.3 流量计量与累计

水处理、化工配料、食品灌装中,流量计量是核心:
电磁流量计→ 4~20mA 输出瞬时流量 → PLC 转换为 m³/h
定时采样  + 积分累计 → 计算出总流量 → 用于贸易结算或物料平衡
小流量切断:流量低于阈值自动关闭阀门,防止滴漏

4.4 称重与配料系统

饲料、混凝土、化工原料的自动配料系统:
称重传感器→ 变送器 → 4~20mA 或 0~10V → PLC 转换为 kg
快加料→ 慢加料 → 精加料 三级控制,全部依赖实时重量值判断
去皮、清零、累计批次重量等功能,基础都是准确的模拟量转换

4.5 位置与位移检测

伺服/步进系统之外,很多场合用模拟量传感器检测位置:
拉线位移传感器→ 0~10V → PLC → 转换为 mm → 用于液压缸位置反馈
激光测距仪→ 4~20mA → 转换为 m → 天车定位、堆垛机位置检测
角度传感器→ 转换为度 → 阀门开度反馈、摆臂位置控制

4.6 速度与转速反馈

变频器控制的电机、传送带速度检测:
编码器→ 频率转模拟量模块 → 0~10V → PLC 转换为 m/min 或 RPM
多台电机速度同步:读取每台的实际速度→ 比较 → 调整变频器输出
传送带打滑检测:主动轮  vs 从动轮速度差值超过阈值 → 报警停机

4.7 环境参数监测(GxP / 合规场景)

制药、食品、电子洁净车间对环境参数的严格监控:
温湿度变送器→ 4~20mA → PLC → 转换为 ℃ 和 %RH
压差变送器→ 转换为 Pa → 洁净区正压维持
CO₂ / O₂ 分析仪 → 转换为 ppm → 发酵罐、气调库监控
所有数据记录、趋势曲线、审计追踪,都基于转换后的工程值

4.8 数据上传与 MES/SCADA 对接

转换后的工程值,是工厂信息化的基础数据来源:
PLC → OPC UA / Modbus TCP → SCADA 上位机 → 实时显示和存储
MES 系统读取温度、压力、产量等数据 → 生成生产报表
设备  OEE 分析:停机时间、产量、良品率,都需要准确的模拟量数据

五、常见坑和注意事项

模拟量转换看似简单,但实际项目中以下问题经常翻车:

5.1 4~20mA 的偏移量别忘了

4mA 不等于 0!西门子 S7-1200 默认 4mA 对应数字量 5530,0mA 对应 0。
所以如果你用的是  4~20mA 传感器,公式里应该是:
工程值  = (X - 5530) ÷ (27648 - 5530) × (Ymax - Ymin) + Ymin
很多人直接用  X/27648 算,结果 4mA 时不是量程下限,差了约 20%。

5.2 信号干扰导致读数跳动

工业现场电磁干扰严重,模拟量信号经常会跳动。解决方法:
硬件层面:使用屏蔽电缆、单端接地、远离变频器/动力线
软件层面:加一阶低通滤波,取  N 次平均值
// 简单的一阶低通滤波 rFiltered := rFiltered * 0.7 + rNewValue * 0.3;

5.3 量程选择错误

传感器量程选  0~1MPa,但你接线时配置的模块量程是 0~10MPa,读数就完全不对。
一定要确认:传感器实际量程  = 程序里设定的量程范围。

5.4 数据类型溢出

西门子  INT 范围是 -32768~32767,刚好能放下 27648。
但做乘法运算时(如  X * 1000),可能超过 32767 导致溢出,要用 DINT 或 REAL 类型。

5.5 断线检测

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
这个  FB 封装好后,所有模拟量通道直接调用即可,参数在 HMI 上就能调整,非常方便。

七、总结

回到最初的问题:PLC 模拟量转换公式有什么用?
核心作用
一句话说明
物理意义转换
  PLC 读到的数字变成人能看懂的温度、压力、流量
控制逻辑基础
PID 调节、上下限报警、分段控制全部依赖转换后的实际值
HMI 人机交互
触摸屏上显示工程值,操作工才能正常使用
数据上传与分析
MES/SCADA 需要的是工程值,不是原始数字
故障诊断
断线检测、信号异常判断,依赖转换后的合理范围判断
程序标准化
封装  FB 后一键复用,所有模拟量统一处理
模拟量转换,是  PLC 工程师的“基本功”。看似简单的一行公式,背后串联起了传感器选型、信号接线、程序架构、HMI 显示、数据上传一整条技术链。
搞懂它,你就不再只是“会接线的电工”,而是真正理解工业自动化数据流的工程师。
你的项目中,模拟量转换踩过什么坑?
欢迎在评论区分享你的实战经验
—    —

扫码加免费领取资料
免费资料领取

资料介绍:10G必备工控资料礼包+电工必备热门软件

别忘了点赞+在看哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码