ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

汇川PLC位逻辑指令详解:常开常闭与边沿检测实战

汇川PLC位逻辑指令详解:常开常闭与边沿检测实战 在汇川H5U、AM系列这些基于INPROSHOP平台编程的PLC项目里位逻辑指令是最常见的一类指令常开、常闭、上升沿、下降沿几乎每个程序都要用到。但我这些年做现场调试下来发现一个现象很多工程师对这四个指令的理解停留在“梯形图里画法不同”的层面真到现场遇到“按启动没反应”“一上电设备自己跑”“按钮按一次触发了两次”这类问题时往往会卡很久。问题不在指令本身有多难而是对位逻辑指令背后的扫描机制、BOOL值极性、边沿检测原理缺乏系统性的梳理。这篇文章就把INPROSHOP平台下位逻辑四大指令从底层原理到应用场景、再到高频故障排查一次讲透。内容基于汇川H5U、AM系列常用的InoProShopINPROSHOP编程环境覆盖LD梯形图和ST结构化文本两种写法。不管你是刚接触汇川PLC的新手还是已经在做项目的工程师只要你每天在跟开关量打交道这篇文章都值得认真看一遍。1. 位逻辑指令的本质先搞懂扫描周期与BOOL变量1.1 扫描周期所有位逻辑指令的时间基准在INPROSHOP里写的PLC程序并不是像单片机那样“事件触发”执行的而是“循环扫描”执行的。一个完整的扫描周期可以拆成三步读输入、执行程序、刷新输出。PLC上电之后这三个动作会一直循环下去每一步的长度加在一起就是一个扫描周期。这一步非常关键因为常开、常闭、上升沿、下降沿这四个指令本质都是在“某个扫描周期内对BOOL变量的状态做判断”。判断结果只代表“这一个扫描周期”读到的状态不代表下一秒、下一个周期的状态。比如程序里写了常开触点接通的条件CPU执行到这里时如果这个BOOL变量当前是TRUE它就导通如果当前是FALSE它就不导通。至于这个变量下一秒会不会变那是下一个扫描周期才处理的事。在InoProShop里扫描周期是可以配置的。任务配置中可以设置周期任务的循环时间比如H5U主任务可以配1ms、2ms或者更长。程序越复杂、指令越多实际扫描周期就越长。你可以通过在线监控看到程序的实际循环时间。这里有个概念要建立起来所有位逻辑指令的判断基准就是这个循环周期。所谓“上升沿产生一个扫描周期的脉冲”翻译成人话就是“CPU只在一个扫描周期内看到了一次0到1的变化所以只在一个周期里输出TRUE”。这个特性是后面理解边沿检测的基础。1.2 常开和常闭到底在判断什么很多教材喜欢把常开、常闭比喻成物理继电器里的触点这样类比有一定道理但也容易误导人。物理世界里的常开触点是一个实实在在的机械开关没有外力时触点断开按下后触点闭合而PLC程序里的“常开触点”并不是一个真实的开关它是一条判断指令当它读取的BOOL变量为TRUE时导通为FALSE时断开。常闭触点的逻辑则刚好相反当它读取的BOOL变量为FALSE时导通为TRUE时断开。我用表格把这四种情况归纳一下方便对照指令类型变量状态触点状态输出结果常开--| |--TRUE导通左侧信号传递到右侧常开--| |--FALSE断开右侧断开常闭--|/|--TRUE断开右侧断开常闭--|/|--FALSE导通左侧信号传递到右侧所以常开和常闭本质上是同一个BOOL值的两种判断方式。外部接的是常开按钮还是常闭按钮决定的是PLC输入映像区里这个BOOL变量是TRUE还是FALSE程序里用常开触点还是常闭触点决定的是程序怎么去解释这个BOOL值。这两件事要分开理解不能混在一起。1.3 源型漏型输入对BOOL值的影响说到BOOL值现场最容易踩坑的就是输入信号极性问题。汇川PLC的数字量输入端子一般同时支持源型输入和漏型输入。用PNP传感器时传感器输出高电平PLC输入点在无信号时为FALSE、有信号时为TRUE这种情况下程序里按常开逻辑去写基本符合直觉。但用NPN传感器时刚好相反未触发时输入端被内部上拉电阻拉到高电平PLC读到TRUE触发时传感器把输入拉到低电平PLC读到FALSE。这时如果程序还用常开触点判断“有信号”就会彻底反掉。遇到这种情况有几种处理办法一是在硬件接线上选择对应的源型/漏型接法二是在InoProShop的I/O配置里对输入点做信号极性反转三是在程序里把常开改成常闭。我习惯先在I/O配置里解决极性统一让所有输入点都变成“有信号为TRUE、无信号为FALSE”这样程序里的常开常闭逻辑就和物理信号的方向一致后续维护的人不会看晕。2. 常开与常闭指令从选型到安全回路设计2.1 常开指令的典型应用场景常开触点在程序里的用法最直白它表达的逻辑是“当条件满足时允许信号通过”。启动按钮、限位开关、光电传感器、温度开关等大多数传感器信号在默认情况下都用常开逻辑去处理。比如一个启动按钮接到PLC输入点X0程序里写常开触点按下按钮时X0变TRUE程序里的常开触点导通后面的启动逻辑就执行。在ST语言里常开逻辑的写法更直接就是使用IF语句判断IF bStartBtn THEN bRun : TRUE; END_IF;这里bStartBtn就是一个BOOL变量当它是TRUE时执行括号内的赋值语句。梯形图和ST表达的逻辑完全一致只是表现形式不同。对于初学INPROSHOP的人我建议至少熟悉LD和ST两种语言LD适合看回路走向ST适合处理复杂数学逻辑和功能块调用。常开触点有一个容易被忽略的特点它只关心“当前这个周期”变量是不是TRUE不关心变量是怎么变成TRUE的。所以如果你把一个常开触点接到一个“只在1个扫描周期内为TRUE”的变量上那它就只在一瞬间导通。这种特性用好了就变成了边沿应用的基础。2.2 常闭指令为什么急停回路必须用常闭常闭触点最典型的应用场景就是急停、安全门、热继电器、光栅等安全类信号。很多人一开始不理解为什么急停按钮不接常开触点按下急停时触点闭合PLC检测到TRUE程序停机逻辑上不是也很顺吗问题出在断线故障上。假如急停按钮用的是常开触点按钮没按下时PLC输入点是FALSE。如果这时候急停回路的导线断了或者传感器接头松了PLC输入端依然是FALSE。程序无法区分“急停没按下”和“急停回路断线”这两种状态。结果就是急停按钮明明已经拍下去了设备还在继续运行这是非常危险的情况。常闭触点解决了这个问题。急停回路里串接物理常闭触点正常状态下回路闭合PLC输入点读到TRUE按下急停触点断开PLC读到FALSE程序执行停机。如果线路断了PLC同样读到FALSE和按下急停等效。这样就把断线故障纳入了安全逻辑的判断范围。用ST语言表达常闭逻辑就是取反判断IF NOT bEStop THEN bSafeOutput : FALSE; END_IF;这里bEStop在正常状态是TRUENOT之后是FALSE按下急停后bEStop变FALSENOT之后是TRUE执行停机。类似的逻辑在程序里常写成“安全链”所有安全条件用常闭串在一起任何一个条件断开输出就断开。强调一句这种用普通PLC输入点做安全链的方式只能算基本故障安全不能替代安全继电器、安全PLC等专业安全控制方案。真正需要达到SIL等级的安全回路一定要按对应标准去设计不要拿普通PLC凑合。2.3 传感器接线与常开/常闭怎么匹配现场最常见的传感器有两大类NPN型和PNP型。而且现在很多传感器本身带有常开/常闭切换拨码这就让问题变得更复杂。我经常在调试现场看到程序里写的是常开结果传感器拨码拨到了常闭导致信号完全反相。下面这个表是我在实际项目里整理出来的匹配关系可以存下来做参考传感器类型信号极性触发状态PLC读到未触发状态PLC读到程序推荐写法PNP常开高电平有效TRUEFALSE常开PNP常闭低电平有效FALSETRUE常闭NPN常开低电平有效FALSETRUE常闭NPN常闭高电平有效TRUEFALSE常开注意这里推荐的写法是以“程序能正确表达外部信号的物理状态”为前提的。比如NPN常开传感器未触发时PLC读到TRUE如果用常开触点程序认为“一直有信号”显然不对改用常闭触点后未触发时触点断开触发时触点导通逻辑就正确了。还有一种更省心的做法在InoProShop的I/O配置里把输入点配置成“取反”让外部信号统一成“有信号为TRUE”。这样程序里就可以全部按常开逻辑写传感器是NPN还是PNP就不需要关心了。不过这种做法的代价是程序里的注释和图纸要对齐否则后面维护的人会抓狂。2.4 什么时候用常开什么时候用常闭这个问题不是拍脑袋定的我总结了一套经验正常运行条件下需要保持TRUE的信号比如急停、安全门、故障继电器、光栅全部用常闭逻辑正常状态下是FALSE触发时才变TRUE的信号比如启动按钮、限位到位、产品检测、料位检测全部用常开逻辑。用“正常状态”来区分比用“按钮类型”来区分清晰得多。急停按钮物理上是常闭触点正常状态PLC读到TRUE启动按钮物理上是常开触点正常状态PLC读到FALSE。程序里常闭常开随之匹配信号语义就非常明确TRUE代表正常、闭合、运行许可FALSE代表异常、断开、停机请求。这种“TRUE为正常FALSE为异常”的设计思路在PLC项目里非常通用。它最大的好处是便于报警诊断一旦输入点变FALSE直接可以判断为某种异常状态。程序里写一个诊断块把所有安全链信号汇总哪个变FALSE就报哪条故障排查效率会高很多。3. 上升沿与下降沿一个扫描周期的“脉冲魔法”3.1 边沿的本质检测变化而不是状态常开、常闭关注的是“变量现在是什么状态”而上升沿、下降沿关注的是“变量从上一个扫描周期到这一个扫描周期状态发生了什么变化”。这是两类完全不同的判断维度。上升沿的本质是检测BOOL变量从FALSE变为TRUE的这个瞬间。在这个瞬间所在的扫描周期里上升沿检测会输出一个TRUE。如果变量持续保持TRUE上升沿不会再次输出TRUE因为从“上一个周期”看过来它没有发生新的0到1跳变。下降沿同理检测的是BOOL变量从TRUE变为FALSE的瞬间输出一个扫描周期的TRUE。用一个生活化的类比常开触点像一个人一直举着手举手这个状态是持续的上升沿像这个人拍了一下手“拍手”这个动作只发生在瞬间。你要数拍手次数就不能一直盯着他举手的状态看得检测“手从分开到合拢”的那一下变化。PLC里的上升沿检测干的就是这件事。为什么PLC需要边沿检测因为很多动作只需要执行一次。比如按钮按一下计数器加1按钮按一下设备启动/停止切换一次配方写一次。如果不用边沿而用常开触点去判断按钮只要按钮一直按着程序每个扫描周期都会执行一次计数或切换结果就是“按一下启动了好几次”设备完全失控。3.2 INPROSHOP里怎么用R_TRIG与F_TRIG在INPROSHOP里边沿检测有两种实现方式。第一种是用LD语言里的边沿触点上升沿触点画成--|P|--下降沿触点画成--|N|--。第二种是用IEC标准的功能块R_TRIG和F_TRIG。R_TRIG是上升沿触发器它有一个输入CLK和一个输出Q。当CLK从FALSE变为TRUE时Q输出一个扫描周期的TRUE之后Q恢复FALSE直到下一次CLK再次发生FALSE到TRUE的变化。F_TRIG相反CLK从TRUE变为FALSE时Q输出一个扫描周期的TRUE。在ST语言里调用R_TRIG和F_TRIG功能块要先声明实例然后在执行段调用VAR R_TRIG_0 : R_TRIG; F_TRIG_0 : F_TRIG; bStartBtn : BOOL; bStartRise : BOOL; bStartFall : BOOL; END_VAR R_TRIG_0(CLK : bStartBtn, Q bStartRise); F_TRIG_0(CLK : bStartBtn, Q bStartFall);调用完之后bStartRise在bStartBtn从FALSE变TRUE的那个扫描周期为TRUE其他时间都是FALSEbStartFall在bStartBtn从TRUE变FALSE的那个扫描周期为TRUE。如果你确实想搞清楚边沿检测的底层实现其实就是一个“历史状态比较器”每个扫描周期程序把当前BOOL值保存到一个存储位里下一个周期把新读到的值和存储位里的历史值比较。如果历史值是FALSE、当前值是TRUE说明发生了上升沿如果历史值是TRUE、当前值是FALSE说明发生了下降沿。比较完成后把当前值存回存储位供下一个周期使用。3.3 上升沿丢失的真相滤波、扫描周期与信号传输现场调试时最头疼的问题之一就是“明明传感器闪了一下程序里就是没有动作”。这种现象通常被称为“上升沿丢失”。我总结下来原因主要有三个输入滤波时间太长、PLC扫描周期错过、信号传输边沿变缓。第一个原因最常见。PLC数字量输入模块通常带有输入滤波功能目的是滤除触点抖动和电磁干扰。但滤波时间如果设置太长比如默认的几毫秒一个脉宽很短的传感器信号可能根本达不到滤波要求直接被滤掉了。汇川PLC的输入滤波时间在一些型号上是可配置的从0.01ms到几十毫秒都有。如果现场有高速的短脉冲信号需要捕捉可以把对应输入点的滤波时间调小或者把信号接到高速输入通道上。第二个原因是扫描周期。如果输入信号脉宽小于一个扫描周期PLC很可能在两次扫描之间错过了这个脉冲。比如扫描周期是2ms但传感器信号脉宽只有0.5msCPU还没有执行到读取输入那一步信号就消失了。这种问题的本质是“信号持续时间小于程序采样周期”解决办法要么缩短扫描周期要么用硬件中断或高速计数器HSC去捕捉。第三个原因与信号传输有关。信号从传感器传输到PLC输入端子线缆越长分布电容越大上升沿会变缓也就是“边沿不陡”。如果边沿太缓会导致信号在输入阈值附近徘徊PLC无法准确判断电平状态。对于长距离且要求高速响应的信号我建议使用屏蔽双绞线并且尽量缩短传输距离。工程上有一个经验24V高速开关信号传输距离超过几十米之后就要谨慎评估边沿失真问题必要时加信号中继器或者改用通信方式传输。3.4 边沿检测的典型应用场景边沿检测最经典的场景是计数。比如生产线上数瓶子光电传感器每检测到一个瓶子输出一个脉冲。PLC程序里用上升沿检测这个脉冲每次脉冲到来就让计数器加1。如果不用上升沿只要瓶子一直在传感器前停留计数器就会一直“加加加”这个逻辑就完全不可用了。边沿检测的第二个典型应用是“只在启动时执行一次的动作”。比如设备运行时需要在第一个扫描周期里初始化一些参数、把气缸复位到原点、把某些输出置为初始值。这种逻辑用上升沿非常方便检测到“运行”信号从FALSE变TRUE的瞬间执行初始化子程序之后就不再执行。边沿检测的第三个典型应用是单按钮启停。一个按钮按一下启动再按一下停止。这个功能如果不用边沿检测几乎无法实现因为按钮保持按住的每一毫秒程序里的常开触点都是畅通的输出状态会不停翻转。我后面在第四节会给出完整的代码示例。4. 四大指令组合实战从继电器电路到PLC程序4.1 经典启保停常开启动、常闭停止、自保持启保停电路是位逻辑指令最经典的组合几乎所有工控项目里都有它的影子。它的逻辑是按下启动按钮设备运行按下停止按钮设备停止如果设备正在运行即使松开启动按钮设备也要继续保持运行这就是“自保持”。用ST语言写的启保停逻辑核心代码非常简洁bRun : (bStartBtn OR bRun) AND NOT bStopBtn AND NOT bEStop;这行代码包含了四个关键因素bStartBtn常开启动条件、bRun输出自保持、bStopBtn常闭停止条件、bEStop常闭急停条件。执行顺序是只要按过启动按钮bRun变成TRUE并保持按停止按钮bRun变成FALSE急停断开bRun立即变成FALSE。在梯形图里这个逻辑会画成一条回路启动按钮常开和输出常开并联然后与停止按钮常闭、急停常闭串联最后驱动输出线圈。学过继电器电路的人看到这个结构会很亲切因为它就是从物理接触器电路翻译过来的。但PLC和继电器有一个本质区别继电器电路是靠物理电流流动实现自保持的PLC是靠程序执行和内存状态实现自保持的。所以PLC里可以轻松地加上各种互锁、延时、软保护不需要增加任何物理器件。我在这里强调一个工程习惯启保停逻辑里的停止条件包括停止按钮、急停、过载保护、限位保护全部写成常闭逻辑。这样写的好处是整个控制回路的“安全属性”是一致的——任意一个条件异常断开设备就停机而且断线故障也能被识别。不要一会儿用常开一会儿用常闭后续维护的人会很痛苦。4.2 单按钮启停上升沿加取反实现单按钮启停是边沿检测的经典应用。它的要求是同一个按钮第一次按下设备启动并保持运行第二次按下设备停止。这个功能在面板按钮不够或者需要简化操作时非常实用。实现思路是用上升沿检测按钮信号每次检测到上升沿就把输出状态取反。这个取反操作在ST里可以用一个布尔类型的异或来实现VAR bToggleBtn : BOOL; bRun : BOOL; R_TRIG_0 : R_TRIG; END_VAR R_TRIG_0(CLK : bToggleBtn, Q bRise); IF bRise THEN bRun : NOT bRun; END_IF;这段程序的含义是只有检测到按钮从FALSE变TRUE的那一瞬间才执行输出取反如果按钮一直按着bRise在后续扫描周期都是FALSEbRun不会反复翻转。梯形图版本也很常见做法是把上升沿触点放在回路里回路输出接到一个取反功能块再送到输出线圈。单按钮启停有一个必须注意的坑机械按钮的抖动。物理按钮在按下和松开的瞬间触点会因为机械回弹产生多次通断如果PLC输入滤波不够一次按键可能被程序看到多次上升沿导致设备启停状态错乱。解决办法有几种一是利用PLC输入滤波功能把抖动滤掉二是在程序里做按钮去抖比如检测到上升沿后延时几毫秒再判断一次三是使用带有硬件去抖的按钮。触摸屏上的虚拟按钮一般没有这个问题因为触摸屏通讯过来的信号本身经过了屏幕内部扫描。4.3 互锁逻辑和常闭在关键回路里的价值在多电机、正反转、气缸前伸后退等场景里互锁逻辑必不可少。互锁的作用是保证两个不允许同时成立的条件绝不会同时成立。比如电机正转和反转如果两个方向同时有输出机械结构就会损坏电气回路也会短路。用位逻辑写电机正反转互锁最经典的结构是bForward : (bFwdBtn OR bForward) AND NOT bReverse AND NOT bFault; bReverse : (bRevBtn OR bReverse) AND NOT bForward AND NOT bFault;这里的关键在于正转自保持回路里串联了“反转输出取反”的常闭条件反转自保持回路里串联了“正转输出取反”的常闭条件。这样即使操作人员同时按下正转按钮和反转按钮程序也只会让其中一个输出生效另一个条件被常闭触点硬性切断。在继电器时代这种互锁靠接触器辅助触点和机械联锁实现在PLC里常闭触点成了最廉价的软互锁工具。需要注意的是PLC内部的软互锁并不能代替硬件互锁尤其是在大功率电机控制场景电机接触器本身的电气互锁和机械互锁仍然必须保留。PLC软互锁解决的是“程序逻辑层面的禁止”硬件互锁解决的是“物理触点层面的禁止”两者是叠加关系不是替代关系。5. 实操高频问题与排查实录5.1 常开常闭选错症状、判断与快速纠正现场调试时常开常闭选错的症状非常典型。我列了一个排查对照表遇到这类问题直接对照排查故障现象可能原因排查方法快速处理按下启动按钮没反应程序里用了常开但外部接的是常闭信号在线监控输入点看按下前后PLC读到TRUE还是FALSE把程序里的常开改成常闭或在I/O配置里取反一上电设备自己运行停止条件用了常开但外部急停接的是常闭在线监控停止信号确认未动作时PLC读到FALSE把停止条件改成常闭逻辑停止按钮按了不停机停止信号的极性或逻辑取反搞错监控停止按钮输入点按下时是否已经变TRUE检查程序里停止逻辑是否串在自保持回路里传感器信号反相NPN/PNP选型或拨码不对看传感器说明书确认输出电平逻辑调整传感器拨码或在程序里取反排查这类问题的核心手法只有一个在线监控。把PLC切到在线模式打开梯形图监控界面或者用ST变量监控表观察你怀疑的那个BOOL变量实时状态然后手动触发外部的按钮、传感器看看变量状态是否按照预期翻转。如果变量的状态变化和外部动作对不上问题大概率出在硬件极性如果变量状态正确但程序逻辑不对问题就在程序写的常开常闭上。这个排查思路可以说覆盖了九成以上的位逻辑故障。5.2 双线圈输出的坑为什么输出不受控制新手写梯形图最容易犯的一个错误是同一个BOOL变量在程序里被赋值了多次。比如在程序的前半段写了一个输出线圈又在程序的后半段写了另一个同名输出线圈。PLC是按扫描顺序从上到下执行程序的后面的赋值会覆盖前面的赋值所以最终输出状态取决于最后一句的执行结果。这就是“双线圈输出”的由来。双线圈问题现场表现很迷惑有时候设备能动作有时候不能或者逻辑控制板上的灯状态和实际输出不一致。原因就是同一个变量在不同位置反复赋值前一个逻辑计算结果被后一个逻辑覆盖了。解决办法是在程序结构上做分层先用中间变量计算所有逻辑条件最后用一个统一的输出段把结果赋值给实际输出。VAR bLocalStart : BOOL; bLocalStop : BOOL; bRun : BOOL; bOutput : BOOL; END_VAR bLocalStart : bStartBtn AND NOT bBusy; bLocalStop : bStopBtn OR bEStop; bRun : (bLocalStart OR bRun) AND NOT bLocalStop; bOutput : bRun AND NOT bFault;这样bOutput在整个程序里只出现一次赋值所有对运行状态的计算都集中在bRun等中间变量上就不会出现互相覆盖的问题。5.3 与触摸屏联动时边沿触发的坑现代项目里PLC和触摸屏几乎是标配组合而触摸屏按钮和PLC程序之间的位逻辑配合是一个暗坑聚集地。很多人发现触摸屏上做一个启动按钮PLC采用上升沿检测按钮信号结果有时候按一下触发两次有时候又触发不了非常迷惑。问题通常出在触摸屏按钮类型上。很多触摸屏组态软件的按钮有两种类型置位/复位按钮Set/Reset和瞬时按钮Momentary。置位/复位按钮按下时输出TRUE并保持再次按下时输出FALSE。如果你让PLC用上升沿检测这种按钮第一次按下会触发一次但按钮保持TRUE期间PLC端不会重复触发当你再按一次按钮变FALSE再变TRUE时又会触发一次。看起来似乎没问题但如果触摸屏和PLC通信出现中间态、刷新周期不一致或者掉线重连导致变量状态初始化就可能多出一次甚至多次上升沿导致后面逻辑错乱。我推荐的做法是触摸屏上的启动、停止按钮一律用瞬时按钮按下时为TRUE、松开时为FALSEPLC程序端用上升沿去检测这个TRUE的跳变然后去做置位或复位。这样每按一次只有一次0到1的变化PLC端必然只检测到一个上升沿逻辑是最干净的。还有个细节要提醒触摸屏和PLC的通信刷新通常有几十到几百毫秒的周期如果PLC扫描周期很快按钮信号在通信缓冲区里可能会被PLC连续几个扫描周期读到同一个TRUE值但因为它是持续保持的不是脉冲所以上升沿只会在第一次读到TRUE时触发一次不会重复触发。这反而是瞬时按钮加边沿检测方案可靠的原因。5.4 与变频器和伺服联动时的信号选择在汇川整体方案里H5U或AM系列PLC经常要和MD500、MD800变频器或者SV660伺服驱动器配合。位逻辑指令在这些场景里主要体现在启停信号的处理上。变频器的数字量输入端子通常可以配置成电平模式或脉冲模式。电平模式要求PLC持续给出一个TRUE或FALSE信号变频器根据电平状态决定运行或停止脉冲模式则要求PLC给出一个边沿变频器检测到上升沿后启动、检测到下降沿后停止。多数变频器出厂默认是电平模式所以PLC程序里只需要用置位/复位逻辑去控制一个BOOL变量然后把变量直接映射到输出点不需要用边沿也不要用脉冲式“点动一下”的方式去给变频器发运行指令。否则变频器只会动作一瞬间达不到持续运行的效果。伺服驱动器的使能信号也一样应当用持续电平去控制“使能/不使能”而不是用上升沿去触发一个“使能动作”。PLC程序里伺服使能通常由逻辑条件综合决定包括急停、限位、报警、模式切换等最后统一输出到一个BOOL变量。这个变量在程序里最好是单点输出不要多个地方赋值否则伺服使能状态会忽有忽无。如果是通过EtherCAT总线控制伺服情况会复杂一些因为总线通信的刷新周期和PLC扫描周期可能存在偏移。这个时候位逻辑的判断依旧遵循扫描周期原则但总线上读取到的状态反馈、写入的控制字本身受总线周期的限制。我在做这类项目时会额外在PLC程序里对总线的控制生效标志做一个延迟判断确保写入的控制字被驱动器真正接收后再去做下一步动作避免“PLC以为写了驱动器其实没收到”的尴尬情况。6. 现场调试的个人经验与建议做汇川PLC项目这么多年我越来越觉得位逻辑指令虽然简单却是整个控制程序的“地基”。地基没打好后面功能越堆越多问题就越难查。我自己的习惯是在动手写程序之前先画一张信号类型表把每一个输入信号、输出信号、内部中间变量的名称、数据类型、极性、正常状态、触发条件全部列出来。信号表写清楚之后程序里的常开常闭、上升沿下降沿该怎么用基本上就已经定了写程序只是把表格翻译成梯形图或ST代码而已。最后再分享一个小技巧在INPROSHOP里建立自己的位逻辑标准功能块把启保停、单按钮启停、报警置位复位、安全链汇聚这些最常用的逻辑做成带输入输出接口的功能块保存成库文件。以后做新项目直接拖出来用参数改一改就行。这样做的好处不仅仅是省时间更重要的是同一套逻辑反复使用稳定性会越来越高踩过的坑也不会再踩第二次。位逻辑这四个指令本身不难真正难的是把它们用出规范、用出习惯让每一个后来接手程序的工程师都能一眼看懂。
返回列表