入行头三年,谁没被现场折磨过呢。我整理工作笔记的时候发现,从画第一张图、接第一台柜子开始,积攒下来的经验已经能整理成上百条。这篇就分享我自己总结的90条实战经验,主要围绕PLC工程师日常打交道的硬件选型、图纸、编程、调试、故障排查这些环节,适合刚入行1-3年、正在车间和现场摸爬滚打的调试工程师,也适合准备转行做PLC、想提前了解真实工作内容的朋友参考。虽然会带一些具体的设备和品牌背景,但很多底层思路是通用的,在不同牌子的系统上都能用得上。
1. 硬件与图纸:前期多花一小时,现场少熬一个夜
1.1 选型先算账:IO点数、CPU性能与模块搭配
很多新同事拿到项目之后的第一反应是打开报价单挑CPU型号,其实正确的顺序是先算IO点数。数字量输入输出、模拟量输入输出的数量,直接决定了你需要多大的扩展机架、多少个模块、需不需要远程IO。我自己的习惯是数字量输入预留15%余量,数字量输出预留15%,模拟量通道预留20%。这个余量不是拍脑袋定的,是因为现场改动最频繁的就是传感器和执行机构,甲方今天加一个检测位、明天加一路控制阀,都是常事。等柜子做完了再发现点数不够,要么加远程IO模块,要么整体换CPU,成本和时间都要翻倍。
CPU的选型不是只看点数,还要看扫描周期需求和运动控制能力。如果你这台设备带四轴以上的插补运动,建议直接选带运动控制功能的CPU,或者挂独立运动控制器,别指望普通逻辑型CPU靠扫描周期去带伺服。PLC的扫描周期是按毫秒计算的,普通逻辑控制在几十毫秒内都没问题,但伺服轴需要微秒级的插补周期,普通CPU根本忙不过来。模拟量扩展模块也需要提前确认分辨率,比如温度采集用热电偶或者PT100,对应要选热电偶模块或者热电阻模块,而不是通用的模拟量模块。这个坑我见过好几次,模块到货才发现类型不对,交期又长,项目直接被卡住。
还有一个容易被忽略的问题是模块的功耗和总线供电能力。扩展模块一多,背板总线电流就会吃紧,尤其是一些小型PLC,电源模块能提供的电流是有限的。选型的时候要打开手册查一下本机模块和扩展模块的电流消耗,把所有模块的消耗电流加起来,确认不超过电源模块的供电能力。别等到柜子装完,一上电模块就闪烁报警,那就是供电不够的典型症状。
1.2 图纸阶段把这些坑提前填好
图纸是PLC工程师的第一步,很多后期的大麻烦都是在图纸阶段埋下的。最常见的问题就是IO分配表没有和现场传感器核对清楚。传感器分PNP和NPN,PLC输入端也分源型和漏型,这两者必须匹配。我遇到过最典型的情况是现场传感器选成NPN,而PLC的输入端是源型输入,信号怎么都不通。最后查了老半天,只能全部换传感器或者加中间继电器转换,几十个点位改下来,光返工就花了半天。
图纸上的标准和现场不一致也是高频问题。柜内端子号和原理图对不上、线号管编号跳号、元件标签贴错的,我碰到太多了。所以我的习惯是到现场之后不急着通电,先拿图纸和柜内端子一个点一个点核对一遍。这种核对看起来费时间,但后面调起试来会省太多事。有一次也是因为偷懒没核对,结果一送电就烧了一个中继,就是因为图纸标的是24V线圈,实际接的是220V线圈。这个教训相当深刻。
另外,主回路和控制回路的布线原则不能妥协。很多新手觉得把强电线和信号线扎在一起省事,结果变频器一运行,PLC就莫名其妙复位或者模拟量读数乱跳。主回路动力线和控制回路线必须分开走线槽,动力线要用屏蔽电缆或者至少相隔一定距离。除了布线,还要检查电源容量。控制变压器的容量要按所有负载的额定功率加20%余量来算,别图省事选个刚好够的,现场加个风扇、加个照明灯,变压器马上就过载。
图纸还有一点是版本管理。我见过一个项目里连着出现三个版本的电气图,现场师傅手里一张,自己电脑一张,甲方手里还有一张。改程序的时候对不上,返工返得人崩溃。所以图纸一定要统一出一个受控版本,每次修改要更新修订说明,发给所有相关方,这个习惯尽早养成。
1.3 接线与柜内工艺的规矩
接线看起来是电工的活,但PLC工程师自己心里要有数。线径一定要按电流选,24V传感器线通常0.5平方毫米就够了,但24V电源主干线要根据负载电流算好,劣质细线会发热甚至烧毁。线号管必须套,这是后期排查故障的第一线索。压接端子一定要用压线钳压牢,不能用尖嘴钳随便夹一下了事,这样很容易虚接,现场隔三岔五莫名故障。
强弱电分开、交流直流分开、模拟量信号单独走线,这几条规矩不能破。柜内的走线要留一点余量,不要拉得笔直绷紧,柜门上的线要预留开关门的活动余量,不然开关几次柜门线就断了。接地也要注意,控制柜内要设独立接地铜排,PLC的24V电源0V端、屏蔽层、柜体都要接到这个铜排上,再由铜排单独连接到厂房接地级。忌讳把地线接成环,或者多个接地点串在一起,那样反而会引入地环流干扰。
还有一个建议,柜内接线完成之后一定拍照留底。调试的时候很多线在柜内底层看得不清楚,照片放大看效率高得多。尤其是一些临时改线,等你意识到需要记录的时候,可能已经被下一波改动覆盖了。
2. 程序编写:不是能跑就行,是排错少才算好
2.1 扫描周期、定时器与边沿指令的底层认知
写PLC程序和写电脑程序有一个很不一样的地方:PLC的梯形图是循环扫描执行的。也就是说,CPU从第一行扫到最后一行,然后再回到第一行继续扫,这个来回就是一个扫描周期。程序里所有指令的输出,都是在扫描到那一刻才刷新的。
搞清楚这个,很多奇怪现象就自然解释了。你按下启动按钮,程序里明明写了M0置位,但触摸屏上M0的状态就是不亮。其实是因为M0的置位指令在程序末尾才执行,触摸屏画面的刷新时机和PLC的扫描周期对不上,等画面刷新的时候M0可能刚好被后面的逻辑复位了。这类问题不是程序错了,是节奏和同步的问题。
定时器也是重灾区。TON是延时接通,TOF是延时断开,刚上手特别容易混。我举个例子,气缸到位信号要延时确认,正确的做法是到位信号持续稳定之后才开始计时,而不是用上升沿去触发一个定时器。上升沿只在那一瞬间有效,之后你输入状态怎么变,它都不会再触发第二次。很多设备“偶尔不动作”,查到最后都是边沿指令用错了地方。还有一个经验,有一种累积型定时器TONR,只要通电就开始累计时间,断电保持,适合用在停机时间统计、设备保养提醒这些地方。
关于定时器,我再补充一个容易被坑的点:定时器的时间基数和分辨率。同一个定时器指令,不同的编号可能对应不同的时基,比如0.1秒、0.01秒、0.001秒。如果你把时间值设大或者设小,实际延时时间可能差十倍。修改这种问题的时候一定先查型号对应的手册,别想当然。
2.2 数据块、变量命名与程序结构化
不少刚入行的朋友喜欢把临时数据随便扔在M区里,变量名随便起,甚至直接拿M0.0、M0.1来用。这样做功能也能跑,但后期维护就是灾难。我用的是统一命名规则,例如DI_设备号_信号名、DO_设备号_动作名、AI_设备号_参数名。看到名字就知道是哪个设备、什么信号类型、用在哪里的。这比M0.3这种天书好太多。变量表也要做注释,不用写长篇大论,短短一句“哪个气缸的到位开关”就够。
程序结构要分块。我的习惯是分成初始化块、手动操作块、自动运行块、报警处理块、通信处理块。每个块用独立子程序或者函数块实现,主程序里只做调用和简单的逻辑判断。别把一大堆功能堆在同一个循环里,几百行网站在一块儿,出问题排查起来非常痛苦。交叉引用工具能帮你快速定位变量在程序中的使用位置,但想快速理解程序逻辑,还是模块化的结构更友好。
功能块(FB)的使用是提升效率的关键。如果你的产线里有好几台相同的设备,比如四个工位都是一样的气缸动作序列,写四个重复程序段纯属浪费。封装一个气缸控制功能块,把伸出、缩回、延时、报警都封装在块里,然后用四个功能块实例分别管理四个气缸。改动的时候改一个块,四台设备同时生效,这种思路到了一定阶段是必须掌握的。
2.3 通信参数:Modbus、以太网与常见坑
通信是新手最容易水土不服的领域。先说Modbus RTU这种串口通信,你以为波特率、站号设对了就万事大吉,其实数据位、停止位、校验方式必须和设备侧完全一致,任何一个参数不对,通信就会时好时坏。通信应答超时时间也不要设成无限等待,我一般设500毫秒到1秒,超时就报故障,提示操作员检查通信链路。如果设成无限等,设备会一直卡在发送指令的状态,后面整个流程都停住。
现场总线通信还需要注意终端电阻。以PROFIBUS为例,总线的两端设备上必须把终端电阻打到ON,中间设备保持OFF。这个细节我见过无数人忽略,结果就是通信时灵时不灵,领导过来问你也说不出个所以然,最后拿示波器查波形才发现是终端电阻的问题。以太网通信相对简单,但要防IP地址冲突,同一网段内IP不能重复,这是上学时就知道的规则,可到了现场还是有人乱配。
PLC之间的以太网通信还要注意数据同步问题。如果用PUT/GET这类指令做点对点通信,接收方要保持通信状态字的判断。正常通信和通信异常要有标志位,通信断了要报警,不能看着程序像没毛病,实际上数据已经完全不更新了。还有一点,通信数据区要跟逻辑控制区做物理隔离,通信往来的数据放到独立的数据块,控制逻辑只引用这个数据块里的内容。不然通信刷新把控制变量直接覆盖了,设备动作就乱了。
2.4 报警、急停与安全逻辑
报警处理别把所有问题都一视同仁。我常用的做法是分三层:提示级,只记录,不动作;警告级,声光提示操作员注意,设备继续运行;故障级,立即停机并锁存故障原因。分级之后,操作员面对满屏报警时才能第一时间抓住重点,维修也不会因为一堆无效报警被淹没关键线索。报警要有历史记录,不光跳出来就完事,最好记录报警发生的时间点和复位时间,方便后期回溯。
急停、光幕、安全门这些信号,在接线和程序上要做到双回路保险。安全信号不仅要进PLC,还要在硬件控制回路里串联,一旦安全信号断开,硬件回路直接切断主接触器,设备立刻停下来。软件逻辑也可以做停机,但软件逻辑有可能因为CPU死机、程序跑飞而失效,硬件回路却永远在高可靠性层面兜底。这个没有侥幸,别图省事只做软件屏蔽。
程序里的软联锁也要写全。电机正反转之间要有互锁,气缸动作之间要有先后和互斥关系,抽真空和放真空不能同时打开,两个气缸伸出到位前另一台不能启动。写程序的时候把这些联锁条件全部想完整,比现场出了事故再来补要强一百倍。另外,故障复位也有讲究。停机故障不能随便一键复位,比如安全门打开导致的停机,必须等所有安全条件恢复了,才能允许复位,而且复位动作必须由操作员明确触发,不能程序自动复位。
3. 现场调试:上电、干扰、执行机构的三座大山
3.1 上电顺序:不烧模块的五个步骤
现场调试最容易出大问题是上电,我见过太多人接完线直接送电,结果模块炸了、电容鼓了、电源板烧了。我的顺序从来是固定的。第一步,不送主电,只把控制电源送上,用万用表逐个量24V、5V电源模块的输出电压,确认没有短路,电压正常。第二步,把CPU和各个模块逐一通电,看每个模块的指示灯状态,有报警立刻查。第三步,检查所有传感器的供电和信号极性,确认没有接反。第四步,把输出端负载全部断开,在程序里手动逐个强制输出点,确认输出方向和动作逻辑正确。第五步,才把主回路合上,带载调试。
这个过程看起来很笨,但能挡住大多数低级错误。我唯一一次烧模块,就是跳过了第四步,直接带载强制输出,结果把一路继电器控制线接错,24V直接怼到220V端子上。从那以后,我宁可多花半小时,也不敢跳步骤。顺便提醒一句,测试输出点强制的时候,一定要记得程序里先断开自动连锁,否则你以为强制了输出,结果下一扫描周期又被PLC自动逻辑给复位了。
3.2 干扰与接地:看起来玄学,其实是物理
现场干扰问题是很多新手觉得“玄学”的地方,其实归根结底就是电磁噪声串进了敏感回路。干扰源最常见的就是变频器和伺服驱动器,它们工作时在输出线上会产生高频谐波。对策其实不复杂:变频器和伺服的动力线、信号线必须分开走线管,屏蔽层在控制器端单端接地,千万不能两端都接地,否则反而会形成地环流,干扰更严重。
PLC的24V电源不要直接给传感器供电,建议用带隔离的开关电源,或者至少要给PLC的24V单独一路。电源品质不行的时候,宁可加一个EMC滤波器,也别让干扰跑进CPU。模拟量信号线必须用屏蔽双绞线,屏蔽层在PLC端接好。曾经有个项目,4-20mA液位信号在变频器启动后读数一直漂,查了半天最后发现信号线没接屏蔽层,接上之后问题立刻消失。
回到接地,控制柜里地线接成环、接地排搭接不良这些问题都很常见。正规做法是控制柜内设独立接地铜排,所有需要接地的屏蔽层、0V、柜体都汇总到铜排,再由铜排单独接厂房的接地极,形成单点接地系统。调试之前建议拿接地电阻仪测一下接地电阻,一般工业环境要求在4欧姆以下,要是测出来十几欧姆,那整个柜子怎么搞都会有干扰。
3.3 变频器、伺服与执行机构的调试关键点
和变频器通信,第一件事就是想清楚你是走端子控制还是总线控制。最经典的坑就是程序里发了启停命令,变频器纹丝不动,查了一圈才发现变频器参数里的控制源还是默认的端子控制,你总线命令发过去根本不被采纳。频率源同理,如果你要用模拟量给频率,就要把频率源设为模拟量输入;要用通信给频率,就要改为总线给定。这种问题本身很小,但排查起来相当费时间。
变频器的加减速时间也要根据负载特性来设,不要随意用默认值。惯性大的负载,减速时间太短容易报过压故障;负载是风机水泵这类平方转矩负载,加减速时间和启动方式都有讲究。还有一个参数是载波频率,载波高则电机噪音小、输出波形好,但载波高了变频器发热也大,输出距离变短。距离远的时候适当降低载波,否则电机端电压波形会难看。
伺服调试里,刚性参数和惯量比是新手最头疼的部分。我的建议是先把设备负载的惯量比估算值填进去,让伺服自整定跑一遍,再微调位置环增益和速度环增益。别一上来就追求高刚性,增益调太高,电机会嗡嗡响甚至振荡,设备启动和停止的时候还会过冲。正确的做法是一点点加增益,直到设备动作干脆利落还没有异响,就停在那。
电机的抱闸控制也是一坑。抱闸打开要提前于电机运转,抱闸闭合要延迟到电机停止之后,这个时序通常写在程序里,用定时器控制。如果时序反了,设备要么刹不住,要么抱闸磨损特别快,还伴随刺耳的刹车声。限位开关建议采用常闭接线,断线时能从逻辑上识别成触发状态,相对更安全。常开接法一旦断线,传感器失效而程序毫无察觉,设备就会直接冲出去。
4. 故障排查与工作习惯:效率和安全都在细节里
4.1 一套能覆盖八成故障的排查顺序
设备出故障,先别急着翻程序乱改。我给自己定的排查顺序是一看、二听、三闻、四测、五查程序。一看,观察设备是在什么状态下停的,报警画面里有什么提示,机械位置对不对;二听,听有无异常声音,继电器有没有咔嗒声、电机是否堵转声、抱闸是否异响;三闻,有没有焦糊味,那是电气过热的信号;四测,用万用表测电压、电阻、通断;最后才是打开程序查逻辑。
八成以上的故障用这个顺序都能定位,很多时候连程序都不用打开。举几个实际例子。有一台设备电机偶发性不启动,排查了两天,最后发现程序里某个输出用了上升沿,而上一次停机时输出状态恰好让这个上升沿没有被刷新,所以下一次启动就失效。这类问题你能看出来吗?能。但如果直接看程序,还真不一定能找到,得结合设备动作时序一起推。还有一个模拟量漂移的案例,查了所有参数都没问题,最后确认是信号线屏蔽层没接。
联机运行时出现“单机正常,一联机就死”的情况,优先考虑通信故障。我曾经遇到多台PLC通过以太网互连,联机后偶尔某个站不响应,最后发现是通信数据块太大,占用扫描周期太多,加上通信超时时间设置太短导致。把通信区精简,超时时间调到合理范围,问题就解决了。排查的逻辑顺序一定要清晰,不要跳着查。
4.2 备份、注释与程序版本管理
程序备份这个习惯,关键时刻能救命。每次修改完程序,马上把修改日期和修改内容记录在注释里,或者直接体现在备份文件名里。我自己用“项目名_版本号_日期”的格式来命名,例如“贴标机_V1.2_20250622”。现场调试过程中,如果新改的逻辑导致设备异常,可以马上回退到上一个正常版本。要是你不备份,就只能靠记忆去猜,改来改去最后版本都不知道哪里去了。
这里说的备份不只是PLC程序,还包括HMI工程、变频器参数、伺服参数、图纸。尤其变频器和伺服参数,调试完一定要导出保存。有一次设备运行半年后伺服参数被误改,设备抖动严重,维修部门翻遍电脑也没有原始参数,最后只能慢慢重调,损失了多少工时。养成调试完立刻导出一份参数表放到项目文件夹里的习惯,后面会感谢自己。
在线修改程序时也要特别注意。PLC在运行模式下在线修改,一定要确认当前设备状态是安全的。断电保持的寄存器在程序下载以后可能被覆盖,一些保存的配方数据、计数值会丢,这个要注意提前备份。使用强制功能时更是要小心,强制输出某点位之前,先确认这台设备当前没有人在操作,或者明确告知现场负责人。
4.3 让调试效率翻倍的工具习惯
工欲善其事,必先利其器。调试线上设备,有条件的话背一个带示波器功能的万用表。测模拟量信号、测PWM波形、测通信总线信号,都能直接看波形,排查问题效率可以提升好几个层次。普通的数字万用表只能看平均值,带波形的能直接看出信号毛刺和干扰水平。
软件方面,在线监控、强制、交叉引用这些基础功能要熟练。很多新手排查问题时是一行一行看程序,效率很低。交叉引用可以列出某个变量在所有程序段中的位置,改一个变量前先查一下它被谁写入、被谁读取,可以避免很多“改名引发的连锁反应”。调试大型设备时,在程序里的关键逻辑加几个状态字变量,用HMI显示出来,比反复看在线监控更直观。
大量参数修改的时候,要学会用导出导入功能。比如调试触摸屏,几十个画面、几百个变量,手动配起来既慢又容易错。大部分组态软件都支持批量导入CSV,把变量表在Excel里整理好,一次性导入,省时省力。PLC的注释表、配方数据同理,能用批量导入就批量导入。
5. 1-3年工程师的进阶心得
5.1 写别人愿意接手的程序
程序写得好不好,不在于某个功能实现了,而在于三个月后别人拿到你的程序能不能看懂、能不能接手维护。我有几个小习惯:每个网络块写注释,复杂逻辑写一段简短说明;变量用有意义的名字,不搞M0.0式的天书编号;定时器、计数器建立编号登记表,写到说明书里;程序分块组织,初始化、手动、自动、报警、通信各自独立。别小看这些,很多老师傅接手年轻同事的程序时最头疼的就是“这程序是能跑,但我看不懂”,这才是一个程序真正的失败。
处理复杂流程时,我建议用状态机思路而不是一堆连锁的长逻辑。状态机就是把流程拆成若干个状态,每个状态定义一个编号,程序里通过状态编号转移,整个流程清晰得像一张表格。状态机最大的好处是,出了问题可以从状态字直接判断设备现在处于哪个环节,排查效率高非常多。虽然前期设计状态表要花点时间,但这个时间花得值。
5.2 复盘和学习路线
每次项目结束,我都建议花一晚上做个复盘,把这次踩过的坑、用过的好方法都记录下来。半年之后回头看你自己的记录,会惊讶地发现很多当时觉得理所当然的小操作,背后都有教训。我现在整理出来的这些经验,就是把好几年的笔记重新过了一遍,越整理越觉得,真正值钱的东西不在书本里,都在现场。
学习路线上,我给1-3年工程师的建议是:先把一个品牌的PLC吃透,再横向扩展到其他品牌。指令虽然不同,但思路完全通用。然后重点学通信和运动控制,这两个能力是区分初级和中级工程师的分水岭。最后一定要掌握至少一种HMI组态软件,以及基本的PID整定方法。工程项目的验收阶段也很关键,别只埋头写程序,试着去参与方案汇报、验收测试、操作培训,这些环节锻炼的是你从全局角度看设备的能力,对长期发展帮助很大。
我个人的体会是,PLC这个职业入门门槛不算高,但天花板很高。前三年最重要的不是背下多少指令,而是有没有形成一套稳定的工作习惯,这些习惯包括先算再选、先查再改、先备份再测试。文章里这些经验是我从现场一点点攒出来的,目前先整理到这里,后续剩下的条目我会在后面的更新里继续发出来。大家也可以把你在项目里遇到的问题留在评论区,我会挑有代表性的在后续更新里补充。慢就是快,少踩一个坑,就是领先一步。