File: INCLUDE\WORKFLOW\TCmd.h

    1 #ifndef _TCMD_H
    2 #define _TCMD_H
    3 
    4 #include "workflow\workflow.h"
    5 #include "workflow\CmdCode.h"
    6 
    7 /** @file TCmd.h
    8  *  Grundstruktur eines Kommandos.
    9  *  Stellt verschiedene Funktion zur Verfügung, die in abgeleiteten
   10  *  Klassen überschrieben werden können (oder müssen).
   11  */
   12 
   13 /** Realisiert ein Kommando.
   14  *
   15  *  @author David Damm
   16  *  @date 04.07.2004
   17  *  @version 0.1
   18  *  Doxygen-Kommentare hinzugefügt.
   19  */
   20 class TCmd
   21 {
   22         /** Deklaration der Klasse TSteering als 'friend', da einige Methoden verwendet werden.
   23          */
   24         friend class TSteering;
   25         
   26         
   27 // Konstruktoren und Destruktoren
   28 public:
   29 
   30         /** Konstruktor.
   31          *  Realisierung eines Kommandos.
   32          *  @param ct Das eingelesene Kommando mit Parametern.
   33          */
   34         TCmd ( TCmdTag );
   35         
   36         /** Destruktor.
   37          */
   38         virtual  ~TCmd ();      
   39         
   40 private:
   41 
   42     /** Kein Copy-Konstruktor.
   43      */
   44         TCmd ( TCmd& ) {};
   45         
   46         /** Kein Zuweisungsoperator.
   47          */
   48         TCmd &operator= ( const TCmd& ) {return *this;};
   49 
   50 
   51 // Fortschritt- und  Kommandoinformtionen
   52 public:
   53 
   54         /** Liefert Ausgabedaten.
   55          *  Dem String s wird nur ein Wert zugewiesen, falls das Kommando
   56          *  abgeschlossen wurde.
   57          *  @param[out] s String, in dem die Daten zurückgegeben werden.
   58          *  @return Gibt immer true zurück.
   59          */
   60         virtual bool GetShowData ( LPSTR s );
   61 
   62         /** Liefert den Namen des Kommandos.
   63          *  @param[out] s String, in dem der Name zurückgegeben wird.
   64          */     
   65         virtual void GetName ( LPSTR s );
   66 
   67 
   68 // Schritte der Kommandoverarbeitung
   69 public:
   70 
   71         /** Wird bei der Kommandoverarbeitung zu Beginn ausgeführt.
   72          *  @return CmdCode, der angibt, welcher Schritt als nächstes ausgeführt wird.
   73          */
   74         virtual ECmdCode FirstStep ( void );
   75         
   76         /** Eigentliche Kommandoverarbeitung.
   77          *  @return CmdCode, der angibt, welcher Schritt als nächstes ausgeführt wird.
   78          */     
   79         virtual ECmdCode ControlStep ( void );
   80         
   81         /** Wird am Ende der Kommandoverarbeitung ausgeführt.
   82          *  @return CmdCode, der angibt, welcher Schritt als nächstes ausgeführt wird.
   83          */     
   84         virtual ECmdCode ReadyStep ( void );
   85         
   86         /** Wird nach der Kommandoverarbeitung.
   87          *  @return CmdCode, der angibt, welcher Schritt als nächstes ausgeführt wird.
   88          */     
   89         virtual ECmdCode Ready ( void );
   90         
   91         /** Wählt die nächste Aktion aus, die augeführt werden soll (in Abhängigkeit
   92          *  des Zustandsmerkers eStep).
   93          *  Dabei wird zwischen den vier Schritten der Kommandoverarbeitung
   94          *    - FirstStep()
   95          *    - ControlStep()
   96          *    - ReadyStep()
   97          *    - Ready()
   98          *
   99          *  unterschieden.
  100          *  @return CmdCode, der angibt, welcher Schritt als nächstes ausgeführt wird.
  101          */
  102         ECmdCode DoAction ( void );
  103 
  104 
  105 // Accessor-Methoden
  106 public:
  107 
  108         virtual ECmdCode WakeUp ( void ); // der nächste zu verarbeitende Schritt
  109         
  110         /** Liefert den Identifier des Kommandos.
  111          *  @return Die ID des Kommandos.
  112          */
  113         ECmdId GetId ( void );
  114         
  115         /** Dient zum überprüfen, ob sich der Motor in einer gültigen Position befindet.
  116          *  @return true, falls die Position des Motors gültig ist.
  117          */
  118         BOOL IsPositionValid ( void );
  119         
  120         /** Gibt an, ob ein Kommando abgeschlossen wurde.
  121          *  @return true, falls das Kommando beendet wurde.
  122          */
  123         BOOL IsReady ( void );
  124 
  125 
  126 // weitere Methoden
  127 public:
  128 
  129         /** Bewegt einen Antrieb.
  130          *  @param[in] mid Die ID des Motors, der bewegt werden soll.
  131          *  @param[in] dist Die absolute Position, die angefahren werden soll.
  132          *  @return true, falls die Bewegung ausgeführt werden konnte.
  133          */
  134         BOOL StartMove ( const int mid, double dist);
  135         
  136         
  137 // in abgeleiteten Kommandos benutzte Attribute
  138 protected:
  139 
  140     /** Zustandsmerker.
  141      *  Die Variable eStep dient zum Merken des aktuellen Zustandes in
  142      *  der Kommandoverarbeitung und wird bei komplexen Kommandoabläufen
  143      *  benötigt. eStep kann unter anderem folgende Zustände annehmen:
  144      *  @li CReady
  145      *  @li CRecall
  146      *  @li CMeasure
  147      *  @li CStop
  148      */
  149         ECmdCode eStep;
  150         
  151         /** Gibt an, ob Messungen durchgeführt werden sollen.
  152          *  Ist bNoMeasure auf true gesetzt, so werden keine Messungen durchgeführt.
  153          *  Ist bNoMeasure = false, so erfolgt die Messung mit dem aktuell 
  154          *  ausgewählten Detektor.
  155          */
  156         BOOL bNoMeasure;
  157         
  158         /** Gibt an, ob eine Motorbewegung erfolgreich war.
  159          */
  160         BOOL *bMoveOk;
  161         
  162         /** Spezifiziert die Art eines aufgetretenen Fehlers.
  163          */
  164         int nFailureId;
  165         
  166         /** Gibt an, ob ein Kommando erneut gestartet wurde oder gestartet werden kann?
  167          *  @bug  FIX Fehler 72
  168          *  Wird in dieser Klasse nicht verwendet, aber vielleicht in abgeleiteten Klassen?
  169          */
  170         BOOL bRestart;
  171 
  172 private:
  173 
  174     /** ID des Kommandos.
  175      *  Gibt den Identifier des Kommandos an.
  176      */
  177         ECmdId eCmdId;
  178         
  179         /** Gibt an, ob sich der Motor an einer gültigen Position befindet.
  180          */
  181         BOOL bPositionValid;
  182 };
  183 
  184 #endif
  185