☰
汇川PLC模拟量采集与输出全流程:硬件接线、组态换算与故障排查
2026/9/28 13:56:20 网站建设 项目流程

做非标自动化这些年,最容易让新手翻车的不是伺服、不是视觉,反而是看起来最基础的模拟量采集和输出。尤其是汇川PLC这一套,很多朋友第一次接触时,从传感器选型、接线到程序换算,每一步都可能踩坑。这篇文章把汇川PLC模拟量采集与输出的全流程拆开讲,硬件接线、通道组态、工程量换算、模拟量输出、常见故障排查,按实际调试顺序走一遍,适合正在做项目或者刚接触汇川PLC的工控朋友收藏对照。

1. 动手之前先想清楚:模拟量方案的选型与整体思路

1.1 先确认现场信号类型,再谈模块选型

模拟量采集的第一步不是打开编程软件,而是确认传感器输出的信号到底是什么。工业现场最常见的模拟量信号无非这么几类:4-20mA电流信号、0-10V电压信号、0-5V电压信号,以及热电偶、热电阻这类温度信号。不同信号对应的采集模块、接线方式、抗干扰措施完全不同,选错了后面调起来非常被动。

以我实际接触过的项目为例,压力变送器、液位计、流量计绝大多数输出4-20mA,原因很简单:电流信号在长距离传输时不容易受线路电阻和电磁干扰的影响,而且4mA以下还可以做断线检测。温度变送器也多以4-20mA输出为主,但如果是裸热电偶或者PT100直接进PLC,那就必须选带温度采集功能的专用模块,普通的模拟量模块读不了毫伏级信号。

这里建议做方案时先列一个信号清单,把每个测点的信号类型、量程范围、传感器供电方式都写清楚,再决定模块型号。别信"到现场再看",到现场再看往往就是工期延误的开始。

1.2 汇川PLC模拟量模块怎么选:Easy系列、H系列、AM系列

汇川PLC产品线比较多,小型机有H1U、H3U,中型机有AM400、AM600,近两年还有Easy系列在非标设备里用得越来越广。不同系列的模拟量扩展方式不太一样,选型前先搞清楚手里的PLC是哪个平台。

如果是H3U这种小型PLC,主机有的型号自带模拟量输入输出,但通道数通常只有两入一出的规模。通道不够时需要挂AM系列扩展模块,比如AM300、AM600系列的模拟量模块。如果是Easy系列PLC,比如Easy320,它的扩展模块走的是GL20系列,我这次调试用的就是GL20-4AD,四通道模拟量输入模块,还配了GL20-4DA做模拟量输出。如果是AM600系列中型PLC,本身有背板总线,可以挂AM600-4AD、AM600-4DA、AM600-8AI这些模块,组网更灵活,也支持在InoProShop里做更复杂的配置。

选型时除了看通道数,还要注意三件事。第一,模块的精度和分辨率,一般12位、14位、16位都有,分辨率越高,原始值跳动的粒度越小。第二,通道类型是否可切换,很多模块每个通道可以单独用软件配置成电流输入或电压输入,但有些入门模块需要跳线切换,买之前一定要看手册确认。第三,模块是否支持在线插拔,GL20系列是支持热插拔的,但AM600背板模块一般建议断电操作,别为了省几分钟把模块烧了。

2. 硬件连接细节:接线就是一半的调试工作

2.1 两线制与四线制传感器的接法区别

模拟量接线最大的坑就在这里。同样是4-20mA信号,两线制和四线制的接法完全不一样,接错了轻则读数为零,重则烧掉模块通道。

两线制传感器,最常见于压力变送器、温度变送器,它只有两根线,既供电又输出信号。接线时,电源正极接传感器正端,传感器负端接PLC模块的AI+,模块的AI-和电源负极要共地。注意,这里"共地"不是嘴上说说,是必须用导线把电源负端和模块的COM端连在一起,否则回路不闭合,信号根本走不通。

四线制传感器则是电源线和信号线分开,四根线里两根接供电,两根输出信号。信号输出端接模块的AI+和AI-,其中AI-通常与电源负端在模块内部是相通的,所以不用担心共地问题。但四线制传感器供电时要注意电源电压是否匹配,很多变送器支持宽电压输入,比如12-36VDC,但也有一些只支持24V,超压就烧。

还有一点容易被忽略,就是传感器的供电电源和PLC模块的供电电源是否共地。如果传感器用单独的开关电源供电,而这个电源的负极没有和PLC电源负极连接,那信号回路也会中断。实际调试时我见过不少次,万用表量传感器输出端有24V、有电流,但PLC读数始终为零,最后查出来就是两个电源负极没连。

2.2 GL20-4AD与AM600系列模块的端子说明

具体到模块端子上,不同系列命名方式略有差异,但逻辑基本一致。GL20-4AD的输入通道端子一般标有AI+和AI-,有的厂家会标成I+和I-,本质都一样。电压输入和电流输入的区别在于,有些模块的通道端子里程可以软件切换,比如0-10V和0-20mA共用端子,靠软件配置;但有些模块电流输入必须短接一个跳线帽,或者把信号接到特定的端子组合上。

以GL20-4AD为例,通道0的接线通常是这样:如果选用0-10V电压输入,信号正接AI0+,负接AI0-;如果选用4-20mA电流输入,同样是AI0+和AI0-,但在组态软件里把量程选成4-20mA即可。具体到每个型号,建议直接查该型号的硬件手册,确认电流输入的端子接线图和跳线说明。

AM600系列模拟量模块的接线会更讲究一些,AM600-4AD每个通道除了AI+和AI-,还有一个AGND(模拟地)端子,用于屏蔽层的接地连接。这类模块对屏蔽要求更高,因为AM600多用于中型设备或者有较高抗干扰要求的场合。接线时屏蔽层要接到柜内的接地排,而不是悬空或者随意压在导轨上。

不管用哪个系列,有几个通用规则先记住:信号线用屏蔽双绞线,屏蔽层单端接地;模拟量线远离动力线,至少保持20厘米以上间距,实在避不开就穿金属管;接线端子一定要压紧,松动的端子是模拟量信号跳变的头号嫌疑犯。

2.3 电源、接地与屏蔽的正确处理

模拟量信号本身的功率很小,特别容易被外界的电磁干扰污染。我调试过一台设备,变频器一启动,PLC读取的液位信号就开始上下跳动,幅度有0.3mA左右,对应液位误差达到了好几厘米。排查到最后,问题出在传感器信号线和变频器输出线走到同一个线槽里,而且屏蔽层没有接地。

正确的做法是:模拟量信号线从传感器出来之后单独走线,线槽内和动力电缆保持物理隔离。如果现场布置确实紧凑,至少也要加金属隔板。屏蔽层单端接地,一般是靠近PLC这一端接地,不建议两端同时接地,因为两端电位差会在屏蔽层上形成环流,反而引入干扰。

电源方面也要注意,模拟量传感器尽量不和变频器、伺服驱动器共用同一个开关电源。如果必须共用,建议在传感器电源端加一个DC-DC隔离模块,或者至少加一个电源滤波器。有些项目里还会在传感器的24V电源输入端并联一个小容量的电解电容来吸收纹波,这算是个土办法,但实测有效。

接地是整个系统抗干扰的地基。控制柜里应该有一个独立的接地铜排,PLC的PE端子、模块的接地端子、开关电源的负极(如果需要)都汇集到铜排上,铜排再接到车间接地网。注意模拟量的AGND端子和数字地不要混在一起,很多模块的AGND和电源负端在内部并不是直接连通的,外部乱接可能导致共模电压异常。

3. 软件组态与参数配置:让模块正常工作

3.1 InoProShop新建工程与模块组态

汇川PLC的程序开发环境是InoProShop,基于Codesys内核,界面和操作逻辑对用过Codesys或者CODESYS V3的人来说很容易上手。新建工程时先选对PLC型号,如果是Easy系列,在设备树里添加对应的CPU型号,比如Easy320-0808TN或类似的具体型号。

工程建好后的第一件事,就是把硬件组态做对。在设备树里右键点击"添加设备",选择对应的扩展模块。添加GL20-4AD时,系统会弹出模块的参数配置界面,需要在这里设置每个通道的信号类型和量程。有些版本的InoProShop需要先在"通用"里把模块的总线地址拨码或站号设置正确,设备才能扫描到。

这里特别提醒一点:GL20系列模块挂在扩展总线上是有顺序的,模块的物理安装顺序必须和组态里的添加顺序一致,否则系统会报错或者模块地址全乱。我曾经遇到过一次,现场PLC后面挂了三个GL20模块,第一个是4AD、第二个是4DA、第三个是16DO,结果组态里添加顺序反了,导致模拟量输入模块读出来的数据全是乱的。调整组态顺序后一切正常。

组态完成后,在设备树里可以看到系统自动分配了输入输出映射地址。对于GL20-4AD,四个通道的模拟量原始值会映射到PLC的输入映像区,比如%IW368、%IW370这种地址,具体偏移量取决于模块在总线上的位置。程序读取时直接访问这些地址就可以。

3.2 通道量程与滤波参数的设置思路

通道量程的设置直接关系到原始值换算的准确性。以GL20-4AD为例,在模块配置界面里把通道0的量程选为"4-20mA",系统就会把4-20mA对应到0~27648这个原始值范围(汇川模拟量模块多数采用16位,满量程对应0~27648,也就是十六进制0x6C00)。如果是0-10V电压输入,同样对应0~27648。注意这里不是0~65535,别把换算公式里的分母搞错。

滤波参数方面,InoProShop的模拟量模块通常提供均值滤波或一阶惯性滤波选项,可以设置采样次数或者滤波时间常数。这个不是越大越好,滤波太深会让信号响应变慢,影响实时性;滤波太浅又起不到抗干扰作用。以我们做液位控制的经验来说,液位这种变化缓慢的对象,均值滤波采16次左右比较合适;如果是设备压力或流量控制,采4~8次就够了。

很多新手不知道,模块配置里的滤波是硬件层滤波,程序里还可以再做软件滤波,两层叠加可以显著改善信号质量。但要注意,滤波层数越多,信号延迟越大,对于闭环控制系统来说,过大的延迟可能导致震荡。所以滤波参数的设置思路应该是"够用就好",先观察原始值波动情况再决定要不要加强滤波。

4. 模拟量采集程序编写:从原始值到工程量

4.1 读取原始值的地址映射与数据类型

模拟量采集在程序里最核心的步骤,就是把硬件模块映射出来的原始值读出来,然后换算成工程量。前面已经提到,GL20-4AD的数据会映射到%IW开头的地址上,程序里直接读取即可。

这里有个新手很容易犯的错误:读取模拟量原始值时使用了错误的地址或数据类型。模拟量原始值默认是无符号整数(UINT),在InoProShop里对应的数据类型是UINT,占用16位存储空间。如果程序里声明成INT或者WORD,读出来的数可能看起来差不多,但做运算时符号位处理不同,换算结果会整体偏移。

看一段最简单的ST语言读取代码:

// 直接读取GL20-4AD第一通道的原始值 varRawInput : UINT; varRawInput := UINT_TO_INT(%IW368); // 读取原始值

实际项目中建议把原始值先转成INT或者REAL再做运算,因为UINT做减法时如果出现负值会产生下溢,得到错误的大数。尤其是换算公式里要做(原值-零点值)这种操作时,最好先转成INT再算。

4.2 工程量换算的标准公式与ST代码实现

模拟量换算的核心公式其实就一行,本质是线性映射。已知原始值范围0~27648对应4~20mA,而4~20mA又对应传感器的测量范围,比如0~1.6MPa,那么任意原始值对应的工程值就是:

工程值 = 量程下限 + (原始值 - 原始值零点) × (量程上限 - 量程下限) / (原始值满量程 - 原始值零点)

以4~20mA对应0~1.6MPa为例,原始值0对应4mA,原始值27648对应20mA,所以:

工程值 = 0 + 原始值 × 1.6 / 27648

写成ST语言就是这样:

// 模拟量换算函数块 FUNCTION_BLOCK FB_AnalogScale VAR_INPUT rawValue : INT; // 原始值,来自模块输入地址 rawZero : INT; // 零点原始值,4mA对应0 rawSpan : INT; // 满量程原始值,20mA对应27648 engZero : REAL; // 工程零点,比如0.0 engSpan : REAL; // 工程满量程,比如1.6 END_VAR VAR_OUTPUT engValue : REAL; // 换算后的工程值 END_VAR VAR temp : REAL; END_VAR temp := UINT_TO_REAL(rawValue) - UINT_TO_REAL(rawZero); temp := temp * (engSpan - engZero); temp := temp / UINT_TO_REAL(rawSpan - rawZero); engValue := temp + engZero;

实际项目里,每个通道建议单独做一个换算函数块,这样程序结构清晰,后续如果要加量程迁移或者校准偏移,只需要改参数即可。

4.3 断线检测与信号有效性判断

4-20mA信号有个先天优势:低于4mA就可以判定为断线或传感器故障。所以程序里一定要做信号有效性判断。常规做法是,当原始值低于某个阈值时,比如对应3.6mA的原始值(约2488),判定该通道断线或故障,输出一个报警信号并在HMI上显示。

// 断线检测逻辑示例 IF rawValue < 2600 THEN // 对应约3.8mA,留一定余量 bLineFault := TRUE; engValue := 0.0; ELSE bLineFault := FALSE; END_IF

这里余量要设置得合理。现场4~20mA信号正常工作时最低也有4mA,但线路老化、接触电阻增大可能导致满量程电流略降,或者零点电流略微漂移。如果阈值设得太接近27648的零点值,比如设为0对应的原始值100,那么线路接触不良时可能已经低于100但还没到断线的程度,会被误判成正常信号。建议阈值设在3.5~3.8mA对应位置比较合适,留出判断空间又不至于漏报。

电压信号同样存在断线检测问题,但判断逻辑和电流不同。0-10V信号断线时会读到0V,但正常测量值也可能是0V,所以不能简单用"低于某值就是故障"来判断。实际项目中,电压信号一般靠限幅判断,比如传感器量程下限对应0V,那么只有在传感器处于非常态时才能判断。如果设备要求高可靠性,建议优先选用4-20mA信号。

5. 模拟量输出程序编写:给执行机构送信号

5.1 输出通道的地址映射与数据格式

模拟量输出的流程和输入刚好相反:程序算出目标工程值,然后换算成模块可识别的原始值,写到输出映射地址,模块再把它转换成对应的电流或电压信号送给执行机构。

GL20-4DA的四个输出通道映射到PLC的输出映像区,地址一般是%QW开头,比如%QW368。输出的原始值范围和输入一致,同样采用0~27648的满量程。程序里写入时,数据类型以WORD或UINT为主,如果直接写INT,要注意数值范围不能为负。

5.2 从工程值到输出原始值的反向换算

模拟量输出最常见的一个场景是控制变频器的频率给定。比如上位机或触摸屏设定目标频率35.0Hz,变频器接受4-20mA信号对应0~50Hz,那么程序要算出要写入%QW368的原始值。

换算公式是反向的线性映射:

输出原始值 = (目标工程值 - 工程零点) × (输出满量程 - 输出零点) / (工程满量程 - 工程零点) + 输出零点

对于0~50Hz对应4~20mA的情况:

输出原始值 = 35.0 × 27648 / 50 = 19353.6

由于输出值必须是整数,程序里要做取整处理。ST语言代码如下:

// 模拟量输出计算示例 progTempValue : REAL; // 要输出的工程值,比如35.0Hz rawOutput : UINT; // 要写入输出模块的原始值 rawOutput := UINT_TO_REAL(REAL_TO_UINT(progTempValue)) * 27648.0 / 50.0; %QW368 := rawOutput;

这里还要考虑输出限幅的问题,防止程序异常时把超过量程的值写到模块里。比如变频器频率不允许超过50Hz,那么写入前必须先做一个限幅判断:

IF progTempValue > 50.0 THEN progTempValue := 50.0; ELSIF progTempValue < 0.0 THEN progTempValue := 0.0; END_IF

5.3 模拟量输出信号的现场校验

程序写完后,输出回路还要做现场校验。最常用的方法是,在程序里强制写入几个已知的原始值,用万用表在模块输出端测量实际的电流或电压值,确认模块本身输出是否准确。比如强制写入0,测量应约为4mA;强制写入27648,测量应约为20mA;强制写入13824,测量应约为12mA。

实测时通常会发现在中间值附近会有微小偏差,比如写入13824,实际测得12.05mA,这属于模块的正常精度误差。如果偏差超过0.5%,就要检查负载电阻是否匹配、接线端子是否压紧,或者做校准。有些高级模块支持软件校准,可以微调每个通道的零点和增益。

4-20mA输出的负载能力也需要注意。汇川多个模拟量输出模块的最大负载电阻大约在500欧姆左右,如果后面接的仪表或者变频器的输入阻抗过高,可能导致回路中有太多电压降,模块输出电压饱和,电流输出不上去。接线前用万用表量一下负载电阻,确保在模块规格范围内。

6. 常见问题与排查技巧实录

6.1 采集值跳动过大:干扰和接地的经典问题

模拟量采集中最让人头疼的问题就是原始值不停跳动。排除传感器本身故障后,绝大多数情况出在干扰和接地上。

排查思路按顺序来:第一,万用表直接量传感器输出端的信号,看稳定不稳定,如果不稳定,问题在传感器或电源;如果稳定,问题在信号传输路径或PLC模块。第二,检查信号线屏蔽层是否单端接地,没接地或者两端接地都会引入干扰。第三,检查信号线和动力线是否平行走线太长,如果避不开,加金属穿管隔离。第四,检查模拟量模块电源和变频器、伺服是否共用一个电源,共用的话加隔离电源。

程序方面也可以做辅助措施,比如在采集程序里加均值滤波,或者对信号做变化率限制。对于变化速率有物理限制的对象,比如液位、温度,变化率限制效果很好,可以滤掉瞬间的尖峰干扰。

一个真实的排查案例:客户现场的压力信号偶尔会瞬间跳到最大值,大概一秒后又恢复正常。最后查到是压力变送器的接线端子松动,振动环境下偶尔接触不良。这类"跳变型故障"往往不是干扰而是接触问题,处理方法是把所有模拟量接线端子重新压紧,并加装端子固定件。

6.2 输出信号不准:校验和校准的建议

模拟量输出不准往往和模拟量输入不准的原因类似,但还有几个特有因素。第一,负载电阻匹配问题,4-20mA输出回路中阻抗太大,导致电流达不到设定值;第二,使用了不合适的电源,导致模块内DAC参考电压偏移;第三,线路压降,尤其是输出线缆过长时,电流信号在长线上会有损耗。

排查时先做模块自测,断开负载,把万用表串联在回路中测量实际电流。如果空载时电流准确,说明模块本身没问题,问题出在负载或线路。如果空载也不准,考虑模块精度或校准参数问题。

汇川部分模拟量模块支持在线零点校准和增益校准,在InoProShop模块配置界面里可以操作。校准时需要外部高精度万用表配合,按照界面提示写入实际测量值即可完成校准。校准做完后,模块的误差一般可以控制在0.1%以内。

6.3 模块通讯不上:组态顺位和站号的坑

模拟量模块通讯不上,最常见的原因是组态顺序和物理安装顺序不一致。GL20系列扩展模块在总线上是有地址的,有的模块侧面有拨码开关设置站号,有的靠物理位置自动编码。组态里添加的顺序和实际物理顺序必须完全一致,否则模块识别失败。

此外,模块供电也要检查。GL20系列模块通常需要从总线取电,有些模块还有外部辅助电源端子。如果模块的电源指示灯不亮,检查总线连接器是否插紧、电源容量是否足够。扩展总线上接的模块多了,24V供电不足也可能导致部分模块不工作。

模块组态成功后在InoProShop的"扫描设备"里应该能看到模块信息。如果扫描不到,先检查通讯线、背板连接器,再检查模块是否损坏。实在不行,用替换法,把正常的模块换到故障位置上,如果故障位置能识别,说明原模块坏了;如果识别不了,说明问题在背板或主站。

6.4 常见故障速查表

故障现象可能原因排查重点
采集值始终为0接线错误、电源未共地检查AI+/AI-接线,确认电源负极共地
采集值跳动大电磁干扰、屏蔽未接地检查屏蔽层接地,信号线与动力线分离
采集值满量程跳变端子松动、传感器故障重新压紧端子,万用表测传感器输出
采集值整体偏差量程配置错误、未校准核对组态量程,做模块校准
输出值始终为0输出地址错误、模块未组态检查%QW地址,确认模块组态正常
输出值偏差大负载电阻过大、DAC基准漂移测量负载电阻,空载自测,重新校准
模块通讯不上组态顺序不一致、供电不足核对物理顺序与组态顺序,检查供电
单通道无信号通道配置错误、硬件通道损坏换通道测试,确认配置是否正确

7. 个人调试心法与扩展建议

最后分享两个我在汇川PLC模拟量调试里总结出来的土办法。第一个,任何模拟量项目都建议在程序里保留一个"调试模式"开关。调试模式下,所有通道的原始值直接映射到HMI的显示控件上,方便现场不打开电脑也能直接观察信号状态。这个习惯帮我节省了大量来回切换的时间。

第二个办法是程序里至少对每个模拟量通道做一版"原始值归档"记录,特别是设备交付初期的数据。现场的干扰问题很多是间歇性的,有历史数据才能回溯。汇川的InoProShop支持trace功能,可以把模拟量原始值存成趋势图,但正式交付后往往不会一直开着。这时候用程序把关键通道的原始值定期写入数据块,哪怕只是最近1000条记录循环覆盖,排查问题时也是极有用的。

模拟量采集和输出这个主题,初看起来是PLC里最基础的技能,但真正做到稳定、精确、可维护,牵扯到选型、接线、组态、换算、滤波、校验这么多环节。希望这篇从硬件连接到程序编写的全流程梳理,能帮你把汇川PLC模拟量这块彻底打通,少走一些我当年走过的弯路。

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

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

立即咨询