3. 模式选择:手动/自动/编辑切换
任务说明
在数控系统操作面板上,模式选择开关(通常为旋转开关)用于在手动(JOG)、自动(AUTO)、编辑(EDIT)三种模式间切换。不同模式下,操作面板上可用的功能按键不同,例如:手动模式下允许点动轴移动,自动模式下允许启动循环启动,编辑模式下允许修改程序。本案例实现模式开关的读取与模式状态输出,并据此启用或禁用对应的面板功能按键。
硬件与依赖
- PLC:西门子S7-1200(或同类支持结构化文本ST的PLC)
- 输入:模式选择开关接入I0.0(手动)、I0.1(自动)、I0.2(编辑),开关为自锁型,同一时刻仅一个输入为TRUE
- 输出:Q0.0(手动模式指示灯)、Q0.1(自动模式指示灯)、Q0.2(编辑模式指示灯)
- 面板功能使能信号:M0.0(手动点动使能)、M0.1(循环启动使能)、M0.2(程序编辑使能)
完整代码(ST语言)
FUNCTION_BLOCK FB_ModeSelect
VAR_INPUT
iManual : BOOL; // 手动模式开关信号
iAuto : BOOL; // 自动模式开关信号
iEdit : BOOL; // 编辑模式开关信号
END_VAR
VAR_OUTPUT
oModeManual : BOOL; // 当前处于手动模式
oModeAuto : BOOL; // 当前处于自动模式
oModeEdit : BOOL; // 当前处于编辑模式
END_VAR
VAR
// 面板功能使能信号(输出到操作面板逻辑)
oJogEnable : BOOL; // 手动点动功能使能
oCycleStartEnable: BOOL; // 循环启动功能使能
oEditEnable : BOOL; // 程序编辑功能使能
END_VAR
// 模式判定:同一时刻仅一个开关有效,优先级手动 > 自动 > 编辑
oModeManual := iManual;
oModeAuto := NOT iManual AND iAuto;
oModeEdit := NOT iManual AND NOT iAuto AND iEdit;
// 根据模式启用对应面板功能
oJogEnable := oModeManual;
oCycleStartEnable:= oModeAuto;
oEditEnable := oModeEdit;
主程序调用(OB1)
// 实例化模式选择功能块
"ModeSelect_Instance"(
iManual := "HMI_Manual_Switch", // I0.0
iAuto := "HMI_Auto_Switch", // I0.1
iEdit := "HMI_Edit_Switch", // I0.2
oModeManual => "Q_Manual_Lamp", // Q0.0
oModeAuto => "Q_Auto_Lamp", // Q0.1
oModeEdit => "Q_Edit_Lamp" // Q0.2
);
// 将功能使能信号传递给操作面板按键逻辑
"Jog_Enable" := "ModeSelect_Instance".oJogEnable;
"CycleStart_Enable" := "ModeSelect_Instance".oCycleStartEnable;
"Edit_Enable" := "ModeSelect_Instance".oEditEnable;
运行与验证
- 将上述FB添加到PLC程序中,并在OB1中调用。
- 下载程序到PLC,进入在线监控模式。
- 验证步骤与通过条件:
| 操作 | 预期输出 |
|---|---|
| 仅将I0.0置为TRUE(手动) | Q0.0=TRUE,Q0.1/Q0.2=FALSE;M0.0=TRUE,M0.1/M0.2=FALSE |
| 仅将I0.1置为TRUE(自动) | Q0.1=TRUE,Q0.0/Q0.2=FALSE;M0.1=TRUE,M0.0/M0.2=FALSE |
| 仅将I0.2置为TRUE(编辑) | Q0.2=TRUE,Q0.0/Q0.1=FALSE;M0.2=TRUE,M0.0/M0.1=FALSE |
| 同时将I0.0和I0.1置为TRUE | 手动优先:Q0.0=TRUE,Q0.1=FALSE;M0.0=TRUE,M0.1=FALSE |
关键说明
- 模式判定采用优先级逻辑,防止开关信号抖动或误操作时出现多模式同时激活。
- 功能使能信号(M0.0~M0.2)输出到操作面板按键逻辑,用于在HMI或物理按键上屏蔽非当前模式的按键操作。
- 实际接入时,I0.0~I0.2对应PLC输入端子,Q0.0~Q0.2接指示灯,M0.0~M0.2为内部标志位,供后续按键处理逻辑使用。