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

📄 emc.hh

📁 Source code for an Numeric Cmputer
💻 HH
📖 第 1 页 / 共 5 页
字号:
 * 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 + -