qrailway 0.9

cIntelligenz.h

gehe zur Dokumentation dieser Datei
00001 #ifndef CINTELLIGENZ_H
00002 #define CINTELLIGENZ_H
00003 
00004 #include "cConstants.h"
00005 #include <qdatetime.h>
00006 #include <qregexp.h>
00007 #include <QTimer>
00008 #include "cSektion.h"
00009 #include "cKonnektor.h"
00010 #include "cDescription.h"
00011 #include "cHardware.h"
00012 #include "cTrain.h"
00013 #include "cBahnhof.h"
00014 #include "cSignal.h"
00015 #include "cSignalRule.h"
00016 #include <QThread>
00017 
00018 class cMainWindow;
00019 
00021 class cRegler : public QObject {
00022     Q_OBJECT
00023  public:
00025     cRegler(void);
00027     void reset(int idtmp);
00029     int adresse;
00031     int subadresse;
00033     int richtung;
00035     int geschwindigkeit;
00037     int sollrichtung;
00039     int sollgeschwindigkeit;
00041     int id;
00043     int kurzschluss;
00045     int countWeichen;
00047     int countReedkontakte;
00049     int countSektionen;
00051     int countAnschluesse;
00053     int weiche[maxReglerWeichen];
00055     int anschluss[maxReglerAnschluesse];
00057     int reedkontakt[maxReglerReedkontakte];
00059     int sektion[maxReglerSektionen];
00061     void addWeiche(int weichetmp);
00063     void addReedkontakt(int reedkontakttmp);
00065     void addSektion(int sektiontmp);
00067     void addAnschluss(int anschlusstmp);
00069     void cDebug(int prioritaet, const QString & meldung);
00071     void info(void);
00073     bool relevant(void);
00075     void setTrain(int traintmp);
00077     int getTrain(void);
00079     void setBesetzt(int traintmp);
00081     int getBesetzt(void); 
00083     void forceSignals(void);
00084 private:
00086     int train;
00088     int besetzt;
00089 signals:
00091     void SignalBesetzt(int,int);
00092 };
00093 
00095 
00100 class cIntelligenz : public QObject {
00101     Q_OBJECT
00102         
00103    public:
00105     void setLicht(int button,int einaus);
00107     void ReedkontakteGeaendert(int zaehler,int reedkontakte[24],int status[24]);
00109     cIntelligenz(QGraphicsScene *canvastmp,cMainWindow *MainWindowTmp);
00111     ~cIntelligenz(void);
00113     void cDebug(int prioritaet, const QString & meldung);
00115     void RereadRailroad(void);
00117     int ueberpruefeSpeicher(void);
00119     int StromAktualisieren(int ueberpruefenRegler,bool nurueberpruefen=FALSE);
00121     void WeichenStrassenAnalysieren(int reglernr);
00123     int getAusgangVonKonnektor(int sektionid,int konnektorid,int ausgang);
00125     int getAusgangVonSektion(int sektionid,int & konnektorid,int trainrichtung,int & trainrichtungneu,int lastAusgang=0,int beachteWeichen=0);
00127     int getZugPosition(int trainid);
00129     int findeZugBeiReedkontakt(int welcher,int richtung);
00131     int getNaechsteReedkontakte(int trainid,int richtung,int markieren,const int maxanzahlreedkontakte,int welche[]);
00133     int passtZug(int trainid,int konnektorid,int markieren=ccReedSuchen,int trainRichtung=-1);    
00135     void setTrigger(int trainid,int vorneeinfuegen,int conid,bool aktivieren,int regler,int geschwindigkeit,int richtung,int beschleunigung,int geschwindigkeitkmh);
00137     int manuelleSteuerung(int trainid,int geschwindigkeitkmh,int richtung,bool emitsignal=FALSE);
00139     void setWeiche(int welche,const QString & richtung);
00141     void beschleunigeZugVorbereitung(int trainid,int geschwindigkeitkmh,int richtung);
00143     void schalteLeereReglerAb(int trainid);
00145     void beschleunigeZug(int trainid,bool erzwingen=FALSE);
00147     int entferneZug(int zug,bool force=TRUE);
00149     void automatischeSteuerungBahnhoefeStarten(void);
00151     void automatischeSteuerungBahnhoefeStoppen(void);
00153     bool automatischeSteuerungBahnhoefe(void);
00155     cKonnektor* getKonnektor(int welche,bool warnung=TRUE);
00157     cSektion* getSektion(int welche);
00159     cTrain* getTrain(int welche) { return(&(Train[welche])); };
00161 
00162     QString getZielRichtungvonWeiche(int welche);
00164 
00171     QString getKonnektorTyp(int welche);
00173     cHardware* getHardware(void) { return(Hardware); };
00175     void defineReglerVirtuell(int reglerid,int adresse,int subadresse);
00177     void setReglerVirtuellGeschwindigkeit(int reglerid,int geschwindigkeit,int richtung); 
00179     int getReglerVirtuellAdresse(int reglerid);
00181     int getReglerVirtuellSubadresse(int reglerid);
00183     void setKonnektorxy(int welche,double x,double y);
00185     void setDescriptionxy(int welche,double x,double y);
00187     void setSignalxy(int welche,double x,double y);
00189     void saveKonnektor(int welche);
00191     void saveDescription(int welche);
00193     void saveSignal(int welche);
00195     void NeuerKonnektor(int secid,double xx,double yy);
00197     void KonnektorLoeschen(int conid);
00199     void UpdateLok(int trainidtmp);
00201     void setControlsDisabled(bool controlsDisabledtmp);
00202 // ist showinfo TRUE, so werden unter und ber (Reed/Stromverbinder/Weichen)Konnektoren Informationen angezeigt (wie z.b. hardware-adresse und angeschlossene sektionen)
00203     void setShowInfo(bool showinfo);
00205     int measureStarten(QObject* cfensterlokzeiger,int zugtmp,bool rueckwaertsvorsichtig);
00207     void measureAktion(int welcher);
00209     void measureCancel(void);
00211     int sucheWeg(int trainid,cListe* Befehle,int wo,int startkonnektor,int startrichtung,int fahrplanunganz,int *fahrplanung,int maxweg);
00213     cBahnhof* getBahnhof(int welcher);
00214  private:
00216     double speedmultiplier;
00218     cMainWindow *MainWindow;
00220     bool controlsDisabled;
00222     cRegler Regler[maxRegler];
00224     cTrain Train[maxTrain];
00226     int automatischeSteuerungQueue[maxTrain];
00228     int lastreed[maxTrain];
00230     int lastreedwarten[maxTrain];
00232     cBahnhof *Bahnhof[maxBahnhof];
00234     cHardware *Hardware;
00236     cKonnektor *Konnektor[maxKonnektoren];
00238     cDescription *Description[maxDescriptions];
00240     cSektion *Sektion[maxSektionen];
00242     cSignal *Signal[maxSignale];
00244     cSignalRule *SignalRegel[maxSignalRegeln];
00246     bool existiertKonnektor[maxKonnektoren];
00248     bool existiertSektion[maxSektionen];
00250     int anzahlKonnektoren;
00252     int anzahlSektionen;
00254     int maxfahrendezuege;
00256     QTimer *timer;
00258     QGraphicsScene *canvas;
00260     bool measureAktiv;
00262     double measureLaenge;
00264     int measureMaxRueckwaertsVorsichtig;
00266     int measureMaxGeschwindigkeit;
00268     int measureGeschwindigkeit;
00270     int measureRichtung;
00272     int measureWert;
00274     int measureMax0;
00276     int measureMax1;
00278     int measureMaxZurueckErreicht;
00280     int measureMaxZurueck;
00282     int measureRegler;
00284     int measureZug;
00286     int measureStart;
00288     int measure1;
00290     int measure2;
00292     int measureStop; 
00294     int sektionSpeichernZaehler;
00296     bool ProgrammLaeuft;    
00297   public slots:
00299     void SlotLokPositionChanged(int trainid,int reedalt,int reed,int richtung,int geschw);    
00301     void SlotSetSignal(int sigid,int status);
00303     void executeAutomatischeSteuerung(void);
00305     void insertAutomatischeSteuerung(int lok);
00307     int modifySpeed(int geschwindigkeit,int trainid,int reglerrichtung,int conid);
00309   void changeSpeedMultiplier(double speedmultipliertmp) { speedmultiplier=speedmultipliertmp; };
00311     void SlotResetCounters(void);
00313     void SlotPruefeAufStehendeLoks(void);
00315     void SlotBahnhofsdurchsage(int bahnhofsnr,QString durchsage); 
00317     void SlotUpdateBahnhofsfenster(int bahnhofsnr); 
00319     void SlotWeicheGeaendert(int welche);
00321     void SlotReedkontaktGeaendert(int welcher,int status);
00323     void SlotReglerStatusGeaendert(int regler,int kurzschluss,int besetzt);
00325     void SlotReedkontaktAngeklickt(int welcher);
00327     void SlotSektionAngeklickt(int welche);
00329     int automatischeSteuerung(int trainid);
00331     int automatischeFahrplanung(int laufplanungzug,int laufplanunganz,int *laufplanung,int richtung=0);
00333     bool parseBefehl(int trainid, int positiondiff);
00334  signals:
00336     void SignalAlarm(int);
00338     void SignalUpdateBahnhofsFenster(int);
00340     void SignalBahnhofsdurchsage(int,const QString &);
00342     void SignalBefehlAusfuehren(int,int,int,int,int);
00344     void SignalCanvasUpdate(void);
00346     void SignalFensterWeicheUpdate(void);
00348     void message(const QString &);
00350     void SignalUpdateFensterLokSteuerung(int);
00352     void SignalReedkontaktAngeklickt(int);
00354     void SignalSektionAngeklickt(int);
00356     void SignalZugOrt(int,int);
00358     void SignalZugGeschwindigkeit(int,int,int);
00360     void SignalSollGeschwindigkeitAendern(int,int,int);
00362     void SignalGeschwindigkeitsmeldung(int,int,int,int,int);
00364     void SignalReedkontaktGeaendert(int,int);
00365 };
00366 
00367 #endif // CINTELLIGENZ_H
00368 
00369 #include "cMainWindow.h"