00001 #ifndef EMCIO_HH 00002 #define EMCIO_HH 00003 00004 /* 00005 emcio.hh 00006 00007 Decls for EMC control modules in discrete I/O hierarchy 00008 00009 Modification history: 00010 00011 23-Apr-1998 FMP took out iniLoad(), used iniTool() instead 00012 24-Mar-1998 FMP changed ERROR() to REPORT_ERROR() due to conflict 00013 in VC++ 00014 20-Feb-1998 FMP added spindle brake release,engage in tool module 00015 11-Dec-1997 FMP created from nce stuff 00016 */ 00017 00018 #include "emc.hh" // EMC NML 00019 #include "nml_mod.hh" // NML_MODULE 00020 #include "inifile.h" // INIFILE 00021 00022 // how long an inifile name can be 00023 #define EMCIO_INIFILE_NAME_LEN 256 00024 00025 // default ini file name 00026 #define DEFAULT_EMCIO_INIFILE_NAME "emc.ini" 00027 00028 // this should be defined in main file, set by argv 00029 extern char EMCIO_INIFILE[EMCIO_INIFILE_NAME_LEN]; 00030 00031 // EMC dicrete I/O control module classes 00032 00033 // top level is tool controller 00034 class EMC_TOOL_MODULE: public NML_MODULE 00035 { 00036 public: 00037 00038 EMC_TOOL_MODULE(void); 00039 ~EMC_TOOL_MODULE(void); 00040 00041 void DECISION_PROCESS(void); 00042 void PRE_PROCESS(void); 00043 void POST_PROCESS(void); 00044 00045 /* 00046 EMC tool controller decomposes higher-level I/O commands into 00047 sequences of actions for spindle, coolant, and auxiliary controllers. 00048 00049 Tool commands are handled directly. 00050 00051 Spindle commands are given as on (with a signed speed) or off; they 00052 are converted to brake-on,off, spindle forward,reverse for the lower 00053 level spindle controller. 00054 00055 Coolant functions are checked for estop-on status, then passed to 00056 the coolant controller. 00057 00058 Auxiliary (estop) functions are checked so that when coming out of 00059 estop, all systems are in a safe state (spindle off, brake on, coolant 00060 off). 00061 */ 00062 00063 // generic functions 00064 void INIT(EMC_TOOL_INIT *); 00065 void HALT(EMC_TOOL_HALT *); 00066 void ABORT(EMC_TOOL_ABORT *); 00067 void REPORT_ERROR(RCS_CMD_MSG *); 00068 00069 // tool functions 00070 void TOOL_PREPARE(EMC_TOOL_PREPARE *); 00071 void TOOL_LOAD(EMC_TOOL_LOAD *); 00072 void TOOL_UNLOAD(EMC_TOOL_UNLOAD *); 00073 void TOOL_LOAD_TOOL_TABLE(EMC_TOOL_LOAD_TOOL_TABLE *); 00074 void TOOL_SET_OFFSET(EMC_TOOL_SET_OFFSET *); 00075 00076 // spindle functions 00077 void SPINDLE_ON(EMC_SPINDLE_ON *); 00078 void SPINDLE_OFF(EMC_SPINDLE_OFF *); 00079 void SPINDLE_INCREASE(EMC_SPINDLE_INCREASE *); 00080 void SPINDLE_DECREASE(EMC_SPINDLE_DECREASE *); 00081 void SPINDLE_CONSTANT(EMC_SPINDLE_CONSTANT *); 00082 void SPINDLE_BRAKE_RELEASE(EMC_SPINDLE_BRAKE_RELEASE *); 00083 void SPINDLE_BRAKE_ENGAGE(EMC_SPINDLE_BRAKE_ENGAGE *); 00084 void SPINDLE_ENABLE(EMC_SPINDLE_ENABLE *); 00085 void SPINDLE_DISABLE(EMC_SPINDLE_DISABLE *); 00086 00087 // coolant functions 00088 void COOLANT_MIST_ON(EMC_COOLANT_MIST_ON *); 00089 void COOLANT_MIST_OFF(EMC_COOLANT_MIST_OFF *); 00090 void COOLANT_FLOOD_ON(EMC_COOLANT_FLOOD_ON *); 00091 void COOLANT_FLOOD_OFF(EMC_COOLANT_FLOOD_OFF *); 00092 00093 // auxiliary functions 00094 void AUX_ESTOP_ON(EMC_AUX_ESTOP_ON *); 00095 void AUX_ESTOP_OFF(EMC_AUX_ESTOP_OFF *); 00096 void AUX_DIO_WRITE(EMC_AUX_DIO_WRITE *); 00097 void AUX_AIO_WRITE(EMC_AUX_AIO_WRITE *); 00098 00099 // lube functions 00100 void LUBE_ON(EMC_LUBE_ON *); 00101 void LUBE_OFF(EMC_LUBE_OFF *); 00102 00103 // subordinate ids 00104 int spindleSubNum; 00105 int coolantSubNum; 00106 int auxSubNum; 00107 int lubeSubNum; 00108 00109 // aggregate status information 00110 EMC_IO_STAT ioStatus; 00111 00112 // local data 00113 double deltaClock; // load and decrement for time delays 00114 }; 00115 00116 // spindle controller is subordinate to tool controller 00117 class EMC_SPINDLE_MODULE: public NML_MODULE 00118 { 00119 public: 00120 00121 EMC_SPINDLE_MODULE(void); 00122 ~EMC_SPINDLE_MODULE(void); 00123 00124 void DECISION_PROCESS(void); 00125 void PRE_PROCESS(void); 00126 void POST_PROCESS(void); 00127 00128 void INIT(EMC_SPINDLE_INIT *); 00129 void HALT(EMC_SPINDLE_HALT *); 00130 void ABORT(EMC_SPINDLE_ABORT *); 00131 void REPORT_ERROR(RCS_CMD_MSG *); 00132 00133 // spindle functions 00134 void SPINDLE_FORWARD(EMC_SPINDLE_FORWARD *); 00135 void SPINDLE_REVERSE(EMC_SPINDLE_REVERSE *); 00136 void SPINDLE_ON(EMC_SPINDLE_ON *); 00137 void SPINDLE_STOP(EMC_SPINDLE_STOP *); 00138 void SPINDLE_INCREASE(EMC_SPINDLE_INCREASE *); 00139 void SPINDLE_DECREASE(EMC_SPINDLE_DECREASE *); 00140 void SPINDLE_CONSTANT(EMC_SPINDLE_CONSTANT *); 00141 void SPINDLE_BRAKE_RELEASE(EMC_SPINDLE_BRAKE_RELEASE *); 00142 void SPINDLE_BRAKE_ENGAGE(EMC_SPINDLE_BRAKE_ENGAGE *); 00143 void SPINDLE_ENABLE(EMC_SPINDLE_ENABLE *); 00144 void SPINDLE_DISABLE(EMC_SPINDLE_DISABLE *); 00145 00146 // status information 00147 EMC_SPINDLE_STAT spindleStatus; 00148 }; 00149 00150 // coolant controller is subordinate to tool controller 00151 class EMC_COOLANT_MODULE: public NML_MODULE 00152 { 00153 public: 00154 00155 EMC_COOLANT_MODULE(void); 00156 ~EMC_COOLANT_MODULE(void); 00157 00158 void DECISION_PROCESS(void); 00159 void PRE_PROCESS(void); 00160 void POST_PROCESS(void); 00161 00162 void INIT(EMC_COOLANT_INIT *); 00163 void HALT(EMC_COOLANT_HALT *); 00164 void ABORT(EMC_COOLANT_ABORT *); 00165 void REPORT_ERROR(RCS_CMD_MSG *); 00166 00167 // coolant functions 00168 void MIST_ON(EMC_COOLANT_MIST_ON *); 00169 void MIST_OFF(EMC_COOLANT_MIST_OFF *); 00170 void FLOOD_ON(EMC_COOLANT_FLOOD_ON *); 00171 void FLOOD_OFF(EMC_COOLANT_FLOOD_OFF *); 00172 00173 // status information 00174 EMC_COOLANT_STAT coolantStatus; 00175 }; 00176 00177 // auxiliary controller is subordinate to tool controller 00178 class EMC_AUX_MODULE: public NML_MODULE 00179 { 00180 public: 00181 00182 EMC_AUX_MODULE(void); 00183 ~EMC_AUX_MODULE(void); 00184 00185 void DECISION_PROCESS(void); 00186 void PRE_PROCESS(void); 00187 void POST_PROCESS(void); 00188 00189 void INIT(EMC_AUX_INIT *); 00190 void HALT(EMC_AUX_HALT *); 00191 void ABORT(EMC_AUX_ABORT *); 00192 void REPORT_ERROR(RCS_CMD_MSG *); 00193 00194 // aux functions 00195 void ESTOP_ON(EMC_AUX_ESTOP_ON *); 00196 void ESTOP_OFF(EMC_AUX_ESTOP_OFF *); 00197 void DIO_WRITE(EMC_AUX_DIO_WRITE *); 00198 void AIO_WRITE(EMC_AUX_AIO_WRITE *); 00199 00200 // status information 00201 EMC_AUX_STAT auxStatus; 00202 }; 00203 00204 // lube controller is subordinate to tool controller 00205 class EMC_LUBE_MODULE: public NML_MODULE 00206 { 00207 public: 00208 00209 EMC_LUBE_MODULE(void); 00210 ~EMC_LUBE_MODULE(void); 00211 00212 void DECISION_PROCESS(void); 00213 void PRE_PROCESS(void); 00214 void POST_PROCESS(void); 00215 00216 void INIT(EMC_LUBE_INIT *); 00217 void HALT(EMC_LUBE_HALT *); 00218 void ABORT(EMC_LUBE_ABORT *); 00219 void REPORT_ERROR(RCS_CMD_MSG *); 00220 00221 // lube functions 00222 void LUBE_ON(EMC_LUBE_ON *); 00223 void LUBE_OFF(EMC_LUBE_OFF *); 00224 00225 // status information 00226 EMC_LUBE_STAT lubeStatus; 00227 }; 00228 00229 #endif // EMCIO_HH