PLC编程入门:为什么位逻辑是新手最大的坎?
发布时间:2026/10/26 1:08:04 锦皓数字建站

1. 为什么卡住新手的从来不是复杂指令带过几个PLC新手之后我慢慢发现一个挺反直觉的现象那些学不会PLC编程的人几乎都不是被什么复杂功能块、PID整定、运动控制卡住的。你去问他们定时器怎么用高速计数器怎么配他们能跟你聊得头头是道。但一旦让他们独立写一段电机正反转加互锁或者红绿灯循环就立刻卡壳写出来的程序要么逻辑漏洞百出要么自己都说不清为什么这么写。问题出在哪出在最底层的位逻辑上。位逻辑说白了就是0和1的游戏——常开、常闭、线圈、置位、复位、上升沿、下降沿就这几个元件。听起来简单到不能再简单但恰恰是这几个东西决定了你后面能不能写出有逻辑的程序。我见过太多人梯形图能画出来但画的是形状不是逻辑。他们脑子里没有电流流动的画面只是把指令当成积木在拼拼对了是运气拼错了就抓瞎。这篇内容我想聊的就是这件事为什么位逻辑学不透会成为绝大多数人学PLC的天花板以及怎么才算真正把位逻辑学透。不管你现在用的是汇川、三菱、西门子还是信捷底层逻辑是通的。我会结合INPROSHOP、汇川PLC这些实际环境把那些教科书上一笔带过、但实操中天天要用的东西掰开揉碎讲清楚。如果你现在正处于指令都认识、程序写不出的阶段这篇大概率能帮你找到症结。如果你已经能独立做项目也不妨回头看看很多老手的坑其实也埋在这一层。2. 位逻辑到底在解决什么问题从电流思维说起2.1 梯形图不是画图是在描述电流通路很多人学梯形图的第一反应是这不就是画电路图吗然后就开始照着电气原理图往软件里搬。搬着搬着就乱了因为梯形图和电气图有一个根本区别电气图描述的是物理接线梯形图描述的是逻辑判断。我习惯用一个比喻梯形图里的每一行都是一条假设的电流通路。左边是电源正极母线右边是电源负极母线中间那些常开常闭触点就是这条通路上的闸门。电流能不能从左边流到右边取决于这些闸门是开是闭。流到最右边的线圈就代表这个输出得电了。这个电流思维是位逻辑的核心。你写程序的时候脑子里应该有一条电流在跑而不是在摆积木。举个最经典的例子——起保停电路|--[ I0.0 ]--[ /Q0.0 ]----( Q0.0 )--| | | |--[ Q0.0 ]--------------启动按钮I0.0按下电流通过常闭的Q0.0此时Q0.0没得电常闭是通的到达线圈Q0.0Q0.0得电。得电之后下面那条并联的Q0.0常开触点闭合形成自锁。这时候你松开I0.0电流依然能通过Q0.0自己的触点流过去所以Q0.0保持得电。直到你按下停止按钮串联在回路里电流被切断Q0.0失电自锁触点断开电路复位。你看整个过程用电流来解释一气呵成。但如果你只是记启动并联输出、停止串联常闭遇到稍微变形的电路就懵了。这就是学形状和学逻辑的区别。2.2 常开常闭的状态和动作是两回事这是新手最容易混淆的一个点也是位逻辑学不透的典型症状。常开NO和常闭NC描述的是触点的初始状态不是动作。常开触点的意思是在没有任何外部信号时它是断开的当对应的位为1时它闭合。常闭触点则相反初始是闭合的当对应的位为1时它断开。问题来了。很多新手会把常闭理解成按下就断开把常开理解成按下就闭合。这在按钮上勉强说得通但一旦用在内部继电器或者输出线圈上就彻底乱了。我举个实际场景。假设你要做一个故障时切断输出的逻辑。故障信号是一个常闭的急停按钮正常时它是闭合的导通按下时断开。你在程序里应该用常开触点来读这个信号——因为正常时信号为1常开触点闭合电流通过按下时信号变0常开触点断开电流切断。如果你用常闭触点去读正常时信号为1常闭触点反而断开逻辑就反了。记住一句话程序里的触点状态永远跟着位的值走跟物理按钮长什么样没关系。物理按钮是常闭还是常开只影响你接线时信号是1还是0进了程序之后一切以位的值为准。这个点我在带新人的时候反复强调因为它是后面所有逻辑的地基。地基歪了上面盖什么都是歪的。2.3 位逻辑的三种基本结构串联、并联、自锁抛开那些花哨的指令位逻辑的组合方式其实就三种串联逻辑与AND。所有条件都满足电流才通过。比如设备启动需要电源正常且无故障且启动按钮按下。并联逻辑或OR。任意一个条件满足电流就通过。比如报警输出可以是温度过高或压力过高或液位过低。自锁把输出自己的触点并联在启动条件上实现松手不断电。这是所有保持型逻辑的基础。这三种结构能组合出无穷无尽的逻辑。你去看那些复杂的PLC程序拆到最底层无非就是这三种结构的嵌套。所以我说位逻辑学透了复杂程序只是量的问题不是质的问题。我见过一个新手写三台电机顺序启动、逆序停止的程序写了满满两屏逻辑绕来绕去最后自己都调不通。后来我让他把每一台电机的启停单独拆出来用起保停结构写再在启动条件里串联前一台的运行标志停止条件里串联后一台的停止完成标志。三台电机每台就几行清清楚楚。他看完之后说了一句原来这么简单。对本来就简单只是他之前没把位逻辑的结构想明白。3. 那些看起来会了其实没会的典型症状3.1 症状一程序能跑但说不清为什么能跑这是最普遍的情况。程序下载进去设备动起来了就觉得自己会了。但你让他解释这一行为什么用常闭不用常开这个自锁为什么放在这里他就开始含糊其辞。这种能跑就行的心态在简单项目里问题不大但一旦遇到需要修改或者排故的场景就原形毕露。因为你不理解逻辑就不知道改哪里会影响哪里。改一个触点可能整个逻辑链就断了。我的建议是每写一行程序都要能说出这一行在电流层面是什么意思。说不出来就说明你没真懂只是碰巧写对了。3.2 症状二一遇到互锁就写反互锁是位逻辑里最经典的应用也是最容易写错的地方。正反转互锁、星三角互锁、多工位互锁本质都是一样的用对方的运行状态来切断自己的启动通路。但新手经常写成用对方的启动按钮来切断自己这就错了。因为启动按钮是瞬时的你按一下它才断开松开又闭合了根本起不到互锁作用。正确的做法是串联对方的输出线圈的常闭触点——对方一旦运行常闭断开你就启动不了。我见过一个更隐蔽的错误有人把互锁触点串联在自锁回路里而不是串联在启动回路上。结果就是对方运行的时候你按启动按钮自己的输出会闪一下再断开。因为启动瞬间电流通过了线圈得电然后互锁触点断开又失电。这种闪一下在接触器上可能看不出来但在高速设备上就是事故隐患。3.3 症状三上升沿下降沿当成万能药上升沿P和下降沿N是位逻辑里的进阶内容很多人一知半解就开始滥用。看到需要触发一次的地方就加个上升沿也不管这个沿是加在按钮上还是加在内部标志上。上升沿的本质是检测这个位从0变1的那个瞬间只导通一个扫描周期。注意是一个扫描周期不是一次操作。如果你把上升沿加在一个每个周期都在变化的位上那它可能每个周期都触发完全失去意义。正确的用法是上升沿应该加在稳定的、由外部事件驱动的位上比如按钮输入、传感器信号、通信接收标志。加在内部计算出来的中间变量上要特别小心因为那个变量可能因为扫描顺序的原因在一个周期内多次变化。我踩过的一个坑用上升沿检测一个比较结果位想实现数值相等时触发一次。结果发现有时候触发有时候不触发。后来才明白那个比较结果位在数值波动的过程中会反复0/1跳变上升沿检测到的时机是不确定的。正确的做法是先把这个位锁存一个周期再检测沿。3.4 症状四置位复位用得太随意置位SET和复位RST是位逻辑里的双刃剑。用好了程序简洁清晰用滥了逻辑一团乱麻排故时根本找不到是谁把位置起来的。新手喜欢用置位复位因为按一下置位、按一下复位看起来比自锁简单。但问题是置位复位是状态保持的它不依赖电流通路。你置位之后除非有人复位否则它永远是1。这就导致一个隐患如果程序里有多个地方都能置位同一个位你根本不知道最后是谁把它置起来的。我的经验是能用自锁解决的尽量不用置位复位。自锁的逻辑是看得见的电流通路一目了然。置位复位适合那些事件型的场景比如故障发生这种需要锁存的状态而且最好保证全程序只有一个地方置位、一个地方复位。4. 把位逻辑练透的四个实操阶段4.1 阶段一用电流追踪法重写经典电路这个阶段的目标是建立电流思维。方法很简单找十个经典的电气控制电路起保停、正反转、星三角、顺序启动、两地控制等用梯形图重写一遍然后逐行追踪电流把每一行的电流通路画出来。具体怎么做拿一张纸把梯形图抄下来然后用铅笔从左边母线开始沿着能导通的路径画线一直画到线圈。遇到常闭触点如果对应的位是0就画过去如果是1就停住。遇到并联分支就分叉画。这个过程很笨但极其有效。画上二十遍你脑子里自然就有电流了。后面再写程序不用画图电流自己就在脑子里跑。我用INPROSHOP或者汇川的编程软件做这个练习的时候会打开状态监控让程序跑起来然后观察每个触点的通断状态跟自己在纸上画的对照。对不上的地方就是理解有偏差的地方。4.2 阶段二不看例程从需求直接写逻辑第一个阶段是照着抄第二个阶段是自己写。找一些简单的控制需求比如红绿灯循环四层电梯自动包装线的一段流程不看任何例程直接从需求出发写程序。写之前先做一件事把需求翻译成条件-动作列表。比如红绿灯东西方向绿灯亮需要南北方向红灯亮 且 计时未到东西方向黄灯亮需要东西绿灯计时到 且 黄灯计时未到东西方向红灯亮需要南北方向绿灯亮 或 南北方向黄灯亮把每个输出的得电条件列清楚再翻译成梯形图就是串联并联的组合。这个过程练的是从逻辑到电路的转换能力。我建议这个阶段至少练二十个不同的需求涵盖互锁、顺序、循环、延时、计数这些常见模式。练完之后你看到任何需求脑子里第一反应就是这个用串联还是并联要不要自锁互锁加在哪。4.3 阶段三故意制造故障练习排故位逻辑学得透不透排故的时候最能看出来。我经常做的一个练习是写一段正确的程序然后故意改错一个触点常开改常闭、串联改并联、自锁位置挪一下让程序跑起来观察现象然后从现象反推是哪里错了。这个练习的价值在于它逼着你从输出不对倒推到哪一行电流不对再从电流不对倒推到哪个触点状态不对。这个倒推链路就是排故的核心能力。实际项目中故障现象往往更隐蔽。比如设备偶尔不启动可能是某个互锁触点在特定条件下才断开输出闪一下可能是自锁和互锁的顺序问题。这些都需要你对位逻辑有足够深的理解才能快速定位。4.4 阶段四跨平台迁移验证底层逻辑最后一个阶段是换平台。如果你一直用汇川就去试试三菱或者西门子如果你一直用INPROSHOP就去试试CODESYS或者博途。把之前写的程序在新平台上重写一遍。你会发现虽然指令名字不一样、界面不一样但位逻辑的底层是完全相通的。汇川的常开触点和三菱的常开触点逻辑含义一模一样。这个迁移过程能帮你把平台特性和逻辑本质分开以后学任何新平台都快。我自己的经历是最早用三菱FX系列后来转汇川再后来接触西门子S7-1200。每次换平台前三天都在找这个指令在哪但逻辑层面几乎零成本。因为位逻辑那套东西早就刻在脑子里了。5. 位逻辑里那些没人明说但天天要用的细节5.1 扫描周期对位逻辑的影响PLC是循环扫描的一个扫描周期分三个阶段输入采样、程序执行、输出刷新。这个机制对位逻辑有直接影响。最典型的问题是同一个扫描周期内前面程序改了一个位后面程序读到的还是旧值。因为程序执行阶段位的值是边算边更新的但输入采样阶段已经把输入状态锁定了。举个例子。假设I0.0是输入Q0.0是输出。程序第一行用I0.0驱动Q0.0第二行用Q0.0驱动Q0.1。在一个扫描周期里第一行执行完Q0.0的映像寄存器变成1第二行读Q0.0的时候读到的是1所以Q0.1也得电。但如果第二行读的是I0.0那读到的还是本周期开始时采样的值跟第一行读到的I0.0是一样的。这个细节在写顺序控制的时候特别重要。如果你用输出线圈的状态作为下一步的启动条件要注意它是在本周期就更新了还是下周期才更新。不同品牌的PLC处理方式略有差异但原理是通的。5.2 双线圈问题同一个输出写两次会怎样这是新手常犯的错误在程序的不同位置用同一个输出线圈Q0.0写了两次。结果就是后面的覆盖前面的。因为每个扫描周期程序从上到下执行最后一次写Q0.0的值就是最终输出值。这个问题在大型程序里特别隐蔽因为两处可能隔了几百行你根本注意不到。排故的时候发现输出不对查了半天逻辑最后发现是别处又写了一遍。我的习惯是每个输出线圈在程序里只出现一次。如果确实需要多个条件控制同一个输出就把所有条件用并联的方式合并到一处。这样逻辑清晰也不会出现覆盖问题。5.3 中间继电器给逻辑分层的利器中间继电器M位是位逻辑里的胶水用来把复杂逻辑拆成多层。它的价值在于让每一层的逻辑都简单到一眼能看懂。比如一个复杂的启动条件涉及五六个信号的组合。你可以先用几个中间继电器把子条件算出来最后再用这些中间继电器组合成最终输出。这样程序读起来就是条件A成立、条件B成立、条件C成立所以输出而不是一大坨串联并联混在一起。用中间继电器还有一个好处方便调试。你可以在监控界面单独看每个中间继电器的状态快速定位是哪个子条件不满足。如果全写在一行里你只能看到最终输出中间过程是黑盒。5.4 沿指令的一次性陷阱上升沿和下降沿的一次性特性用好了是神器用不好是陷阱。最常见的陷阱是沿指令后面跟的逻辑如果被跳过了沿就丢了。比如你用跳转指令JMP跳过了一段包含上升沿的程序那这个上升沿检测就失效了。等跳转条件不满足、程序恢复执行时沿指令会重新初始化可能产生一个假沿。另一个陷阱是沿指令的存储位。每个沿指令都需要一个位来存储上一次的状态。如果你在子程序里用了沿指令而子程序被多次调用这个存储位就会冲突。因为每次调用都共用同一个存储位第二次调用时存储位已经被第一次调用改过了沿检测就乱了。解决方法是子程序里的沿指令存储位要用实例化的方式每个调用实例有自己的存储位。不同平台实现方式不同但原理是一样的。6. 从位逻辑到完整程序一个红绿灯案例的完整拆解6.1 需求梳理先想清楚再动手红绿灯是位逻辑的经典练习因为它涵盖了互锁、顺序、计时、循环。我拿一个最简单的十字路口来拆东西方向和南北方向每个方向红绿黄三灯循环周期固定。需求拆解东西绿灯亮30秒同时南北红灯亮30秒东西黄灯亮3秒同时南北红灯继续亮3秒东西红灯亮30秒同时南北绿灯亮30秒南北黄灯亮3秒同时东西红灯继续亮3秒循环关键点黄灯期间另一个方向的红灯要保持。这就是互锁的体现。6.2 用中间继电器搭建状态机直接写六个输出线圈会乱我用中间继电器先定义四个状态M0东西通行状态东西绿南北红M1东西黄灯状态东西黄南北红M2南北通行状态南北绿东西红M3南北黄灯状态南北黄东西红然后写状态转移逻辑。M0计时30秒到置位M1、复位M0M1计时3秒到置位M2、复位M1以此类推。每个状态的计时用单独的定时器。这里用置位复位是合理的因为状态是事件驱动的而且每个状态只有一个置位点和一个复位点不会乱。6.3 输出逻辑状态到灯的映射有了状态输出就简单了东西绿灯 M0东西黄灯 M1东西红灯 M2 或 M3南北绿灯 M2南北黄灯 M3南北红灯 M0 或 M1你看每个输出都是简单的或逻辑一眼就能看懂。这就是中间继电器的价值把复杂的时序逻辑拆成了状态判断和输出映射两层。6.4 互锁检查确保不会同时绿灯最后一步是检查互锁。东西绿灯M0和南北绿灯M2不可能同时为1因为状态转移是顺序的M0置位M1的时候会复位M0M1置位M2的时候会复位M1。所以天然互锁。但如果你不用状态机直接写六个输出就很容易出现东西绿灯和南北绿灯同时亮的情况因为两个方向的计时器可能同时到。这就是为什么我推荐用状态机来组织时序逻辑。7. 学透位逻辑之后你会发现什么变了7.1 看别人的程序能看出思路而不只是指令位逻辑学透之后你读别人的程序不再是这个指令我认识、那个指令我没见过而是能看出这个人为什么这么写他的逻辑分层是怎么做的这里用自锁是为了什么。这种读思路的能力是进阶的关键。因为PLC编程的很多技巧不是从书上学来的是从别人的程序里悟出来的。你能读懂思路就能把别人的技巧变成自己的。7.2 写程序从拼积木变成搭结构以前写程序是这个功能用这个指令、那个功能用那个指令现在写程序是先搭逻辑结构再填具体指令。结构对了指令只是表达方式结构错了指令再熟也没用。我现在的习惯是拿到需求先在纸上画逻辑框图把每个状态、每个条件、每个互锁关系理清楚然后再打开软件写梯形图。写的时候几乎不用想指令因为逻辑已经在脑子里跑通了。7.3 排故从猜变成推以前排故是这里改改、那里试试现在是输出不对说明这一行电流不通电流不通说明这个触点没闭合触点没闭合说明这个位是0位是0说明前面的逻辑没满足。一步一步推很快就能定位。这个能力在复杂项目里价值巨大。因为复杂项目的故障往往不是某个指令用错了而是某个逻辑条件在特定情况下不满足。只有理解逻辑才能快速找到那个条件。8. 给还在位逻辑里挣扎的人几句实在话如果你现在正卡在位逻辑这一层我想说的是别急着学复杂指令先把起保停写一百遍。听起来很傻但这是最快的路。复杂指令是术位逻辑是道。道不通术再多也是花架子。具体怎么做我给你一个可执行的计划第一周每天用不同品牌的软件汇川、三菱、西门子都行写十个起保停电路写完用状态监控跑一遍确认逻辑正确。第二周写正反转、星三角、顺序启动这些经典电路每个电路写三遍一遍比一遍快。第三周找二十个简单需求红绿灯、电梯、传送带不看例程直接写。第四周把之前写的程序故意改错练习排故。一个月下来你会发现位逻辑已经不是问题了。后面学定时器、计数器、数据处理、通信都会顺很多。因为那些东西的底层还是位逻辑。最后说一个我自己的体会PLC编程的难点从来不在指令在逻辑。指令是工具逻辑是思维。工具可以查手册思维只能靠练。位逻辑就是练思维的最好载体因为它足够简单简单到你能把全部注意力放在逻辑本身而不是这个指令怎么用。所以别跳过它。把它练透后面全是坦途。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。