三菱 PLC 的 SFC 编程中设置多个初始状态时,程序的具体运行表现,这是 SFC 编程里一个容易产生疑问的点,我会从运行逻辑、实际案例和注意事项三个方面为你详细说明。
三菱 SFC 的初始状态(S0~S9,常用 S0 作为默认初始状态) 是由初始步指令(IST) 或PLC 上电时的脉冲(如 M8002) 触发的。当你在程序中设置多个初始状态时,核心运行规则如下:
触发条件:当 PLC 上电后,特殊辅助继电器M8002(上电初始脉冲,仅在第一个扫描周期为 ON)驱动多个初始状态的置位(SET Sx)时,这些初始状态会在同一扫描周期内同时被激活。
运行方式:每个初始状态对应一条独立的 SFC 流程分支,这些分支会并行执行,彼此之间互不干扰(除非通过互锁、跳转等指令人为关联)。
优先级:多个初始状态之间没有默认优先级,执行顺序由 PLC 的扫描周期决定(本质是同时执行)。
下面用一个简单的例子展示多个初始状态的运行情况,假设我们用M8002同时触发S0(电机控制流程)和S1(报警检测流程)两个初始状态。
ladder
// PLC上电初始脉冲(M8002仅第一个扫描周期ON)
LD M8002
SET S0 // 激活初始状态S0(电机控制流程)
SET S1 // 激活初始状态S1(报警检测流程)
SET
SET
X0(启动按钮)
T0(5s计时到)
T1(5s计时到)
X1(故障信号)
X2(复位按钮)
M8002
回到待机
回到待机
电机正转
电机反转
报警灯亮
PLC 上电后,S0和S1同时变为激活状态,两个流程分支的 “待机状态” 同时生效。
当按下X0(电机启动按钮),S0转移到S10(电机正转),而S1仍处于报警待机状态,直到X1(故障信号)触发才会转移到S20(报警灯亮)。
两个流程的状态转移相互独立:电机正转 / 反转的过程中,报警检测流程可以随时响应故障信号;报警复位后,也不影响电机流程的运行。
如果你使用三菱的IST 指令(状态初始化指令) 来管理 SFC 的初始状态,需要注意:
IST 指令有固定的初始状态分配:
S0:手动模式初始状态
S1:自动模式初始状态
S2:回零模式初始状态
此时 IST 指令会根据模式选择信号自动激活对应的初始状态,同一时间只有一个初始状态被激活(例如手动模式时 S0 激活,自动模式时 S1 激活),这是 IST 指令的特殊逻辑,并非多个初始状态并行。
避免无意义的多个初始状态:如果多个初始状态对应的流程没有实际并行需求,会增加程序复杂度,建议合并为一个初始状态,再通过分支指令(如 SEL、JMP)实现流程切换。
互锁处理:如果多个并行流程涉及同一输出(如同一台电机),必须添加互锁指令(如常闭触点),防止输出冲突导致设备故障。
状态编号规范:初始状态建议使用S0~S9(三菱定义的初始状态区),后续状态使用S10~S4095,避免编号混乱。
当用M8002等脉冲触发多个初始状态时,这些状态会同时激活,对应 SFC 流程并行执行,彼此独立。
若使用IST 指令管理初始状态,同一时间仅会激活与当前模式匹配的一个初始状态,不会并行。
多个初始状态的使用需结合实际并行需求,同时注意添加互锁避免输出冲突。