PLC模拟量转换的基本原理和编程实现

描述

写在前面

很多 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 显示、数据上传一整条技术链。

搞懂它,你就不再只是“会接线的电工”,而是真正理解工业自动化数据流的工程师。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分