⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emctaskmain.cc

📁 Source code for an Numeric Cmputer
💻 CC
📖 第 1 页 / 共 5 页
字号:
	default:	    break;	}    }    return 0;    // get rid of the compile-time cast shortcuts#undef circular_move_msg#undef linear_move_msg#undef operator_error_msg}/*  emcTaskPlan()  Planner for NC code or manual mode operations  */static int emcTaskPlan(void){    NMLTYPE type;    static char errstring[200];    int retval = 0;    int readRetval;    int execRetval;    // check for new command    if (emcCommand->serial_number != emcStatus->echo_serial_number) {	// flag it here locally as a new command	type = emcCommand->type;    } else {	// no new command-- reset local flag	type = 0;    }    // handle any new command    switch (emcStatus->task.state) {    case EMC_TASK_STATE_OFF:    case EMC_TASK_STATE_ESTOP:    case EMC_TASK_STATE_ESTOP_RESET:	// now switch on the mode	switch (emcStatus->task.mode) {	case EMC_TASK_MODE_MANUAL:	case EMC_TASK_MODE_AUTO:	case EMC_TASK_MODE_MDI:	    // now switch on the command	    switch (type) {	    case 0:	    case EMC_NULL_TYPE:		// no command		break;		// immediate commands	    case EMC_AXIS_SET_CYCLE_TIME_TYPE:	    case EMC_AXIS_SET_GAINS_TYPE:	    case EMC_AXIS_SET_BACKLASH_TYPE:	    case EMC_AXIS_SET_HOMING_PARAMS_TYPE:	    case EMC_AXIS_DISABLE_TYPE:	    case EMC_AXIS_ENABLE_TYPE:	    case EMC_AXIS_SET_OUTPUT_SCALE_TYPE:	    case EMC_AXIS_SET_FERROR_TYPE:	    case EMC_AXIS_SET_MIN_FERROR_TYPE:	    case EMC_AXIS_ABORT_TYPE:	    case EMC_AXIS_SET_OUTPUT_TYPE:	    case EMC_AXIS_LOAD_COMP_TYPE:	    case EMC_AXIS_ALTER_TYPE:	    case EMC_AXIS_SET_STEP_PARAMS_TYPE:	    case EMC_TRAJ_SET_SCALE_TYPE:	    case EMC_TRAJ_SET_VELOCITY_TYPE:	    case EMC_TRAJ_SET_ACCELERATION_TYPE:	    case EMC_TASK_INIT_TYPE:	    case EMC_TASK_SET_MODE_TYPE:	    case EMC_TASK_SET_STATE_TYPE:	    case EMC_TASK_PLAN_INIT_TYPE:	    case EMC_TASK_PLAN_OPEN_TYPE:	    case EMC_TASK_ABORT_TYPE:	    case EMC_TRAJ_SET_PROBE_INDEX_TYPE:	    case EMC_TRAJ_SET_PROBE_POLARITY_TYPE:	    case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE:	    case EMC_TRAJ_PROBE_TYPE:	    case EMC_TRAJ_SET_TELEOP_ENABLE_TYPE:	    case EMC_SET_DEBUG_TYPE:		retval = emcTaskIssueCommand(emcCommand);		break;		// one case where we need to be in manual mode	    case EMC_AXIS_OVERRIDE_LIMITS_TYPE:		retval = 0;		if (emcStatus->task.mode == EMC_TASK_MODE_MANUAL) {		    retval = emcTaskIssueCommand(emcCommand);		}		break;		// queued commands	    case EMC_TASK_PLAN_EXECUTE_TYPE:		// resynch the interpreter, since we may have moved		// externally		emcTaskIssueCommand(&taskPlanSynchCmd);		// and now call for interpreter execute		retval = emcTaskIssueCommand(emcCommand);		break;	    case EMC_TOOL_LOAD_TOOL_TABLE_TYPE:	    case EMC_TOOL_SET_OFFSET_TYPE:		// send to IO		emcTaskQueueCommand(emcCommand);		// signify no more reading		emcTaskPlanSetWait();		if (EMC_DEBUG & EMC_DEBUG_INTERP) {		    rcs_print("emcTaskPlanSetWait() called\n");		}		// then resynch interpreter		emcTaskQueueCommand(&taskPlanSynchCmd);		break;	    default:		emcOperatorError(0,				 _				 ("command (%s) cannot be executed until the machine is out of E-stop and turned on"),				 emc_symbol_lookup(type));		retval = -1;		break;	    }			// switch (type)	default:	    // invalid mode	    break;	}			// switch (mode)	break;			// case EMC_TASK_STATE_OFF,ESTOP,ESTOP_RESET    case EMC_TASK_STATE_ON:	/* we can do everything (almost) when the machine is on, so let's	   switch on the execution mode */	switch (emcStatus->task.mode) {	case EMC_TASK_MODE_MANUAL:	// ON, MANUAL	    switch (type) {	    case 0:	    case EMC_NULL_TYPE:		// no command		break;		// immediate commands	    case EMC_AXIS_DISABLE_TYPE:	    case EMC_AXIS_ENABLE_TYPE:	    case EMC_AXIS_SET_CYCLE_TIME_TYPE:	    case EMC_AXIS_SET_GAINS_TYPE:	    case EMC_AXIS_SET_BACKLASH_TYPE:	    case EMC_AXIS_SET_HOMING_PARAMS_TYPE:	    case EMC_AXIS_SET_INPUT_SCALE_TYPE:	    case EMC_AXIS_SET_OUTPUT_SCALE_TYPE:	    case EMC_AXIS_SET_FERROR_TYPE:	    case EMC_AXIS_SET_MIN_FERROR_TYPE:	    case EMC_AXIS_SET_MAX_POSITION_LIMIT_TYPE:	    case EMC_AXIS_SET_MIN_POSITION_LIMIT_TYPE:	    case EMC_AXIS_SET_STEP_PARAMS_TYPE:	    case EMC_AXIS_ABORT_TYPE:	    case EMC_AXIS_HALT_TYPE:	    case EMC_AXIS_HOME_TYPE:	    case EMC_AXIS_JOG_TYPE:	    case EMC_AXIS_INCR_JOG_TYPE:	    case EMC_AXIS_ABS_JOG_TYPE:	    case EMC_AXIS_OVERRIDE_LIMITS_TYPE:	    case EMC_AXIS_SET_OUTPUT_TYPE:	    case EMC_AXIS_ALTER_TYPE:	    case EMC_TRAJ_PAUSE_TYPE:	    case EMC_TRAJ_RESUME_TYPE:	    case EMC_TRAJ_ABORT_TYPE:	    case EMC_TRAJ_SET_SCALE_TYPE:	    case EMC_SPINDLE_ON_TYPE:	    case EMC_SPINDLE_OFF_TYPE:	    case EMC_SPINDLE_BRAKE_RELEASE_TYPE:	    case EMC_SPINDLE_BRAKE_ENGAGE_TYPE:	    case EMC_SPINDLE_INCREASE_TYPE:	    case EMC_SPINDLE_DECREASE_TYPE:	    case EMC_SPINDLE_CONSTANT_TYPE:	    case EMC_COOLANT_MIST_ON_TYPE:	    case EMC_COOLANT_MIST_OFF_TYPE:	    case EMC_COOLANT_FLOOD_ON_TYPE:	    case EMC_COOLANT_FLOOD_OFF_TYPE:	    case EMC_LUBE_ON_TYPE:	    case EMC_LUBE_OFF_TYPE:	    case EMC_TASK_SET_MODE_TYPE:	    case EMC_TASK_SET_STATE_TYPE:	    case EMC_TASK_ABORT_TYPE:	    case EMC_TASK_PLAN_PAUSE_TYPE:	    case EMC_TASK_PLAN_RESUME_TYPE:	    case EMC_TASK_PLAN_INIT_TYPE:	    case EMC_TASK_PLAN_SYNCH_TYPE:	    case EMC_TRAJ_SET_PROBE_INDEX_TYPE:	    case EMC_TRAJ_SET_PROBE_POLARITY_TYPE:	    case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE:	    case EMC_TRAJ_PROBE_TYPE:	    case EMC_TRAJ_SET_TELEOP_ENABLE_TYPE:	    case EMC_TRAJ_SET_TELEOP_VECTOR_TYPE:	    case EMC_SET_DEBUG_TYPE:		retval = emcTaskIssueCommand(emcCommand);		break;		// queued commands	    case EMC_TASK_PLAN_EXECUTE_TYPE:		// resynch the interpreter, since we may have moved		// externally		emcTaskIssueCommand(&taskPlanSynchCmd);		// and now call for interpreter execute		retval = emcTaskIssueCommand(emcCommand);		break;	    case EMC_TOOL_LOAD_TOOL_TABLE_TYPE:	    case EMC_TOOL_SET_OFFSET_TYPE:		// send to IO		emcTaskQueueCommand(emcCommand);		// signify no more reading		emcTaskPlanSetWait();		if (EMC_DEBUG & EMC_DEBUG_INTERP) {		    rcs_print("emcTaskPlanSetWait() called\n");		}		// then resynch interpreter		emcTaskQueueCommand(&taskPlanSynchCmd);		break;		// otherwise we can't handle it	    default:		sprintf(errstring, _("can't do that (%s) in manual mode"),			emc_symbol_lookup(type));		emcOperatorError(0, errstring);		retval = -1;		break;	    }			// switch (type) in ON, MANUAL	    break;		// case EMC_TASK_MODE_MANUAL	case EMC_TASK_MODE_AUTO:	// ON, AUTO	    switch (emcStatus->task.interpState) {	    case EMC_TASK_INTERP_IDLE:	// ON, AUTO, IDLE		switch (type) {		case 0:		case EMC_NULL_TYPE:		    // no command		    break;		    // immediate commands		case EMC_AXIS_SET_CYCLE_TIME_TYPE:		case EMC_AXIS_SET_GAINS_TYPE:		case EMC_AXIS_SET_BACKLASH_TYPE:		case EMC_AXIS_SET_HOMING_PARAMS_TYPE:		case EMC_AXIS_SET_OUTPUT_SCALE_TYPE:		case EMC_AXIS_SET_FERROR_TYPE:		case EMC_AXIS_SET_MIN_FERROR_TYPE:		case EMC_AXIS_SET_OUTPUT_TYPE:		case EMC_AXIS_ALTER_TYPE:		case EMC_AXIS_SET_STEP_PARAMS_TYPE:		case EMC_TRAJ_PAUSE_TYPE:		case EMC_TRAJ_RESUME_TYPE:		case EMC_TRAJ_ABORT_TYPE:		case EMC_TRAJ_SET_SCALE_TYPE:		case EMC_SPINDLE_ON_TYPE:		case EMC_SPINDLE_OFF_TYPE:		case EMC_SPINDLE_BRAKE_RELEASE_TYPE:		case EMC_SPINDLE_BRAKE_ENGAGE_TYPE:		case EMC_SPINDLE_INCREASE_TYPE:		case EMC_SPINDLE_DECREASE_TYPE:		case EMC_SPINDLE_CONSTANT_TYPE:		case EMC_COOLANT_MIST_ON_TYPE:		case EMC_COOLANT_MIST_OFF_TYPE:		case EMC_COOLANT_FLOOD_ON_TYPE:		case EMC_COOLANT_FLOOD_OFF_TYPE:		case EMC_LUBE_ON_TYPE:		case EMC_LUBE_OFF_TYPE:		case EMC_TASK_SET_MODE_TYPE:		case EMC_TASK_SET_STATE_TYPE:		case EMC_TASK_ABORT_TYPE:		case EMC_TASK_PLAN_INIT_TYPE:		case EMC_TASK_PLAN_OPEN_TYPE:		case EMC_TASK_PLAN_RUN_TYPE:		case EMC_TASK_PLAN_EXECUTE_TYPE:		case EMC_TASK_PLAN_PAUSE_TYPE:		case EMC_TASK_PLAN_RESUME_TYPE:		case EMC_TRAJ_SET_PROBE_INDEX_TYPE:		case EMC_TRAJ_SET_PROBE_POLARITY_TYPE:		case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE:		case EMC_TRAJ_PROBE_TYPE:		case EMC_SET_DEBUG_TYPE:		    retval = emcTaskIssueCommand(emcCommand);		    break;		case EMC_TASK_PLAN_STEP_TYPE:		    // handles case where first action is to step the program		    taskPlanRunCmd.line = 1;	// run from start		    /*! \todo FIXME-- can have GUI set this; send a run instead of a 		       step */		    retval = emcTaskIssueCommand(&taskPlanRunCmd);		    // issuing an EMC_TASK_PLAN_RUN message clears the		    // stepping		    // flag-- reset it here		    stepping = 1;	// set step flag		    steppingWait = 0;	// don't wait for first one		    break;		case EMC_TOOL_LOAD_TOOL_TABLE_TYPE:		case EMC_TOOL_SET_OFFSET_TYPE:		    // send to IO		    emcTaskQueueCommand(emcCommand);		    // signify no more reading		    emcTaskPlanSetWait();		    if (EMC_DEBUG & EMC_DEBUG_INTERP) {			rcs_print("emcTaskPlanSetWait() called\n");		    }		    // then resynch interpreter		    emcTaskQueueCommand(&taskPlanSynchCmd);		    break;		    // otherwise we can't handle it		default:		    sprintf(errstring,			    _			    ("can't do that (%s) in auto mode with the interpreter idle"),			    emc_symbol_lookup(type));		    emcOperatorError(0, errstring);		    retval = -1;		    break;		}		// switch (type) in ON, AUTO, IDLE		break;		// EMC_TASK_INTERP_IDLE	    case EMC_TASK_INTERP_READING:	// ON, AUTO, READING		switch (type) {		case 0:		case EMC_NULL_TYPE:		    // no command		    break;		    // immediate commands		case EMC_AXIS_SET_CYCLE_TIME_TYPE:		case EMC_AXIS_SET_GAINS_TYPE:		case EMC_AXIS_SET_BACKLASH_TYPE:		case EMC_AXIS_SET_HOMING_PARAMS_TYPE:		case EMC_AXIS_SET_OUTPUT_SCALE_TYPE:		case EMC_AXIS_SET_FERROR_TYPE:		case EMC_AXIS_SET_MIN_FERROR_TYPE:		case EMC_AXIS_SET_OUTPUT_TYPE:		case EMC_AXIS_ALTER_TYPE:		case EMC_AXIS_SET_STEP_PARAMS_TYPE:		case EMC_TRAJ_PAUSE_TYPE:		case EMC_TRAJ_RESUME_TYPE:		case EMC_TRAJ_ABORT_TYPE:		case EMC_TRAJ_SET_SCALE_TYPE:		case EMC_SPINDLE_INCREASE_TYPE:		case EMC_SPINDLE_DECREASE_TYPE:		case EMC_SPINDLE_CONSTANT_TYPE:		case EMC_TASK_PLAN_PAUSE_TYPE:		case EMC_TASK_PLAN_RESUME_TYPE:		case EMC_TASK_SET_MODE_TYPE:		case EMC_TASK_SET_STATE_TYPE:		case EMC_TASK_ABORT_TYPE:		case EMC_TRAJ_SET_PROBE_INDEX_TYPE:		case EMC_TRAJ_SET_PROBE_POLARITY_TYPE:		case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE:		case EMC_TRAJ_PROBE_TYPE:		case EMC_SET_DEBUG_TYPE:		    retval = emcTaskIssueCommand(emcCommand);		    return retval;		    break;		case EMC_TASK_PLAN_STEP_TYPE:		    stepping = 1;	// set stepping mode in case it's not		    steppingWait = 0;	// clear the wait		    break;		    // otherwise we can't handle it		default:		    sprintf(errstring,			    _			    ("can't do that (%s) in auto mode with the interpreter reading"),			    emc_symbol_lookup(type));		    emcOperatorError(0, errstring);		    retval = -1;		    break;		}		// switch (type) in ON, AUTO, READING		// now handle interpreter call logic		if (interp_list.len() <= EMC_TASK_INTERP_MAX_LEN) {		    if (emcTaskPlanIsWait()) {			// delay reading of next line until all is done			if (interp_list.len() == 0 &&			    emcTaskCommand == 0 &&			    emcStatus->task.execState ==			    EMC_TASK_EXEC_DONE) {			    emcTaskPlanClearWait();			    if (EMC_DEBUG & EMC_DEBUG_INTERP) {				rcs_print				    ("emcTaskPlanClearWait() called\n");			    }			}		    } else {			readRetval = emcTaskPlanRead();			if (EMC_DEBUG & EMC_DEBUG_INTERP) {			    rcs_print("emcTaskPlanRead() returned %d\n",				      readRetval);			}			/*! \todo MGS FIXME			   This next bit of code is goofy for the following reasons:			   1. It uses numbers when these values are #defined in interp_return.hh...			   2. This if() actually evaluates to if (readRetval != INTERP_OK)...			   3. The "end of file" comment is inaccurate...			   *** Need to look at all calls to things that return INTERP_xxx values! ***			   MGS */			if (readRetval > INTERP_MIN_ERROR || readRetval == 3	/* INTERP_ENDFILE 										 */  ||			    readRetval == 1 /* INTERP_EXIT */  ||			    readRetval == 2	/* INTERP_ENDFILE,						   INTERP_EXECUTE_FINISH */ ) {			    /* emcTaskPlanRead retval != INTERP_OK			       Signal to the rest of the system that that the interp			       is now in a paused state. */			    /*! \todo FIXME The above test *should* be reduced to:			       readRetVal != INTERP_OK			       (N.B. Watch for negative error codes.) */			    emcStatus->task.interpState =				EMC_TASK_INTERP_WAITING;			} else {			    // got a good line			    // record the line number and command			    emcStatus->task.readLine = emcTaskPlanLine();			    if (EMC_DEBUG & EMC_DEBUG_INTERP) {				rcs_print				    ("emcTaskPlanLine() returned %d\n",				     emcStatus->task.readLine);			    }			    interp_list.set_line_number(emcStatus->task.							readLine);			    emcTaskPlanCommand((char *) &emcStatus->task.					       command);			    if (EMC_DEBUG & EMC_DEBUG_INTERP) {				rcs_print				    ("emcTaskPlanCommand(%s) called. (line_number=%d)\n",				     ((char *) &emcStatus->task.command),				     emcStatus->task.readLine);			    }			    // and execute it			    execRetval = emcTaskPlanExecute(0);			    if (EMC_DEBUG & EMC_DEBUG_INTERP) {				rcs_print				    ("emcTaskPlanExecute(0) return %d\n",				     execRetval);			    }			    if (execRetval == -1 /* INTERP_ERROR */  ||				execRetval > INTERP_MIN_ERROR || execRetval == 1	/* INTERP_EXIT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -