
如果你手里正在囤PLC教程哪怕一套几十个阶段我建议你先把一个概念从脑子里拧清楚学会PLC编程的标准不是“看完全套”而是“离开教程独立完成一个能跑的项目”。早几年我刚开始碰PLC时也走过同一条弯路视频存了好几个文件夹每个章节都按顺序躺得整整齐齐结果真正进到现场面对一个简单的电机启停我还是在梯形图里翻了半天才找到输出点在哪。这个经历不是个例。我后来发现一个特别典型的规律资料越全的人动手越少。PLC编程是一门典型的“手里过一遍才算会”的技能教程、讲义、视频这些输入手段只能帮你降低理解门槛真正让你产生经验的是写代码、接线、查故障、改逻辑这些输出动作。这篇文章不讨论怎么保存资料只围绕“拿到一套PLC教程之后怎么把PLC编程真正学会”这件事把学习路径、实操环境和排障方法完整梳理一遍。适合两种人看一是零基础转行自动化的新手二是存了不少资料但动手量极少的“下载型学习者”。1. 囤了一整套PLC教程却写不出程序问题不在资料少1.1 三种很常见的“伪学习”状态先聊聊我见过的三种情况你可以对照一下自己有没有中招。第一种叫“看视频理论高潮”。看老师讲解梯形图的时候觉得一切都通了上升沿、下降沿、置位复位全听得明明白白但把视频关掉让你自己封装一个“电机点动”程序手指悬在键盘上就是不知道从哪里开始。这是因为看视频时大脑接收的是别人整理过的逻辑而不是自己从问题倒推出来的逻辑理解上的“顺”是一种错觉。第二种叫“背指令等于会编程”。有人把常用指令列表背得滚瓜烂熟LD、OUT、SET、RST随口就来但遇到一个电梯门联锁的问题他连“什么时候用置位什么时候用线圈输出”都分不清。指令是工具编程是取舍和组合光会工具的用法不等于会盖房子。第三种叫“收藏夹式自欺”。很多人拿到一套资料后第一反应是归类、保存、备份然后就没有然后了。资料在网盘里吃灰大脑里的知识储备仍然是空的。这就好比你买了一大堆健身器材但从不练肌肉不会自己长出来。这三种状态指向同一个问题没有形成“输入—练习—产出”的闭环。完整的PLC学习闭环应该是看一讲、仿一遍、改一个参数、写一个独立小程序最后再回到资料里去查漏补缺。资料不是用来“看完”的是用来“检索”和“对照”的。1.2 用输出倒逼输入我后来调整方法每看完一节教程不着急往下看而是给自己出一个“三问测试”这节解决了什么问题用到了哪几条指令如果去掉其中一个条件程序会怎么走这套做法说白了就是输出倒逼输入。你带着问题去看资料提取效率远高于从头到尾刷一遍。哪怕你用的是整套视频也应该跳着看先明确自己想做一个什么样的功能再去视频里找对应的章节。比如你的目标是把一盏灯做成按下按钮亮两秒后自动灭你就去翻输出指令和定时器章节看完马上去软件里试试出结果后再回来看进阶部分这才是教程正确的打开姿势。1.3 资料分类别把全部内容都当教程看拿到一套资料我建议你按作用分成三类用三套完全不同的方式处理。资料类别典型内容推荐处理方式建议占比指令与原理类基础指令、扫描机制、模块接线边看边做笔记做指令速查卡30%案例与项目类电机启停、流水线、恒压供水等照着软件复刻改参数重新实现50%故障与问答类现场问题处理、通讯掉站等遇到具体故障时定向查不提前刷20%这个比例是我自己调整过很多次的。案例和项目类内容必须占到一半因为PLC的学习本质是“看别人怎么做再自己做一遍”指令类占三成就够了太多反而会让你陷入记指令的假努力故障类内容属于“字典”遇到问题再翻强行提前背不仅枯燥而且很快就忘了。2. 理解PLC的执行机制才算完成了从“看教程”到“写程序”的切换2.1 循环扫描PLC不是你想的那种“接好线就跑”的设备很多刚从继电器控制转过来的人会有一个误解觉得PLC就是“高级点的继电器”输入一接通输出立刻就有反应。实际上PLC内部的工作方式是循环扫描再快的PLC也不可能像硬接线那样“实时”响应。CPU通电后大致上就反复做这几件事读取输入端子状态并存入输入映像区执行用户程序把结果写入输出映像区刷新输出端子同时处理通信、自诊断、时钟等系统任务。然后从头再来一遍周而复始。这个过程你可以理解成一个很勤奋的店员他每次上班第一件事是把货架上的缺货情况记到本子上然后按本子上的记录去补货补完货再更新一遍店面最后歇口气马上又开始下一轮盘点。他看到的“缺货信息”永远是上一轮盘点时的状态而不是此刻的真实情况。如果某个货架在你盘点的瞬间刚好被拿走一样东西他这轮是看不见的只能等下一轮。这个特性直接导致了一个经典问题程序里某一条指令用到的输入信号跟你物理端子上刚刚变化的信号之间存在一个扫描周期的延迟。在大多数普通控制场景里这个延迟只有几毫秒到几十毫秒你根本感觉不到但一旦涉及高速计数、精确定位、多个设备联锁理解扫描周期就变得非常重要。2.2 输入采样、程序执行、输出刷新顺序错了一步结果就不同PLC程序执行的一个关键点是对同一段程序CPU是逐行从上往下扫描的不是同时执行所有行。这一点对汇编语言有经验的人很容易理解但对纯粹从梯形图入门的人往往是个大坑。举个例子假设程序里有两个输出线圈都叫Y0// 程序第一段 LD X0 OUT Y0 // 程序第二段 LD X1 OUT Y0如果你的直觉停留在“电路并联”思维会觉得两个条件只要满足一个Y0就亮。但PLC不是并联电路它是顺序扫描的。如果X0和X1同时为ON程序执行到最后会把第二段的Y0结果覆盖掉第一段的结果最后的输出取决于后一段程序而不是前面的那一段。这种“双线圈覆盖”在编程规范里是要尽量避免的但它最常见的来源恰恰是初学者照抄多个教程程序而没有意识到不同教程的代码片段合并到一起之后输出地址发生了重复。后面我会在排障章节专门讲这个问题这里你先记住一个原则PLC程序的最终输出状态以扫描过程中最后一次写入该输出的结果为准。2.3 上升沿到底是怎么“记住”按过一下的教程里上升沿、下降沿指令总是很快带过但这两个指令其实触及了PLC最核心的“记忆”能力。还是用按钮举例子一个按钮按下到松开物理上可能只经历了30毫秒但对PLC来说这30毫秒里它可能已经跑了好几轮扫描。你希望达成的效果是“按一下计数器加1”如果不用上升沿指令而是直接读按钮状态计数器就会在一个扫描周期里因为按钮仍然处于按下状态而重复加好几次。上升沿指令的本质是PLC内部记录了一个“上一周期的触点状态”当本周期的状态从0变1而上一个周期是0时才判断为一个上升沿输出一个仅在当前扫描周期为ON的脉冲。所以上升沿判断依赖的是两个周期之间的比较而不是某一次的实时读取。这会带来一个实际注意点如果你的程序里用上升沿作为触发条件但对这个脉冲的“宽度”没有概念后续逻辑就可能丢掉这个触发信号。比如上升沿触发了某个置位指令但程序在同一个循环里后面又有别的指令把那个位清掉了整体效果就会变得很诡异。3. 用一台设备加三个项目跑通PLC自学的完整闭环3.1 先从仿真环境开始但别只停留在仿真仿真软件是零基础学习阶段成本最低的入门方式。大多数正规PLC品牌都会提供带仿真功能的编程软件你不需要先买硬件就能在电脑上体验写程序、下载、监控完整流程。用仿真练习的好处是可以随时改程序、随便点按钮不用担心烧坏设备或出安全事故。但仿真有个天然盲区它连不了真实的接线看不到真实的传感器信号。程序里你写的那个X0在仿真环境里只是鼠标点一下的虚拟开关到了现场X0可能连接的是一个常闭型接近开关你按下急停时它反而从ON变OFF。这种接线极性差异只有在真实设备上才会遇到。所以我一直建议的顺序是先用仿真把指令和逻辑搞熟等有了一定基础再入一台小PLC哪怕是最入门的型号配上几个按钮和指示灯就足够把“写程序—下载—看动作—改程序”这个真实工作循环跑通了。3.2 入门硬件怎么选避开两个极端硬件选择上我见过两个极端一种是完全不敢买一直用仿真结果到现场连下载线都找不到另一种是刚开始就买一套超大冗余的模拟量模块、通讯模块大部分时间都在吃灰。从“够用且不浪费”的角度出发我的建议是先买一台带以太网口或者USB下载接口的入门级PLC输入点数不需要多关键要包含以下几种资源至少8个数字量输入、8个数字量输出、若干个定时器计数器、足够的内部继电器区如果有条件再带一两个模拟量输入通道。同时配两三只按钮、两个指示灯、一个24V开关电源、几种常见的接近开关或光电传感器。硬件组合并不是越贵越好而是越匹配你现在的目标越好。你现在要解决的是“程序能控制物理对象”这件事一个简单平台已经足够。3.3 三个小项目一个比一个难但每个都要完整做完我自己梳理了一套小项目系列从简单的到稍复杂的都覆盖这里完整列出来每一步都有明确的验收标准。第一个项目电机启停与互锁控制。这个项目的功能要求是三段式控制按一下启动按钮电机接触器吸合按一下停止按钮接触器断开如果运行中出现急停信号无条件断开且急停复位后不能自动启动。程序实现的核心是用自锁保持同时在启动回路串联停止和急停的常闭条件。做完后要能在纸上画出它的I/O分配表。第二个项目双灯顺序闪烁。要求是按下启动按钮后绿灯亮2秒红灯亮2秒绿红交替循环按下停止按钮后循环终止且无论程序停在哪一步下一次启动都从绿灯开始。这个项目用到定时器和状态顺序控制的思路开始涉及“状态”概念。重点在于“下一次启动从绿灯开始”这一句需要你在停止时清空当前状态否则容易出现第二次启动后从中途状态继续跑的bug。第三个项目传送带分拣模拟。用三个输入启动、停止、靠近传感器和三个输出电机、推杆、指示灯模拟一条传送带要求货物到达分拣位置时推杆伸出把货物推到侧边然后自动缩回如果没有货物到推杆不能动作输送带工作期间指示灯常亮停止后指示灯熄灭。这个项目综合了顺序控制、上升沿调用、输出保持与复位的完整流程做完它你对PLC编程的基本套路就很熟了。3.4 每个项目做完用一张表复盘很多初学者做完项目只是“能动了”就收工这是一个大遗憾。真正让项目经验沉淀下来的是做完之后的复盘。我给自己规定了一个复盘模板每次只填5项。复盘环节要回答的问题输出物功能确认项目到底要求控制什么边界是什么一到两句话的功能描述点位设计输入有几个输出有几个分别是什么信号I/O分配表时序梳理按下按钮后的动作顺序是什么粗略时序图/动作表程序结构分了几段用了几条定时器有没有重复输出程序结构说明验证记录哪次运行失败了失败现象是什么怎么改的修改记录这张表填完之后你对这个项目的记忆就不是“我做了一个电机启停”而是“我在电机启停里因为急停串联错了位置导致复位后自启动后来改成在自锁回路之前切断急停才解决”。后者才是经验前者只是日期。4. PLC进阶三块硬骨头功能块、模拟量、通信协议4.1 功能块化编程别把所有逻辑都堆在一个梯形图里很多自学教程前期教的都是扁平式梯形图所有逻辑平铺在主程序里但到后期你会发现这种写法一旦项目变大维护成本会爆炸。比如你有三台同样的水泵每台都有相同的启停逻辑和故障处理如果复制三份梯形图每份400行光找问题就够你喝一壶的。功能块化编程的思路是把水泵启停这个“能力”抽象成一个功能块输入是启动、停止、故障输出是运行、报警程序里调用三次每个水泵对应一块独立的实例。修改底层逻辑时三台水泵的公共部分自动全部生效不会出现改了A泵忘了B泵的情况。理解功能块的关键是把它的参数区分为输入、输出、内部变量三部分。外部只负责给输入引脚提供信号并从输出引脚读取结果内部变量的变化被封装在里面外部不需要关心。你用几次就会明白它和子程序最大的区别在于子程序没有自己独立的“记忆”功能块每个实例都可以拥有自己独立的内部状态。4.2 模拟量的采集与量程换算模拟量是PLC进阶绕不开的一关常见信号有4~20mA电流信号和0~10V电压信号两大类。温度变送器、压力传感器、液位计大部分最终都是把物理量转换成这两种标准信号之一再由PLC模拟量输入模块读成“原始值”。这些原始值不是直接的温度数值。类似0~27648、0~4000这类数值范围具体取决于硬件选型和分辨率。你需要把原始值换算成工程值公式并不复杂工程量 (原始值 - 零点原始值) ÷ (满度原始值 - 零点原始值) × (工程量上限 - 工程量下限) 工程量下限举个例子一个温度变送器量程是0℃到100℃在某个硬件配置下4mA对应原始值020mA对应原始值27648。现在读到的原始值是13824那温度就是50℃。这里一定要注意“零点原始值”的存在如果传感器输出的是4~20mA信号4mA对应的是量程下限不是你直觉中的“0起始”。我早年踩过最大的坑就是以为原始值从0到满量程直接线性对应工程值结果接了一个4~20mA的液位计时罐子里明明还有一半液位PLC算出来却是0%。这种问题在实车上很难发现因为你只看数字很容易以为传感器坏了。后来我养成了一个习惯接模拟量之前先看硬件手册里的原始值范围再写换算公式绝不用“大概的数值”去猜。4.3 通信协议Modbus是当前绕不开的一门课PLC和上位机、触摸屏、变频器、仪表之间的通信现在主流用Modbus及其衍生协议尤其是RTU和TCP两种形式。Modbus的逻辑并不复杂核心就是一个主站去读或写从站的寄存器。读操作对应功能码03写操作对应功能码06或16你只需要在PLC里配置好通信参数、从站地址、寄存器地址和读写长度就能完成数据交换。真正让初学者头疼的是“寄存器地址到底怎么填”。不同设备手册里给出的地址有些是带偏移量的比如40001、40002这种有些是直接十六进制地址。你填之前必须先搞清楚PLC编程软件里地址格式是“从0开始”还是“从1开始”否则会出现一个非常典型的错位现象读出来的数据不是目标数据而是在目标地址旁边多出来的那个数据。通信排障时也有一套固定的顺序首先确认物理连接正常链路指示灯正常其次确认通信参数一致波特率、数据位、校验位、停止位四项一个都不能错最后确认从站地址和寄存器地址匹配。只要按这个顺序查大多数通信问题都能定位到前三层真正需要抓包分析协议的场景很少。5. 在线排障手记程序输出不动、信号乱跳时按这条链查5.1 排障第一原则先把现场定格在故障发生的瞬间PLC程序不会像机械零件那样有肉眼可见的磨损它的故障往往表现为“输出该动时不动不该动时乱动”。很多人一上来就急着改程序反复下载、反复测试结果越改越乱。更好的做法是先把现场“冻住”记录故障发生时的输入状态、输出状态、操作步骤和异常现象然后再开始分析。为什么先冻结现场这么重要因为PLC程序是顺序执行的同一个程序在不同条件下会走出完全不同的分支。如果你没有记录当时的输入组合改完一轮程序之后发现现象变了你都不知道是因为改动引起的还是因为现场条件本来就和上次不同。很多时候管理员一上来直接改逻辑不但没修好还引入了新故障就是因为少了这一步记录。5.2 按“物理输入—模块指示灯—监控位—逻辑”顺序逐级排查有一次我看到一台设备出问题按了启动按钮输出继电器就是不吸合。值班的人上来就在程序里查启动按钮对应的触点查了半天没发现异常。我看了一下现场告诉他按这个顺序查先用万用表量按钮端子之间的电压确认按钮本身有没有导通然后看PLC输入模块对应通道的指示灯亮不亮再打开在线监控看这个输入位有没有变成ON最后才是进入程序去看这个触点引出来的逻辑。结果问题根本不在程序而是按钮的一根线松了信号始终没进到PLC。这种情况非常常见尤其是在振动比较大的设备上接线端子松脱的概率远比你想象中高。请你一定记住在线监控看到的输入位状态是PLC已经采集到的状态它不等于现场物理信号一定正常。如果程序里已经能看到正确的输入变化再去查程序逻辑这样才不会被带偏。5.3 在线监控和强制输出用之前先想清楚安全风险PLC编程软件里通常都提供在线监控和强制功能。在线监控可以让你实时看到输入位、输出位和中间变量的状态变化这是排查逻辑问题的利器。强制功能则可以强行把某个位置为ON或OFF用于验证接线和单个输出点是否正常。但强制功能有一个非常现实的安全风险它绕过了程序逻辑如果你强行把一个输出位置为ON即使程序里的停止条件已经满足这个输出也不会灭。在调试现场如果执行机构后面连着高速运转的设备强制输出可能造成设备突然动作非常危险。所以我对强制功能的态度一直是能不用就不用必须用时一定先确认执行机构处在安全状态或者已经断电隔离。验证输出点是否正常更好用的是“强制输出点断电”这类安全级别的操作不要在没把握的情况下直接强制一个接触器输出。5.4 三个最常被忽略的逻辑坑从程序层面看故障的根因往往集中在几个物理量上重复输出、定时器清零条件写错、变量在多个子程序中被意外覆盖。它们各有各的“症状”我把它整理成一张表现象特征可能原因先查什么输出偶尔正常但逻辑一换分支就乱同一个输出地址被多个段程序重复赋值全程序搜索该输出地址看有几处OUT定时器计到一半就归零动作总不完成定时器复位条件在扫描过程中被意外触发看复位指令执行条件有没有并联到无关触点手动模式正常自动模式失效手动自动状态变量被两段程序分别改写检索状态位所有赋值位置按时间排序就拿“定时器永远等不到”来说我见过一个小例子程序里用了T0计时5秒复位条件是X0常闭。表面看没问题X0不动作时T0应该正常计时。但实际中T0刚计到3秒就归零了监控才发现X0在一个很短的时间内抖动了一下常闭条件瞬间断开又恢复T0被复位后重新开始。解决办法是加上滤波或者改用计数器配合上升沿的方式而不是简单把常闭条件删掉。6. 长期做PLC学习规划时我坚持下来的两个原始习惯6.1 别跳过I/O分配表先花十分钟把点位写清很多自学的人写程序根本不做I/O分配表直接打开软件就开始拖梯形图。这样在小项目里还能靠记忆撑住一旦项目涉及几十个点你会发现自己在查端口时浪费的时间远远超过写程序的时间。我现在的做法是“一次分配全程复用”先把所有输入输出按功能分组统一编号命名。比如输入信号以“手自动切换”“急停”“启动”“停止”等中文或者拼音缩写命名输出信号以“接触器”“电磁阀”“指示灯”命名不管写注释还是查故障一眼就能定位。即便你只是在做三五个点的小项目我也建议习惯性地先写这个表因为到真正的工程项目里I/O表就是程序的地基。6.2 每条程序都带注释每次改动都留记录我见过太多程序文件叫“最终版”“最终版2”“新建最终版”打开里面连一行注释都没有别人接手的时候完全不知道当初为什么这么写。PLC程序本身的可读性已经不算好如果再没有注释两个月之后自己都会看不懂。我的习惯是程序段落先写一句话注释说明这段是干什么的主要变量加上含义说明每次修改后在程序文件头部登记修改日期和修改内容。不要相信自己的记忆改程序这件事最不值钱的成本就是多敲几行注释但省下来的排查时间可能会是几个小时。每次下载新程序之前把旧版本另存一下宁可文件多点也不要覆盖原程序。6.3 拆解样例程序的正确姿势先盖住答案自己推一遍最后说说怎么用一套现成的样例程序来提升自己。很多人看样例程序就像看小说从头到尾一行一行扫过去看完觉得都会合上又全忘。正确姿势应该是盖住程序只看功能描述、输入输出分配表然后自己独立写一遍。写完之后再打开样例程序把两个版本逐段对比找出别人的思路和自己不同的地方。差异点才是最有价值的学习素材。也许他用了置位复位而你还停留在保持线圈也许他用功能块封装了而你还是一行一行平铺也许他在程序开头加了安全联锁而你完全没想到。如果你能做到“看一个样例自己先写一版再对比差异并记录”你进步的速度会比单纯看整套教程快得多。我在自己独立入门那段时间就是这么把一个个项目从“照着抄”推到“独立写”的。后面又陆续补了功能块、模拟量、通信这些内容逐步把零散的指令串成一套能解决实际问题的体系。你现在手里的资料本身并不差差的只是把它们变成本事的过程。先把手上的全套教程按本文的分法归类再从第一个小项目开始动手学PLC这件事永远是用手学会的不是用眼睛学会的。