Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

minimillaux.cc

Go to the documentation of this file.
00001 /*
00002   minimillaux.cc
00003 
00004   Controller for NIST minimill auxiliary I/O
00005 
00006   Modification history:
00007 
00008   3-Mar-2000  FMP added setting of estopIn status
00009   31-Aug-1999  FMP changed to minimillaux.cc
00010   28-Apr-1998  FMP took out ::iniLoad(), put in iniAux()
00011   1-Apr-1998  FMP created from Shaver Bridgeport
00012   */
00013 
00014 #include "rcs.hh"               // NML
00015 #include "emc.hh"               // EMC NML
00016 #include "emcio.hh"             // these decls
00017 #include "emcglb.h"
00018 #include "extintf.h"            // extDioSet(),Clear()
00019 #include "iniaux.hh"            // iniAux()
00020 
00021 // ident tag
00022 #ifndef __GNUC__
00023 #ifndef __attribute__
00024 #define __attribute__(x)
00025 #endif
00026 #endif
00027 
00028 static char __attribute__((unused))  ident[] = "$Id: minimillaux.cc,v 1.2 2000/10/27 20:34:42 terrylr Exp $";
00029 
00030 // local functions
00031 
00032 static int estopState = 1;
00033 
00034 static void estopOn()
00035 {
00036   estopState = 1;
00037 }
00038 
00039 static void estopOff()
00040 {
00041   estopState = 0;
00042 }
00043 
00044 static int isEstop()
00045 {
00046   return estopState;
00047 }
00048 
00049 // constructor
00050 
00051 EMC_AUX_MODULE::EMC_AUX_MODULE()
00052 {
00053   setErrorLogChannel(new NML(nmlErrorFormat, "emcError", "aux", EMC_NMLFILE));
00054 
00055   setCmdChannel(new RCS_CMD_CHANNEL(emcFormat, "auxCmd", "aux", EMC_NMLFILE));
00056 
00057   setStatChannel(new RCS_STAT_CHANNEL(emcFormat, "auxSts", "aux", EMC_NMLFILE), &auxStatus);
00058 }
00059 
00060 // destructor
00061 
00062 EMC_AUX_MODULE::~EMC_AUX_MODULE(void)
00063 {
00064 }
00065 
00066 void EMC_AUX_MODULE::DECISION_PROCESS(void)
00067 {
00068   switch (commandInData->type)
00069     {
00070     case EMC_AUX_INIT_TYPE:
00071       INIT((EMC_AUX_INIT *) commandInData);
00072       break;
00073 
00074     case EMC_AUX_HALT_TYPE:
00075       HALT((EMC_AUX_HALT *) commandInData);
00076       break;
00077 
00078     case EMC_AUX_ABORT_TYPE:
00079       ABORT((EMC_AUX_ABORT *) commandInData);
00080       break;
00081 
00082     case EMC_AUX_DIO_WRITE_TYPE:
00083       DIO_WRITE((EMC_AUX_DIO_WRITE *) commandInData);
00084       break;
00085 
00086     case EMC_AUX_AIO_WRITE_TYPE:
00087       AIO_WRITE((EMC_AUX_AIO_WRITE *) commandInData);
00088       break;
00089 
00090     case EMC_AUX_ESTOP_ON_TYPE:
00091       ESTOP_ON((EMC_AUX_ESTOP_ON *) commandInData);
00092       break;
00093 
00094     case EMC_AUX_ESTOP_OFF_TYPE:
00095       ESTOP_OFF((EMC_AUX_ESTOP_OFF *) commandInData);
00096       break;
00097 
00098     default:
00099       REPORT_ERROR(commandInData);
00100       break;
00101     }
00102 }
00103 
00104 void EMC_AUX_MODULE::PRE_PROCESS(void)
00105 {
00106 }
00107 
00108 void EMC_AUX_MODULE::POST_PROCESS(void)
00109 {
00110   int t;
00111   unsigned char in;
00112 
00113   auxStatus.estopIn = auxStatus.estop = isEstop();
00114 
00115   // do digital ins, outs
00116   for (t = 0; t < EMC_AUX_MAX_DIN; t++)
00117     {
00118       extDioByteRead(t, &in);
00119       auxStatus.din[t] = in;
00120     }
00121   for (t = 0; t < EMC_AUX_MAX_DOUT; t++)
00122     {
00123       extDioByteCheck(t, &in);
00124       auxStatus.dout[t] = in;
00125     }
00126 
00127   // do analog ins, outs
00128   for (t = 0; t < EMC_AUX_MAX_AIN; t++)
00129     {
00130       extAioRead(t, &auxStatus.ain[t]);
00131     }
00132   for (t = 0; t < EMC_AUX_MAX_AOUT; t++)
00133     {
00134       extAioCheck(t, &auxStatus.aout[t]);
00135     }
00136 }
00137 
00138 void EMC_AUX_MODULE::INIT(EMC_AUX_INIT *cmdIn)
00139 {
00140   if (STATE_MATCH(NEW_COMMAND))
00141     {
00142       // load params from ini file
00143       iniAux(EMC_INIFILE);
00144 
00145       // go into estop
00146       estopOn();
00147 
00148       status = RCS_DONE;
00149       stateNext(S0);
00150     }
00151   else if (STATE_MATCH(S0))
00152     {
00153       // idle
00154     }
00155 }
00156 
00157 void EMC_AUX_MODULE::HALT(EMC_AUX_HALT *cmdIn)
00158 {
00159   if (STATE_MATCH(NEW_COMMAND))
00160     {
00161       // go into estop
00162       estopOn();
00163 
00164       status = RCS_DONE;
00165       stateNext(S0);
00166     }
00167   else if (STATE_MATCH(S0))
00168     {
00169       // idle
00170     }
00171 }
00172 
00173 void EMC_AUX_MODULE::ABORT(EMC_AUX_ABORT *cmdIn)
00174 {
00175   if (STATE_MATCH(NEW_COMMAND))
00176     {
00177       // don't fool with the estop-- abort just means stop task
00178       status = RCS_DONE;
00179       stateNext(S0);
00180     }
00181   else if (STATE_MATCH(S0))
00182     {
00183       // idle
00184     }
00185 }
00186 
00187 void EMC_AUX_MODULE::REPORT_ERROR(RCS_CMD_MSG *cmdIn)
00188 {
00189   if (STATE_MATCH(NEW_COMMAND))
00190     {
00191       rcs_print_error("EMC_AUX_MODULE: unknown command %d\n",
00192                       cmdIn->type);
00193       status = RCS_ERROR;
00194       stateNext(S0);
00195     }
00196   else if (STATE_MATCH(S0))
00197     {
00198       // idle
00199     }
00200 }
00201 
00202 void EMC_AUX_MODULE::ESTOP_ON(EMC_AUX_ESTOP_ON *cmdIn)
00203 {
00204   if (STATE_MATCH(NEW_COMMAND))
00205     {
00206       // go into estop
00207       estopOn();
00208 
00209       status = RCS_DONE;
00210       stateNext(S0);
00211     }
00212   else if (STATE_MATCH(S0))
00213     {
00214       // idle
00215     }
00216 }
00217 
00218 void EMC_AUX_MODULE::DIO_WRITE(EMC_AUX_DIO_WRITE *cmdIn)
00219 {
00220   if (STATE_MATCH(NEW_COMMAND))
00221     {
00222       // write bit in digital IO
00223       extDioWrite(cmdIn->index, cmdIn->value);
00224 
00225       status = RCS_DONE;
00226       stateNext(S0);
00227     }
00228   else if (STATE_MATCH(S0))
00229     {
00230       // idle
00231     }
00232 }
00233 
00234 void EMC_AUX_MODULE::AIO_WRITE(EMC_AUX_AIO_WRITE *cmdIn)
00235 {
00236   if (STATE_MATCH(NEW_COMMAND))
00237     {
00238       // write bit in analog IO
00239       extAioWrite(cmdIn->index, cmdIn->value);
00240 
00241       status = RCS_DONE;
00242       stateNext(S0);
00243     }
00244   else if (STATE_MATCH(S0))
00245     {
00246       // idle
00247     }
00248 }
00249 
00250 void EMC_AUX_MODULE::ESTOP_OFF(EMC_AUX_ESTOP_OFF *cmdIn)
00251 {
00252   if (STATE_MATCH(NEW_COMMAND))
00253     {
00254       // come out of estop
00255       estopOff();
00256 
00257       status = RCS_DONE;
00258       stateNext(S0);
00259     }
00260   else if (STATE_MATCH(S0))
00261     {
00262       // idle
00263     }
00264 }

Generated on Sun Dec 2 15:27:41 2001 for EMC by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001