📄 emctaskmain.cc
字号:
/* pause on the interp list is queued, so wait until all are done */ return EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO; break; case EMC_TASK_PLAN_END_TYPE: return EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO; break; case EMC_TASK_PLAN_INIT_TYPE: case EMC_TASK_PLAN_RUN_TYPE: case EMC_TASK_PLAN_SYNCH_TYPE: case EMC_TASK_PLAN_EXECUTE_TYPE: return EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO; break; case EMC_TRAJ_DELAY_TYPE: return EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO; break; case EMC_MOTION_SET_AOUT_TYPE: if (((EMC_MOTION_SET_AOUT *) cmd)->now) { return EMC_TASK_EXEC_WAITING_FOR_MOTION; } return EMC_TASK_EXEC_DONE; break; case EMC_MOTION_SET_DOUT_TYPE: if (((EMC_MOTION_SET_DOUT *) cmd)->now) { return EMC_TASK_EXEC_WAITING_FOR_MOTION; } return EMC_TASK_EXEC_DONE; break; case EMC_MOTION_ADAPTIVE_TYPE: return EMC_TASK_EXEC_WAITING_FOR_MOTION; break; default: // unrecognized command if (EMC_DEBUG & EMC_DEBUG_TASK_ISSUE) { rcs_print_error("preconditions: unrecognized command %d:%s\n", cmd->type, emc_symbol_lookup(cmd->type)); } return EMC_TASK_EXEC_ERROR; break; } return EMC_TASK_EXEC_DONE;}// puts command on interp listint emcTaskQueueCommand(NMLmsg * cmd){ if (0 == cmd) { return 0; } interp_list.append(cmd); return 0;}// issues command immediatelystatic int emcTaskIssueCommand(NMLmsg * cmd){ int retval = 0; int execRetval = 0; if (0 == cmd) { if (EMC_DEBUG & EMC_DEBUG_TASK_ISSUE) { printf("emcTaskIssueCommand() null command\n"); } return 0; } if (EMC_DEBUG & EMC_DEBUG_TASK_ISSUE) { rcs_print("Issuing %s -- \t (%s)\n", emcSymbolLookup(cmd->type), emcCommandBuffer->msg2str(cmd)); } switch (cmd->type) { // general commands case EMC_OPERATOR_ERROR_TYPE: retval = emcOperatorError(((EMC_OPERATOR_ERROR *) cmd)->id, ((EMC_OPERATOR_ERROR *) cmd)->error); break; case EMC_OPERATOR_TEXT_TYPE: retval = emcOperatorText(((EMC_OPERATOR_TEXT *) cmd)->id, ((EMC_OPERATOR_TEXT *) cmd)->text); break; case EMC_OPERATOR_DISPLAY_TYPE: retval = emcOperatorDisplay(((EMC_OPERATOR_DISPLAY *) cmd)->id, ((EMC_OPERATOR_DISPLAY *) cmd)-> display); break; case EMC_SYSTEM_CMD_TYPE: retval = emcSystemCmd(((EMC_SYSTEM_CMD *) cmd)->string); break; // axis commands case EMC_AXIS_DISABLE_TYPE: disable_msg = (EMC_AXIS_DISABLE *) cmd; retval = emcAxisDisable(disable_msg->axis); break; case EMC_AXIS_ENABLE_TYPE: enable_msg = (EMC_AXIS_ENABLE *) cmd; retval = emcAxisEnable(enable_msg->axis); break; case EMC_AXIS_HOME_TYPE: home_msg = (EMC_AXIS_HOME *) cmd; retval = emcAxisHome(home_msg->axis); break; case EMC_AXIS_JOG_TYPE: jog_msg = (EMC_AXIS_JOG *) cmd; retval = emcAxisJog(jog_msg->axis, jog_msg->vel); break; case EMC_AXIS_ABORT_TYPE: axis_abort_msg = (EMC_AXIS_ABORT *) cmd; retval = emcAxisAbort(axis_abort_msg->axis); break; case EMC_AXIS_INCR_JOG_TYPE: incr_jog_msg = (EMC_AXIS_INCR_JOG *) cmd; retval = emcAxisIncrJog(incr_jog_msg->axis, incr_jog_msg->incr, incr_jog_msg->vel); break; case EMC_AXIS_ABS_JOG_TYPE: abs_jog_msg = (EMC_AXIS_ABS_JOG *) cmd; retval = emcAxisAbsJog(abs_jog_msg->axis, abs_jog_msg->pos, abs_jog_msg->vel); break; case EMC_AXIS_SET_BACKLASH_TYPE: set_backlash_msg = (EMC_AXIS_SET_BACKLASH *) cmd; retval = emcAxisSetBacklash(set_backlash_msg->axis, set_backlash_msg->backlash); break; case EMC_AXIS_SET_HOMING_PARAMS_TYPE: set_homing_params_msg = (EMC_AXIS_SET_HOMING_PARAMS *) cmd; retval = emcAxisSetHomingParams(set_homing_params_msg->axis, set_homing_params_msg->home, set_homing_params_msg->offset, set_homing_params_msg->search_vel, set_homing_params_msg->latch_vel, set_homing_params_msg->use_index, set_homing_params_msg->ignore_limits, set_homing_params_msg->is_shared, set_homing_params_msg->home_sequence); break; case EMC_AXIS_SET_FERROR_TYPE: set_ferror_msg = (EMC_AXIS_SET_FERROR *) cmd; retval = emcAxisSetFerror(set_ferror_msg->axis, set_ferror_msg->ferror); break; case EMC_AXIS_SET_MIN_FERROR_TYPE: set_min_ferror_msg = (EMC_AXIS_SET_MIN_FERROR *) cmd; retval = emcAxisSetMinFerror(set_min_ferror_msg->axis, set_min_ferror_msg->ferror); break; case EMC_AXIS_SET_MAX_POSITION_LIMIT_TYPE: set_max_limit_msg = (EMC_AXIS_SET_MAX_POSITION_LIMIT *) cmd; retval = emcAxisSetMaxPositionLimit(set_max_limit_msg->axis, set_max_limit_msg->limit); break; case EMC_AXIS_SET_MIN_POSITION_LIMIT_TYPE: set_min_limit_msg = (EMC_AXIS_SET_MIN_POSITION_LIMIT *) cmd; retval = emcAxisSetMinPositionLimit(set_min_limit_msg->axis, set_min_limit_msg->limit); break; case EMC_AXIS_HALT_TYPE: axis_halt_msg = (EMC_AXIS_HALT *) cmd; retval = emcAxisHalt(axis_halt_msg->axis); break; case EMC_AXIS_OVERRIDE_LIMITS_TYPE: axis_lim_msg = (EMC_AXIS_OVERRIDE_LIMITS *) cmd; retval = emcAxisOverrideLimits(axis_lim_msg->axis); break; case EMC_AXIS_LOAD_COMP_TYPE: axis_load_comp_msg = (EMC_AXIS_LOAD_COMP *) cmd; retval = emcAxisLoadComp(axis_load_comp_msg->axis, axis_load_comp_msg->file, axis_load_comp_msg->type); break; // traj commands case EMC_TRAJ_SET_SCALE_TYPE: emcTrajSetScaleMsg = (EMC_TRAJ_SET_SCALE *) cmd; retval = emcTrajSetScale(emcTrajSetScaleMsg->scale); break; case EMC_TRAJ_SET_SPINDLE_SCALE_TYPE: emcTrajSetSpindleScaleMsg = (EMC_TRAJ_SET_SPINDLE_SCALE *) cmd; retval = emcTrajSetSpindleScale(emcTrajSetSpindleScaleMsg->scale); break; case EMC_TRAJ_SET_FO_ENABLE_TYPE: retval = emcTrajSetFOEnable(((EMC_TRAJ_SET_FO_ENABLE *) cmd)->mode); // feed override enable/disable break; case EMC_TRAJ_SET_FH_ENABLE_TYPE: retval = emcTrajSetFHEnable(((EMC_TRAJ_SET_FH_ENABLE *) cmd)->mode); //feed hold enable/disable break; case EMC_TRAJ_SET_SO_ENABLE_TYPE: retval = emcTrajSetSOEnable(((EMC_TRAJ_SET_SO_ENABLE *) cmd)->mode); //spindle speed override enable/disable break; case EMC_TRAJ_SET_VELOCITY_TYPE: emcTrajSetVelocityMsg = (EMC_TRAJ_SET_VELOCITY *) cmd; retval = emcTrajSetVelocity(emcTrajSetVelocityMsg->velocity, emcTrajSetVelocityMsg->ini_maxvel); break; case EMC_TRAJ_SET_ACCELERATION_TYPE: emcTrajSetAccelerationMsg = (EMC_TRAJ_SET_ACCELERATION *) cmd; retval = emcTrajSetAcceleration(emcTrajSetAccelerationMsg->acceleration); break; case EMC_TRAJ_LINEAR_MOVE_TYPE: emcTrajLinearMoveMsg = (EMC_TRAJ_LINEAR_MOVE *) cmd; retval = emcTrajLinearMove(emcTrajLinearMoveMsg->end, emcTrajLinearMoveMsg->type, emcTrajLinearMoveMsg->vel, emcTrajLinearMoveMsg->ini_maxvel, emcTrajLinearMoveMsg->acc); break; case EMC_TRAJ_CIRCULAR_MOVE_TYPE: emcTrajCircularMoveMsg = (EMC_TRAJ_CIRCULAR_MOVE *) cmd; retval = emcTrajCircularMove(emcTrajCircularMoveMsg->end, emcTrajCircularMoveMsg->center, emcTrajCircularMoveMsg->normal, emcTrajCircularMoveMsg->turn, emcTrajCircularMoveMsg->type, emcTrajCircularMoveMsg->vel, emcTrajCircularMoveMsg->ini_maxvel, emcTrajCircularMoveMsg->acc); break; case EMC_TRAJ_PAUSE_TYPE: retval = emcTrajPause(); break; case EMC_TRAJ_RESUME_TYPE: retval = emcTrajResume(); break; case EMC_TRAJ_ABORT_TYPE: retval = emcTrajAbort(); break; case EMC_TRAJ_DELAY_TYPE: emcTrajDelayMsg = (EMC_TRAJ_DELAY *) cmd; // set the timeout clock to expire at 'now' + delay time taskExecDelayTimeout = etime() + emcTrajDelayMsg->delay; retval = 0; break; case EMC_TRAJ_SET_TERM_COND_TYPE: emcTrajSetTermCondMsg = (EMC_TRAJ_SET_TERM_COND *) cmd; retval = emcTrajSetTermCond(emcTrajSetTermCondMsg->cond, emcTrajSetTermCondMsg->tolerance); break; case EMC_TRAJ_SET_SPINDLESYNC_TYPE: emcTrajSetSpindlesyncMsg = (EMC_TRAJ_SET_SPINDLESYNC *) cmd; retval = emcTrajSetSpindleSync(emcTrajSetSpindlesyncMsg->feed_per_revolution, emcTrajSetSpindlesyncMsg->velocity_mode); break; case EMC_TRAJ_SET_OFFSET_TYPE: // update tool offset emcStatus->task.toolOffset.tran.z = ((EMC_TRAJ_SET_OFFSET *) cmd)->offset.tran.z; emcStatus->task.toolOffset.tran.x = ((EMC_TRAJ_SET_OFFSET *) cmd)->offset.tran.x; retval = 0; break; case EMC_TRAJ_SET_ORIGIN_TYPE: // struct-copy program origin emcStatus->task.origin = ((EMC_TRAJ_SET_ORIGIN *) cmd)->origin; retval = 0; break; case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: retval = emcTrajClearProbeTrippedFlag(); break; case EMC_TRAJ_PROBE_TYPE: retval = emcTrajProbe( ((EMC_TRAJ_PROBE *) cmd)->pos, ((EMC_TRAJ_PROBE *) cmd)->type, ((EMC_TRAJ_PROBE *) cmd)->vel, ((EMC_TRAJ_PROBE *) cmd)->ini_maxvel, ((EMC_TRAJ_PROBE *) cmd)->acc); break; case EMC_AUX_INPUT_WAIT_TYPE: emcAuxInputWaitMsg = (EMC_AUX_INPUT_WAIT *) cmd; if (emcAuxInputWaitMsg->timeout == WAIT_MODE_IMMEDIATE) { //nothing to do, CANON will get the needed value when asked by the interp emcStatus->task.input_timeout = 0; // no timeout can occur emcAuxInputWaitIndex = -1; } else { emcAuxInputWaitType = emcAuxInputWaitMsg->wait_type; // remember what we are waiting for emcAuxInputWaitIndex = emcAuxInputWaitMsg->index; // remember the input to look at emcStatus->task.input_timeout = 2; // set timeout flag, gets cleared if input changes before timeout happens // set the timeout clock to expire at 'now' + delay time taskExecDelayTimeout = etime() + emcAuxInputWaitMsg->timeout; } break; case EMC_TRAJ_RIGID_TAP_TYPE: retval = emcTrajRigidTap(((EMC_TRAJ_RIGID_TAP *) cmd)->pos, ((EMC_TRAJ_RIGID_TAP *) cmd)->vel, ((EMC_TRAJ_RIGID_TAP *) cmd)->ini_maxvel, ((EMC_TRAJ_RIGID_TAP *) cmd)->acc); break; case EMC_TRAJ_SET_TELEOP_ENABLE_TYPE: if (((EMC_TRAJ_SET_TELEOP_ENABLE *) cmd)->enable) { retval = emcTrajSetMode(EMC_TRAJ_MODE_TELEOP); } else { retval = emcTrajSetMode(EMC_TRAJ_MODE_FREE); } break; case EMC_TRAJ_SET_TELEOP_VECTOR_TYPE: retval = emcTrajSetTeleopVector(((EMC_TRAJ_SET_TELEOP_VECTOR *) cmd)-> vector); break; case EMC_MOTION_SET_AOUT_TYPE: retval = emcMotionSetAout(((EMC_MOTION_SET_AOUT *) cmd)->index, ((EMC_MOTION_SET_AOUT *) cmd)->start, ((EMC_MOTION_SET_AOUT *) cmd)->end, ((EMC_MOTION_SET_AOUT *) cmd)->now); break; case EMC_MOTION_SET_DOUT_TYPE: retval = emcMotionSetDout(((EMC_MOTION_SET_DOUT *) cmd)->index, ((EMC_MOTION_SET_DOUT *) cmd)->start, ((EMC_MOTION_SET_DOUT *) cmd)->end, ((EMC_MOTION_SET_DOUT *) cmd)->now); break; case EMC_MOTION_ADAPTIVE_TYPE: retval = emcTrajSetAFEnable(((EMC_MOTION_ADAPTIVE *) cmd)->status); break; case EMC_SET_DEBUG_TYPE: /* set the debug level here */ EMC_DEBUG = ((EMC_SET_DEBUG *) cmd)->debug; /* and in IO and motion */ emcIoSetDebug(EMC_DEBUG); emcMotionSetDebug(EMC_DEBUG); /* and reflect it in the status-- this isn't updated continually */ emcStatus->debug = EMC_DEBUG; break; // unimplemented ones // IO commands case EMC_SPINDLE_ON_TYPE: spindle_on_msg = (EMC_SPINDLE_ON *) cmd; retval = emcSpindleOn(spindle_on_msg->speed, spindle_on_msg->factor, spindle_on_msg->xoffset); break; case EMC_SPINDLE_OFF_TYPE: retval = emcSpindleOff(); break; case EMC_SPINDLE_BRAKE_RELEASE_TYPE: retval = emcSpindleBrakeRelease(); break; case EMC_SPINDLE_INCREASE_TYPE: retval = emcSpindleIncrease(); break; case EMC_SPINDLE_DECREASE_TYPE: retval = emcSpindleDecrease(); break; case EMC_SPINDLE_CONSTANT_TYPE: retval = emcSpindleConstant(); break; case EMC_SPINDLE_BRAKE_ENGAGE_TYPE: retval = emcSpindleBrakeEngage(); break; case EMC_COOLANT_MIST_ON_TYPE: retval = emcCoolantMistOn(); break; case EMC_COOLANT_MIST_OFF_TYPE: retval = emcCoolantMistOff(); break; case EMC_COOLANT_FLOOD_ON_TYPE: retval = emcCoolantFloodOn(); break; case EMC_COOLANT_FLOOD_OFF_TYPE: retval = emcCoolantFloodOff(); break; case EMC_LUBE_ON_TYPE: retval = emcLubeOn(); break; case EMC_LUBE_OFF_TYPE: retval = emcLubeOff(); break; case EMC_TOOL_PREPARE_TYPE: tool_prepare_msg = (EMC_TOOL_PREPARE *) cmd; retval = emcToolPrepare(tool_prepare_msg->tool); break; case EMC_TOOL_LOAD_TYPE: retval = emcToolLoad(); break; case EMC_TOOL_UNLOAD_TYPE: retval = emcToolUnload(); break; case EMC_TOOL_LOAD_TOOL_TABLE_TYPE: load_tool_table_msg = (EMC_TOOL_LOAD_TOOL_TABLE *) cmd; retval = emcToolLoadToolTable(load_tool_table_msg->file); break; case EMC_TOOL_SET_OFFSET_TYPE: emc_tool_set_offset_msg = (EMC_TOOL_SET_OFFSET *) cmd;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -