PLC模拟量输入输出转换原理、公式推导与现场调试实战指南
2026/9/23 12:16:31 网站建设 项目流程

1. 模拟量转换到底在解决什么问题

1.1 从“开关”到“旋钮”的思维转变

刚接触PLC编程的朋友,大部分都是从数字量入门的。按钮按下就是1,松开就是0,指示灯亮就是1,灭就是0。这种非黑即白的逻辑非常符合直觉,梯形图里一个常开触点加一个线圈就能跑起来。但实际项目里,客户不会只让你控制一个电机的启停,他们经常会提这样的需求:把水箱温度稳定在65度、根据管道压力自动调节阀门开度、把变频器的运行频率实时显示到触摸屏上。这些需求背后站着的就是模拟量。

数字量处理的是离散状态,模拟量处理的是连续变化的物理量。温度从20度升到80度,压力从0兆帕涨到1.6兆帕,液位从0米涨到5米,这些量不会跳变,它们是平滑过渡的。PLC的CPU只认识二进制数字,它不知道什么是温度、什么是压力,所以必须有一个翻译官,把传感器送来的连续信号翻译成CPU能处理的数字,再把CPU算出来的数字翻译成执行机构能接受的连续信号。这个翻译过程就是模拟量输入转换和模拟量输出转换。

我见过不少新手在这个环节栽跟头,程序逻辑写得漂漂亮亮,但模拟量通道读上来的数值要么纹丝不动,要么疯狂跳动,要么和实际值差了一大截。问题往往不在梯形图本身,而在于对转换原理、接线方式、量程映射这几个基础环节的理解不够扎实。这篇文章就把模拟量输入输出转换这件事从头到尾拆开讲清楚,从传感器信号类型到PLC内部数值范围,从转换公式推导到程序实现,再到现场调试的避坑经验,尽量让不同基础的朋友都能找到自己需要的那一段。

1.2 谁需要掌握这项技能

如果你正在做以下任何一件事,模拟量转换就是你绕不过去的坎:负责设备改造的电气工程师,需要把老设备的模拟仪表接入新PLC系统;做过程控制的自动化人员,需要采集温度、压力、流量、液位等连续信号;搞设备维护的技术员,需要判断模拟量通道故障还是传感器故障;甚至是参加PLC相关技能考核的学生,模拟量编程几乎是必考项。不同品牌PLC的模拟量模块型号五花八门,但底层的转换逻辑是相通的,掌握了核心原理,换任何品牌都能快速上手。

2. 模拟量信号类型与硬件接线基础

2.1 电压信号与电流信号的选择逻辑

工业现场最常见的模拟量信号有两类:电压信号和电流信号。电压信号常见的有0到10伏、0到5伏、正负10伏、正负5伏;电流信号常见的有0到20毫安、4到20毫安。选哪种信号,不是拍脑袋决定的,背后有很实际的工程考量。

电压信号的特点是电路简单、功耗低,但致命弱点是抗干扰能力差。传输线路上只要有一点电磁干扰,电压值就会波动,而且线路越长、压降越明显。所以电压信号一般用在控制柜内部短距离传输,比如PLC模拟量输出直接接到同一柜内变频器的模拟量输入端,距离通常不超过几米。

电流信号刚好相反,它抗干扰能力强,因为干扰源很难在电流环路上注入足够大的能量去改变电流值。而且电流信号没有线路压降的问题,串联回路里电流处处相等,哪怕传输几百米,接收端读到的电流值依然准确。4到20毫安这个标准还自带断线检测功能:正常工作时电流最低是4毫安,如果线路断了,电流变成0毫安,PLC立刻就能判断出传感器断线或线路故障。0到20毫安就没有这个优势,断线时电流也是0,和正常测量最小值无法区分。

注意:现场选型时,如果传感器距离PLC超过5米,或者现场有变频器、接触器、大功率电机等干扰源,优先选4到20毫安电流信号。如果传感器和PLC在同一个控制柜内且距离很近,电压信号也可以用,但要做好屏蔽和滤波。

2.2 两线制、三线制、四线制传感器的接线差异

模拟量传感器按接线方式分为两线制、三线制和四线制,这个分类经常让新手迷糊。我用最直白的方式解释一下。

两线制传感器只有两根线,这两根线既是供电线又是信号线。传感器串联在24伏电源和PLC模拟量输入通道之间,PLC通道内部有一个采样电阻,传感器工作时整个回路电流在4到20毫安之间变化。这种接线最省线,但要求PLC模拟量输入通道支持两线制接法,也就是通道需要提供回路供电。两线制传感器通常是变送器类产品,比如压力变送器、温度变送器。

三线制传感器有三根线:电源正、电源负、信号输出。电源正和电源负给传感器供电,信号输出线单独送到PLC模拟量通道。这种接法下PLC通道只负责测量信号,不负责供电。三线制常见于一些需要独立供电的传感器,比如某些品牌的温度变送器。

四线制传感器有四根线:电源正、电源负、信号正、信号负。供电和信号完全隔离,精度最高,抗干扰能力最强。四线制传感器在实验室和高精度测量场合很常见,比如高精度压力传感器、称重传感器。

接线时最容易犯的错误是把两线制传感器当三线制接,或者把三线制传感器当两线制接。接错的后果轻则读数不准,重则通道损坏。我的经验是:拿到传感器第一件事就是看铭牌和说明书,确认接线制式,然后用万用表实测一下传感器输出端在通电状态下的电压或电流,确认信号类型和量程范围,再往PLC上接。

2.3 屏蔽层到底接哪一端

模拟量信号线必须用屏蔽双绞线,这一点没有商量余地。但屏蔽层怎么接,现场经常吵得不可开交。有人说接PLC端,有人说接传感器端,有人说两端都接,有人说接0伏,有人说接大地。

先说结论:屏蔽层应该单端接地,通常接在PLC控制柜的接地排上,传感器端悬空。为什么单端接地?因为如果两端都接地,两个接地点之间可能存在电位差,这个电位差会在屏蔽层上形成环流,反而把干扰耦合到信号线上。单端接地可以避免这个问题,同时屏蔽层依然能起到静电屏蔽的作用。

那屏蔽层接0伏还是接大地?这取决于现场的接地系统。如果控制柜有独立的信号地排,且信号地排与大地之间通过合理的接地方式连接,屏蔽层接信号地排即可。如果现场只有保护接地,屏蔽层接保护接地排也可以,但要确保接地电阻足够小。有些现场为了省事把屏蔽层接到0伏电源线上,这种做法在干扰不严重的场合勉强能用,但严格来说不规范,因为0伏线本身可能带有干扰噪声。

提示:屏蔽层剥线时不要剥太长,一般露出10到15毫米即可,剥太长会让屏蔽层和信号线之间产生分布电容,影响信号质量。屏蔽层要压接牢固,不能只是缠绕在端子上,最好用冷压端子压接后再接入接地排。

3. 模拟量输入转换的核心原理与公式推导

3.1 PLC内部数值范围与分辨率的关系

模拟量输入转换的本质是:PLC模拟量模块把外部传感器送来的电压或电流信号,通过模数转换器变成一定范围内的整数,这个整数存储在PLC的输入映像区里,程序读取这个整数后进行后续处理。

不同品牌PLC的模拟量输入数值范围不同。西门子S7-200 SMART的模拟量输入范围通常是0到27648对应0到10伏或0到20毫安,S7-1200/1500也是类似的0到27648。三菱FX系列常见的是0到4000对应0到10伏。欧姆龙CP系列常见的是0到6000。汇川PLC根据模块型号不同,可能是0到32000或0到27648。这些数值范围没有优劣之分,只是各家设计习惯不同。

数值范围决定了分辨率。以西门子0到27648为例,对应0到10伏,那么1伏对应2764.8个数字量,理论上能分辨的最小电压变化是10伏除以27648,约等于0.36毫伏。这个分辨率对于绝大多数工业场合已经足够了。但要注意,分辨率不等于精度,模块的转换精度还受温漂、非线性度、噪声等因素影响,实际有效精度可能只有12位或14位。

3.2 输入转换公式的推导与验证

模拟量输入转换的核心公式其实就是一个线性映射。假设PLC读取到的原始值为N,PLC内部数值范围为N_min到N_max,传感器量程为P_min到P_max,那么实际物理量P的计算公式是:

P = P_min + (N - N_min) × (P_max - P_min) ÷ (N_max - N_min)

这个公式看起来简单,但实际编程时有几个细节容易出错。第一个细节是整数运算的精度问题。如果直接用整数运算,除法那一步会丢失小数部分,导致计算结果偏差很大。比如N_max减N_min等于27648,P_max减P_min等于100,那么(N - N_min)乘以100再除以27648,如果N - N_min比较小,整数除法会直接把小数部分截断。解决办法是先把整数转成浮点数再做运算,或者先做乘法再做除法,利用PLC的32位运算能力保留精度。

第二个细节是量程上下限的对应关系。有些传感器是4到20毫安对应0到100度,那么4毫安对应0度,20毫安对应100度。但PLC读取到的原始值可能是0到27648对应0到20毫安,那么4毫安对应的原始值是27648乘以4除以20,等于5529.6,取整为5530。所以实际映射关系是5530到27648对应0到100度,而不是0到27648对应0到100度。如果忽略这个偏移,计算出来的温度会偏低。

第三个细节是超量程处理。传感器可能输出超过20毫安的电流,比如22毫安,PLC读取到的原始值可能超过27648,达到30000以上。这时候如果不做限幅处理,计算出来的物理量会超过量程上限,可能导致后续控制逻辑误动作。稳妥的做法是在转换后加一个限幅,把结果限制在量程范围内。

3.3 不同品牌PLC的转换实例对比

为了让大家更直观地理解,我用三个常见品牌举例说明。

西门子S7-200 SMART,模拟量输入模块EM AE04,通道地址AIW16,读取0到10伏信号,对应0到27648。假设传感器量程是0到1.6兆帕,当前原始值N等于13824,那么实际压力P等于0加上13824乘以1.6除以27648,等于0.8兆帕。程序里可以这样写:先用ITD指令把整数转成双整数,再用DTR指令转成浮点数,然后乘以1.6再除以27648.0,最后用ROUND指令转回整数或者直接用浮点数参与后续运算。

三菱FX3U,模拟量输入模块FX3U-4AD,读取0到10伏信号,对应0到4000。假设传感器量程是0到100度,当前原始值N等于2000,那么实际温度P等于0加上2000乘以100除以4000,等于50度。三菱的编程习惯是用整数运算,但要注意2000乘以100等于200000,超过了16位整数的范围,所以必须用32位运算指令DMUL和DDIV。

汇川PLC搭配汇川模拟量模块,读取4到20毫安信号,对应0到32000。假设传感器量程是0到25兆帕,当前原始值N等于16000,那么实际压力P等于0加上(16000 - 6400)乘以25除以(32000 - 6400),等于9.375兆帕。这里6400是4毫安对应的原始值,32000是20毫安对应的原始值。

提示:不管用哪个品牌,建议在程序里把转换公式封装成一个子程序或函数块,输入参数是原始值、原始值下限、原始值上限、物理量下限、物理量上限,输出是物理量。这样换项目时直接调用,不用每次都重新推导公式。

4. 模拟量输出转换的实现方法

4.1 输出转换的逆向思维

模拟量输出转换和输入转换方向相反,但逻辑是类似的。程序里计算出一个物理量目标值,比如阀门开度50%,需要把这个百分比转换成PLC模拟量输出模块能接受的数字量,再通过模块输出对应的电压或电流信号去驱动执行机构。

输出转换公式是输入公式的逆运算。假设物理量目标值为P,物理量范围是P_min到P_max,PLC输出数值范围是N_min到N_max,那么输出原始值N的计算公式是:

N = N_min + (P - P_min) × (N_max - N_min) ÷ (P_max - P_min)

同样要注意浮点运算和限幅处理。如果计算出来的N超过N_max,要强制限制在N_max,否则输出模块可能饱和或者报错。

4.2 输出通道的接线与负载匹配

模拟量输出通道的接线比输入通道简单一些,但负载匹配问题经常被忽略。电压输出通道的负载阻抗不能太低,否则输出电压会被拉低。电流输出通道的负载阻抗不能太高,否则电流达不到设定值。具体参数要看模块手册,一般电压输出要求负载阻抗大于1千欧,电流输出要求负载阻抗小于500欧。

我遇到过这样一个案例:PLC模拟量输出通道设定4到20毫安,接了一个250欧的采样电阻,理论上20毫安乘以250欧等于5伏,但实际测量只有4.2伏。后来发现是输出通道的负载能力不足,换了一个精度更高的隔离变送器才解决。所以输出通道接线前一定要确认执行机构的输入阻抗,必要时加信号隔离器或变送器。

4.3 输出保持与安全值设定

模拟量输出通道在PLC停机或模块故障时的行为需要提前规划。有些模块在通信中断时会保持最后一个输出值,有些会归零,有些会输出预设的安全值。对于控制阀门的场合,如果PLC突然停机,阀门保持原位可能比全开或全关更安全,也可能更危险,这取决于工艺要求。

我的做法是在程序里加一个安全值处理逻辑:当PLC从运行模式切换到停止模式时,或者当模拟量输出模块报故障时,程序主动把输出值设定到一个预先定义的安全值。这个安全值可能是0%、50%或100%,根据工艺安全分析确定。同时要在触摸屏上做一个手动强制输出功能,方便调试和应急处理。

5. 编程实现与现场调试要点

5.1 梯形图与结构化文本的取舍

模拟量转换程序可以用梯形图写,也可以用结构化文本写。梯形图直观,适合逻辑简单的场合,但做浮点运算和数学公式时比较繁琐,需要调用多个运算指令块。结构化文本写数学公式更简洁,可读性更好,适合复杂的转换逻辑。

我的习惯是:如果只是简单的线性转换,用梯形图调用现成的转换指令块就够了;如果涉及多段折线转换、温度补偿、滤波算法,就用结构化文本写一个函数块。西门子博途里可以用SCL语言写FC或FB,三菱GX Works里可以用ST语言,汇川InoProShop里也可以用ST。不管用哪种语言,核心是把转换逻辑封装好,主程序里只负责调用和传参。

5.2 模拟量滤波与抗干扰处理

现场模拟量信号经常会有波动,有时候是传感器本身的噪声,有时候是变频器干扰,有时候是接地问题。程序里加滤波是最经济有效的抗干扰手段。最简单的滤波是算术平均滤波,连续采样N次,去掉最大值和最小值,剩下的取平均。N一般取5到10,太大响应会变慢,太小滤波效果不明显。

稍微复杂一点的是一阶滞后滤波,也叫惯性滤波。公式是:本次滤波值等于上次滤波值乘以(1减去滤波系数)加上本次采样值乘以滤波系数。滤波系数越小,滤波效果越强,但响应越慢。我一般把滤波系数设在0.1到0.3之间,具体看信号波动程度和控制响应要求。

还有一种情况是工频干扰,信号上叠加了50赫兹的周期噪声。这种干扰用算术平均滤波效果不好,因为采样周期和工频周期不同步。解决办法是让采样周期等于工频周期的整数倍,比如20毫秒、40毫秒、60毫秒,这样工频干扰在多次采样中会相互抵消。

注意:滤波会引入滞后,对于快速响应的控制回路,滤波时间常数不能太大。比如压力闭环控制,滤波时间常数超过100毫秒就可能引起振荡。这时候要考虑硬件滤波和软件滤波配合使用,或者选用响应更快的传感器。

5.3 常见故障排查速查表

故障现象可能原因排查方法解决措施
读数为0且不变化传感器未供电、线路断开、通道未启用万用表测传感器输出端电压或电流检查供电、接线、模块配置
读数跳动剧烈屏蔽层未接、干扰源太近、滤波不足示波器观察信号波形接好屏蔽层、远离干扰源、增加滤波
读数偏高或偏低量程设置错误、转换公式错误、传感器偏差对比标准信号源和PLC读数修正量程、校准传感器
读数超量程传感器故障、信号线短路、量程不匹配测量传感器输出是否超过上限更换传感器、检查线路、调整量程
输出无信号输出通道未启用、负载不匹配、程序未赋值测量输出端子电压或电流启用通道、调整负载、检查程序
输出值偏差大负载阻抗不匹配、输出未校准、电源波动测量实际输出与设定值对比加隔离变送器、校准输出、稳定电源

这张表是我这些年现场调试积累下来的,大部分模拟量问题都能在上面找到对应条目。实际排查时建议按顺序来:先确认硬件接线和供电,再确认模块配置和量程,最后检查程序逻辑和转换公式。不要一上来就改程序,很多问题其实是接线或配置引起的。

5.4 调试工具与实操技巧

调试模拟量通道,万用表是必备工具,但普通万用表精度不够,最好用四位半以上的数字万用表。信号发生器也很有用,可以输出标准4到20毫安或0到10伏信号,用来验证PLC通道和程序是否正确。如果没有信号发生器,可以用一个可调电阻和24伏电源搭一个简易信号源,但精度和稳定性差一些。

在博途里调试时,可以打开变量监控表,直接监控模拟量输入通道的原始值和转换后的物理量。如果原始值正常但物理量不对,问题在转换程序;如果原始值就不对,问题在硬件或模块配置。这种分段排查方法能快速定位问题。

还有一个技巧:在程序里加一个原始值记录功能,把模拟量通道的原始值定时记录到数据块里,用趋势图查看。这样即使不在现场,也能通过历史数据分析信号质量。如果趋势图是一条平滑曲线,说明信号正常;如果是一条锯齿波或毛刺很多的曲线,说明干扰严重或滤波不足。

6. 进阶话题与项目实战建议

6.1 多通道模拟量的批量处理

实际项目里很少只有一个模拟量通道,经常是8通道、16通道甚至更多。如果每个通道都单独写一段转换程序,程序会非常臃肿。更好的做法是用间接寻址或数组批量处理。比如把16个通道的原始值读到一个数组里,然后用循环依次调用转换函数,把结果写到另一个数组里。这样程序简洁,修改量程也方便。

西门子S7-1200/1500可以用FOR循环配合数组实现批量处理,三菱可以用变址寄存器,汇川可以用数组和循环指令。关键是把通道配置参数也做成数组,比如原始值下限数组、原始值上限数组、物理量下限数组、物理量上限数组,这样增加通道只需要在数组里加一个元素,不用改程序结构。

6.2 模拟量转换中的精度损失与补偿

从传感器到PLC再到上位机,模拟量信号经过多次转换,每一次转换都会引入误差。传感器本身有精度等级,比如0.5级、0.2级;PLC模拟量模块有转换精度,比如12位、14位、16位;程序里的浮点运算也有舍入误差。这些误差累积起来,最终显示值可能和实际值差不少。

对于精度要求高的场合,可以考虑以下补偿措施:选用更高精度的传感器和PLC模块;在程序里加零点校准和满度校准功能,用标准信号源校准后把偏差值存入数据块,运行时自动补偿;对于温度测量,加冷端补偿或查表法修正非线性;对于压力测量,加静压补偿或温度补偿。

6.3 从模拟量到PID闭环的过渡

模拟量转换往往是PID闭环控制的前置步骤。输入转换把传感器信号变成物理量,PID运算根据设定值和实际值的偏差计算输出,输出转换把PID输出变成模拟量信号驱动执行机构。这个链条里任何一个环节出问题,闭环控制都会失效。

我的建议是先把开环调试好:手动给定输出值,观察执行机构动作是否正常;然后手动改变输入信号,观察转换后的物理量是否准确;最后再投入PID自动控制。PID参数整定时,先把积分时间和微分时间设为零,只调比例增益,等系统稳定后再加积分,最后加微分。模拟量转换的精度和滤波效果直接影响PID的整定难度,转换不准或滤波不足,PID参数怎么调都调不好。

6.4 一个完整的恒压供水模拟量案例

最后分享一个我做过的恒压供水项目,把模拟量输入输出转换、PID控制、泵切换逻辑串起来。系统配置是:西门子S7-1200 PLC,一块模拟量输入输出模块,压力变送器4到20毫安对应0到1.6兆帕,变频器0到10伏对应0到50赫兹,三台水泵。

模拟量输入转换:压力变送器信号接入AIW16,原始值范围5530到27648对应0到1.6兆帕。程序里用SCL写了一个FC,输入原始值,输出实际压力,内部做了浮点运算和限幅。

PID控制:设定压力0.8兆帕,实际压力来自模拟量转换,PID输出范围0到100%。PID参数经过整定,比例增益2.5,积分时间15秒,微分时间0秒。

模拟量输出转换:PID输出0到100%对应变频器0到50赫兹,再对应模拟量输出通道0到27648。程序里用另一个FC做逆向转换,输出原始值给AQW16。

泵切换逻辑:当变频器频率达到50赫兹且压力仍低于设定值超过5秒,启动下一台泵;当频率低于30赫兹且压力高于设定值超过10秒,停止一台泵。切换过程中有延时和互锁,防止频繁启停。

这个项目调试时遇到的主要问题是压力信号波动大,变频器启动时压力读数会跳变。后来在模拟量输入程序里加了一阶滞后滤波,滤波系数0.15,同时把压力变送器的屏蔽层单独接到信号地排,问题基本解决。PID参数也重新整定了一次,比例增益降到1.8,积分时间加到20秒,系统稳定性明显改善。

这个案例说明,模拟量转换不是孤立的技能,它和硬件选型、接线、滤波、PID控制、设备联动紧密相关。把模拟量转换学扎实了,后面做闭环控制、过程控制、运动控制都会轻松很多。

我个人在实际操作中的体会是,模拟量转换的难点不在公式本身,而在于对现场信号特性的理解和对手册参数的熟悉程度。同一个模块,不同量程配置下的原始值范围可能完全不同,接线方式也可能需要跳线或拨码开关设置。每次拿到新模块,先花十分钟翻手册确认量程配置和接线图,比事后花两小时排查故障划算得多。另外,程序里的转换函数块一定要做限幅和异常处理,现场传感器断线、短路、超量程的情况太常见了,没有异常处理的程序在实验室能跑,到现场就趴窝。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询