Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

ConfigParser.h

Go to the documentation of this file.
00001 #ifndef CONFIGPARSER_H
00002 #define CONFIGPARSER_H
00003 /*********************************************/
00004 /*            Konfigurations Parser          */
00005 /*********************************************/
00006 
00007 // Parser Version
00008 extern const char* PARSER_VERSION;
00009 
00010 /*********************************************/
00011 #ifdef _MSC_VER
00012 #pragma warning(disable : 4786)
00013 #endif
00014 
00015 #include <string>
00016 #include <fstream>
00017 #include <list>
00018 
00019 #include "Bath.h"
00020 
00021 /*********************************************/
00022 enum BufferStrategie {LinksRechts=0, LinksPrior, Nacheinander, Fairness, OfenPrior, SpeicherOpt1, SpeicherOpt2, Multi, unknownStrat};
00023 extern const char* strBufferStrategie[unknownStrat];
00024 
00025 class Tokenizer {
00026 public:
00027         Tokenizer() : errorString(""), commentStarter("//"), whitespace(" ,\t"), tokenAndWhitespace("=") {};
00028 
00029         // Scaner
00030         bool tokenize(const std::string inputLine); // Gibt false zurück, wenn ein Fehler auftrat
00031 
00032         // Fehlerbehandlung     
00033         const std::string& getError() const {return errorString;}
00034 
00035         // Token
00036         unsigned int getTokenNumber() const {return tokenList.size();}
00037         const std::string& getToken(unsigned int index) const;
00038         int getTokenPos(unsigned int index) const;
00039 
00040 protected:
00041         // Implementation
00042         std::string errorString;                        // Fehlerbeschreibung
00043                 
00044         std::list<std::string> tokenList;       // Tokenliste
00045         std::list<unsigned int> tokenPos;       // Tokenposition in Eingabezeile
00046         std::string line;                                       // Eingabe
00047 
00048         // Einstellungen
00049         std::string commentStarter;                     // Anfang von Kommentaren (Rest der Zeile wird ignoriert)
00050         std::string whitespace;                         // Trennzeichen für Token
00051         std::string tokenAndWhitespace  ;       // Trennzeichen und Token
00052 };
00053 
00054 /*********************************************/
00055 class ConfigParser : public Tokenizer {
00056 public:
00057         ConfigParser();
00058 
00059         // Fehlerbehandlung     
00060         unsigned int getErrorPos() const {return errorPos;}
00061 
00062         // Parse
00063         bool parse(std::ifstream& configFile); // Gibt false zurück, wenn ein Fehler auftrat
00064 
00065         // Voreinstellung
00066         void reset();
00067 
00068         // Konfiguration
00069         // Beladungszeiten
00070         double getRequestDELAY() const {return requestDELAY;}                           // Umrüstzeit
00071 
00072         // Fahrzeiten in der Pufferstrecke
00073         double getDRIVE_ORIGIN_LEFT() const {return DRIVE_ORIGIN_LEFT;} // Dauer:[15m] Beladeposition - linke Startposition
00074         double getDRIVE_ORIGIN_RIGHT() const {return DRIVE_ORIGIN_RIGHT;}       // Dauer:[15m] Beladeposition - rechte Startposition
00075         double getDRIVE_THROUGH() const {return DRIVE_THROUGH;}                 // Dauer: in der - Pufferstrecke 
00076         double getDRIVE_LEFT_RIGHT() const {return DRIVE_LEFT_RIGHT;}           // Dauer: von linker Endposition - Endladeposition
00077         double getDRIVE_RIGHT_FINAL() const {return DRIVE_RIGHT_FINAL;} // Dauer: von rechter Endposition - Endladeposition
00078         double getDRIVE_RIGHT_RETURN() const {return DRIVE_RIGHT_RETURN;}       // Dauer: Entladeposition - Rückfahrposition
00079         double getDRIVE_LEFT_RETURN() const {return DRIVE_LEFT_RETURN;} // Dauer: Entladeposition - Rückfahrposition
00080 
00081         // Ofenkonfiguration [0..9]
00082         unsigned int getOVEN_CONFIG(unsigned int i) const {return OVEN_CONFIG[i];}
00083 
00084         
00085         double getSHIFT() const  {return SHIFT;}                                                                // Versatz zwischen zwei Ofenstarts 
00086         double getONPALETTE(int variante) const {return 60 * ONPALETTE[variante];}
00087         double getOVEN1    (int variante) const {return 60 * OVEN1[variante];}
00088         double getCHILL    (int variante, BathType bath) const;
00089         
00090         double getOVEN2    (int variante) const {return 60 * OVEN2[variante];}
00091         double getCOOLING  (int variante) const {return 60 * COOLING[variante];}
00092 
00093         double getH2O_CHILL()           { return H2O_CHILL; }
00094         double getH2OAIRH2O_CHILL() { return H2OAIRH2O_CHILL; }
00095         double getH2OPOLYMER_CHILL(){ return H2OPOLYMER_CHILL; }
00096         double getPOLYMER_CHILL()       { return POLYMER_CHILL; }
00097         double getAIR_CHILL()           { return AIR_CHILL; }
00098         double getVENTILATOR_CHILL(){ return VENTILATOR_CHILL; }
00099 
00100 
00101         // Kranfahrzeiten
00102         bool getNO_CRANE_TIME() const {return NO_CRANE_TIME;}           // Kran verbraucht kein Zeit
00103 
00104         // Leere Paletten
00105         double getEMPTY_PALETTIES_DELAY() const {return EMPTY_PALETTIES_DELAY;} // Erzeuge leere Paletten
00106 
00107         // Buffer Schiebestrategie
00108         BufferStrategie getBUFFERSchiebeStrategie() const {return BUFFERSchiebeStrategie;} // Abwechselnd (LeftRight), Nacheinander(LeftFullRight)
00109 
00110         // Bäder
00111         bool getBADUmfuellen() const {return BADUmfuellen;} // Kann Bad nach Bedarf umgefuellt werden
00112         double getBADUmfuellzeit() const {return BADUmfuellzeit;} // Zeitbedarf für das Umfuellen des Bades
00113         int getBADkapazitaet() const {return BADkapazitaet;} // Einzel oder Doppelbäder
00114 
00115         // Berichte
00116         bool getBERICHTAuftraege() const {return BERICHTAuftraege;} // Auftraegebericht
00117         bool getBERICHTPuffer() const {return BERICHTPuffer;}       // Pufferstatistik
00118         bool getBERICHTWaermebehandlungen() const {return BERICHTWaermebehandlungen;} // Pufferstatistik
00119         bool getBERICHTPaletten() const {return BERICHTPaletten;} // Palettenstatistik
00120         bool getBERICHTUeberlaeufe() const {return BERICHTUeberlaeufe;} // zeitliche Überlappungen im Lastprofil
00121 
00122 
00123         // Vorausschau
00124         double getOFENVORSCHAU() const {return OFENVORSCHAU;} // Ofenvorschau
00125 
00126 protected:
00127         // Implementation
00128         unsigned int errorPos;                  // Fehlerbeschreibung
00129 
00130         // Konfiguration (wird durch parse Initialisiert)
00131         // Beladungszeiten
00132         double requestDELAY;
00133 
00134         // Fahrzeiten in der Pufferstrecke
00135         double DRIVE_ORIGIN_LEFT;
00136         double DRIVE_ORIGIN_RIGHT;
00137         double DRIVE_THROUGH;
00138         double DRIVE_LEFT_RIGHT;
00139         double DRIVE_RIGHT_FINAL;
00140         double DRIVE_RIGHT_RETURN;
00141         double DRIVE_LEFT_RETURN;
00142 
00143         // Ofenkonfiguration
00144         unsigned int OVEN_CONFIG[9];
00145 
00146 
00147         double SHIFT;
00148 
00149         double ONPALETTE[5];
00150         double OVEN1[5];        
00151         double CHILL[5];        
00152         double OVEN2[5];
00153         double COOLING[5];
00154 
00155         // Abschreckzeiten
00156         double H2O_CHILL;
00157         double H2OAIRH2O_CHILL;
00158         double H2OPOLYMER_CHILL;
00159         double POLYMER_CHILL;
00160         double AIR_CHILL;
00161         double VENTILATOR_CHILL;
00162 
00163         // Kranfahrzeiten
00164         bool NO_CRANE_TIME;
00165 
00166         // Leere Paletten
00167         double EMPTY_PALETTIES_DELAY;
00168 
00169         // Buffer strategie     
00170         BufferStrategie BUFFERSchiebeStrategie;
00171 
00172         // Baeder
00173         bool BADUmfuellen;
00174         double BADUmfuellzeit;
00175         int BADkapazitaet;
00176 
00177         // zusätzliche Berichte
00178         bool BERICHTAuftraege;
00179         bool BERICHTPuffer;
00180         bool BERICHTWaermebehandlungen;
00181         bool BERICHTPaletten;
00182         bool BERICHTUeberlaeufe;
00183 
00184         // Vorausschau
00185         double OFENVORSCHAU;
00186 };
00187 
00188 /*********************************************/
00189 class ExperimentParser : public Tokenizer {
00190 public:
00191         ExperimentParser();
00192 
00193         // Fehlerbehandlung     
00194         unsigned int getErrorPos() const {return errorPos;}
00195 
00196         // Parse
00197         bool parse(std::ifstream& experimentFile); // Gibt false zurück, wenn ein Fehler auftrat
00198 
00199         // Voreinstellung
00200         void reset();
00201 
00202         // Konfiguration
00203         // Dateinamen
00204         const std::string& getLAST_DATEINAME() const {return LAST_DATEINAME;} // Auftragsliste
00205         const std::string& getCONFIG_DATEINAME() const {return CONFIG_DATEINAME;} // Technologie-Konfiguration
00206 
00207         // Pausen- und Wartungszeit je Schicht
00208         double getPAUSENLAENGE() const {return PAUSENLAENGE;}
00209         double getSCHICHTWARTUNG() const {return SCHICHTWARTUNG;}
00210 
00211         // Produktionszeiten
00212         unsigned int getTimeSlicesCount() const {return START_DATE.size();}
00213         const std::string& getSTART_DATE(unsigned int i) const;
00214         const std::string& getEND_DATE(unsigned int i) const;   
00215 
00216 #ifdef _USE_CORBA
00217         // Experimentkonfiguration wird vom Animator übernommen
00218         void setLAST_DATEINAME(const char* last) {LAST_DATEINAME = last;}
00219         void setCONFIG_DATEINAME(const char* tech) {CONFIG_DATEINAME = tech;}
00220         void setPAUSENLAENGE(double l) {PAUSENLAENGE = l;}
00221         void setSCHICHTWARTUNG(double w) {SCHICHTWARTUNG = w;}
00222         void clearSTART_DATE() {START_DATE.clear();}
00223         void clearEND_DATE() {END_DATE.clear();}
00224         bool addSTART_DATE(const char* date) {std::string sd = date; if (!isValidDateTime(sd)) return false; START_DATE.push_back(sd); return true;}
00225         bool addEND_DATE(const char* date) {std::string sd = date; if (!isValidDateTime(sd)) return false; END_DATE.push_back(sd); return true;}
00226 #endif
00227 
00228         bool isValidDateTime(const std::string& dateTime);
00229 protected:
00230         // Implementation
00231         unsigned int errorPos;                  // Fehlerbeschreibung
00232 
00233         // Konfiguration (wird durch parse Initialisiert)
00234         // Lastdatei
00235         std::string LAST_DATEINAME;
00236         int     LAST_DATEITYPE;
00237 
00238         // Technologie-Konfiguration
00239         std::string CONFIG_DATEINAME;
00240 
00241         // Pausen- und Wartungszeit je Schicht
00242         double PAUSENLAENGE;
00243         double SCHICHTWARTUNG;
00244 
00245         // Datum/Zeit Einstellungen
00246         std::list<std::string> START_DATE;
00247         std::list<std::string> END_DATE;        
00248 };
00249 
00250 // Experiment (Dateinamen, Produktionszeiten)
00251 extern ExperimentParser experiment;
00252 
00253 // Konfiguration (Zeiten, Schalter, Ofenkonfiguration)
00254 extern ConfigParser conf;
00255 
00256 #endif
00257 

Generated on Tue Apr 26 14:42:42 2005 for rollingmill by doxygen 1.3.6