模拟量信号采集与输出是S7-200SMART从开关量控制迈向过程控制的关键一步。很多做惯了继电器逻辑的朋友,第一次接压力变送器、接变频器给定信号时,往往卡在接线和量程换算上——要么读数跳得厉害,要么输出和实际值对不上。这篇内容就把我在现场摸爬滚打总结出来的整套方法拆开讲清楚,从模块选型、实物接线、屏蔽层处理,到程序里的量程转换、滤波、断线检测,再到常见故障排查,全部配可复现的步骤和参数。不管你是刚接触模拟量的新手,还是想把手上的采集精度再提一提的老手,都能直接抄作业。
1. 模拟量系统整体设计与选型思路
1.1 为什么S7-200SMART的模拟量要单独设计
S7-200SMART本体CPU上自带的模拟量点非常有限,比如常见的SR20、ST20这些型号,本体根本没有模拟量输入输出,只有部分型号如SR30带2路输入。真正要做多路采集,必须挂扩展模块。这就带来第一个设计问题:模块怎么选、通道怎么分配、信号类型怎么匹配。
我见过不少项目,前期图省事,随便拿了个电压型输入模块去接4-20mA的变送器,结果要么读数只有满量程的一小部分,要么干脆没反应。原因很简单,电流信号在模块内部需要一个采样电阻把电流转成电压,电压型模块的输入阻抗和电流型完全不同。所以选型第一步,先确定现场仪表输出的是电流还是电压,是4-20mA、0-10V还是0-20mA,再对应选模块。
S7-200SMART常用的模拟量扩展模块有这么几类:EM AE04(4路模拟量输入)、EM AE08(8路输入)、EM AQ02(2路输出)、EM AQ04(4路输出)、EM AM06(4入2出混合)。输入模块又分电流型和电压型,订货号不同,比如EM AE04有6ES7288-3AE04-0AA0这种通用型,支持电压电流通过拨码或接线方式切换,具体要看手册。输出模块同理,AQ02输出的是电压还是电流,也分型号。
提示:选模块时一定要核对订货号后缀,同一系列不同后缀支持的信号类型可能完全不同,别只看“AE04”就下单。
1.2 信号类型与量程的匹配逻辑
模拟量信号本质上是连续变化的物理量,PLC内部只能处理数字量,所以中间必然有一个A/D转换。S7-200SMART的模拟量输入模块,把外部信号转换成0-27648的整数(对应满量程),这是西门子标准。注意,是0-27648,不是0-32767,也不是0-4095。这个数字范围是西门子模拟量的通用约定,记住它,后面所有换算都围绕它展开。
对于4-20mA信号,模块内部对应关系是:4mA对应0,20mA对应27648。对于0-10V信号,0V对应0,10V对应27648。对于0-20mA,0mA对应0,20mA对应27648。这里有个关键点:4-20mA的“活零点”设计,是为了区分断线和真正的零信号。如果变送器断线,电流为0mA,模块读到的是0,而不是4mA对应的0,程序里就能通过判断读数是否低于某个阈值来报警。
量程换算的核心公式是:
物理量 = (原始值 / 27648) × (量程上限 - 量程下限) + 量程下限
比如一个0-1.6MPa的压力变送器,输出4-20mA,模块读到13824,那么实际压力 = (13824/27648) × (1.6 - 0) + 0 = 0.8MPa。这个公式在程序里用浮点运算实现,后面会给出具体梯形图思路。
1.3 通道分配与抗干扰的前置考虑
设计阶段就要把通道分配好,哪些通道接电流、哪些接电压、哪些备用,最好在图纸上标清楚。我习惯把同一类型的信号集中在一个模块上,比如所有4-20mA压力变送器接AE04,所有0-10V的接另一个模块,这样接线和排查都方便。
抗干扰要从设计阶段就考虑。模拟量信号是弱电信号,容易受变频器、接触器、动力电缆的干扰。所以布线时模拟量电缆要远离动力线,至少保持20cm以上距离,交叉时尽量垂直交叉。屏蔽层怎么接,后面单独讲,这是现场最容易出错的地方。
2. 实物接线与屏蔽层处理细节
2.1 两线制、三线制、四线制变送器的接线区别
现场仪表按供电和信号线数量分两线制、三线制、四线制,接线方式完全不同,接错了轻则读数不准,重则烧模块。
两线制变送器:只有两根线,既供电又传信号。比如常见的压力变送器,24V电源正极接变送器正端,变送器负端接模块的电流输入正端,模块的电流输入负端接电源负极(0V)。这样形成一个回路,变送器工作时电流在4-20mA之间变化。注意,两线制变送器必须串联在回路中,不能把模块输入直接并在电源上。
三线制变送器:三根线,通常是电源正、电源负、信号输出。信号输出和电源负共地。接线时电源正接变送器电源正,电源负接变送器电源负和模块输入负端,信号输出接模块输入正端。这种接法在国产仪表里很常见。
四线制变送器:四根线,电源两根、信号两根,电源和信号完全隔离。接线最简单,电源正负接对应端子,信号正负接模块输入正负。这种抗干扰最好,但成本也高。
注意:接线前务必确认变送器是几线制,说明书上一般会写“两线制4-20mA”或“四线制4-20mA”。拿不准就用万用表测一下,两线制在断电时正反向电阻有明显差异。
2.2 模块端子定义与实物接线图说明
以EM AE04为例,模块上有几个关键端子:L+和M是模块工作电源,通常接24VDC;输入通道有各自的+和-端子。对于电流输入,有的模块需要把通道的电压/电流选择拨码拨到电流侧,有的模块通过接线方式自动识别。具体看模块正面标签或手册。
实物接线时,我习惯按这样的顺序:先接模块工作电源L+和M,确认模块指示灯正常;再接变送器电源,用万用表确认24V到位;最后接信号线。信号线接完后,不要急着上电,先用万用表测一下回路电流是否在4-20mA范围内,如果超出,说明变送器或接线有问题。
对于输出模块EM AQ02,接线类似。输出电流时,负载串联在输出端和电源之间。比如要输出4-20mA给变频器调速,模块输出正端接变频器模拟量输入正端,变频器输入负端接模块输出负端或电源0V,具体看变频器说明书。输出模块一般不需要外部电源,模块内部提供驱动。
2.3 屏蔽层到底接哪一端
这是现场问得最多的问题:模拟量屏蔽层接0V还是接地?我的经验是,屏蔽层只在PLC柜侧单端接地,现场仪表侧悬空。为什么?如果两端都接地,地电位差会在屏蔽层上形成环流,反而引入干扰。单端接地可以泄放静电和共模干扰,又不会形成地环路。
具体操作:模拟量电缆的屏蔽层剥出来,拧成一股,接到PLC柜内的接地铜排上。如果柜内没有专用接地排,可以接到柜体金属底板,但要确保底板和大地连通。现场变送器侧的屏蔽层剪掉,用绝缘胶布包好,不要接到变送器外壳或信号负端。
有些场合,比如变频器附近的模拟量,单端接地效果不好,可以尝试在模块侧通过一个0.1uF电容接地,或者把屏蔽层接到模块的M端(0V)。但这是特殊情况,常规还是单端接地。
提示:屏蔽层千万不要接到模块的信号负端,那样会把干扰直接引入信号回路。我见过有人把屏蔽层和信号负端拧在一起,结果读数跳得没法看。
3. 程序实现:量程转换、滤波与断线检测
3.1 原始值读取与量程转换的梯形图思路
S7-200SMART读取模拟量输入,直接用AIW地址。比如EM AE04插在CPU后面第一个扩展位,通道0对应AIW16,通道1对应AIW18,以此类推。注意,AIW是16位整数,范围0-27648,但程序里要用整数运算还是浮点运算,取决于精度要求。
量程转换我一般用浮点运算,因为整数运算会丢精度。步骤是:先把AIW的值转成浮点数(ITD指令),再除以27648.0,乘以量程跨度,加上量程下限。比如0-1.6MPa,量程跨度1.6,下限0,那么:
VD100 = (ITD AIW16) / 27648.0 * 1.6
如果量程下限不是0,比如-50到150℃,跨度200,下限-50,那么:
VD100 = (ITD AIW16) / 27648.0 * 200.0 - 50.0
这里要注意,ITD是整数转双整数,然后再用DTR转成浮点数。S7-200SMART的浮点运算指令是DIV_R、MUL_R、ADD_R、SUB_R。整个转换用几行梯形图就能搞定。
对于输出,反过来算:先根据设定值算出对应的0-27648整数,再用MOV_W写到AQW地址。比如输出4-20mA给变频器,设定频率0-50Hz对应4-20mA,那么:
AQW16 = (设定频率 / 50.0) * 27648
注意,输出模块的AQW地址和输入类似,也是从AQW16开始,具体看模块位置。
3.2 模拟量滤波的几种实用方法
现场模拟量读数跳动是常态,尤其是压力、流量这类信号。滤波方法有硬件滤波和软件滤波,硬件滤波靠RC电路,但PLC模块内部一般已经有简单滤波,所以重点讲软件滤波。
最简单的是算术平均滤波:连续采样N次,求平均。N取8或16,效果就不错。在S7-200SMART里可以用FOR循环或者直接写多个采样指令。我习惯用定时中断,比如100ms中断一次,采样一次,存到环形缓冲区,然后求平均。这样程序结构清晰,滤波效果也好。
另一种是一阶滞后滤波,也叫惯性滤波。公式是:本次输出 = 上次输出 × (1 - α) + 本次采样 × α,α取0.1-0.3。这种方法对突变信号响应慢,但对周期性干扰抑制好。适合温度这类变化慢的信号。
还有中值滤波,连续采3次或5次,取中间值。对脉冲干扰特别有效,比如偶尔出现的尖峰。我一般把中值滤波和平均滤波结合,先中值再平均,效果很稳。
注意:滤波会带来滞后,对于需要快速响应的控制回路,滤波时间常数不能太大。比如压力控制,滤波太狠会导致超调。
3.3 断线检测与超量程报警的实现
4-20mA信号的断线检测很简单:如果AIW读数低于某个阈值,比如低于2000(对应约1.16mA),就判断为断线。因为正常工作时最小是4mA对应0,读数应该在0附近,但不会低于0太多。实际上,模块对低于4mA的信号会读到负值或0,具体看模块。我一般设阈值1000,低于就报警。
超量程检测:如果AIW读数大于27648,说明信号超过20mA,可能是变送器故障或量程选小了。程序里加一个比较指令,大于27648就置报警位。
对于输出,断线检测靠读回输出值?S7-200SMART的输出模块一般不支持读回,所以输出断线只能靠外部检测,比如变频器报故障。或者用模块的诊断功能,但EM AQ02诊断功能有限。
程序里我习惯把每个模拟量通道做成一个子程序,输入AIW地址、量程上下限、滤波参数,输出工程值和报警位。这样复用性好,改起来也方便。
4. 常见问题排查与现场避坑经验
4.1 读数跳动、不准的排查顺序
读数跳动先查接线,再查屏蔽,最后查程序。接线方面,看信号线是否松动、是否和动力线捆在一起、变送器供电是否稳定。屏蔽方面,看屏蔽层是否单端接地、接地是否良好。程序方面,看滤波是否开启、量程换算是否正确。
我遇到过一次读数跳得厉害,查了半天发现是变送器电源和变频器共用了一个24V开关电源,变频器工作时电源纹波大,导致变送器输出不稳。后来给变送器单独配了一个线性电源,问题解决。所以模拟量系统的电源最好独立,或者至少加LC滤波。
还有一次,读数总是偏小,最后发现是模块的电压/电流选择拨码没拨对,拨在电压侧,导致电流信号被错误采样。所以接线前一定核对拨码位置。
4.2 输出与执行器不匹配的典型场景
输出4-20mA给变频器,结果变频器不动作或动作异常,常见原因有:输出模块型号不对,输出的是0-10V而不是4-20mA;接线极性反了;变频器模拟量输入通道设置不对,比如设成了0-10V模式;输出量程和变频器量程不匹配,比如PLC输出0-27648对应0-50Hz,但变频器设成0-60Hz。
排查时先用万用表测模块输出端电流,看是否随设定值变化。如果电流正常,问题在变频器侧;如果电流不对,问题在模块或程序。我习惯在程序里加一个手动输出测试功能,方便现场调试。
4.3 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 读数为0 | 变送器断线、模块未供电、通道未启用 | 测回路电流、查模块电源、查AIW地址 | 恢复接线、供电、修正地址 |
| 读数跳动大 | 屏蔽层未接、动力线干扰、电源纹波 | 查屏蔽、查布线、查电源 | 单端接地、分开布线、独立电源 |
| 读数偏大/偏小 | 量程换算错误、拨码不对、变送器精度 | 核对公式、查拨码、校验变送器 | 修正公式、拨码、更换变送器 |
| 输出无电流 | 模块型号不对、接线反、负载开路 | 测输出端、查型号、查负载 | 换模块、调接线、接负载 |
| 输出与设定不符 | 量程不匹配、程序换算错误 | 测输出电流、核对程序 | 修正量程、程序 |
4.4 几个容易被忽略的实操心得
第一,模拟量模块的电源最好和CPU电源分开,或者至少加滤波。CPU和模块共用电源时,CPU的开关噪声会串到模拟量上。
第二,接线时用冷压端子,不要直接拧线。模拟量端子小,直接拧线容易短路或接触不良。
第三,程序里加一个“模拟量使能”位,调试时可以单独屏蔽某个通道,方便排查。
第四,定期校验变送器。现场变送器用久了会漂移,尤其是压力变送器。我一般半年校验一次,用标准信号源给4mA、12mA、20mA,看PLC读数是否对应0、13824、27648。
第五,输出模块的负载电阻要在允许范围内。EM AQ02输出电流时,负载电阻一般不超过500Ω,具体看手册。负载太大,输出电流上不去。
5. 从采集到控制的完整案例拆解
5.1 案例背景与硬件配置
假设一个水处理项目,需要采集2路压力(0-1.6MPa,4-20mA)、1路液位(0-5m,4-20mA)、1路温度(0-150℃,4-20mA),并输出1路4-20mA控制变频器调节水泵转速。硬件选型:CPU SR20一台,EM AE04一块(4路输入),EM AQ02一块(2路输出,用1路)。变送器都是两线制,24V供电。
接线时,AE04的通道0接压力1,通道1接压力2,通道2接液位,通道3接温度。AQ02的通道0接变频器模拟量输入。所有变送器电源来自一个独立的24V/2A线性电源,变频器电源单独。屏蔽层在PLC柜侧接接地排。
5.2 程序框架与关键代码说明
程序分几个块:主程序调用模拟量采集子程序、控制子程序、输出子程序。采集子程序里,每个通道做量程转换和滤波。滤波用8次平均,定时中断100ms采样一次。
关键代码思路(梯形图转文字描述):
- 网络1:定时中断SMB34设为100ms,连接中断程序INT_0。
- 网络2:INT_0里,采样AIW16到VW100,AIW18到VW102,AIW20到VW104,AIW22到VW106。
- 网络3:主程序里,调用滤波子程序,对VW100做8次平均,结果存VD200。
- 网络4:量程转换,VD204 = (ITD VD200) / 27648.0 * 1.6,得到压力1的工程值。
- 网络5:断线检测,如果VW100 < 1000,置位报警M0.0。
- 网络6:输出,根据PID输出或手动设定,计算AQW16 = (设定频率 / 50.0) * 27648。
PID部分可以用S7-200SMART自带的PID指令,或者自己写简易PID。对于水泵控制,一般用PID调节频率,保持压力恒定。
5.3 调试步骤与参数整定
调试时先不接变送器,用信号发生器给4mA、12mA、20mA,看PLC读数是否为0、13824、27648。如果不对,检查量程换算和模块拨码。然后接变送器,看实际压力下的读数是否合理。
PID整定先用手动模式,给一个固定输出,看压力变化。然后切自动,先设P=1,I=10,D=0,观察响应。如果超调大,减小P或增大I;如果响应慢,增大P或减小I。反复调几次,直到压力稳定。
输出调试时,先手动给AQW16写0、13824、27648,用万用表测输出电流是否为4mA、12mA、20mA。如果不对,检查输出模块型号和负载。
5.4 运行效果与后续优化方向
这套配置跑下来,压力控制精度能到±0.02MPa,液位和温度读数稳定。后续优化可以考虑:增加模拟量输入的多级滤波,根据信号变化率自动调整滤波强度;增加变送器断线后的安全输出策略,比如断线时变频器降频运行;把模拟量数据上传到触摸屏或上位机,做趋势记录。
如果项目更大,比如32个变频器Modbus通讯加模拟量采集,那就要考虑通讯和模拟量的资源分配。S7-200SMART的Modbus通讯和模拟量可以同时跑,但要注意扫描周期。模拟量采集放在定时中断里,通讯放在主程序,互不干扰。
提示:模拟量通道多的时候,建议用EM AE08,比两个AE04省空间,但接线密度大,要更注意屏蔽和隔离。
6. 模拟量系统的扩展与进阶思路
6.1 多通道采集时的扫描与中断策略
当模拟量通道超过8个,比如用两个AE08,共16路,这时候如果还在主程序里逐个采样,扫描周期会变长,而且采样不同步。更好的做法是用定时中断统一采样,比如200ms中断一次,把所有通道读一遍,存到缓冲区。这样采样周期固定,滤波和换算都在中断外做,不影响主程序。
中断里只做AIW到VW的搬运,不做浮点运算,因为中断时间要短。浮点运算放在主程序,用标志位触发。这样既保证采样同步,又不拖慢中断。
6.2 模拟量与Modbus通讯共存时的资源分配
S7-200SMART做Modbus主站或从站时,通讯会占用扫描时间。如果同时有模拟量采集,建议把模拟量采样放在定时中断,通讯放在主程序。Modbus通讯的轮询周期可以设长一点,比如500ms,因为变频器控制对实时性要求没那么高。
如果模拟量用于闭环控制,比如压力PID,那PID运算要放在定时中断里,保证控制周期固定。通讯只负责读写参数,不参与控制。这样分工明确,系统稳定。
6.3 从模拟量到过程控制的进阶路径
模拟量采集和输出只是过程控制的基础。再往上走,就是PID闭环、串级控制、前馈补偿。S7-200SMART的PID指令支持自整定,但自整定效果一般,我一般手动整定。对于水泵、风机这类负载,PID参数比较固定,整定一次就能长期用。
如果要做更复杂的控制,比如多泵切换、恒压供水,那就要结合模拟量和逻辑控制。模拟量负责压力采集和变频器输出,逻辑负责泵的启停和轮换。这种系统在S7-200SMART上完全能实现,关键是程序结构要清晰,把模拟量处理、PID、逻辑控制分成独立的子程序。
最后分享一个小技巧:模拟量模块的接线端子容易松动,尤其是现场振动大的场合。我习惯在接线完成后,用热熔胶或扎带固定一下线缆,减少端子受力。这个细节不起眼,但能避免很多偶发故障。