资讯详情

资讯详情

PLC位逻辑:决定你从抄程序到写程序的分水岭

先抛一个我这些年观察到的规律凡是PLC编程学不进去、写不出完整程序、看完别人梯形图又看不懂的人几乎都不是卡在什么功能指令上而是最基础的位逻辑没真正进脑子。很多人背得出MOV、CMP、PID的用法但一问“为什么这个程序里M0.0要并联一个自己的常开触点”就支支吾吾了。位逻辑这东西听起来像入门第一课简单到让人觉得“不用学”可恰恰是它决定了一个人能不能从“抄程序”进化到“写程序”。这篇就把位逻辑这件事彻底拆开讲清楚它到底是什么为什么这么重要以及怎么把它学透。不管你是刚摸PLC的新手还是在现场调试了好几年但总觉得程序思路乱的同行这篇应该都能帮你把地基重新夯实一遍。1. 位逻辑的本质触点和线圈就是PLC的“底层字节”1.1 一个位就是PLC世界里最小的信息单位PLC里最小的数据单位是位Bit只有0和1两个状态。对应到物理世界就是通和断、启动和停止、开和关、有信号和没信号。梯形图里你用到的所有东西——点动按钮、接近开关、接触器反馈、变频器运行信号——最终都要映射成某个位的0或1。位逻辑说白了就是这些位之间的运算关系读某个位的状态经过逻辑运算去控制另一个位的状态。这也是为什么PLC编程的核心被称为“位操作指令”——常开触点、常闭触点、输出线圈这三样东西就是位逻辑的全部家当。在西门子PLC里位地址长这样I0.0、Q0.1、M0.5。I代表输入映射区对应实际接在输入端子的物理信号Q代表输出映射区对应驱动外部负载的物理输出M是内部中间继电器区只在程序内部使用不直接对应物理点。三菱PLC则是X、Y、M的称呼汇川、倍福这些基于Codesys的PLC更灵活直接定义变量名就行。一个关键认知输入映像区和输出映像区在程序执行期间是“快照”式的。每个扫描周期开始时PLC把物理输入点的状态一次性读入输入映像区程序执行过程中读的是这个快照而不是实时物理状态程序执行完再把输出映像区一次性写到物理输出点。这个机制是位逻辑运行的前提后面讲问题排查时还会反复提到它。1.2 常开和常闭是理解位逻辑的第一道门槛很多新手栽在常开常闭上是因为老拿物理继电器的“线圈通电后触点动作”去套。PLC梯形图里的触点和线圈本质是在读位状态和写位状态不是电流真的流过去了。常开触点NO的规则它对应的位为1时触点导通位为0时触点断开。常闭触点NC的规则反过来位为0时导通位为1时断开。触点类型位状态为0时位状态为1时生活化理解常开触点断开不满足导通满足电灯开关按下才亮常闭触点导通满足断开不满足门禁常闭断电才开为什么停止按钮在程序里要用常闭触点因为安全。停止按钮的物理形态选择常闭触点后一旦按钮线路断线、接触不良或接线松动程序里读到的状态就是0常闭触点断开输出被切断——故障导向安全。如果停止按钮用常开触点线路断了程序反而以为按钮没被按下该停的时候停不下来。这个选择不是编程偏好是安全原则。我在培训时经常拿这个例子考试你按了急停PLC程序里是怎么知道的答案是急停按钮物理常闭触点串在输入端子上正常时输入点一直为1急停按下变0程序里用常开触点检测这个位从1变0。想清楚这一层才算迈过位逻辑的门槛。1.3 扫描机制和继电器电路最大的区别物理继电器控制电路是“并行”的线圈通电瞬间所有触点同时动作。PLC梯形图是“串行扫描”的CPU从上到下、从左到右逐行执行程序本扫描周期内前面的指令结果会影响后面的指令但后面的指令结果不会影响前面的指令。这带来一个反直觉的现象三段逻辑都写着Q0.0的线圈物理继电器电路会“打架”PLC程序不会直接报错但结果是最后一次扫描到的赋值生效前面写的全被覆盖。这个就是后面讲的“双线圈”问题。扫描机制也解释了为什么两个看似一样的梯形图执行顺序不同、结果完全不同。举一个经典案例A段程序先读M0.0再置位M0.0B段程序先置位M0.0再读M0.0。物理上看都是“M0.0变为1”但A段这次扫描读到的是0B段读到的是1。搞不清这个顺序写程序就会遇到“明明条件满足了怎么没动作”的怪问题。2. 位逻辑不透一切高级功能都是空中楼阁2.1 定时器、计数器、比较指令壳里装的全是位你仔细拆解指令就会发现高级指令不过是位逻辑的封装。定时器TON有几个关键参数使能位EN、预设时间PT、定时器输出位Q。EN是位Q是位内部计时是基于EN这个位持续为1的时间。计数器CTU计数输入是位的上升沿计数输出是位。上升沿检测指令捕捉一个位从0变成1的那一瞬间——什么叫一瞬间上一个扫描周期是0这一个周期是1这就是上升沿本质是一次位的比较。比较指令CMP的结果本身就是位你把它串在梯形图里它是导通的还是不导通的取决于比较结果是真是假。移动指令MOV看起来是在搬数据但搬完后你还是要用“结果位”去驱动输出。PID指令再复杂它的手动/自动切换是位报警输出是位甚至PID的投切判断也是基于位运算。这就是为什么我经常说所有指令都是位逻辑的外包装。你能把程序里每个功能块之间的关系画成位之间的导通和断开才说明你真懂了这段逻辑。2.2 从红绿灯到电梯复杂项目最有含金量的部分全是位看看那些热门项目十字路口红绿灯程序、PLC电梯、四层电梯控制、自动化包装线、大棚灌溉。听起来跨度很大但核心控制逻辑拆开全是位逻辑的组合艺术。红绿灯东西南北方向的信号灯各是一个输出位绿灯亮的持续时长靠定时器累加但切换条件本质是定时器到达位的变化。绿灯→黄灯→红灯的流转就是一组状态位的顺序置位和复位。电梯每一层的呼叫按钮是输入位每一层的到位信号是输入位轿厢运行方向、开门关门是输出位而“电梯现在该响应哪一层的呼叫”这个核心判断拆到底就是对这些位的逻辑优先级运算。包装线各个工位的气缸动作、传感器检测、电机启停全部是“条件位满足→执行位动作→完成位反馈→触发下一步”的循环。大棚灌溉更典型。温湿度传感器经过模拟量转换变成数值但最终启动水泵浇水的判据依然是“当前温度位”和“当前湿度位”在某个范围内的比较结果。你把这个比较结果当作一个位串在启动电路里运行逻辑就和电机起保停没区别了。AI生成PLC代码也一样现在有些工具能自动生成梯形图或结构化文本但你能不能审查它生成的逻辑AI写出的程序里有没有双线圈、漏没漏互锁、自锁回路对不对没有位逻辑功底你连检查都无从下手。2.3 触摸屏、变频器、上位机通讯的尽头全是位热词里被问得最多的那些问题其实也都是位的事。威伦通触摸屏软件里找不到汇川PLC驱动、MCGS和信捷PLC驱动怎么配、SCADA怎么和PLC连接——触摸屏或上位机与PLC通讯后你干的第一件事是什么把PLC里的位比如M0.0启动按钮、M0.1停止按钮、M0.2故障报警映射到画面元件上。画面上的按钮就是写M0.0指示灯就是读Q0.0。驱动配置成功只是一半另一半是你得知道哪些位地址是干什么的。ABB变频器与西门子PLC通过通讯控制时控制字和状态字是两个16位寄存器每一位都有固定含义bit0是启动、bit1是使能、bit2是方向……你在程序里拼这个控制字本质上就是在做位运算。你用C#开发上位机、定时读取PLC数据轮询下来最关心的往往也是那几个M点的状态变化。通讯频率设多少、什么时候该读位、什么时候该读字全看你对位状态变化的敏感度。3. 用“状态思维”一次学透位逻辑3.1 起保停所有回路的地基学电路先学自锁学PLC先学起保停。这个套路看起来简单却是所有逻辑的母体。结构是三段启动按钮并联一个自锁触点串一个停止按钮的常闭触点驱动一个输出线圈。梯形图表述大致是--[I0.0 启动]--[I0.1 停止/常闭]--(Q0.0) | --[Q0.0 自锁]--动作过程按下启动按钮I0.0为1条件导通Q0.0得电松开启动按钮I0.0变0但Q0.0自己的常开触点已经闭合维持了这条通路的导通按下停止按钮I0.1变0常闭触点断开Q0.0失电自锁触点跟着断开整个回路复位。起保停背后的本质是“用输出去维持自己的导通条件”。这个思维可以迁移到所有需要记忆状态的场合任何一个需要“按下按钮动作、再按一次停止”的设备无论多复杂核心都是这个结构。我见过有人拿置位复位指令写起保停效果一样但初学者用传统自锁结构更容易理解状态是如何维持的。3.2 互锁竞争资源的裁决两个输出不能同时得电最常见的就是电机正反转。正转接触器和反转接触器同时吸合会导致短路所以必须互锁。互锁分两层硬件层在接触器上加机械互锁触点程序层把对方的常闭触点串在自己的回路里。程序层的写法很简单正转回路里串反转输出Q0.1的常闭触点反转回路里串正转输出Q0.0的常闭触点。这样正转得电后反转回路必然断开。但有一个细节容易被忽略如果正转和反转的启动按钮被同时按下程序扫描顺序会导致一个周期内两个输出都试图得电吗按位逻辑扫描的规则看谁在前谁先导通后者的互锁触点已经因前者导通而断开所以不会同时得电。但切换方向时必须先停再启这是现场调试天天碰到的规范。互锁思维可以推广到一切“资源竞争”两台设备不能同时启动、两个气缸不能同时伸出、两条传送带不能同时高速运行。位逻辑水平高低就看你会不会在关键输出上加互锁条件。3.3 步进状态位让复杂流程变得清清楚楚流程类控制是PLC应用的大头自动化包装线一个流程可能有十几步全用定时器嵌套和置位复位指令堆程序会乱到没法排错。正确做法是引入“步状态位”——每一步用一个M点表示程序里保证任意时刻最多一个步状态位为1。举个例子三步顺序启动→夹紧→上升→停止等待。辅助继电器定义如下状态步骤状态位触发条件执行输出初始待机M10.0系统上电复位无输出夹紧M10.1M10.0为1且启动按钮按下夹紧气缸Y0上升M10.2M10.1为1且夹紧到位传感器X0为1升降气缸Y1停止等待M10.3M10.2为1且上升到位传感器X1为1保持状态转移逻辑就是把当前步的状态位也串进下一步的触发条件里下一步得电的同时把当前步复位掉。这样程序结构变成一条清晰的“流水线”每一步的条件、输出、反馈一目了然。查故障时打开监控表看哪个步状态位是1就知道设备当前卡在哪一步。这种写法叫顺序控制或状态机适用面极广。十字路口红绿灯就是典型按时间切换状态位多层电梯则是按呼叫条件切换状态位。不管项目看起来多复杂拆成状态位后程序的可读性和可维护性直接上一个台阶。3.4 推荐一套自测训练题目按顺序做完位逻辑就算毕业了光看不练没意义按下面这个顺序练每个都在仿真器里跑通硬件监控单按钮启停一个按钮控制一盏灯按一下亮再按一下灭。这里面要用到上升沿指令本质是位状态变化捕捉。电机正反转带互锁两个按钮启动两个方向程序互锁加硬件互锁都要做。两台电机顺序启动逆序停止第一台启动3秒后第二台才能启动停止时先停第二台再停第一台。这里用定时器产生的位去参与逻辑判断。小车自动往返左限位、右限位、启动、停止四个输入左行右行两个输出。输出条件全是位逻辑组合。十字路口红绿灯四个方向共12个信号灯按时间切换重点练状态位的流转和定时器复位。报警自锁与复位任何报警条件触发后报警输出保持直到按复位按钮。经典的自锁加互锁组合。仿真器选择不限品牌西门子用S7-PLCSIM三菱用GX Works自带的仿真汇川、倍福用Codesys环境。工具不重要重要的是你盯着状态表看每一位的变化过程直到对扫描顺序和位状态流转形成本能反应。4. 现场实战位逻辑的典型翻车现场与排查方法4.1 双线圈程序没报错设备却“乱套”两个线圈都写同一个Q点程序不报错但运行结果诡异输出最后一次扫描到的赋值生效。这是位逻辑里最经典的坑也是最容易在试机时“炸”的问题。排查手段很简单——用交叉引用表。西门子软件里的Cross Reference三菱的软元件注释列表Codesys里的Find All References能把一个位被读在哪里、写在哪里全部列出来。我的习惯是每次写完程序把每个输出点、每个关键M点的“写位置”过一遍出现两次以上就是高危信号。如果在多个地方写同一个Q点确实无法避免比如手动/自动模式共用输出至少要保证同一时刻只有一个分支在写。做法是把模式切换位串进去手动模式位为1时只有手动分支可写自动模式位为1时只有自动分支可写两条分支不要互相“打架”。4.2 按下停止按钮设备不停问题九成在常开常闭现场最常见的事故型故障急停按下没反应。排查思路先分清是物理问题还是逻辑问题。物理侧急停按钮应该用常闭触点用万用表确认断线变位PLC输入点是否闪烁看输入指示灯。逻辑侧程序里急停信号位用的是常开触点还是常闭触点。急停常闭触点接线正常时输入位是1程序里必须用常开触点去“读取这个1”程序逻辑才导通。如果程序里也用了常闭触点就只有断线时导通了——等于把安全逻辑写反了。我给学员的检查口诀是外部急停接常闭程序读取用常开二者配合才能实现“正常时回路闭合、急停时断开输出”。这句口诀带过好几批人了每次现场排查都能直接用。4.3 仿真器启动不了先排环境再查程序里的位逻辑S7-PLCSIM Advanced启动不了、报不出来错误、或者直接提示error11这类问题被问得特别多。我实测下来常见原因依次是软件版本和系统环境不匹配、没有以管理员权限运行、许可证过期、虚拟网卡配置异常。这些都属于环境问题按顺序排查基本能解决。但有一类情况被忽略程序里存在未定义的位地址或未初始化的中间变量仿真器加载时虽然不报错但运行时状态混乱。有人以为是仿真器启动失败其实是梯形图里的M地址超出了CPU型号允许的范围或者把I点写在了输出位置。这时候把程序字地址全部检查一遍尤其是借用的M区地址是否在CPU实际范围内问题很快就能定位。4.4 扫描周期和通讯时序差一个周期结果就不同调程序时经常遇到“监控看着没问题实际运行就出错”。这往往不是逻辑不对是扫描周期导致的时序差。比如一个输出同时被两个条件控制前一个条件在这个扫描周期刚置位了它下一个条件在下个周期又把它复位了监控表看到的是最终状态中间过程一闪而过需要把监控周期缩短或抓波形才能看清。通讯问题也有类似逻辑C#上位机轮询PLC频率太高PLC扫描周期还没刷新数据就被读走读到的是旧值变频器控制字和状态字没有在同一周期读取控制字改了状态字还停留在上一拍。这些的本质都是“位状态在不同时序下的对齐问题”。我的办法是在PLC程序里做一个“数据打包区”把关键位状态定时集中刷新到固定的M区或DB区上位机统一从这里读取时序就稳定多了。4.5 位逻辑排查速查表现象优先排查方向检查要点输出没反应输入位是否变化监控输入映像区看是不是物理信号没进来输出有反应但保持不住自锁回路自锁触点是否并联在启动触点两侧输出乱跳双线圈交叉引用查同一Q点的多个写位置该停的停不下来常开常闭外部按钮和程序触点的反相逻辑是否正确流程卡在中间一步步状态位转移条件里的位状态是否在动作完成后没有复位正反转同时动作互锁程序互锁和硬件互锁是否都做了仿真器启动异常环境与地址版本兼容性、管理员权限、M区地址是否超范围这块内容越是现场老手越有体会很多折腾两小时找不到原因的故障最后发现就是某个位的状态没按预想变化。位逻辑不是要不要学的问题而是你什么时候愿意回头把它彻底搞清楚的问题。我带过的学员里进步最快的往往是愿意从起保停开始把每一个案例都用“状态位条件位输出位”三张表重新梳理一遍的人。建议你也试试这个笨办法拿到任何一个设备先别急着写程序把输入点、输出点、中间需要的记忆状态、每一步的转移条件列成表格等表格画完程序基本就成型了。这个过程练的正是位逻辑的抽象能力。最后再分享一个小习惯写完程序别急着下载开着交叉引用把每个输出点和关键M点的读写位置逐个过一遍双线圈、漏互锁、条件重复这些问题当场就能揪出来比到现场试机再返工省太多时间。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →