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