File: INCLUDE\MANJUST\MJ_FUNK.H
1 //##############################################################################
2 // //
3 // MJ_FUNK.H //
4 // //
5 // Subsystem : neue Manuelle Justage / Funktionalität //
6 // Benutzung durch andere Subsysteme erforderlich: NEIN //
7 //----------------------------------------------------------------------------//
8 // Autoren: Thomas Kullmann, Günther Reinecker //
9 // Stand : 23.11.2002 //
10 // letzter vollständiger Test: 20.08.2002 //
11 // //
12 //##############################################################################
13
14 #ifndef _MJ_FUNK_H
15 #define _MJ_FUNK_H
16
17 #include "motrstrg\motrstrg.h" // Motorsteuerung
18 #include "detecuse\detecuse.h" // Detektornutzung
19
20 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
21
22 //##############################################################################
23 // globale Typdeklarationen
24 //##############################################################################
25
26 enum EMotionType { mtDirect= 1, mtDrive= 2, mtStep= 3 }; // 0 zur Kennzeichnung einer unbekannten Betriebsart
27 enum EDirection { dUp= 1, dDown= 2 };
28 typedef double TAngle;
29 typedef double TSpeed;
30 typedef int TChannel;
31
32 //##############################################################################
33 // TManJustage
34 //##############################################################################
35
36 class TManJustage
37 { // Klasse für die Funktionalität der Manuellen Justage
38
39 //------------------------------------------------------------------------------
40 // TMotorData
41 //------------------------------------------------------------------------------
42
43 private:
44
45 struct TMotorData
46 { // Informationen für jeweils einen Antrieb der Manuelle Justage
47
48 TMotor *m_lnkMotor; // Antrieb dessen Daten hier verwaltet werden
49 EAxisType m_AxisType; // zugeordneter Antriebstyp
50 char m_MotorId[50]; // "MOTOR<Index>" Name der INI-Sektion in der HARDWARE.INI
51
52 EMotionType m_MotionType; // aktuelle Betriebsart
53
54 // aktuelle Bewegungsparameter
55 TAngle m_AngleDest; // SollPosition
56 TSpeed m_Speed; // Geschwindigkeit
57 TAngle m_AngleWidth; // Schrittweite
58
59 // Info's über die Bewegung
60 BOOL m_KzMoving; // OnTimer(): wenn m_KzMoving!= IsMoving(), dann hat Bewegung gestartet oder gestoppt
61
62 // Speeding (zwischenspeichern der Daten zwischen BeginUpdate und EndUpdate erspart das ständige/ langsame Auslesen beim Antrieb)
63 TAngle m_SpAngle; // letzte Antriebsposition
64 BOOL m_HasAngle; // FALSE wenn die letzte Antriebsposition seit BeginUpdate noch NICHT in m_SpAngle zwischengespeichert wurde
65 BOOL m_SpMoving; // letzter Antriebsstatus (in Bewegung?)
66 BOOL m_HasMoving; // FALSE wenn der letzte Antriebsstatus seit BeginUpdate noch NICHT in m_SpMoving zwischengespeichert wurde
67 };
68
69 //------------------------------------------------------------------------------
70 // Konstruktor/Destruktor
71 public:
72
73 TManJustage( void );
74 virtual ~TManJustage( void );
75
76 //------------------------------------------------------------------------------
77 // Antriebssteuerung
78 public:
79
80 BOOL DoDirect ( const int ); // Bewegung im Direktbetrieb
81 BOOL DoDrive ( const int, const EDirection ); // Bewegung im Fahrbetrieb
82 BOOL DoStep ( const int, const EDirection ); // Bewegung im Schrittbetrieb
83 BOOL DoStop ( const int ); // stoppen der Bewegung, unabhängig von der Betriebsart
84 void DoStopEverything ( void ); // Stoppen aller Antriebe, der Halbwertsbreitenmessung und der Detektormessung
85
86 //------------------------------------------------------------------------------
87 // Statusinformationen
88 public:
89
90 BOOL IsIndexValid ( const int ) const; // gültiger Index der Antriebsliste ?
91 BOOL HasOffset ( const int, BOOL& ) const; // Offset gesetzt, d.h. (Offset != 0) ?
92 BOOL IsMoving ( const int, BOOL& ); // Antrieb in Bewegung ?
93 BOOL IsCalibrated ( const int, BOOL& ) const; // Antrieb kalibriert?
94
95 //------------------------------------------------------------------------------
96 // GET-Methoden
97 public:
98
99 // lesen der aktuellen Betriebsart und der Bewegungsparameter
100 EMotionType GetMotionType ( const int, BOOL& ) const; // Betriebsart
101 TAngle GetAngleDest ( const int, BOOL& ) const; // Sollposition
102 TSpeed GetSpeed ( const int, BOOL& ) const; // Geschwindigkeit
103 TAngle GetAngleWidth ( const int, BOOL& ) const; // Schrittweite
104 BOOL GetKzMoving ( const int, BOOL& ) const; // OnTimer() will auf Start/ Stop der Bewegung reagiert
105 TAngle GetOffset ( const int, BOOL& ) const; // aktuellen Offset für <Antrieb>
106 UINT GetMotorCount ( void ) const; // Anzahl der Antriebe in der Antriebsliste
107 LPCSTR GetMotorName ( const int, BOOL& ) const; // Antriebsbezeichnung per standardisierter Antriebsbezeichnung
108 int GetMotorIdx ( const LPCSTR ) const; // Index des angegebenen Antriebs; ggf. -1
109 int GetMotorIdx ( const EAxisType ) const; // Index des angegebenen Antriebs; ggf. -1
110
111 // lesen der relativen Positionsdaten als Winkelangabe
112 TAngle GetAngle ( const int, BOOL& ); // aktuelle Antriebsposition
113 TAngle GetAngleMin ( const int, BOOL& ) const; // minimale Antriebsposition
114 TAngle GetAngleMax ( const int, BOOL& ) const; // maximale Antriebsposition
115
116 UINT GetDigits ( const int, BOOL& ) const; // lesen der Nachkommastellen
117 LPCSTR GetUnit ( const int, BOOL& ) const; // lesen der Einheit
118
119 EAxisType GetHwbAxis(); // Antrieb der zur Halbwertsbreitenmessung verwendet wird
120 static UINT ParsingAxis( const LPCSTR ); // lesen der standardisierten Antriebsbezeichnung
121
122 //------------------------------------------------------------------------------
123 // SET-Methoden
124 public:
125
126 // setzen der aktuellen Betriebsart und der Bewegungsparameter
127 BOOL SetMotionType ( const int, EMotionType& ); // Betriebsart
128 BOOL SetAngleDest ( const int, TAngle& ); // Sollposition
129 BOOL SetSpeed ( const int, TSpeed& ); // Geschwindigkeit
130 BOOL SetAngleWidth ( const int, TAngle& ); // Schrittweite
131 BOOL SetKzMoving ( const int, const BOOL ); // OnTimer() hat auf Start/ Stop der Bewegung reagiert
132
133 //------------------------------------------------------------------------------
134 // Offset bzw relative Null
135 public:
136
137 BOOL SetRelativeZero ( const int ); // setzen der relativen Null
138 BOOL ResetRelativeZero ( const int ); // aufheben der relativen Null
139 BOOL SetOffset ( const int, TAngle& ); // setzen des Offset für <Antrieb>
140
141 // Berechnungen zum Offset für <Antrieb>
142 TAngle CalcOffsetFromAngle ( const int, TAngle& ) const; // Berechnung des Offset aus einer Position
143 TAngle CalcAngleFromOffset ( const int, TAngle& ) const; // Berechnung der Position aus dem Offset
144
145 //------------------------------------------------------------------------------
146 // Kanal-Offset
147 public:
148
149 int GetDetectorAxisIdx ( void ) const; // Index DES PSD-Antriebs; ggf. -1
150 LPCSTR GetDetectorName ( BOOL& ) const; // gibt die Bezeichnung des Detektors zurück; ggf. "PSD"
151 BOOL HasDetectorAxis ( void ) const; // angeschlossen?
152 UINT GetDetectorDigits ( BOOL& ) const; // Nachkommastellen der Kanalbreite
153
154 int GetChannel ( void ) const;
155 TAngle GetAnglePerChannel ( void ) const; // lesen des aktuellen Verhältnis: Winkel pro Kanal
156 BOOL SetChannel ( int& ); // setzen des Kanals
157
158 // Berechnungen zum PSD-Offset
159 TAngle CalcChannelOffset ( TChannel& ) const;
160 TAngle CalcChannelAngle ( TChannel& ) const;
161 private:
162 BOOL ResetChannelOffset( const int ); // aufheben des Kanaloffsets
163
164 //------------------------------------------------------------------------------
165 // Halbwertsbreitenmessung
166 public:
167
168 BOOL DoStartMeasure ( const HWND ); // starten
169 BOOL DoStopMeasure ( void ); // stoppen
170
171 BOOL IsMeasuring ( void ) const; // ==> TRUE <--> Messung aktiv
172 BOOL IsMeasureReset ( void ) const; // Messung abgebrochen?
173 BOOL GetKzMeasuring ( void ) const; // OnTimer() will auf Start/ Stop der Makroverarbeitung reagiert
174 BOOL GetMeasureProgress ( int&, LPSTR, int& ) const; //Index und Anzahl der Kommandos und Statusinformationen bzw. Kommandonamne werden per Parameter zurückgegeben; ==> TRUE <--> Messung aktiv
175 double GetMeasureHwb ( void ) const; // ==> HWB oder 0.0
176 TDetector *GetDetector ( void ) const; // Zeiger für den ausgewählten Detektor, der für die Halbwertsbreitenmessung benötigt wird
177 void SetKzMeasuring ( const BOOL ); // OnTimer() hat auf Start/ Stop der Makroverarbeitung reagiert
178 void UpdateDetector ( void ) const; // informiert die Makroverarbeitung, dass neue Messwerte vorliegen
179
180 //------------------------------------------------------------------------------
181 // Zustand für Bewegung ermitteln
182 public:
183
184 // können die folgenden Funktionalitäten durchgeführt werden?
185 // das freigeben bzw. sperren und ausgrauen von Steuerelementen
186 BOOL CanDoDirect ( const int ); // Direktbetrieb möglich ?
187 BOOL CanDoDrive ( const int, const EDirection ); // Fahrbetrieb möglich ?
188 BOOL CanDoStep ( const int, const EDirection ); // Schrittbetrieb möglich ?
189 BOOL CanDoStop ( const int ); // kann Bewegung gestoppt werden ?
190
191 //------------------------------------------------------------------------------
192 // Zustand zum Setzen von Parametern
193 public:
194
195 BOOL CanSetMotionType ( const int ); // setzen der Betriebsart möglich ?
196 BOOL CanSetAngleDest ( const int ); // setzen der Sollposition möglich ?
197 BOOL CanSetSpeed ( const int ); // setzen der Geschwindigkeit möglich ?
198 BOOL CanSetAngleWidth ( const int ); // setzen der Schrittweite möglich ?
199 BOOL CanResetRelativeZero ( const int ); // aufheben der Relativen Null möglich ?
200 BOOL CanSetOffset ( const int ); // setzen des Offset und der rel.Null für <Antrieb> möglich ?
201
202 BOOL CanDoStartMeasure ( void ); // starten der Halbwertsbreitenmessung möglich ?
203 BOOL CanDoStopMeasure ( void ) const; // stoppen der Halbwertsbreitenmessung möglich ?
204
205 //------------------------------------------------------------------------------
206 // Speeding beginnen bzw. beenden
207 public:
208 UINT BeginUpdate ( void ); // m_UpdateCount erhöhen
209 UINT EndUpdate ( void ); // verringern
210
211 //------------------------------------------------------------------------------
212 // Auslesen der wirklichen Antriebsdaten ohne Speeding (Aquäivalent zu GetAngle und IsMoving)
213 private:
214 TAngle DetermineAngle ( const int, BOOL& ) const; // aktuelle Antriebsposition beim Antrieb auslesen
215 BOOL DetermineMoving ( const int, BOOL& ) const; // Antriebsstatus (in Bewegung?) beim Antrieb auslesen
216
217 //------------------------------------------------------------------------------
218 // Attribute
219 private:
220 TMotorData *m_MotorList; // Liste der verfügbaren Antriebe
221
222 TOneDimDetector *m_lnkDetector; // Detektor für den PSD-Offset
223 char m_DetectorId[50]; // // "DEVICE<Index>" Name der INI-Sektion in der HARDWARE.INI
224 int m_Channel; // PSD-Kanal für den Offset
225
226 BOOL m_IsMeasuring; // Status der HWB-Messung
227 UINT m_MotorCount; // Anzahl der Motoren in m_MotorList
228 BOOL m_KzMeasuring; // OnTimer(): wenn m_IsMeasuring!= IsMeasuring(), dann hat Makroverarbeitung gestartet oder gestoppt
229
230 UINT m_UpdateCount; // Speeding
231 };
232
233 #endif //__MJ_FUNK.H
234
235 //#############################################################################
236 // LastLine
237 //#############################################################################
238
239