在实训室里带新人,最常听到的一句抱怨是“程序我照着敲完了,机器就是不动”。拆开柜子看,输入点的公共端接反了、输出端接着感性负载却只挂一个中间继电器、通信线两头都压了屏蔽层。这类问题跟指令集毫无关系,全落在 PLC 硬件基础这块地板上。我习惯把它切成三块来讲:基本配线、软元件、通信程序。基本配线决定电能不能进得去、信号能不能传得准;软元件决定你有没有一张清晰的内部地址地图;通信程序决定这台机器是孤岛还是网络里的一个节点。三块任何一块塌了,程序写得再漂亮都是白搭。这篇内容面向刚接触小型机的新手,也面向那些“能改程序但不敢动柜子”的朋友,主线用 FX3U/FX5U 这类实训里出镜率极高的小型机来讲,其他品牌(欧系的小型机、国产的几个主流系列)思路完全一样,差别只在软元件名字和通信参数的填法上。
1. 三块划分背后的边界逻辑
1.1 为什么是这三块,而不是按“硬件/软件”分
多数教材按“硬件组成—指令系统—编程方法”来排章,学完一轮你会发现知识是连着的,但故障是分层的。现场出问题,第一件事是判断问题落在哪一层:是电没送到(配线层),是程序里的地址逻辑错了(软元件层),还是这台机和别人说不上话(通信层)。按这三块切,最大的好处是排查时有明确的收敛路径——先量电压,再看监控,最后抓报文,不用一上来就怀疑程序。
我见过太多人一停机就打开编程软件盯着梯形图看半小时,实际上柜门上那颗急停按钮根本没复位。配线层的问题用眼睛和万用表三分钟能定位,软元件层的问题用在线监控五分钟能定位,通信层的问题才需要抓数据。把这三层分开,效率差好几倍。
另一个理由是学习成本。配线层的知识是通的,学一次 FX 的接线逻辑,换任何品牌的继电器输出型 PLC 都能迁移;软元件层是半通的,编号规则不同但“输入不可写、输出唯一驱动、保持区要规划”这些原则通用;通信层最不通,但通了协议层的思维之后,换品牌只是查手册的事。按这三块学,投入产出比最高。
1.2 用 FX 系列做主线,跨品牌怎么迁移
选 FX3U/FX5U 当主线不是因为它最好,是因为它在各类实训场景里保有量大、资料全、扩展模块便宜,出问题容易找到人问。FX3U 是典型的“经典小型机”,软元件编号是八进制混十进制的老传统,特殊继电器用 M8xxx,通信参数全靠往数据寄存器里写数值——这套做法略显笨拙,但极其锻炼你对“参数就是内存里的一串位”的理解。FX5U 则往前走了一步,内置以太网口,特殊软元件改名叫 SM/SD,通信大多在工程软件里图形化配置。
迁移到其他品牌时,你只需要做三张对照表。第一张是软元件对照:X/Y 在多数品牌里还叫 I/Q 或 X/Y,辅助继电器 M 对应 DB 或 M,保持寄存器对应 VW 或 D。第二张是特殊继电器对照:常 ON、初始脉冲、时钟脉冲这三个是刚需,任何品牌都有,只是地址不同。第三张是通信格式寄存器对照:有的品牌叫通信格式字,有的直接在硬件组态里选波特率和校验。
提示:跨品牌迁移时最容易被忽略的是“输入编号是否八进制”。FX 系列的 X/Y 是八进制,X7 之后是 X10,不是 X8。新手在纸上排点位表时按十进制写,一到现场就错位。
2. 基本配线:把电送对,把信号接对
2.1 先分清主回路和控制回路,别一上来就接 PLC
我见过最典型的新手错误,是把接触器线圈直接串在 PLC 的输出点上,或者把 220V 直接引到输入端子上。开柜第一件事永远是画清楚两条线:主回路走的是电机、加热管、电磁阀这类功率负载,控制回路走的是 PLC 本体、传感器、指示灯。这两条线在物理上要分开走线槽,在电气上只通过接触器、继电器、固态继电器这些器件耦合。
FX3U 本体一般吃 AC100~240V 或 DC24V,本体上有一路 DC24V 辅助输出,容量通常几百毫安,够带几个接近开关和光电开关,但别拿它去带电磁阀。我习惯的做法是控制回路单独配一个 DC24V 开关电源,PLC 的 24V 输出只做传感器供电,并且加一路 2A 保险。这样即使传感器侧短路,也只烧保险,不至于把本体电源拖垮。
主回路的进线侧要有断路器,接触器线圈侧要有浪涌吸收(RC 或者压敏),变频器、伺服驱动器这类干扰源要单独走线,并且和 PLC 的信号线保持至少 20 厘米距离,实在避不开就交叉走,不要平行走长距离。这些是配线层的“地基”,做不好后面所有排查都是徒劳。
2.2 输入侧:漏型源型接反,是最常见的“灯不亮”
FX3U 的输入侧有一个 S/S 公共端,这一个端子决定了整组输入是漏型还是源型。S/S 接 DC24V 正极,输入点就要接 0V 侧信号(NPN 型传感器、干接点另一端接 0V),这叫漏型输入;S/S 接 0V,输入点接 24V 侧信号(PNP 型传感器),这叫源型输入。接反了不会烧,但输入指示灯永远不亮,很多人第一次遇到会以为模块坏了。
实操上我给新人一个口诀:看传感器铭牌,NPN 配漏型,PNP 配源型。NPN 型传感器输出的是低电平有效,也就是动作时输出端被拉到 0V,所以 PLC 的公共端必须接 24V,形成从 24V 经 PLC 内部光耦经输入点经传感器到 0V 的回路。PNP 反之。
还有两个数值需要记一下。FX3U 的输入 ON 电流门槛大约在 3.5mA 左右,OFF 电流要低于 1.5mA 才可靠关断;输入回路的额定电流在 7mA 上下(24V 时)。这两个数字解释了两类常见怪病:一是输入点微亮但程序不认,属于漏电流在门槛附近游走;二是输入点断开后不灭,多半是线间电容或者传感器漏电流太大。
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
| 输入灯完全不亮 | S/S 接反、传感器类型不匹配 | 对照铭牌改公共端接线 |
| 输入灯微亮不动作 | 漏电流在 3~5mA 之间 | 输入端并联泄放电阻(常见 2.2kΩ 左右)或改用干接点 |
| 输入灯断开后不灭 | 长线感应电压、相邻强电串扰 | 换双绞线、缩短走线、加中间继电器隔离 |
| 输入偶尔抖动 | 机械触点抖动、线缆接触不良 | 程序里加 10~20ms 滤波,或查端子压接 |
输入信号线长距离走的时候,我一直用双绞线,并且把双绞线的一端悬空、另一端在 PLC 侧单点接地。别两头都接,两头都接就形成了地环路,干扰反而更大。这一点在传感器离柜子二三十米的时候特别明显。
2.3 输出侧:继电器、晶体管、可控硅,选错就是返工
FX3U 的输出类型在型号里就写着了:MR 是继电器输出,MT 是晶体管输出,MS 是可控硅输出。这三种的差别不是“贵不贵”,是“带什么负载、要多快”。
| 类型 | 负载能力 | 响应速度 | 适合负载 | 不适合 |
|---|---|---|---|---|
| 继电器输出 | 每点约 2A(阻性),感性打折 | 约 10ms | 接触器线圈、电磁阀、指示灯、交流负载 | 高频动作、大电流直驱电机 |
| 晶体管输出 | 每点约 0.5A,DC 24V | 1ms 以内 | 步进/伺服脉冲、固态继电器、DC 电磁阀 | 交流负载、大电流 |
| 可控硅输出 | 每点约 0.5~1A,AC | 半周波 | 交流电磁阀、加热 | 感性冲击大的负载 |
继电器输出最大的价值是隔离和通用,最大的坑是寿命。机械寿命上千万次听着多,但电气寿命在额定负载下往往只有十万次量级,带接触器线圈这种感性负载还要再打折。我见过包装机上一个输出点一天动作两千次,两个月触点就粘死了。这种情况要么换晶体管输出加中间继电器,要么在继电器输出端加 RC 吸收,把触点火花压下去。
输出侧接线有两个必做动作。第一是每个公共端加保险,FX3U 的输出是分组的,每组一个 COM 端子,比如四点或八点共用一组,具体分组看端子盖上的印字,不要凭记忆。每个 COM 上串一个 2A 保险,成本几毛钱,能救一块几百块的板子。第二是感性负载加吸收,直流感性负载反并联续流二极管,交流感性负载并联 RC 吸收或者压敏电阻。缺了这一步,输出点烧毁只是时间问题。
还有一个隐蔽的坑:输出点的 COM 端没接电源。程序里 Y 点亮了,模块上的 LED 也亮了,但负载不动,因为公共端悬空,回路根本不通。这个错误在新手第一次独立接线时出现率高得惊人,因为 LED 指示的是“内部驱动已经动作”,不是“外部回路已经闭合”。
2.4 保护、接地与抗干扰的落地做法
接地这件事,教科书上写“第三种接地,接地电阻小于 100Ω”,但现场真正要命的是“接在哪儿”。PLC 的接地端子必须单独接地,不能和变频器、伺服、大功率接触器共用一根接地排,否则变频器开关产生的高频噪声会顺着地线灌进 PLC。如果一个柜子里实在只有一根接地母排,那就把 PLC 的接地线单独引到母排的最远端,并且加粗线径,别随便拧在接触器旁边的螺丝上。
急停回路的做法值得单独说。我的原则是:急停不经过 PLC 程序。急停按钮用常闭触点,直接切断主回路接触器的线圈,同时把一路信号送进 PLC 作为状态检测。这样即使 PLC 死机、程序跑飞,拍下急停依然能断动力。如果确实需要通过 PLC 控制,也要做双通道或者加安全继电器,靠单点软件逻辑实现急停是不可接受的。
线径和端子也顺便说一句。主回路按负载电流选,控制回路 0.5~1.5mm² 够用,端子压接一定要用压线钳压紧再插,不要用螺丝刀把散线硬拧进去,虚接引起的间歇故障最难查。所有端子拧完之后拉一遍,这是最土但最有效的检查方法。
注意:柜内布线时,PLC 的输入输出信号线与动力线保持距离,实在要走同一个线槽,中间加隔板。这不是讲究,是解决 80% 莫名抖动的根本手段。
3. 软元件:PLC 内部的一张地址地图
3.1 八类软元件分别管什么
软元件这个概念,说白了就是“PLC 内存里的具名地址”。你写的每一行梯形图,本质上都是在读写这些地址。FX 系列把它分成八类,每一类有明确的用途边界,理解边界比记住编号更重要。
输入继电器 X是只读的,反映外部端子状态,程序里只能当触点用,不能写线圈。输出继电器 Y是唯一的执行出口,一个 Y 点在整个程序里只能出现一次 OUT,出现两次就是双线圈,实际生效的是最后执行的那一处,这是新手最常见的逻辑黑洞。辅助继电器 M是中间变量,用来做状态记忆、步进标记、条件中转,分通用区和断电保持区。状态继电器 S主要给步进顺控用,做顺序流程时比一堆 M 清爽得多。
定时器 T和计数器 C是带功能的软元件,T 有不同时基(100ms、10ms、1ms),选错时基会导致定时精度差十倍;C 分 16 位和 32 位,还分通用和保持,累计计数必须用保持型或者 32 位。数据寄存器 D是 16 位字,两个连续的 D 可以拼成 32 位,用来存参数、存通信数据、存计算结果。变址寄存器 V/Z是间接寻址用的,做批量处理时能省掉大量重复逻辑,但可读性会下降,我不建议新手一上来就用。
指针 P/I用在跳转和中断,一般的逻辑控制用不上,做高速计数或者定位的时候才会碰。
3.2 FX 系列软元件编号与容量速查
FX3U 的编号规则是“X/Y 八进制,其余十进制”,这是最容易栽跟头的地方。X0 到 X7 之后是 X10,不是 X8。你在纸上排点位表的时候如果按十进制写,接线上机必然错位。
| 软元件 | 功能 | FX3U 常用范围 | 断电保持 |
|---|---|---|---|
| X | 输入 | X0~X177(八进制) | 否 |
| Y | 输出 | Y0~Y177(八进制) | 否 |
| M | 辅助继电器 | M0~M499 通用,M500~M3071 保持 | 后者保持 |
| S | 状态 | S0~S9 初始,S10~S999 通用 | 部分可设 |
| T | 定时器 | T0~T199(100ms),T200~T245(10ms) | 累计型保持 |
| C | 计数器 | C0~C99(16位通用),C200~C234(32位) | C100 起保持 |
| D | 数据寄存器 | D0~D199 通用,D200~D7999 保持 | 后者保持 |
| V/Z | 变址 | V0~V7,Z0~Z7 | 否 |
特殊软元件是另一套体系,用 M8xxx 和 D8xxx 表示。刚需的有这么几个:M8000 是运行监视常 ON,所有需要“一直执行”的指令都串它;M8002 是初始脉冲,只在 RUN 后的第一个扫描周期 ON 一个周期,用来做初始化;M8013 是 1 秒时钟脉冲,做闪烁和计时很方便;M8011 是 10ms 时钟。D8010 里是当前扫描周期时间,调性能的时候瞄一眼就知道程序是不是太重。D8000 是看门狗定时器,默认 200ms,程序扫描超时就直接报错停机。
换成 FX5U,这套名字全变了:常 ON 变成 SM400,初始脉冲变成 SM402,特殊寄存器统一用 SD 开头。很多从 FX3U 转过来的人第一次写程序找不到 M8002,就是因为这个。做跨机型移植时,我建议单开一个“特殊软元件对照”注释块贴在程序开头,比查手册快。
3.3 软元件分配表:一个能省掉一半调试时间的习惯
我带的每个项目,开工第一件事不是写程序,是画一张软元件分配表。左边写点位号,中间写功能描述,右边写备注(比如“常闭”“带滤波”“上位机读取”)。这张表打印出来贴在柜门上,接线的人按表接,编程的人按表写,调试的人按表查。
这张表最重要的作用是防止双线圈和地址冲突。一个中等规模的设备,M 点用到两三百个很正常,如果没有表,写到第三天你自己都不记得 M120 是干什么的。等现场出现“某个动作偶尔不执行”,你要在一堆网络里找哪个 M 被重复驱动,那才叫绝望。
具体写法上,我习惯按功能分块,每块预留 20%~30% 的余量。输入输出按物理顺序排,M 点按工位排(上料区 M0~M99,加工区 M100~M199,下料区 M200~M299),D 点按用途排(参数区 D100~D199,通信区 D200~D299,报警区 D300~D399)。这样定位问题时看地址就知道大概位置,不用满程序搜。
保持区的规划要单独提一句。断电保持的 M 和 D 在设备重启后仍然保留原值,用得好是“记住上次状态”,用不好就是“上次的故障状态一直卡着”。我的做法是:真正需要记忆的(累计产量、配方参数、机械原点偏移)放保持区,纯逻辑中间变量一律放通用区,并且在初始化程序里对保持区做一次“合理性检查”,超出范围的参数强制复位成默认值。
提示:双线圈问题在梯形图里不容易看出来,因为很多编程软件不会报错。查的办法是在软元件使用列表里搜这个地址,看出现了几处 OUT。养成这个习惯,能省掉大量“为什么这段逻辑不生效”的困惑。
4. 通信程序:让这台机器不再是一座孤岛
4.1 三种通信形态,先选对再动手
小型机的通信需求基本落在三类里。第一类是编程和调试通信,就是你的电脑连 PLC 下载程序,这条链路平时不用管。第二类是无协议通信(有的品牌叫自由口),PLC 只负责把一串字节发出去、把一串字节收进来,协议内容自己定,适合对接条码枪、称重仪表、老式变频器这类“对方协议很简单但非标准”的设备。第三类是标准协议通信,比如 Modbus RTU、Modbus TCP,以及各家自己的链接网络,适合 PLC 之间、PLC 与触摸屏、PLC 与上位机之间交换数据。
选型的判断标准很朴素:对方设备支持标准协议,就走标准协议,别自己造轮子;对方设备只吐一串 ASCII 或者固定格式的二进制,就走无协议;两台 PLC 之间数据量不大又不想写握手逻辑,用现成的链接网络最省事,但如果跨品牌,还是老老实实 Modbus。
FX3U 的串口资源是这样分布的:本体上有一个编程口,扩展可以加一块 485 通信板或者通信适配器。加板子和加适配器的区别在于占用位置和电气隔离,适配器一般隔离更好、走线更远,做长距离通信我都建议用适配器。硬件接好之后,A/B 两线是差分信号,必须双绞,屏蔽层单端接地,总线两端各接一个 120Ω 终端电阻——注意是“两端”,中间站不要接,接多了会把信号衰减掉。
4.2 通信参数寄存器:一串位决定能不能说上话
FX3U 的串口通信格式靠一个 16 位寄存器设定,常见的是 D8120。这个寄存器的每一位都有含义,写错一位就通不上,而且现象往往是“收不到任何数据”,没有报错提示,特别打击人。
| 位 | 含义 | 常用取值 |
|---|---|---|
| bit0 | 数据长度 | 0=7 位,1=8 位 |
| bit1~2 | 校验方式 | 00 无,01 奇,11 偶 |
| bit3 | 停止位 | 0=1 位,1=2 位 |
| bit4~7 | 波特率 | 1000 对应 9600,1001 对应 19200 |
最常用的组合是 9600、8 位数据、偶校验、1 位停止位,对应写入十六进制 87。19200 同参数则是十六进制 89。这几个数值我建议直接背下来,现场改参数时不用翻手册。
这里有个操作细节必须强调:通信格式寄存器改完之后要复位生效。很多人在 RUN 状态下直接改,改完发现还是不通,以为改错了,其实是没生效。稳妥的做法是在初始脉冲(M8002)里写一次,然后断电重启,让参数在冷启动时被加载。同理,站号、超时时间这些参数也建议写在初始化块里,别散落在程序各处。
还有一个坑是通信超时时间。FX 系列用 D8129 设超时,单位是 10ms,默认值往往偏小。波特率低、数据帧长的时候,默认超时会频繁误判,我一般的起步值是 100(即 1 秒),再根据实际响应时间往下调。超时设太短的后果不是“通不上”,而是“时通时不通”,这种间歇故障排查成本极高。
4.3 无协议通信的程序骨架
无协议通信的程序,我习惯拆成四段:初始化、组帧、发送、接收。这四段的顺序和扫描周期的关系必须想清楚,否则会出现“数据发出去了但被下一次扫描覆盖”的问题。
初始化段在 M8002 里写通信格式、超时时间、接收缓冲区清零。组帧段把要发送的数据按对方协议拼到一段连续的数据寄存器里,比如 D100 开始,前面加帧头、后面加校验。发送段用一个上升沿触发发送请求,配合发送指令或者发送请求标志位。接收段用接收完成标志位触发,把收到的数据搬到处理区,处理完立刻清标志位,为下一帧做准备。
一个关键认知是:通信是异步的。PLC 的扫描周期是毫秒级,串口一帧数据可能要几十毫秒,所以你不能在同一个扫描周期里“发完立刻处理结果”。正确的做法是状态机:发送触发后进入等待状态,接收完成标志置位后进入处理状态,处理完回到空闲。用步进标记(一个 M 点或者一个 D 里的步骤号)来管理状态,比用一堆定时器硬等要可靠得多。
还有一个容易被忽略的点:发送和接收用的缓冲区不能重叠。我见过有人把发送数据放在 D100 开始,接收数据也放在 D100 开始,结果发送还没发完,接收数据已经把发送缓冲覆盖了,对方收到的是一堆乱码。缓冲区分开,中间留出足够空间,这是基本纪律。
4.4 Modbus 轮询:从站一多,逻辑就要讲究
多从站轮询是通信程序里最能体现功力的地方。假设一条 485 总线上挂了五台从站,你不可能同时问,只能一台一台来。轮询程序的核心是三件事:当前站在哪、这一步做什么、失败了怎么办。
我的写法是用一个步骤号寄存器,比如 D500。D500=0 时空闲,检查是否有轮询请求;D500=1 时装载当前从站号和功能码;D500=2 时触发发送;D500=3 时等待完成标志;D500=4 时处理数据并切到下一站;D500 回到 0。每一步都有明确的进入条件和退出条件,任何时候看监控都能知道卡在哪。
轮询间隔要留够。从站响应需要时间,紧接着发下一帧会让总线冲突或者从站来不及处理。我一般在两帧之间留 20~50ms 的空隙,用定时器或者步骤号延时都行。波特率越低、从站越多,这个间隔越要留足。
失败处理决定系统的健壮性。每个从站要有独立的失败计数器和超时计数器,连续失败 N 次(N 一般取 3)就标记该站为离线,跳过它继续轮询其他站,同时给出报警。跳过而不是整体停摆,这一点很重要——一台从站掉线不应该让整条线的数据采集全部瘫痪。等它恢复响应了,再自动把在线标志置回来。
CRC 校验这块,用标准协议时指令内部会处理,用无协议自己拼 Modbus 帧的时候才需要手算。手算 CRC 的常见错误是把高低字节顺序搞反,或者把 CRC 本身也算进校验范围。这两种错误的现象都是“对方不响应”,很难从现象反推原因,所以第一次调试时宁可拿一个已知正确的帧做比对。
注意:RS485 总线上站号不能重复。两台设备设了同一个站号,现象是“有时能通有时不能通”,因为两台设备都在应答,总线上信号打架。这个坑我踩过,查了两个小时。
5. 常见故障与排查实录
5.1 配线类故障:先量电压再看程序
配线故障的排查顺序永远是:电源电压 → 公共端电位 → 输入点电位 → 输出点电位 → 负载电位。这五步用万用表走一遍,五分钟内能锁定绝大多数问题。
举一个我遇到过的典型案例。一台设备所有输入点都不亮,新人第一反应是 PLC 坏了。我让他量本体电源端子,电压正常;量 S/S 端子对 0V,是 0V;再看传感器,全是 NPN 型。问题很清楚——S/S 应该接 24V 才能配 NPN,接成 0V 就变成了源型输入,NPN 传感器给不出高电平。改一根线,全部恢复。
另一个案例是输出点带电磁阀烧触点。负载是 DC24V 电磁阀,继电器输出直驱,一个月烧了两个输出点。原因是没有续流回路,电磁阀断电瞬间的反电动势在触点上打火。加一个反向并联的二极管,问题消失。这类问题的成本对比很悬殊:一个二极管几毛钱,一块输出板几百块。
排查时还要注意一件事:LED 指示不等于回路闭合。输入 LED 亮只说明光耦导通了,输出 LED 亮只说明内部驱动动作了,两者都不代表外部回路真的通了。判断外部回路要用万用表量负载两端电压,或者用个灯泡当假负载试。
5.2 软元件类故障:看得见程序,看不见地址
软元件层面的故障,特点是“程序逻辑看着没错,就是不按预期走”。最常见的三个来源是双线圈、保持区污染、时基选错。
双线圈的表现是“某个输出时而正常时而不正常”,因为两处 OUT 都在写同一个 Y 点,实际生效的是扫描顺序靠后的那个。这种情况用交叉引用查最快,搜一次地址,看有几处写操作。有的编程软件会在编译时给出警告,别忽略那个警告。
保持区污染的表现更隐蔽。设备断电重启后,某个流程莫名其妙跳过一步,或者产量计数从一个奇怪的数字开始。原因是这个 M 点落在保持区,上次停机时它是 ON,重启后仍然 ON,初始化的条件判断直接绕过去了。解决办法是在初始脉冲里对所有保持区做一次显式初始化,别指望“上电默认是 OFF”。
时基选错是个纯知识性错误但很常见。用 100ms 时基的定时器去卡 50ms 的动作,精度根本不够;用 1ms 时基的定时器去卡 10 秒的延时,虽然能实现但占用高速定时器资源。选型原则是:延时精度要求小于 100ms 用 10ms 或 1ms 时基,大于 1 秒用 100ms 时基,中间地带看具体需求。
5.3 通信类故障速查
| 现象 | 可能原因 | 检查手段 | 处理 |
|---|---|---|---|
| 完全收不到数据 | A/B 接反、波特率不匹配、格式寄存器未生效 | 量差分电压、核对双方参数、断电重启 | 调线、统一参数、复位生效 |
| 偶尔丢一帧 | 无终端电阻、屏蔽层两端接地、超时太短 | 查总线两端电阻、查屏蔽接地 | 两端各加 120Ω、单端接地、加大超时 |
| 收到的数据是乱码 | 数据位/校验位不一致、字节序理解反了 | 抓原始字节比对 | 统一格式、明确大小端 |
| 多站轮询时好时坏 | 站号重复、轮询间隔不够 | 逐站断开测试 | 改站号、留间隔 |
| 通信一段时间后中断 | 干扰累积、缓冲区溢出 | 看错误计数、看接收标志是否未清 | 加隔离、及时清标志、加看门狗 |
通信排查的核心工具是“抓原始字节”。别一上来就怀疑协议逻辑,先确认物理层通不通、字节对不对。我习惯先用一个最简单的读指令(读一个寄存器)打通单站,确认能收到正确响应之后,再往上叠加多站轮询和数据解析。一次只改一个变量,这是通信调试的铁律。
干扰问题单独说一句。变频器、伺服、中频加热设备旁边走 485 线,出问题的概率极高。解决办法按成本从低到高:改用屏蔽双绞线并单端接地、降低波特率、缩短距离、加磁环、换隔离型通信模块。很多时候把波特率从 19200 降到 9600 就能稳定,代价只是响应慢一点,对于非实时数据采集完全可以接受。
6. 上手路径与踩坑心得
6.1 一套可以照抄的练手顺序
如果你手上有一台 FX3U 或者任何一台小型机,我建议按这个顺序练,每一步都能独立验证,不至于一上来就被综合项目劝退。
第一步,只接电源和急停,确认本体上电、RUN 灯亮、编程软件能连上。第二步,接两个输入点(一个按钮、一个接近开关)和两个输出点(一个指示灯、一个中间继电器),验证输入指示灯和程序监控一致、输出能驱动继电器动作。第三步,用定时器和计数器做一个“按三下按钮灯亮五秒”的小逻辑,把软元件的基本用法过一遍。第四步,加一块 485 板,用两台设备做单站 Modbus 读写,把参数配置和收发流程走通。第五步,加到三台从站做轮询,把失败重试和离线标记加上。
这五步走完,基本配线、软元件、通信程序三块的核心动作你都亲手做过一遍,比看十篇教程有用。每一步都要做记录:接了什么线、改了什么参数、遇到什么问题、怎么解决的。这份记录就是你自己的排查手册。
6.2 几个用钱和时间换来的经验
第一个经验:接线前先拍照。柜子原状拍一张,改完再拍一张。设备出问题需要恢复原状时,照片比记忆可靠。我在一个改造项目里因为没拍照,恢复接线时把一组输入的公共端接错了,又多花了半天。
第二个经验:参数要写进程序,不要只靠手调。通信格式、站号、超时时间这些如果在触摸屏上让操作工调,一定要在程序里做合法性检查,非法值直接拒绝并提示。我见过操作工把波特率调成 115200 而总线上其他设备都是 9600,整条线瘫痪,最后查了两天才发现是屏上的一个参数。
第三个经验:任何一个输出点动作前,先问自己“它坏了会怎样”。驱动一个气缸动作很简单,但这个气缸在没有气压、在限位没到位、在急停拍下的情况下动作,会不会撞坏东西?配线层面加不加限位开关做硬件互锁,程序层面加不加动作条件,这些判断比写指令重要得多。
第四个经验:调试用的临时短接线,当天必须拆。临时短接是排查利器,也是事故源头。我给自己定的规矩是:短接线用醒目的红色,并且在线头挂一张纸条写明“临时,调试后拆除”。设备交付前专门有一道工序叫“清点临时线”,一道一道过。
带新人时我常说,PLC 这东西,程序写得再花哨,最终还是要靠一根线把电送过去、靠一个地址把状态记住、靠一帧报文把数据传出来。这三件事做扎实了,剩下的是时间问题。