说说特殊的子程序--事件触发的子程序。
这里所说的事件是“程序启动”“程序停止”“通道复位”等,系统在这些事件发生时可以调用固定的子程序去做处理,这个子程序名为“PROG_EVENT.SPF”
MD20108 $MC_PROG_EVENT_MASK 的每一位对应一个事件,例:若位1=1,当“零件程序结束”时,系统会触发调用PROG_EVENT.SPF

为了在PROG_EVENT.SPF程序中区分不同的事件,系统提供了变量$P_PROG_EVENT:
$P_PROG_EVENT=1 是“程序启动”事件
$P_PROG_EVENT=2 是“程序结束”事件
$P_PROG_EVENT=3 是“通道复位”事件
$P_PROG_EVENT=4 是“系统上电”事件
$P_PROG_EVENT=5 程序段搜多后输出动作程序段后
具体用法,举例说明:
在用户循环下,创建名为PROG_EVENT.SPF子程序,内容如下:
PROC PROG_EVENT DISPLOF
IF ($P_PROG_EVENT==1)
msg("program start event")
m0
msg()
RET
ENDIF
IF ($P_PROG_EVENT==2)
msg("program stop event")
m0
RET
ENDIF
m17
设置MD20108$MC_PROG_EVENT_MASK=3H(即对程序启动和程序停止事件响应)(需要multiple mode actions选项M43)
当按下程序启动键后,屏幕显示:

当程序结束后,屏幕显示:

还有一些相关数据:
MD11620 $MN_PROG_EVENT_NAME 是被事件触发的子程序的程序名,默认的程序名是PROG_EVENT.SPF
MD11622 $MN_PROG_EVENT_PATH是这个子程序放在那里
MD11622=0: 表示子程序放在/_N_CMA_DIR 目录下,即制造商循环目录
MD11622=1: 表示子程序放在/_N_CUS_DIR目录下,即用户循环目录
MD11622=2: 表示子程序放在/_N_CST_DIR目录下,即标准循环目录
MD11622=3: 首先查找/_N_CUS_DIR,再查找/_N_CMA_DIR最后查找/_N_CST_DIR。这里可以看出用户目录优先。
最后,请注意:
- 通常,事件触发的子程序是机床制造商使用的
- 在标准循环目录下,也有PROG_EVENT.SPF子程序而且具有一定的功能,所以不建议在制造商循环目录和用户循环目录下,再创建PROG_EVENT.SPF。