1. 学不会PLC的人,普遍卡在哪一层
先说一个我观察很久的现象:不少入行两三年的电气工程师,接触PLC也有段时间了,能照着手册敲出各种指令,什么定时器、计数器、比较指令、传送指令,用起来有模有样。可一旦让他独立编程解决一个实际问题,哪怕是搞个简单的电机启停控制,写出来的程序总是这里漏一条、那里多一条,逻辑稍一复杂就乱了套。反过来看那些老师傅,不一定记得住多少复杂指令,但编出来的程序干净利落,查起故障来又快又准。
差别在哪儿?就藏在标题这句话里:基础位逻辑没学透。
我做PLC编程培训这些年,接待过大量卡在瓶颈期的学员。有一个很典型的案例:一位做设备维护的同行,接触PLC快两年了,指令手册翻得滚瓜烂熟,最近一次考核让他用三菱PLC写一个"两台电机顺序启动、逆序停止"的控制程序,他愣是折腾了一下午,写出来的程序启动逻辑勉强能用,停止部分却乱成一团。他后来很困惑地问我:"我明明连浮点运算、PID指令都在学了,怎么连个启停都搞不定?"
这个问题的答案,恰恰揭示了PLC学习中最容易被忽视的真相:位逻辑不是入门知识,而是贯穿整个PLC编程生涯的底层能力。你在网上搜"plc编程入门基础知识"、"plc梯形图",翻来覆去看到的无非是常开、常闭、线圈这老三样,内容少到让人觉得早就掌握了。可实际编程里,你写100行程序,可能80行都是位逻辑在底层支撑——真正决定程序质量的,是你能不能把这最简单的几个元件玩出花来。
这篇内容不打算讲任何高深指令,我就围绕位逻辑这件事,把"为什么大部分人都卡在这"、"位逻辑到底该怎么理解"、"常见错误到底错在哪"一层层拆开讲。适合三类人看:刚入门PLC、正被基础概念困扰的新手;已经会抄程序、但独立编程就抓瞎的进阶者;以及想搞清楚"为什么自己总学不会"的自我怀疑者。
2. 位逻辑的本质:不是"与或非",而是电流通路思维
很多人学PLC的第一个坎,是把位逻辑当成数学逻辑来学。什么"与门""或门""非门",数字电路课上的真值表背得滚瓜烂熟,可真到写梯形图时又懵了——这两个东西好像对不上。
2.1 梯形图不是逻辑图,是"会流动的电路图"
我给你的第一个建议:把脑子里"逻辑电路图"的印象彻底删掉,换成"继电器控制电路"的画面。
PLC的梯形图,本质上是从继电器控制系统演变来的。你看一个最简单的启保停电路:
X0(启动按钮) --| |-- X1(停止按钮) --|/|-- Y0(接触器线圈) --( )-- | | +---- Y0(自保持触点)------+这个图你不需要背,你需要"看见"的是:左边相当于电源火线,右边相当于零线,中间所有元件串在一条通路上。当X0按下、X1没按下时,这条通路是通的,电流能流到Y0线圈,Y0得电;Y0得电后,它自己的常开触点闭合,把X0并联的那条支路接通了,即使X0松开,电流也能从Y0这条支路继续流过去——这就是"自锁"或"自保持"。
位逻辑的核心不是"与或非"的运算规则,而是"这条通路通不通"的判断。你写的每一行梯形图,都是在决定:在什么条件下,允许"电流"从左边流到右边,让某个线圈得电。
这个思维的转变至关重要。我见过很多学员试图用真值表去分析梯形图,把每一条支路翻译成"X0 AND (NOT X1) OR Y0 = Y0",结果越分析越混乱。原因很简单:真值表是静态的、离散的,而梯形图的执行是动态的、有顺序的、有状态保持的。你把位逻辑当成电路来"看",远比你把它当成公式来"算"更符合PLC的实际工作方式。
2.2 PLC扫描机制:为什么同一个触点状态,在不同位置结果完全不同
理解了"通路思维"之后,紧接着要面对第二个关键概念:PLC程序是循环扫描执行的。
很多新手写程序出问题,根源在于没搞懂扫描顺序。PLC从上到下、从左到右逐行执行梯形图,执行完最后一行,再跳回第一行重新开始,这个循环周期通常只有几毫秒到几十毫秒。在程序运行的任何一瞬间,你看到的X0、Y0的状态,是"这一轮扫描到此处时"的状态,而不是"整个程序运行期间恒定不变"的状态。
这个特性会带来一个非常经典的坑:同一个输出线圈,如果在程序里出现了两次,最终起作用的只有最后一次。什么意思?看这段程序:
X0 --| |-- Y0 --( )-- X1 --| |-- Y0 --( )--如果X0和X1都接通,你觉得Y0最终是通还是断?答案是:Y0是通的。因为第一行先执行,Y0被置为ON;第二行再执行,Y0又被置为ON一次,两次结果一致。但如果改成:
X0 --| |-- Y0 --( )-- X1 --|/|-- Y0 --( )--X0接通、X1断开时,第一行让Y0=ON,第二行又让Y0=OFF,最终Y0是断的。很多新手看到这种程序就懵:"X0都通了,Y0怎么不亮?"——就是因为第二行的赋值把第一行的结果覆盖了。
这个现象在网上讨论PLC编程时经常被忽略,但它恰恰是区分"会写程序"和"懂程序"的分水岭。真正有经验的工程师写程序,同一个输出线圈在全文中一般只出现一次,所有控制条件都集中在这一条逻辑里,就是从根源上避免这种覆盖问题。
2.3 常开常闭的"傻瓜式"判断法
再来说说最基础的常开、常闭。很多新手常在这上面栽跟头,尤其是面对外部接线时。
我的经验是:永远以"外部信号没动作"为基准来判断。一个按钮没被按下时,它的常开触点(| |)是断开的,常闭触点(|/|)是导通的;按下之后,常开变导通,常闭变断开。这个规律在梯形图里同样适用——常开触点在没有外部输入时为OFF,常闭触点在没有外部输入时为ON。
这句话看起来简单,但实际应用时满地是坑。举个例子,一个急停按钮,你觉得应该接常闭还是常开?从安全角度,急停按钮必须接常闭触点,这样急停线断线时,PLC检测到的信号反而是"急停被按下",设备能立刻停机。如果把急停接成常开,一旦急停那根线松了、断了,PLC完全感知不到,设备照常运转——这就是安全隐患。
很多新手习惯把"停止按钮"画成常闭触点放在程序里,觉得"停止就是断开嘛",但实际上,如果你在程序里用常开触点接入一个外部常闭按钮,逻辑上效果是一样的,但物理接线和故障安全性完全不同。外部接常闭、程序用常开是停止类信号的标配,这个关系必须在入门时就焊死在脑子里。
3. 一套能"通吃"所有场合的位逻辑分析方法
铺垫了这么多基础,现在讲点实操的。我总结了三个分析位逻辑的"土办法",不依赖任何高级指令,但能解决绝大多数编程场景。你把这套方法吃透,独立编程的底气会完全不一样。
3.1 把逻辑拆成"条件集":什么时候让输出ON,什么时候让输出OFF
初学梯形图,最大的障碍是"一口气把整个控制流程想完"。我见过太多新手在纸上画啊画,试图把所有按钮、所有状态、所有互锁一次性画进一张图里,结果越画越乱。
我的建议是反过来:先别想着完整程序,先把"让这个输出通电"的条件和"让这个输出断电"的条件分别列出来。
举个例子:一个简单的电机控制。要求是:按下启动按钮,电机转起来;按下停止按钮,电机停下来;电机过载时,也必须停下来。OK,那我们分两组条件:
- 让Y0(电机接触器)通电的条件:启动按钮X0被按下,且停止按钮X1没按下,且过载保护X2没动作。
- 让Y0保持通电的条件:Y0自己已经通电了(自锁)。
这两组条件就足够了,不需要更多花哨的东西。翻译成梯形图,就是标准的"启动条件并联 + 保持条件自身 + 停止条件串联"结构。无论控制的设备多复杂,每个输出线圈你都可以用这个"条件集"思路去拆解。能列明白,就一定能画出来。
3.2 动作顺序的"时间线推演法"
程序里一旦有多个执行元件,且它们之间有时序关系(比如先启动A再启动B、先停止B再停止A),光靠条件集就不够了,还要加上时间线推演。
我常用的办法:在纸上画一条横向时间轴,把操作按钮的时刻、每个输出的状态变化按时间顺序标注出来。以"两台电机顺序启动、逆序停止"为例,时间线是这样的:
- T0:按下启动按钮,电机1启动(Y0=ON);
- T1:延时3秒,电机2启动(Y1=ON);
- T2:按下停止按钮,电机2先停(Y1=OFF);
- T3:延时2秒,电机1再停(Y0=OFF)。
画完时间线之后,你会发现每个输出线圈的"条件集"变得非常清晰:Y0的启动条件是"启动按钮按下",保持条件是"Y0自锁且还没到T2之后的停机阶段";Y1的启动条件是"Y0已启动且3秒到",保持条件是"Y1自锁且没按停止按钮"。
很多新手的误区是上来就写代码,写着写着就混乱了。先画时间线,再写条件集,最后才落梯形图,这三步走完,程序基本不会错。
3.3 互锁与防抖:位逻辑中两个"看不见"的陷阱
条件集和时间线能解决大部分逻辑问题,但还有两个细节,是控制程序里最容易出事故、新手却最容易忽略的——互锁和防抖。
先说互锁。两台电机不能同时正转、或者同一个气缸的伸出和缩回不能同时动作,这些情况必须加互锁。互锁的本质,就是在A动作的条件里串联B的常闭触点,B动作的条件里串联A的常闭触点。这个概念本身不难,难的是很多人只在程序里加了互锁,却没考虑外部物理器件也可能同时动作——比如正反转接触器如果同时吸合,就是严重的短路事故。所以真正靠谱的做法是:程序里做互锁,硬接线也要做互锁,双保险。
再说防抖。你按下一个物理按钮,从电气角度,触点并不是一次性干净地闭合,而是会抖动几十毫秒。如果程序里直接读取这个信号去控制一个计数器或者一个步进流程,抖动会导致一次按键被识别成多次触发。这种问题在连续计数、工位流转、参数设置等场景中非常致命。
处理抖动有很多办法,最简单实用的一种是做"延时确认":检测到按钮信号后,延时几十毫秒再读取一次,如果信号仍然有效,才认为是一次有效触发。这个方法不需要任何高级指令,用定时器就能实现。很多所谓"复杂指令"解决的问题,说到底都是位逻辑层面的细节没处理好。
4. 一个案例复盘:从"能跑"到"可靠",位逻辑差在哪里
讲了这么多理论,用一个真实案例把这些内容串一遍。这是某厂一台小型输送设备上的控制需求,我把它简化成适合讲解的版本。
4.1 需求描述与初版方案
设备需求:一个气缸把工件从A位推到B位,推到位后,输送带启动,把工件送走;输送带运行10秒后停止,气缸缩回,一个循环结束。
初学PLC的同行,拿到这个需求通常第一时间就开始写梯形图,写了几行发现:气缸伸出用什么信号触发?推到位用哪个传感器?输送带停了之后气缸缩回,这个过程怎么衔接?
其实按照条件集思路,这个系统的关键输出只有两个:气缸伸出电磁阀Y0、输送带电机Y1。分别列条件:
- Y0(气缸伸出):启动按钮X0按下且气缸不在缩回位,或者上一次输送带完成之后需要伸出时;
- Y1(输送带):气缸伸出到位信号X1触发,且运行时间未到10秒。
理论上这个方案"能跑",但离"可靠"还差得远。真正的工程高手会立刻追问几个问题:气缸伸出的前提,是不是得确认输送带已经停了?输送带启动前,是不是得确认气缸真的到位了?如果气缸中途没到位,程序怎么处理?
4.2 可靠方案的完整梯形图逻辑
我给出一个工程上更严谨的版本,你体会一下位逻辑在其中的作用:
| 步骤 | 输出 | 导通条件 |
|---|---|---|
| 1 | Y0 气缸伸出 | (X0启动按钮接通 OR Y0自锁) AND X2输送带停止确认 AND NOT X3气缸伸出到位 AND NOT Y1输送带运行 |
| 2 | Y1 输送带运行 | (X1气缸到位 AND T0未到10秒) OR (Y1自锁 AND T0未到10秒) |
| 3 | 循环停止与复位 | X1气缸到位 ON 时启动定时器T0(10秒),T0时间到 → 切断Y1,Y0缩回,X4缩回到位后循环结束 |
看到这里你可能会发现,工程上的写法,很多条件都是"多余的":明明气缸伸出的核心条件只是"按下启动按钮",我还要串联"输送带停止确认""Y1未运行";明明输送带的核心条件只是"气缸到位",我还要加上自锁、加上时间到自动断。
这些"多余"的条件,恰恰是位逻辑精髓所在。它们保证了系统在任何时刻,无论信号怎么混乱切换,都不可能进入危险状态。新手写程序是在"完成动作",高手写程序是在"限制动作发生的条件"。可靠性的差距,就在这里。
4.3 两种方案运行对比:为什么可靠方案反而更好查故障
有人会觉得,加这么多条件,程序不是更复杂了吗?恰恰相反,这样一个程序在后续维护中,反而更容易排查故障。
举个实际场景:设备运行中,气缸突然不伸出了。如果是初版程序,你需要怀疑的点可能是:按钮坏了?信号线断了?程序逻辑本身错了?排查范围很大。而可靠版本的程序,你能沿着梯形图条件一个一个量:先看X0有没有通,再看X2有没有通,再看X3是不是误动作了,再看是不是Y1还挂着——每一步都有明确的判断标准。
这就是位逻辑带来的额外好处:条件越明确,故障定位越精准。你在排查时不是在"猜",而是在"按图索骥"。很多老师傅查故障快,不是因为眼神好,是因为他的程序里每个条件都清清楚楚,量一个信号就能排除一大片可能。
5. 为什么你感觉"会了",一上手就"废了"
回到最初的问题:为什么绝大多数人学不会PLC编程?你会发现,根本不是指令太复杂、门槛太高,而是基础位逻辑这张"隐形的地基"没有打牢。地基不牢,上面盖再高的楼都会塌。
5.1 指令可以"现查现用",位逻辑必须"内化"
有一条程序员界的共识放在PLC领域同样成立:指令是查出来的,逻辑是练出来的。你记不住浮点运算指令的编号,完全没关系,手册一翻、帮助下个搜索,三分钟就查到了。但你的大脑如果无法瞬间判断"这个停止信号应该在哪个触点位置串联",看手册是解决不了的。
这就好比学开车。方向盘、油门、刹车,每个操作都可以在驾校里反复练习,但真正的车感、路感——什么速度下该提前减速、什么距离下该变道——这些无法靠背口诀获得,只能在大量的实际驾驶中内化。位逻辑也一样,它不是"记住规则"就行的知识,而是需要形成条件反射的技能。
5.2 一套刻意练习的方法:不看答案,只看现象
我建议所有想突破瓶颈的初学者,都去试试下面这套练习法。它的思路是:不给你完整的程序答案,只给现象描述,让你自己去推逻辑。
比如,我给你一个现象:"按一次按钮,灯亮;再按一次按钮,灯灭。无论按得多快,灯的状态都能稳定切换。"你能用最简单的位逻辑指令实现吗?这个题目看起来简单,但真的动手写,你会发现需要同时处理状态记忆和一次扫描只执行一次动作两个问题——这正是位逻辑的高阶应用。
再比如:"有三个传感器,任意两个同时触发时报警,一个触发不报警,三个同时触发也不报警。"这个逻辑用基本位逻辑就能实现,但新手很容易绕晕,因为需要把三种状态都覆盖到。做这类练习时,不要急着看答案,先画条件集、画时间线,再落梯形图。做完了再对比别人的写法,你会发现同样一个功能,有无数种位逻辑组合方式,而每种方式在可靠性、可读性上都有细微差异。
5.3 从"学会"到"学透":判断标准只有一个
最后说一个直接的判断标准,你可以用来评估自己是不是真的"学透"了位逻辑:给你一个有故障的程序,你能不能不看任何资料,通过梯形图从前往后推,把故障点定位出来?
如果做不到,说明你对位逻辑的掌握还停留在"能写"的层面,没有到"能审"的层面。这很正常,大多数人都会经历这个阶段,我自己也是在大约做了上百个控制项目之后,才真正建立起对位逻辑的"直觉",看到一段程序,能大概预判它会在什么条件下出问题。
我从自己带过的学员身上总结出一个规律:凡是能在基础位逻辑上沉下心反复磨的人,后来学什么指令都快。因为任何复杂的控制功能,最终都会落到"某个输出在什么条件下动作"这个最原始的位逻辑问题上来。而跳过了这一层、急着去学高级指令的人,往往在真正面对项目时被打回原形,又回头补课。
所以,如果你现在正处于"感觉什么都会、一写就废"的瓶颈期,我的建议很简单:别急着学新指令,把常开、常闭、线圈、自锁、互锁这几个基本元件,反复用、反复推敲,直到你闭上眼睛都能画出它们的各种组合。基础位逻辑这个东西,看着不起眼,但它决定了你PLC编程这条路能走多远。磨刀不误砍柴工,这句话放在PLC学习上,再合适不过。