梯形图顺序功能图(SFC)是PLC编程中实现复杂顺序控制的核心工具,尤其在包装机械、装配线、注塑机等需多阶段分步执行的设备中被广泛采用。SFC以“步(Step)”为单位组织逻辑,每步代表一个稳定状态,步与步之间通过“转移条件(Transition Condition)”触发跃迁。当多个转移条件指向同一目标步,或同一转移条件被重复配置于不同路径,极易引发死步(Dead Step)——即程序运行中某步被激活后,因无有效转移条件满足而永久停留,导致后续动作停滞、产线卡死。
本文不讲理论定义,只聚焦实操:如何快速定位、验证并修复由转移条件重复配置引发的死步问题。全文按真实排故流程组织,从现象观察开始,逐层深入至逻辑根源,所有方法均基于标准IEC 61131-3规范下的主流PLC(如三菱FX系列、欧姆龙NJ/NX系列、西门子S7-1200/1500)通用操作,无需专用诊断软件,仅靠编程软件内置功能即可完成。
一、识别死步:三类典型现象(无需读程序)
死步不是语法错误,编译能通过,运行时却“静默卡顿”。先确认是否为死步,避免误判为传感器故障或执行器损坏。
- HMI界面状态冻结:某工位图标持续显示“运行中”,但对应气缸未动作、电机未启停、指示灯不切换,且该状态超过正常周期时间(例如:夹紧步标准耗时2秒,实际停留超10秒)。
- PLC监控窗口中某步标志位持续为
ON:在编程软件在线监控模式下,打开SFC编辑页,观察各步对应的内部软元件(如三菱用S0–S999,西门子用Mx.x或DBx.DBXx.x)。若某步(如S20)在应退出时刻后仍保持TRUE达5秒以上,且其所有出向转移条件的监控值均为FALSE,即高度疑似死步。 - 后续步全部未激活,且无任何报警代码:检查SFC中该步之后的所有步(包括并行分支),其激活标志全为
OFF;同时PLC系统报警缓冲区(如TIA Portal的“Diagnostic Buffer”或GX Works3的“Error Log”)中无F0001类硬件报警,也无E8000类用户自定义错误码。
满足以上任一现象,即可进入排查流程。注意:若HMI报“夹紧超时”但PLC中S20已变为OFF,则问题在转移条件本身(如传感器未到位),不属于本文所述“转移条件重复导致的死步”。
二、锁定可疑步:两步法缩小范围
避免全盘扫描整个SFC(可能含上百步),用逻辑剪枝快速定位问题步。
-
逆向追踪法:从卡住的步(记为
Sx)出发,回溯所有能激活Sx的前序步及对应转移条件。- 在SFC编辑界面,右键点击
Sx→ 选择“查找引用”或“Show Cross Reference”(各品牌名称略有差异)。 - 查看列表中所有“激活来源”:例如
S10 --[X0]--> Sx、S15 --[Y1 AND T3]--> Sx、S20 --[M100]--> Sx。 - 记录所有来源步和其转移条件表达式。
- 在SFC编辑界面,右键点击
-
条件重叠检验:对上述所有转移条件,逐个验证是否可能同时为真。重点检查:
- 是否存在完全相同的布尔表达式(如
X0、X0); - 是否存在逻辑等价表达式(如
NOT X1与X1 == FALSE); - 是否存在冗余嵌套(如
(X2 OR X3) AND X4与X2 AND X4,后者为前者子集); - 是否有定时器/计数器复位不同步导致的瞬时重叠(如
T0.DN与T1.DN在同一定时周期内均置位)。
- 是否存在完全相同的布尔表达式(如
若发现两个及以上来源步的转移条件在某一时刻可同时满足,则Sx即为死步候选——因为PLC执行SFC时,一旦某步被激活,其所有入向转移即失效(IEC 61131-3第3部分明确要求:“a step is active only if at least one of its input transitions is enabled and the transition condition is true”)。当多路同时满足时,PLC仅执行首次扫描到的路径,其余路径的转移条件虽为真,但因Sx已激活而被忽略;更危险的是,若这些条件中混有自复位信号(如脉冲上升沿X0.P),首次触发后信号消失,后续扫描再无任何条件满足,Sx即永久锁定。
三、验证死步:在线强制+单步仿真(零风险)
在生产现场,切勿直接修改运行中程序。使用编程软件的调试功能安全复现问题。
-
强制置位目标步:
- 进入在线监控模式,找到
Sx对应软元件(如S20)。 - 右键点击该元件 → 选择“Force ON”或“Set Bit”。此时
Sx强制激活,模拟卡死状态。
- 进入在线监控模式,找到
-
监控所有入向转移条件实时值:
- 在同一监控窗口中,添加上一步骤中记录的所有转移条件变量(如
X0、Y1、T3.DN、M100)。 - 观察10秒以上:若其中任意一个条件在
Sx为ON期间从未变为TRUE,则非本问题;若多个条件曾同时为TRUE(例如X0=ON且Y1=ON且T3.DN=ON),但Sx未自动退出,则确认为转移条件重复冲突导致的死步。
- 在同一监控窗口中,添加上一步骤中记录的所有转移条件变量(如
-
单步执行验证(关键):
- 停止PLC运行(或切换至“Test Mode”)。
- 点击“Single Scan”或“Step Over”按钮,手动执行一次PLC扫描周期。
- 观察:
Sx是否在本次扫描中被任何出向转移条件触发退出?若所有出向条件监控值均为FALSE,且Sx仍为ON,即实锤死步。
此过程不改动逻辑,不触发输出,100%安全。
四、根因分析:四类重复配置模式(附修正公式)
死步的根源是SFC结构违反了“单入单出”隐含约定。以下是工程中最常见的四类重复配置,每类均给出可直接套用的修正逻辑。
模式1:同条件多路径指向同一目标步
现象:S10 --[X0]--> S50,S20 --[X0]--> S50,S30 --[X0]--> S50
问题:X0闭合瞬间,S50被多次请求激活,但PLC仅响应首次;若S10已退出而S20尚未退出,X0再次闭合时因S50已激活,转移失效。
修正公式:将重复条件统一归并为互锁使能
S50的激活条件 = (S10 OR S20 OR S30) AND X0
即删除三条独立转移线,在S50入口处添加一个“合并使能”步,其转移条件为“任一前序步激活 且 X0为真”。
模式2:逻辑等价条件分散配置
现象:S10 --[NOT X1]--> S40,S15 --[X1 == FALSE]--> S40
问题:NOT X1 与 X1 == FALSE 功能完全相同,但PLC视作两个独立条件,增加扫描负担且易因数据刷新时序导致竞争。
修正公式:全局替换为标准布尔运算
统一使用 NOT X1(避免== FALSE类比较,减少CPU周期)。
模式3:定时器条件未同步复位
现象:S10 --[T0.DN]--> S40,S20 --[T1.DN]--> S40,但T0与T1的启动条件不同(如T0由X2启动,T1由X3启动),且复位逻辑分离。
问题:当X2和X3先后触发,T0.DN与T1.DN可能在相邻扫描周期内连续为真,造成S40被重复请求;若S40退出条件依赖T0复位,而T1未复位,则S40无法退出。
修正公式:共用定时器 + 独立使能
使用单一定时器T0;
S10转移条件 = X2 AND NOT T0.DN;
S20转移条件 = X3 AND NOT T0.DN;
S40转移条件 = T0.DN
并在S40激活时强制复位T0(RST T0),确保每次仅一个路径触发定时。
模式4:并行分支未加同步约束
现象:SFC中存在并行分支A与B,均最终汇聚至S60:
- 分支A:
S10 --[X4]--> S20 --[T2.DN]--> S60 - 分支B:
S15 --[X5]--> S25 --[T3.DN]--> S60
问题:若分支A快于B,S60提前激活,但分支B仍在执行S25,此时S60的出向转移可能因S25未完成而缺失必要使能信号,导致S60停滞。
修正公式:汇聚点必须增加“全分支完成”约束S60转移条件 = T2.DN AND T3.DN而非任一完成即转移。若分支耗时不固定,改用“完成标志位”:
S20退出时置位M100,S25退出时置位M101;S60转移条件 =M100 AND M101;S60激活后立即复位M100与M101。
五、修复与验证:三步闭环
修复不是改完就完,必须闭环验证。
-
修改SFC结构:
- 删除所有重复指向同一目标步的转移线;
- 按上述公式重构转移条件,确保每个目标步仅有一个逻辑清晰的入向条件;
- 为所有定时器/计数器添加明确复位路径(严禁依赖步退出自动复位)。
-
离线仿真测试:
- 在编程软件中启用“Simulation Mode”;
- 手动设置各输入信号(X0–X9)组合,覆盖所有可能触发路径;
- 逐帧查看SFC步进过程,确认
Sx激活后必有且仅有唯一路径退出,无停滞。
-
上线前最后检查:
- 下载程序前,执行“Cross Reference Check”(各品牌均有此功能),确认
Sx的引用数=1(仅被修正后的唯一转移线引用); - 导出SFC结构报告为PDF,打印后人工勾选:所有步入向线数≤1,所有转移条件无重复文本。
- 下载程序前,执行“Cross Reference Check”(各品牌均有此功能),确认
六、预防机制:建立三项硬性规范
死步修复是救火,预防才是根本。在团队开发中强制推行:
| 规范项 | 执行要求 | 检查方式 |
|---|---|---|
| 转移条件命名规范 | 所有转移条件变量必须采用“来源步_目标步_功能”格式,如S10_S50_ClampOK、S20_S50_UnclampDone |
代码审查时用搜索功能查_S50_,确认无重复命名 |
| SFC层级深度限制 | 单个SFC图内步数≤32,超限时必须拆分为子SFC(Sub-SFC),主图仅留汇聚逻辑 | 编程软件中“Properties”页查看“Step Count” |
| 转移条件唯一性扫描 | 每次提交代码前,运行脚本自动提取所有转移条件字符串,去重后比对原始条目数 | 使用Python脚本解析.awl/.xml项目文件,输出重复项报告 |
遵守以上三项,可消除90%以上的转移条件重复类死步。
死步排查的本质,是让PLC的确定性执行与工程师的逻辑预期严格对齐。每一次重复条件的删除,都不是简化逻辑,而是剔除不确定性;每一次转移条件的重构,都不是增加复杂度,而是加固确定性。自动化系统的鲁棒性,就藏在这些看似琐碎的“唯一性”坚持里。

暂无评论,快来抢沙发吧!