工作原理:
- 主程序周期性调用 emcTaskPlan() 和emcTaskExecute()
- emcTaskPlan()读取新的指令,根据工作模式(Manual/Auto/MDI)或者状态(ESTOP/ON)决定做什么。很多指令立即进入子系统(Motion/IO)。在Auto模式,解释器会被调用,interp_list被NML指令附加。
- emcTaskExecute() 执行巨大的execState分支,如果执行完成,它会从interp_list获取下一个项目,并将execState设置成其前置提条件(比如等待运动、等待IO)。一旦前提条件被满足,它就会发布该命令,并把execState设置为后置条件。一旦后置条件被满足,它就会去处理下一条interp_list中的指令,以此类推。
- 前置条件和后置条件只会在interp_list中的指令的结合处处理。即时指令没有任何前置条件或后置条件。
- 此时此刻,本文件中没有任何条件任何东西到interp_list上的东西了。这一点会改变,例如当为jog或者Home指令定义前置和后置条件。完了以后,切记相应的Abort指令清除interp_list
- 单步执行在checkPreconditions()中作为第一个处理 条件。 如果我们处于单步模式,被变量’stepping’标识,我们将状态设置为waiting-for-step。 这会轮询变量’steppingWait’(单步指令会将其重置为0,指令发布之后设置为1)