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

RingFactory.h

Go to the documentation of this file.
00001 #ifndef RINGFACTORY_INCLUDED
00002 #define RINGFACTORY_INCLUDED
00003 
00004 #include <odem.h>
00005 #include <string>
00006 #include <iostream>
00007 #include <fstream>
00008 #include <queue>
00009 #include <list>
00010 
00011 #include "CustomerRequest.h"
00012 #include "Ring.h"
00013 #include "RingStack.h"
00014 #include "SetOfRingStack.h"
00015 #include "Loader.h"
00016 #include "Observer.h"
00017 #include "Listener.h"
00018 #include "SimringReport.h"
00019 
00020 class RingFactory : public Discrete {
00021         Buff_tail* factoryOutlet; // Abgabepunkt für zusammengestellte Paletten
00022         std::ifstream& inputStream; // Eingabedatei
00023         Buff_tail* requestDump; // Endpunkt für CustomerRequest
00024         SimringReport* report;
00025 
00026 public:
00027         RingFactory (Buff_tail* outlet, std::ifstream& input, Buff_tail* rD, SimringReport* rep);
00028         ~RingFactory();
00029 
00030         virtual int main(); // RingFactory Verhaltensbeschreibung
00031 
00032         // Gibt den Zeitpunkt zurück ab dem mit neuen Paletten zu rechnen ist.
00033         double getNextPaletteTime() const;
00034 
00035         // Unterbrechungsbehandlung
00036         void interrupt (int cause);
00037         void goAhead (int cause);
00038 
00039         // Interne Datenstrukturen
00040         struct InputLine {
00041                 std::string date; // Datum
00042                 // no more shift info !
00043                 std::string start; // Startzeitpunkt: "09:34:00" oder "--:--:--" (keine Zeitangabe)
00044                 std::string material; // Material
00045                 Procedure WBH; // Wärmebehandlung
00046                 BathType cooling; // Abschreckmethode
00047                 int numberOfRings; // Stueckzahl
00048                 long commission; // Kommissionsnummer
00049                 double diameter; // Aussendurchmesser
00050                 double height; // Ringhöhe
00051                 double mass; // Ringmasse
00052                 double time; // Produktionstakt
00053                 double totalTime; // time * numberOfRings + setupTime
00054                 double setupTime; // Umbauzeit
00055                 double temp1, temp2; // Temperaturparameter
00056  
00057 
00058                 InputLine () {
00059                         numberOfRings = commission = 0;
00060                         diameter = height = mass = totalTime = 0.0;
00061                         time = setupTime = temp1 = temp2 = 0.0;
00062                 }
00063         };
00064 protected:
00065         bool stopped;
00066 
00067 private:
00068         // Daten
00069         long Yb, Mb, Db, hb, mb;
00070 
00071         Count *genStacks;               // Zähler erzeugter Stapel
00072         Count *genPaletties;    // Zähler generierter Paletten
00073 
00074         Count *allComms;                        // Zähler über alle Kommissionen
00075         Count *allCommsToHandle;        // Zähler über alle zu vergütenden Kommissionen
00076         Count *allCommsNotToHandle; // Zähler über alle NICHT zu vergütenden Kommissionen
00077         Count *gluehComms;                      // Zählung potentieller Glühhaubenaufträge (N, G+A <20)
00078 
00079         Count *allRings;                        // Zähler erzeugter Ringe
00080         Count *allRingsToHandle;        // Zähler über alle zu vergütenden Ringe
00081         Count *allRingsNotToHandle; // Zähler über alle NICHT zu vergütenden Ringe
00082         Count *gluehRings;                      // Zählung der Ringe potentieller Glühhaubenaufträge
00083 
00084         Sum       *minDays;                     // Mindestzeit für gesamte Auftragsfolge
00085 
00086         Histo *oventime;                // Erfassung der Mindestofenlaufzeiten
00087         Tally *overflow;                // Beobachtung des Überlaufplatzes
00088         
00089         std::list<SetOfRingStack*> paletts; // Zu erzeugende Paletten
00090 
00091         SIMTIME now;                    // interne Zeit
00092         SIMTIME nextPalletAt;   // Zeitpunkt für nächste Palette
00093 
00094         bool firstTime;
00095         bool mixedPalette;
00096 
00097         // Hilfsmethoden
00098         bool loadDayPlan(std::queue<InputLine*>& plan, int& ringCount); // Lade Tagesplanung
00099         InputLine* readLine(); // Lade Zeile
00100         bool toHandle(InputLine *); // Aufträge, die wirklich durch die Vergüterei müssen, filtern
00101         bool selectOther(InputLine *);
00102 
00103         CustomerRequest* createRequest(const InputLine& line); // Erzeuge neuen Auftrag/neue Kommission
00104         static const Steelworks::Pallet& getVisPallet(SetOfRingStack* p);
00105 
00106         bool readDate(const std::string& date, int& Y, int& M, int& D);
00107         bool readTime(const std::string& time, int& Hour, int& Minute, bool& NoTime);
00108         double getSimTime(int Y, int M, int D, int h, int m);
00109         
00110         // friend Methoden (fuer inputLine)
00111         friend std::istream& operator >>(std::istream& in, RingFactory::InputLine& l);
00112 };
00113 
00114 #endif

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