PLC 基础课 第13讲 置位、复位、翻转、保持:什么时候该用 SET/RST,什么时候不能乱用

浏览量:3 次 发布时间:2026-04-14 20:52 作者:明扬工控商城 下载docx

最近更新:PLC 基础课 第11讲 数学运算与工程量换算:加减乘除、比例缩放、显示修正怎么做



前面第12讲,我们把上升沿、下降沿、单次触发讲透了。
那一讲解决的是一个“触发方式”的问题:

一个条件成立以后,到底是持续执行,还是只在变化的那一瞬间执行一次。

但 PLC 程序写到现场项目里,真正让很多初学者越写越乱、越改越怕的,往往还不是“触发一次还是多次”这个问题,而是另一个更容易把程序写散的点:

为什么这个状态明明条件没了,它还保持着
为什么这个输出明明我已经不想让它动作了,它还没复位
为什么一个按钮按一下,设备就一直处在那个状态里
为什么有些程序不用按钮一直按着,也能一直运行
为什么我加了一个 SET 以后,程序一下变得特别难追
为什么有时候程序不是不运行,而是“记住了上一次的状态”,结果越调越乱

你会发现,这些问题背后,其实都指向一个核心:

PLC 里有些状态,是需要被“记住”的。

而用来“记住状态”的最常见手段,就是:

置位
复位
翻转
保持

这一讲,我们就把这些特别关键、又特别容易被误用的东西,彻底讲明白。

如果说第12讲解决的是“这个动作要不要只触发一下”,
那么这一讲解决的就是:

这个状态一旦成立,要不要继续记住,谁来让它结束。

这一步非常关键。
因为很多现场控制,本质上都不是“按钮按着才运行”,
而是“按一下启动,系统自己保持运行;按一下停止,系统才解除”。

这背后就是保持逻辑。

但也正因为“保持”非常好用,所以初学者特别容易滥用。
一旦 SET/RST 乱用,程序会出现一个典型现象:

能跑,但不好懂
能改,但容易乱
能暂时解决问题,但越往后越难维护

所以这一讲不只是教你“怎么用 SET/RST”,
更重要的是教你:

什么时候该用,什么时候不要乱用。

一 先把最根上的问题讲清楚:为什么 PLC 里需要“保持”

先看一个最简单的启动停止例子。

假设现场有一个电机。
你希望实现这样的效果:

按一下启动按钮,电机开始运行
手松开后,电机继续运行
按一下停止按钮,电机停止

你会发现,这个要求本身就说明了一件事:

电机运行这个状态,不可能只依赖“启动按钮当前有没有按着”。
因为手松开后按钮已经恢复了,但电机还要继续转。

那怎么办?

就必须让 PLC 在内部“记住”这样一个状态:

我已经接到启动命令了,所以我要继续保持运行

直到什么时候结束?

直到停止按钮来了,或者故障来了,或者联锁断了,才解除这个状态。

这就叫保持。

所以你要先真正理解一点:

保持不是为了炫技,而是很多控制逻辑天然就需要“记忆”。

比如:

启动后持续运行
故障出现后保持报警
步骤进入后保持当前步状态
自动模式切换后保持在自动
手动模式切换后保持在手动
某个动作完成后保持“完成标志”
某个联锁解除前一直保持停机状态

这些都不是“瞬间存在”的东西,
它们都需要某种形式的状态记忆。

二 什么叫置位,什么叫复位

先把最基础的概念讲清楚。

1 置位

置位可以简单理解成:

把某个状态强行设成 1,并让它保持。

也就是说,哪怕原来的触发条件已经过去了,
只要你还没有专门去取消它,这个状态就继续保持为 1。

比如:

按一下启动按钮,把 M10 置位
那 M10 就会一直是 1
直到后面有一个条件把它复位掉

所以置位的核心不是“让它变成 1”那么简单,
而是“让它变成 1 以后继续保持”。

2 复位

复位可以简单理解成:

把某个已经保持着的状态强行清成 0。

也就是说,前面置位留下来的“记忆状态”,
通过复位去取消。

比如:

按一下停止按钮,把 M10 复位
那 M10 就从 1 变成 0
系统就知道这个保持状态结束了

3 一组最直观的理解

置位像是:

打开一个记忆开关,并让它记住“开着”

复位像是:

把这个记忆开关关掉,并让它记住“关着”

你如果这样理解,后面很多保持逻辑就不难了。

三 什么叫自保持,为什么它是 PLC 里最经典的保持逻辑

PLC 入门时最经典的一个逻辑,就是电机启动停止的自保持。

为什么叫自保持?

因为一个状态一旦成立后,它会“借助自己的状态”继续维持自己。

最常见的表现就是:

启动按钮只按一下
运行状态自己保持
直到停止条件出现,才解除

这类逻辑特别经典,因为它特别符合现场设备的习惯。

你按一下启动,设备自己运行。
你按一下停止,设备停。
而不是要求操作员一直按着启动按钮不放。

所以从控制思想上说,自保持是非常自然的。

四 自保持不一定都要用 SET/RST,但 SET/RST 是最常见的方法之一

这个地方一定要讲清楚。

很多初学者一听到“保持”,就立刻想到 SET/RST。
其实保持逻辑有不同写法,
但 SET/RST 是最直接、最常见、也最容易理解的一种。

比如一个运行命令 M10。

你可以这样想:

启动条件来了,把 M10 置位
停止条件来了,把 M10 复位

然后真正的电机输出 Y0,不直接跟启动按钮,而是跟 M10 走。

这样手一松,M10 还在,所以 Y0 还继续运行。
等停止条件来了,把 M10 清掉,Y0 才停。

这就是非常典型的 SET/RST 应用方式。

五 什么叫翻转,什么时候会用到

除了置位和复位,还有一个常见思路叫翻转。

翻转可以理解成:

原来是 0,就变成 1;原来是 1,就变成 0。

也就是按一下,状态切一次。

这个在某些场景里会用到,比如:

一个按钮实现开和关切换
一个模式在手动和自动之间切换
一个测试开关按一下开启,再按一下关闭
某些界面按钮做“切换式控制”

听起来很方便,但我要先提前说一句:

翻转虽然好用,但在工程现场要慎用。

因为翻转会让状态依赖“上一次是什么”,
如果又碰上断电恢复、误触发、按钮抖动、多人调试、程序改动,
很容易让设备当前状态不够直观。

所以翻转不是不能用,
而是要明确它适合哪些简单、非关键、逻辑清楚的场景。
对于重要设备运行状态,很多时候“明确置位”“明确复位”比“翻转”更稳妥。

这一点后面我们会详细讲。

六 什么叫保持,不只是 SET/RST,很多状态本质上都是“被保存下来”的

保持这个词,比 SET/RST 的范围更大一些。

只要某个状态不是随着原始条件消失就立刻消失,
而是会继续留下来,那本质上都叫保持。

例如:

故障报警锁存
急停触发后的停机保持
自动运行命令保持
产品合格判定保持到搬运结束
某步完成标志保持到下一步确认
参数修改后等待保存状态
报警蜂鸣器消音状态保持
维修模式开启状态保持

这些背后,都是“把状态记住”。

所以你可以把这一讲理解成是在学一种特别重要的 PLC 思维:

有些信号是实时的,有些状态是要记住的。

实时信号像按钮、开关、传感器。
记忆状态像运行命令、故障锁存、模式标志、步骤状态。

这两类东西如果混着写,程序就很容易乱。

七 为什么 SET/RST 那么好用,但又特别容易被滥用

先说它为什么好用。

因为很多时候你一看需求,就是这种味道:

按一下开始
保持
某条件出现后结束

或者:

故障一来
先记住
直到确认后再清掉

或者:

进入某个步骤
先把这个步骤状态记住
等下一步成立时再取消

这些都很适合 SET/RST。

所以 SET/RST 的优点很明显:

逻辑直观
适合记忆型状态
对一次命令转持续状态很方便
在故障锁存、运行命令、模式切换中很常见

但问题在于,它太方便了。
方便到很多初学者一遇到问题就想:

不如 SET 一个状态吧
不如再加一个 RST 吧
不如这里也保持一下吧

结果程序里到处都是:

SET M10
SET M11
SET M12
RST M10
RST M11
RST M12

写到后面会发生什么?

每个状态是谁置位的、谁复位的、什么时候该清、什么时候还没清,越来越难追。
最后调试时最怕听到一句话:

“这个位怎么一直亮着?”

因为它已经不是一个简单的实时逻辑,而是一个被历史条件留下来的记忆状态。
你不找到它的置位来源和复位来源,就很难看清。

所以一定要记住一句话:

SET/RST 很有用,但它不是用得越多越高级。

好的程序,不是 SET 越多越好,
而是该保持的才保持,不该保持的别乱保持。

八 最经典的应用一:启动停止回路为什么适合用置位复位

咱们用最典型的电机场景来讲。

现场要求

按下启动按钮后,电机开始运行
松开按钮后继续运行
按下停止按钮后,电机停止
如果故障出现,也要停机
故障消除后,不能自动再启动,必须重新按启动

逻辑拆解

这里最适合引入一个内部运行命令,比如 M10。

当启动按钮满足条件时,置位 M10
当停止按钮按下,或故障出现时,复位 M10
然后用 M10 去驱动电机输出 Y0

为什么这种写法很合适?

因为“电机运行命令”本身就是一个典型的需要保持的状态。
它不是按钮状态,而是系统状态。

按钮只是告诉 PLC:

我想让你开始记住“我要运行”这件事

停止按钮或者故障,则告诉 PLC:

把这个运行记忆取消掉

这时候程序层次就很清楚:

X0 启动按钮
X1 停止按钮
X2 故障输入
M10 运行命令
Y0 电机输出

这里 M10 就是一个典型的保持状态。

九 最经典的应用二:故障报警为什么经常要锁存

故障逻辑里,保持更常见。

很多现场故障不是说“信号一消失就当没事了”。
尤其是某些严重故障、瞬时故障、需要人工确认的故障,都常常要锁存。

例如:

热继电器动作
伺服报警
气压异常
门开保护
超温保护
液位过低
急停触发

为什么要锁存?

因为如果故障信号只是瞬间来了又没了,
PLC 立刻就把报警清掉,
操作员可能根本不知道刚才出过问题。
更严重的是,有些设备可能又自己恢复运行,带来风险。

所以工程上经常会这样做:

故障一旦成立,先把“故障锁存位”置位
这个锁存位会继续保持
哪怕原始故障信号消失了,它也不自动清
必须等故障真正消失,并且操作员按了复位按钮,才复位这个锁存位

你看,这就是非常典型的 SET/RST 应用:

SET 用来记住故障发生过
RST 用来在确认后解除故障锁存

这类逻辑非常工程化,也非常常见。

十 最经典的应用三:模式选择为什么经常要保持

比如设备有:

手动模式
自动模式
调试模式
维修模式

这些模式不可能要求按钮一直按着才成立。
它们通常是切一次模式,就保持在那里。

比如:

按“自动模式”按钮后,系统进入自动
直到再切到手动或者停机,才退出自动

这时候如果你用一个模式位,比如 M20 表示自动模式,
那它就天然适合用保持逻辑。

例如:

自动按钮上升沿到来,置位 M20
手动按钮上升沿到来,复位 M20

当然,如果是多模式,还要考虑互斥。
比如自动和手动不能同时成立,
那么逻辑上往往是一边置位某模式,一边复位其他模式。

所以模式位也是典型的“被记住的状态”。

十一 最经典的应用四:步骤状态为什么经常要保持

顺控程序里,每一步其实都是一种状态。

比如:

步骤 1 等待工件
步骤 2 气缸伸出
步骤 3 夹紧
步骤 4 加工
步骤 5 退回

当系统进入步骤 2 以后,
它不可能只在切入那一瞬间存在一下,然后立刻消失。
它必须保持在步骤 2,直到跳到步骤 3。

这时候每一步的状态,本质上也是保持。

有的工程师喜欢用一个步骤号 D 寄存器来表示当前步;
有的喜欢每一步一个 M 位。
如果是每一步一个 M 位,那本质上就很接近置位复位逻辑:

进入本步时,置位本步状态
离开本步时,复位本步状态

所以你以后看到顺控里很多“步骤保持”,不要觉得奇怪。
因为步骤本来就不是瞬时信号,而是阶段状态。

十二 什么时候不该轻易用 SET/RST

这一段特别重要。

很多人学 SET/RST,如果只学“怎么用”,不学“什么时候别乱用”,
后面程序一定会越来越难维护。

下面这些场景,你就要谨慎。

1 本来只是一个实时逻辑,不需要记忆

比如:

只要气压正常就允许
只要安全门关闭就允许
只要光电有信号就亮灯
只要按钮按着就点动

这类逻辑本质上就是实时成立、实时取消。
它不需要 PLC 去“记住”什么。
如果你硬给它包一层 SET/RST,反而把简单逻辑搞复杂了。

比如安全门开了就应该立刻不允许,
门关上了就恢复允许。
这种很多时候直接条件判断就够了,
没必要专门 SET 一个允许位,再到处 RST。

2 一个状态没有明确的复位来源

这是最危险的一种。

比如你某个地方一高兴就写了:

条件成立,SET M50

但后面谁来 RST M50?
是停止按钮?
是故障?
是流程结束?
是人工复位?
还是永远不清?

如果这个问题在写程序时没想清楚,
调试时就会出现典型症状:

这个位怎么一直亮着
这个状态为什么退不掉
怎么一进来就卡住
刚才明明结束了怎么还保持

所以一个保持位一旦要 SET,
你必须立刻同时问自己:

它什么时候该清掉?谁来清?条件是什么?

没有清晰复位来源的 SET,最好不要随便下。

3 一个状态被多个地方乱 SET、多个地方乱 RST

这也是初学者很容易写乱的地方。

例如:

这里可以 SET M10
那里也可以 SET M10
这边 RST M10
那边也 RST M10

一开始你觉得很灵活,
后面就会发现自己根本追不清:

现在是哪个条件让它亮的
现在又是哪个条件把它灭的
为什么有时候能亮,有时候又被别的地方抢先复位了

工程上如果一个状态来源太多、去向太多,维护成本会非常高。

所以尽量做到:

一个状态的置位逻辑相对集中
一个状态的复位逻辑相对集中

哪怕条件很多,也尽量整理到一块,
别东一段西一段到处散。

4 用 SET/RST 去掩盖逻辑设计不清的问题

有些程序写不顺,根本原因不是“没有保持”,
而是逻辑关系没理清。

比如本来应该分成:

允许条件
启动条件
运行状态
停止条件
故障条件

结果因为没分层,写着写着发现程序总掉,就开始到处 SET 一些辅助位去“救火”。

短期看好像跑起来了,
长期看往往会更乱。

所以你以后只要发现自己程序里 SET/RST 越来越多,
就要提醒自己:

我是真的需要这些保持位,
还是因为前面的逻辑结构没理清,只好靠保持位去补漏洞?

这两种情况,性质完全不一样。

十三 SET/RST 和上升沿经常是搭档,但它们不是一回事

前一讲我们讲了上升沿。
这一讲很容易和它连起来。

例如:

启动按钮上升沿出现时,置位运行命令 M10
停止按钮上升沿出现时,复位运行命令 M10

这里你会发现:

上升沿解决的是“不要重复触发”
SET/RST 解决的是“触发以后要不要记住”

所以它们是很常见的搭档:

先用上升沿,把一次按钮动作变成单次命令
再用 SET/RST,把这个命令留下来的状态记住

这个组合特别常见,也特别合理。

比如:

按钮按一下,不要因为按住而反复执行
但按完这一下后,状态又要继续保持

这正是“上升沿 + 置位”的经典用法。

十四 一个很实用的工程思路:命令和状态要分开

这是把程序写清楚的关键。

很多初学者最容易混的,就是把“按钮命令”和“系统状态”写成同一回事。

比如启动按钮 X0。
它只是一个命令,不是运行状态。

真正的运行状态,往往应该另外用一个内部位,比如 M10 来表示。

这样分开有什么好处?

X0 是瞬时输入
M10 是被记住的运行状态

后面你要看程序时,层次就很清楚:

按钮只是发命令
状态才是真正在系统内部持续存在的东西

同样的思路还可以推广到很多地方:

复位按钮 和 故障锁存状态
自动按钮 和 自动模式状态
启动条件 和 运行命令
步骤切换条件 和 当前步骤状态

一旦你把“命令”和“状态”分开,程序会清爽很多。

十五 翻转为什么看起来省事,但工程上要慎用

前面说过翻转就是:

原来 0 变 1
原来 1 变 0

很多人会觉得这特别适合一个按钮控制开和关。
比如:

按一下,设备开
再按一下,设备关

从界面按钮、测试功能、简单照明逻辑看,确实挺方便。
但工程现场为什么要慎用?

因为翻转依赖“当前状态是什么”。
而当前状态一旦因为断电、复位、误动作、程序修改、设备异常而和你想的不一致,
下一次翻转的结果就可能和操作员预期完全相反。

例如操作员以为“再按一下是启动”,
但程序当前状态其实已经是开着的,
那一翻转反而变成停机。

所以对于关键设备运行、自动流程、安全相关控制,
很多时候更推荐“明确启动”“明确停止”,
而不是“翻来翻去”。

翻转更适合:

非关键功能
界面切换
测试模式
简单照明
非安全、非关键的小功能

这个边界要心里有数。

十六 一个完整小案例:运行命令、故障锁存、停止复位怎么串起来

咱们用一个稍完整的例子,把这一讲串起来。

场景要求

按下启动按钮,电机运行
按下停止按钮,电机停止
如果热继故障动作,电机立即停止
故障发生后要锁存报警
故障消失后,必须按复位按钮才能清除报警
报警未清除前,不允许重新启动

变量设定

X0 启动按钮
X1 停止按钮
X2 热继故障
X3 复位按钮

M10 运行命令
M20 故障锁存

Y0 电机输出
Y1 故障灯

逻辑分层

第一层,故障一来,置位 M20
也就是把故障记住

第二层,只要 M20 存在,就不允许 M10 保持运行
也就是说故障会让运行命令失效

第三层,启动按钮上升沿到来,并且当前没有故障锁存,才允许置位 M10

第四层,停止按钮上升沿到来,复位 M10

第五层,故障输入已经恢复正常,并且按下复位按钮时,复位 M20

第六层,M10 去驱动 Y0
M20 去驱动 Y1

这时整个结构就非常清晰:

按钮是命令
M10 是运行状态
M20 是故障状态
Y0 是实际输出
Y1 是报警输出

这里 SET/RST 用得就很合理。

十七 为什么“故障锁存”和“输出保持”不是一回事

这点很多人会混。

故障锁存,是把“故障发生过”这件事记住。
输出保持,是把“我还要继续运行”这件事记住。

虽然都可能用 SET/RST,
但它们的意义不同。

故障锁存强调的是:

哪怕原始信号消失了,我也先别当作没事

输出保持强调的是:

哪怕启动按钮已经松开了,我也要继续执行

所以你在写程序时,
不要一看到 SET/RST 就只觉得“反正都是保持”。
要看它保持的是什么意义。

这个习惯会帮助你后面给变量命名、分层、查问题。

十八 为什么有些状态应该“自动复位”,有些状态应该“人工复位”

这也是保持逻辑里很重要的工程判断。

比如:

运行命令,很多时候停止条件一来就自动复位
步骤状态,进入下一步时自动复位
某个临时流程标志,流程结束时自动复位

这些都属于系统自己可以判断什么时候结束。

但有些状态不适合自动清掉,比如:

严重故障锁存
急停后恢复
超温保护
关键报警记录

这些往往需要人工复位。
因为你希望操作员先确认问题,再让系统回到正常状态。

所以以后你设计保持逻辑时,要先想清楚:

这个状态结束,应该由系统自动判断,还是必须由人工确认?

这个问题一旦想清楚,SET/RST 的设计就会更稳。

十九 一个很容易写乱的地方:同一个输出直接拿 SET/RST 控制

有些人图省事,会直接对 Y 输出做 SET/RST。
比如直接 SET Y0、RST Y0。

这样能不能用?
有些场景能跑。
但很多时候,不是最佳习惯。

更稳的方式通常是:

先对内部状态位,比如 M10,做 SET/RST
然后再让 Y0 跟随 M10

为什么?

因为输出是最终执行层。
它后面可能还会叠加:

联锁条件
安全条件
故障条件
模式条件
手自动切换
延时条件

如果你直接把输出本身搞成一个被多处 SET/RST 的对象,
后面很容易乱。

而如果用内部状态位做中间层,
输出逻辑会更清楚,也更容易扩展。

所以很多工程里更推荐:

保持内部状态,不直接保持最终输出。

二十 一个很实用的检查方法:每个保持位都要问自己这三个问题

以后你写程序时,只要准备加一个 SET/RST,
先问自己三个问题。

第一问

这个状态为什么必须记住?

如果答不上来,说明可能不该用保持。

第二问

它什么时候该清掉?

如果答不清楚,说明复位逻辑还没想明白。

第三问

谁负责置位,谁负责复位?

如果来源和去向太散,说明程序结构可能会乱。

这三个问题特别有用。
它能帮你在写之前先自查一次。

二十一 初学者最容易踩的几个坑

这一段你后面看程序时会特别有感触。

1 只会 SET,不会想 RST

这是最典型的问题。
状态一旦记住了,却没设计好退出条件。

2 一个状态有很多地方都在改

前面说过,越分散越难查。

3 本来不该保持的逻辑,硬写成保持

结果简单逻辑复杂化。

4 按钮命令和系统状态混在一起

导致程序层次不清。

5 直接对输出乱做 SET/RST

后面扩展时很难维护。

6 把翻转当万能按钮逻辑

看起来省事,实际不稳。

7 故障一消失就自动清掉,没有锁存

现场排查时很难追问题。

8 锁存了故障,却没有人工复位路径

结果设备一直起不来,操作员也不知道为什么。

二十二 本课小结

这一课你最少要真正吃透下面这些点。

第一,PLC 里很多状态天然需要被“记住”,这就是保持逻辑存在的根本原因。

第二,置位就是把某个状态设成 1 并保持,复位就是把这个保持状态清成 0。

第三,SET/RST 特别适合运行命令、故障锁存、模式状态、步骤状态这类“记忆型状态”。

第四,本来只是实时成立的逻辑,不要乱用 SET/RST 去复杂化。

第五,每一个保持位都必须想清楚复位来源。没有明确复位逻辑的置位,很容易把程序写乱。

第六,上升沿和 SET/RST 经常一起使用。上升沿负责“只触发一次”,SET/RST 负责“触发以后继续保持”。

第七,翻转适合一些简单切换功能,但在关键设备运行控制上要慎用。

第八,更好的程序习惯通常是:按钮是命令,内部位是状态,输出是执行结果,三层尽量分开。

第九,能不用保持解决的问题,不一定非要用保持;但该保持的地方,也不能偷懒不用。

二十三 学完这一课后,你应该能做到什么

学完这一课,你至少应该能做到这些事情:

知道为什么很多设备按一下启动后能一直运行
知道为什么故障报警常常不会自动消失
知道 SET/RST 最适合用来保存哪些状态
知道什么时候保持逻辑是合理的,什么时候只是把程序写复杂了
知道为什么一个状态必须同时设计“置位逻辑”和“复位逻辑”
知道为什么按钮命令最好和系统状态分开
知道为什么直接对输出乱做保持,不如先保持内部状态更稳

如果这些你已经顺了,后面程序的层次感会明显提高。

二十四 下节预告

下一课我们继续往下走,讲的是:

PLC 基础课 第14讲
掉电保持、上电初始化、首次扫描:设备重启后,程序为什么会乱?

这一课会把很多现场特别真实的问题讲透。
因为前面这一讲讲的是“程序运行中,状态怎么被记住”;
下一讲要讲的是:

断电、重启、上电以后,这些状态到底该不该继续保留,哪些要清,哪些不能清。


明扬工控商城

推荐阅读:

PLC 基础课 第15讲 手动、自动、急停、复位:设备模式切换逻辑该怎么设计

PLC 基础课 第13讲 置位、复位、翻转、保持:什么时候该用 SET/RST,什么时候不能乱用

PLC 基础课 第12讲 上升沿、下降沿、单次触发:为什么按一次按钮,程序会执行好几遍?

PLC 基础课 第11讲 数学运算与工程量换算:加减乘除、比例缩放、显示修正怎么做

热门标签:
PLC 基础课 第13讲 置位、复位、翻转、保持:什么时候该用 SET/RST....docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网