要实现安全光幕的Muting功能(物料通过时临时屏蔽光幕),使用4个光电传感器(A、B、C、D)并满足安全标准(如IEC 62046),以下是完整的程序逻辑设计,采用状态机实现:
传感器布置
-
入口侧:传感器A(外侧)、传感器B(内侧)
-
出口侧:传感器C(内侧)、传感器D(外侧)
-
触发顺序:
-
物料进入:先遮挡A → 再遮挡B
-
物料离开:先遮挡C → 再遮挡D
-
程序逻辑(状态机)
状态定义
-
STATE_0:等待物料进入(初始状态)
-
STATE_1:A已触发,等待B
-
STATE_2:Muting激活(A+B触发完成)
-
STATE_3:等待物料离开(C已触发,等待D)
-
STATE_4:Muting解除(C+D触发完成)
变量定义
-
state
:当前状态(0-4) -
timer_in
:入口超时计时器(检测A→B是否超时) -
timer_out
:出口超时计时器(检测C→D是否超时) -
MutingActive
:Muting功能输出(True=屏蔽光幕)
伪代码实现
pascal
// 初始化
state = STATE_0;
MutingActive = False;
timer_in.Stop();
timer_out.Stop();
// 主循环
WHILE TRUE DO
// 读取传感器状态(True=遮挡)
A = ReadSensorA();
B = ReadSensorB();
C = ReadSensorC();
D = ReadSensorD();
CASE state OF
STATE_0: // 等待进入
IF A AND NOT B THEN
state = STATE_1;
timer_in.Start(TIMEOUT_IN); // 启动入口超时计时(如2秒)
ELSIF B THEN // 错误:B先于A触发
TriggerSafetyStop(); // 触发安全停止
END_IF
STATE_1: // A已触发,等待B
IF B THEN
state = STATE_2;
MutingActive = True; // 激活Muting
timer_in.Stop();
ELSIF NOT A OR timer_in.Timeout THEN // A提前解除或超时
state = STATE_0;
timer_in.Stop();
END_IF
STATE_2: // Muting激活,等待离开
IF C AND NOT D THEN
state = STATE_3;
timer_out.Start(TIMEOUT_OUT); // 启动出口超时计时
ELSIF D THEN // 错误:D先于C触发
TriggerSafetyStop();
MutingActive = False;
state = STATE_0;
END_IF
STATE_3: // C已触发,等待D
IF D THEN
state = STATE_4;
MutingActive = False; // 解除Muting
timer_out.Stop();
ELSIF NOT C OR timer_out.Timeout THEN // C提前解除或超时
TriggerSafetyStop();
MutingActive = False;
state = STATE_0;
timer_out.Stop();
END_IF
STATE_4: // 完成一次循环
state = STATE_0; // 复位至初始状态
END_CASE
END_WHILE
关键安全机制
-
顺序校验:
-
进入时:必须按
A→B
顺序触发(若先触发B则报错)。 -
离开时:必须按
C→D
顺序触发(若先触发D则报错)。
-
-
超时保护:
-
timer_in
:A触发后,B必须在设定时间内触发(否则复位)。 -
timer_out
:C触发后,D必须在设定时间内触发(否则安全停止)。
-
-
中途中断处理:
-
状态1中A提前解除 → 复位状态机。
-
状态3中C提前解除 → 触发安全停止。
-
-
防多物料冲突:
- 在STATE_2/3状态时,忽略新的A/B触发,确保单次只处理一个物料。
物理层要求
-
传感器安装间距需大于人体最小安全尺寸(通常 > 150mm)。
-
使用独立的安全PLC或安全继电器实现逻辑。
-
光幕屏蔽时间必须短于安全标准允许的最大值(通常 < 500ms)。
时序图示例
text
物料进入: |--A--|------|--B--| → Muting激活
物料离开: |--C--|------|--D--| → Muting解除
时间线: t0 t1 t2 t3 t4
此设计符合安全标准,确保只有物料按正确方向通过时屏蔽光幕,人体误入时立即停止设备。实际部署前需通过安全认证(如SIL2/PLd)。