📄 emc.hh
字号:
* a 2000 counts per rev encoder, and 10 revs/inch gearing, and desired units * of mm, we have * * [scale units] = 2000 [counts/rev] * 10 [rev/inch] * 1/25.4 [inch/mm] * [scale units] = 787.4 counts/mm * * and, as a result, * * input [mm] = (encoder [counts] - offset [counts]) / 787.4 [counts/mm] * * Note that the units of the offset are in sensor units, e.g., counts, and * they are pre-subtracted from the sensor readings. The value for this offset * is obtained by finding the value of counts for which you want your user * units to read 0.0. This is normally accomplished automatically during a * homing procedure. * * Note that using this command to change the scale is not a good idea * once things have gotten underway, since the axis will * jump servo to the "new" position, the gains will no longer * be appropriate, etc. */class EMC_AXIS_SET_INPUT_SCALE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_INPUT_SCALE():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_INPUT_SCALE_TYPE, sizeof(EMC_AXIS_SET_INPUT_SCALE)) { }; // For internal NML/CMS use only. void update(CMS * cms); double scale, offset;};class EMC_AXIS_SET_OUTPUT_SCALE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_OUTPUT_SCALE():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_OUTPUT_SCALE_TYPE, sizeof(EMC_AXIS_SET_OUTPUT_SCALE)) { }; // For internal NML/CMS use only. void update(CMS * cms); double scale, offset;};class EMC_AXIS_SET_MIN_POSITION_LIMIT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MIN_POSITION_LIMIT():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MIN_POSITION_LIMIT_TYPE, sizeof(EMC_AXIS_SET_MIN_POSITION_LIMIT)) { }; // For internal NML/CMS use only. void update(CMS * cms); double limit;};class EMC_AXIS_SET_MAX_POSITION_LIMIT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MAX_POSITION_LIMIT():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MAX_POSITION_LIMIT_TYPE, sizeof(EMC_AXIS_SET_MAX_POSITION_LIMIT)) { }; // For internal NML/CMS use only. void update(CMS * cms); double limit;};class EMC_AXIS_SET_MIN_OUTPUT_LIMIT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MIN_OUTPUT_LIMIT():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MIN_OUTPUT_LIMIT_TYPE, sizeof(EMC_AXIS_SET_MIN_OUTPUT_LIMIT)) { }; // For internal NML/CMS use only. void update(CMS * cms); double limit;};class EMC_AXIS_SET_MAX_OUTPUT_LIMIT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MAX_OUTPUT_LIMIT():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MAX_OUTPUT_LIMIT_TYPE, sizeof(EMC_AXIS_SET_MAX_OUTPUT_LIMIT)) { }; // For internal NML/CMS use only. void update(CMS * cms); double limit;};class EMC_AXIS_SET_FERROR:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_FERROR():EMC_AXIS_CMD_MSG(EMC_AXIS_SET_FERROR_TYPE, sizeof(EMC_AXIS_SET_FERROR)) { }; // For internal NML/CMS use only. void update(CMS * cms); double ferror;};class EMC_AXIS_SET_MIN_FERROR:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MIN_FERROR():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MIN_FERROR_TYPE, sizeof(EMC_AXIS_SET_MIN_FERROR)) { }; // For internal NML/CMS use only. void update(CMS * cms); double ferror;};class EMC_AXIS_SET_HOMING_PARAMS:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_HOMING_PARAMS():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_HOMING_PARAMS_TYPE, sizeof(EMC_AXIS_SET_HOMING_PARAMS)) { }; // For internal NML/CMS use only. void update(CMS * cms); double home; double offset; double search_vel; double latch_vel; int use_index; int ignore_limits;};class EMC_AXIS_SET_MAX_VELOCITY:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_MAX_VELOCITY():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_MAX_VELOCITY_TYPE, sizeof(EMC_AXIS_SET_MAX_VELOCITY)) { }; // For internal NML/CMS use only. void update(CMS * cms); double vel;};class EMC_AXIS_INIT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_INIT():EMC_AXIS_CMD_MSG(EMC_AXIS_INIT_TYPE, sizeof(EMC_AXIS_INIT)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_HALT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_HALT():EMC_AXIS_CMD_MSG(EMC_AXIS_HALT_TYPE, sizeof(EMC_AXIS_HALT)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_ABORT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_ABORT():EMC_AXIS_CMD_MSG(EMC_AXIS_ABORT_TYPE, sizeof(EMC_AXIS_ABORT)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_ENABLE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_ENABLE():EMC_AXIS_CMD_MSG(EMC_AXIS_ENABLE_TYPE, sizeof(EMC_AXIS_ENABLE)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_DISABLE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_DISABLE():EMC_AXIS_CMD_MSG(EMC_AXIS_DISABLE_TYPE, sizeof(EMC_AXIS_DISABLE)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_HOME:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_HOME():EMC_AXIS_CMD_MSG(EMC_AXIS_HOME_TYPE, sizeof(EMC_AXIS_HOME)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_JOG:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_JOG():EMC_AXIS_CMD_MSG(EMC_AXIS_JOG_TYPE, sizeof(EMC_AXIS_JOG)) { }; // For internal NML/CMS use only. void update(CMS * cms); double vel;};class EMC_AXIS_INCR_JOG:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_INCR_JOG():EMC_AXIS_CMD_MSG(EMC_AXIS_INCR_JOG_TYPE, sizeof(EMC_AXIS_INCR_JOG)) { }; // For internal NML/CMS use only. void update(CMS * cms); double incr; double vel;};class EMC_AXIS_ABS_JOG:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_ABS_JOG():EMC_AXIS_CMD_MSG(EMC_AXIS_ABS_JOG_TYPE, sizeof(EMC_AXIS_ABS_JOG)) { }; // For internal NML/CMS use only. void update(CMS * cms); double pos; double vel;};class EMC_AXIS_ACTIVATE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_ACTIVATE():EMC_AXIS_CMD_MSG(EMC_AXIS_ACTIVATE_TYPE, sizeof(EMC_AXIS_ACTIVATE)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_DEACTIVATE:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_DEACTIVATE():EMC_AXIS_CMD_MSG(EMC_AXIS_DEACTIVATE_TYPE, sizeof(EMC_AXIS_DEACTIVATE)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_OVERRIDE_LIMITS:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_OVERRIDE_LIMITS():EMC_AXIS_CMD_MSG (EMC_AXIS_OVERRIDE_LIMITS_TYPE, sizeof(EMC_AXIS_OVERRIDE_LIMITS)) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_AXIS_SET_OUTPUT:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_OUTPUT():EMC_AXIS_CMD_MSG(EMC_AXIS_SET_OUTPUT_TYPE, sizeof(EMC_AXIS_SET_OUTPUT)) { }; // For internal NML/CMS use only. void update(CMS * cms); double output; // value for output, in physical units // (volts)};class EMC_AXIS_LOAD_COMP:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_LOAD_COMP():EMC_AXIS_CMD_MSG(EMC_AXIS_LOAD_COMP_TYPE, sizeof(EMC_AXIS_LOAD_COMP)) { }; // For internal NML/CMS use only. void update(CMS * cms); char file[LINELEN];};class EMC_AXIS_ALTER:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_ALTER():EMC_AXIS_CMD_MSG(EMC_AXIS_ALTER_TYPE, sizeof(EMC_AXIS_ALTER)) { }; // For internal NML/CMS use only. void update(CMS * cms); double alter;};/** * Set the step parameters. * This command sets the setup time of the direction signal, * and the hold time of the step signal. */class EMC_AXIS_SET_STEP_PARAMS:public EMC_AXIS_CMD_MSG { public: EMC_AXIS_SET_STEP_PARAMS():EMC_AXIS_CMD_MSG (EMC_AXIS_SET_STEP_PARAMS_TYPE, sizeof(EMC_AXIS_SET_STEP_PARAMS)) { }; // For internal NML/CMS use only. void update(CMS * cms); double setup_time; double hold_time;};// AXIS status base classclass EMC_AXIS_STAT_MSG:public RCS_STAT_MSG { public: EMC_AXIS_STAT_MSG(NMLTYPE t, size_t s):RCS_STAT_MSG(t, s) { }; // For internal NML/CMS use only. void update(CMS * cms); int axis;};class EMC_AXIS_STAT:public EMC_AXIS_STAT_MSG { public: EMC_AXIS_STAT(); // For internal NML/CMS use only. void update(CMS * cms); // configuration parameters unsigned char axisType; // EMC_AXIS_LINEAR, EMC_AXIS_ANGULAR double units; // units per mm, deg for linear, angular double p; double i; double d; double ff0; double ff1; double ff2; double backlash; double bias; double maxError; double deadband; double cycleTime; double inputScale; double inputOffset; double outputScale; double outputOffset; double minPositionLimit; double maxPositionLimit; double minOutputLimit; double maxOutputLimit; double maxFerror; double minFerror; /*! \todo FIXME - homingVel has been superceded */ double homingVel; double setup_time; double hold_time; double homeOffset; unsigned char enablePolarity; unsigned char minLimitSwitchPolarity; unsigned char maxLimitSwitchPolarity; unsigned char homeSwitchPolarity; unsigned char homingPolarity; unsigned char faultPolarity; // dynamic status /*! \todo FIXME - is this the position cmd from control to PID, or something else? */ double setpoint; // input to axis controller double ferrorCurrent; // current following error double ferrorHighMark; // magnitude of max following error /*! \todo FIXME - is this really position, or the DAC output? */ double output; // commanded output position double input; // current input position unsigned char inpos; // non-zero means in position unsigned char homing; // non-zero means homing unsigned char homed; // non-zero means has been homed unsigned char fault; // non-zero means axis amp fault unsigned char enabled; // non-zero means enabled unsigned char minSoftLimit; // non-zero means min soft limit exceeded unsigned char maxSoftLimit; // non-zero means max soft limit exceeded unsigned char minHardLimit; // non-zero means min hard limit exceeded unsigned char maxHardLimit; // non-zero means max hard limit exceeded unsigned char overrideLimits; // non-zero means limits are // overridden double scale; // velocity scale double alter; // external position alter value};// declarations for EMC_TRAJ classes// EMC_TRAJ command base classclass EMC_TRAJ_CMD_MSG:public RCS_CMD_MSG { public: EMC_TRAJ_CMD_MSG(NMLTYPE t, size_t s):RCS_CMD_MSG(t, s) { }; // For internal NML/CMS use only. void update(CMS * cms);};class EMC_TRAJ_SET_UNITS:public EMC_TRAJ_CMD_MSG { public: EMC_TRAJ_SET_UNITS():EMC_TRAJ_CMD_MSG(EMC_TRAJ_SET_UNITS_TYPE, sizeof(EMC_TRAJ_SET_UNITS)) { }; // For internal NML/CMS use only. void update(CMS * cms); double linearUnits; // units per mm double angularUnits; // units per degree};class EMC_TRAJ_SET_AXES:public EMC_TRAJ_CMD_MSG { public: EMC_TRAJ_SET_AXES():EMC_TRAJ_CMD_MSG(EMC_TRAJ_SET_AXES_TYPE, sizeof(EMC_TRAJ_SET_AXES)) { }; // For internal NML/CMS use only.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -