📄 emccanon.cc
字号:
EMC_OPERATOR_ERROR operator_error_msg; flush_segments(); operator_error_msg.id = 0; if (fmt != NULL) { va_start(ap, fmt); vsprintf(operator_error_msg.error, fmt, ap); va_end(ap); } else { operator_error_msg.error[0] = 0; } interp_list.append(operator_error_msg);}/* GET_EXTERNAL_TOOL_TABLE(int pocket) Returns the tool table structure associated with pocket. Note that pocket can run from 0 (by definition, no tool), to pocket CANON_TOOL_MAX - 1. The value from emc status is in user units. We need to convert these to interpreter units, by calling FROM_EXT_LEN() to get them to mm, and then switching on lengthUnits. */CANON_TOOL_TABLE GET_EXTERNAL_TOOL_TABLE(int pocket){ CANON_TOOL_TABLE retval; if (pocket < 0 || pocket >= CANON_TOOL_MAX) { retval.id = 0; retval.xoffset = 0.0; retval.zoffset = 0.0; retval.frontangle = 0.0; retval.backangle = 0.0; retval.diameter = 0.0; retval.orientation = 0; } else { retval = emcStatus->io.tool.toolTable[pocket]; // convert from user to program units retval.xoffset = retval.xoffset; retval.zoffset = retval.zoffset; retval.diameter = retval.diameter; // leave the angles alone } return retval;}CANON_POSITION GET_EXTERNAL_POSITION(){ CANON_POSITION position; EmcPose pos; chained_points().clear(); pos = emcStatus->motion.traj.position; // first update internal record of last position canonEndPoint.x = FROM_EXT_LEN(pos.tran.x); canonEndPoint.y = FROM_EXT_LEN(pos.tran.y); canonEndPoint.z = FROM_EXT_LEN(pos.tran.z); canonEndPoint.a = FROM_EXT_ANG(pos.a); canonEndPoint.b = FROM_EXT_ANG(pos.b); canonEndPoint.c = FROM_EXT_ANG(pos.c); canonEndPoint.u = FROM_EXT_LEN(pos.u); canonEndPoint.v = FROM_EXT_LEN(pos.v); canonEndPoint.w = FROM_EXT_LEN(pos.w); // now calculate position in program units, for interpreter position.x = TO_PROG_LEN(canonEndPoint.x - programOrigin.x - currentXToolOffset); position.y = TO_PROG_LEN(canonEndPoint.y - programOrigin.y); position.z = TO_PROG_LEN(canonEndPoint.z - programOrigin.z - currentZToolOffset); position.a = TO_PROG_ANG(canonEndPoint.a - programOrigin.a); position.b = TO_PROG_ANG(canonEndPoint.b - programOrigin.b); position.c = TO_PROG_ANG(canonEndPoint.c - programOrigin.c); position.u = TO_PROG_LEN(canonEndPoint.u - programOrigin.u); position.v = TO_PROG_LEN(canonEndPoint.v - programOrigin.v); position.w = TO_PROG_LEN(canonEndPoint.w - programOrigin.w); return position;}CANON_POSITION GET_EXTERNAL_PROBE_POSITION(){ CANON_POSITION position; EmcPose pos; static CANON_POSITION last_probed_position; flush_segments(); pos = emcStatus->motion.traj.probedPosition; // first update internal record of last position pos.tran.x = FROM_EXT_LEN(pos.tran.x); pos.tran.y = FROM_EXT_LEN(pos.tran.y); pos.tran.z = FROM_EXT_LEN(pos.tran.z); pos.a = FROM_EXT_ANG(pos.a); pos.b = FROM_EXT_ANG(pos.b); pos.c = FROM_EXT_ANG(pos.c); pos.u = FROM_EXT_LEN(pos.u); pos.v = FROM_EXT_LEN(pos.v); pos.w = FROM_EXT_LEN(pos.w); // now calculate position in program units, for interpreter position.x = TO_PROG_LEN(pos.tran.x - programOrigin.x); position.y = TO_PROG_LEN(pos.tran.y - programOrigin.y); position.z = TO_PROG_LEN(pos.tran.z - programOrigin.z); position.x -= TO_PROG_LEN(currentXToolOffset); position.z -= TO_PROG_LEN(currentZToolOffset); position.a = TO_PROG_ANG(pos.a - programOrigin.a); position.b = TO_PROG_ANG(pos.b - programOrigin.b); position.c = TO_PROG_ANG(pos.c - programOrigin.c); position.u = TO_PROG_LEN(pos.u - programOrigin.u); position.v = TO_PROG_LEN(pos.v - programOrigin.v); position.w = TO_PROG_LEN(pos.w - programOrigin.w); if (probefile != NULL) { if (last_probed_position != position) { fprintf(probefile, "%f %f %f %f %f %f %f %f %f\n", position.x, position.y, position.z, position.a, position.b, position.c, position.u, position.v, position.w); last_probed_position = position; } } return position;}double GET_EXTERNAL_PROBE_VALUE(){ // only for analog non-contact probe, so force a 0 return 0.0;}int IS_EXTERNAL_QUEUE_EMPTY(){ flush_segments(); return emcStatus->motion.traj.queue == 0 ? 1 : 0;}// feed rate wanted is in program units per minutedouble GET_EXTERNAL_FEED_RATE(){ double feed; // convert from internal to program units // it is wrong to use emcStatus->motion.traj.velocity here, as that is the traj speed regardless of G0 / G1 feed = TO_PROG_LEN(currentLinearFeedRate); // now convert from per-sec to per-minute feed *= 60.0; return feed;}// traverse rate wanted is in program units per minutedouble GET_EXTERNAL_TRAVERSE_RATE(){ double traverse; // convert from external to program units traverse = TO_PROG_LEN(FROM_EXT_LEN(emcStatus->motion.traj.maxVelocity)); // now convert from per-sec to per-minute traverse *= 60.0; return traverse;}double GET_EXTERNAL_LENGTH_UNITS(void){ double u; u = emcStatus->motion.traj.linearUnits; if (u == 0) { CANON_ERROR("external length units are zero"); return 1.0; } else { return u; }}double GET_EXTERNAL_ANGLE_UNITS(void){ double u; u = emcStatus->motion.traj.angularUnits; if (u == 0) { CANON_ERROR("external angle units are zero"); return 1.0; } else { return u; }}int GET_EXTERNAL_TOOL(){ return emcStatus->io.tool.toolInSpindle;}int GET_EXTERNAL_MIST(){ return emcStatus->io.coolant.mist;}int GET_EXTERNAL_FLOOD(){ return emcStatus->io.coolant.flood;}int GET_EXTERNAL_POCKET(){ return emcStatus->io.tool.toolPrepped;}double GET_EXTERNAL_SPEED(){ // speed is in RPMs everywhere return emcStatus->motion.spindle.speed;}CANON_DIRECTION GET_EXTERNAL_SPINDLE(){ if (emcStatus->motion.spindle.speed == 0) { return CANON_STOPPED; } if (emcStatus->motion.spindle.speed >= 0.0) { return CANON_CLOCKWISE; } return CANON_COUNTERCLOCKWISE;}int GET_EXTERNAL_TOOL_MAX(){ return CANON_TOOL_MAX;}char _parameter_file_name[LINELEN]; /* Not static.Driver writes */void GET_EXTERNAL_PARAMETER_FILE_NAME(char *file_name, /* string: to copy file name into */ int max_size){ /* maximum number of characters to copy */ // Paranoid checks if (0 == file_name) return; if (max_size < 0) return; if (strlen(_parameter_file_name) < ((size_t) max_size)) strcpy(file_name, _parameter_file_name); else file_name[0] = 0;}double GET_EXTERNAL_POSITION_X(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.x;}double GET_EXTERNAL_POSITION_Y(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.y;}double GET_EXTERNAL_POSITION_Z(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.z;}double GET_EXTERNAL_POSITION_A(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.a;}double GET_EXTERNAL_POSITION_B(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.b;}double GET_EXTERNAL_POSITION_C(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.c;}double GET_EXTERNAL_POSITION_U(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.u;}double GET_EXTERNAL_POSITION_V(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.v;}double GET_EXTERNAL_POSITION_W(void){ CANON_POSITION position; position = GET_EXTERNAL_POSITION(); return position.w;}double GET_EXTERNAL_PROBE_POSITION_X(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.x;}double GET_EXTERNAL_PROBE_POSITION_Y(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.y;}double GET_EXTERNAL_PROBE_POSITION_Z(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.z;}double GET_EXTERNAL_PROBE_POSITION_A(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.a;}double GET_EXTERNAL_PROBE_POSITION_B(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.b;}double GET_EXTERNAL_PROBE_POSITION_C(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.c;}double GET_EXTERNAL_PROBE_POSITION_U(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.u;}double GET_EXTERNAL_PROBE_POSITION_V(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.v;}double GET_EXTERNAL_PROBE_POSITION_W(void){ CANON_POSITION position; position = GET_EXTERNAL_PROBE_POSITION(); return position.w;}CANON_MOTION_MODE GET_EXTERNAL_MOTION_CONTROL_MODE(){ return canonMotionMode;}double GET_EXTERNAL_MOTION_CONTROL_TOLERANCE(){ return TO_PROG_LEN(canonMotionTolerance);}CANON_UNITS GET_EXTERNAL_LENGTH_UNIT_TYPE(){ return lengthUnits;}int GET_EXTERNAL_QUEUE_EMPTY(void){ flush_segments(); return emcStatus->motion.traj.queue == 0 ? 1 : 0;}int GET_EXTERNAL_TOOL_SLOT(){ return emcStatus->io.tool.toolInSpindle;}int GET_EXTERNAL_SELECTED_TOOL_SLOT(){ return emcStatus->io.tool.toolPrepped;}int GET_EXTERNAL_FEED_OVERRIDE_ENABLE(){ return emcStatus->motion.traj.feed_override_enabled;}int GET_EXTERNAL_SPINDLE_OVERRIDE_ENABLE(){ return emcStatus->motion.traj.spindle_override_enabled;}int GET_EXTERNAL_ADAPTIVE_FEED_ENABLE(){ return emcStatus->motion.traj.adaptive_feed_enabled;}int GET_EXTERNAL_FEED_HOLD_ENABLE(){ return emcStatus->motion.traj.feed_hold_enabled;}int GET_EXTERNAL_AXIS_MASK() { return emcStatus->motion.traj.axis_mask;}CANON_PLANE GET_EXTERNAL_PLANE(){ return activePlane;}int GET_EXTERNAL_DIGITAL_INPUT(int index){/* returns current value of the digital input selected by index.*/ if ((index < 0) || (index >= EMC_MAX_DIO)) return -1; if (emcStatus->task.input_timeout == 1) return -1;//#ifdef INPUT_DEBUG printf("GET_EXTERNAL_DIGITAL_INPUT called\n di[%d]=%d \n timeout=%d \n",index,emcStatus->motion.synch_di[index],emcStatus->task.input_timeout);//#endif return (emcStatus->motion.synch_di[index] != 0) ? 1 : 0;}double GET_EXTERNAL_AN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -