网站首页 > 知识剖析 正文
大家好呀!今儿个通过一个小例子跟新手兄弟们唠唠使用置位复位指令时得留意的两个地方。置位、复位指令之所以争议不断,就是因为它们对高手来说是宝贝,对新手来讲却是惹麻烦的源头。要是用得好,能让程序变得又简洁又清爽;要是用不好,出了问题可就很难找原因啦。接下来咱们瞅瞅这个演示程序。
比如说有个设备,它有好几个功能流程。流程 A 不咋常用,流程 B 和流程 C 倒是常用得很。流程 A 的情况大概是这样,这里为了给您演示,就写了个简单的,就是电机启动一会儿,停一会儿,再启动一会儿,又停一会儿,用动作步写差不多就是这样。
要是说,操作人员启动了流程 A,运行了一阵子之后,突然中途把流程 A 给停了,大多数时候没啥问题,就算电机正在运行,也能通过手动模式给它关掉。
可要是正巧在关电机的信号发出去之后,这时候电机的运行反馈信号还没回来,您想想会咋样?
会让这个电机停止命令信号一直处于置位状态。因为流程 A 不咋常用,之后很长一段时间,操作人员会去用流程 B 和流程 C。等他过了很长时间再回来用流程 A 的时候,就会发现,电机好好的却启动不了啦,手动启动倒是正常的,也没报啥故障。这时候您就会接到电话,您问他咋操作的,他就说一直都好好的,不知道为啥就启动不了。等您到现场连上 PLC,才会发现电机停止命令信号竟然是置位的。要是您是新手,很难短时间内就排查出这个问题。而且您把 PLC 重新上电后,就会恢复正常,您操作半天也不一定能把这个现象再弄出来,因为出现这个问题的随机性太小啦。
那咋解决这个问题呢?用置位和复位指令的时候,复位特别关键,所以得考虑各种情况下的复位。比如说这种情况,可以在所选模式离开流程 A 的时候,把所有信号都复位,或者在流程 A 开始的时候,第一步就把所有信号复位。用置位和复位还有个问题,像刚刚这种简单的程序还好说,如果设备工艺特别复杂,功能要做得特别灵活,比如说流程 A 是个主流程,运行到中间某个工序的时候,得根据情况插进子流程 B 或者子流程 C,而且同一个设备的控制,可能会同时出现在这几个流程里。
因为给信号置位复位的地方特别多,工艺又特别复杂,有些问题可能得在现场运行一段时间,正好触发了一些临界条件才会出现。但这时候您到现场连上 PLC 后,会发现电机的控制信号在不该置位的时候竟然置位了。因为置位、复位的地方太多,实际项目里,还会有各种各样的条件限制,特别难排查。这也是好多人,尤其是维护人员不喜欢置位复位的原因。那碰到这种问题,也就是程序在多个不同的功能部分对同一个信号置位复位的时候,可以把控制信号从 Bool 类型改成字类型,这样在每个置位复位的地方,用这个字的不同位,比如流程 A 改成位 0,下一个置位复位的地方改成位 1,流程 B 里面改成位 4,依此类推。
然后在电机启动块这儿,把控制信号字和 0 比一比,再把结果赋值给电机启动。这么改完之后,再碰到类似的问题,只要瞅瞅这个控制信号字是哪个位被置位了,就能知道是程序里的哪个部分导致了这个问题,能很轻松地定位到问题所在。
PLC程序中使用Set置位、Reset复位指令容易引发问题的原因及...
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=507218&fromuid=17
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
猜你喜欢
- 2025-04-29 typescript - webpack打包警告'mode' option has not been set
- 2025-04-29 通过番计时器实例学习 React 生命周期函数 componentDidMount
- 2025-04-29 Vue3 入门指南: 深入理解 Setup 函数
- 2025-04-29 几句代码写个飞快的下载软件,轻快版 aria2 支持 UPnP,独立 EXE 程序
- 2025-04-29 我终于搞懂了async/await、promise和setTimeout的执行顺序
- 2025-04-29 动手动脑学Kubernetes系列之StatefulSet
- 2025-04-29 setTimeout、Promise、Async/await的区别
- 2025-04-29 setTimeout 出大 bug?为什么需要 setBigTimeout?
- 2025-04-29 JSP request.setAttribute()详解及实例
- 2025-04-29 JavaScript 中让 setInterval 立即执行的小技巧
- 04-29php开发者composer使用看这一篇就够了
- 04-29引用和变量声明在不同语言中的实作
- 04-29PHP 没你想的那么差
- 04-29Ubuntu linux 上的 Nginx 和 Php 安装
- 04-29CentOS下通过yum搭建lnmp(单版本PHP)
- 04-29为什么 PHP8 是个高性能版本
- 04-29PHP8函数包含文件-PHP8知识详解
- 04-29使用无参数函数进行命令执行
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)