File: INCLUDE\TOPOGRFY\TP_FUNK.H
1 //##############################################################################
2 // //
3 // TP_FUNK.H //
4 // //
5 // Subsystem : Topographie / Funktionalität //
6 // Benutzung durch andere Subsysteme erforderlich: NEIN //
7 //----------------------------------------------------------------------------//
8 // Autoren: Thomas Kullmann, Günther Reinecker (2002) //
9 // //
10 // Stand : 11.01.2003 //
11 // letzter vollständiger Test: 11.01.2003 //
12 // //
13 //##############################################################################
14
15 #ifndef _TP_FUNK_H
16 #define _TP_FUNK_H
17
18 #include "utils\u_utils.h"
19 #pragma hdrstop
20
21 #include "detecuse\detecuse.h" // TDetector
22 //#include "datavisa\datavisa.h"
23 #include "workflow\workflow.h" // extern Steering
24 #include "motrstrg\motrstrg.h"
25
26 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
27
28 //##############################################################################
29 // globale Typdeklarationen
30 //##############################################################################
31
32 enum EFormat { eDF= 1, eSF= 2 };
33
34 //##############################################################################
35 // TTopography
36 //##############################################################################
37
38 class TTopography : private IMainEvents // neu! Kullmann+Reinecker (31.01.2004) Singleton-Objekt freigeben, wenn Hauptprogramm beendet wird
39 {
40 //------------------------------------------------------------------------------
41 // Konstruktoren
42 private:
43 TTopography( void );
44 TTopography( const TTopography& ) {} // kein Copy-Konstruktor
45 TTopography& operator= ( const TTopography& ); // kein Zuweisungsoperator
46 //------------------------------------------------------------------------------
47 // Methode zur Erzeugung einer Singleton-Instanz
48 public:
49 static TTopography *GetInstance();
50 //------------------------------------------------------------------------------
51 // Accessor-Methoden
52 public:
53 TDetector *GetDetector ( void )
54 {
55 return m_lnkDetector;
56 };
57 TDetector *GetActDetector ( void ); // gibt Zeiger auf den aktuellen Detektor zurück
58 TDetector *GetMonitor ( void )
59 {
60 return m_lnkMonitor;
61 };
62 TMacroTag *GetMWorkPoint ( void )
63 {
64 return m_lnkMWorkPoint;
65 };
66
67 int GetMotor ( void )
68 {
69 return m_Motor;
70 };
71 LPCSTR GetMotorName ( int ); // Rückgabe der Antriebsbezeichnung
72 LPCSTR GetMotorUnit ( void ); // Rückgabe der Einheit des aktuellen Motors
73 LPCSTR GetDigitFormat ( const EFormat ); // Rückgabe eines Zahlenformats mit Digits oder Digits+1 Nachkommastellen des aktuellen Motors
74 int GetActMotor ( void ); // gibt den Index des aktuellen Motors zurück
75 int GetMotorCount ( void ); // gibt die Anzahl der verfuegbaren Motoren zurück
76 double GetStartAngle ( void )
77 {
78 return m_dStartAngle;
79 };
80 double GetAngle ( void ); // gibt die Winkelposition des aktuellen Motors zurück
81 UINT GetMotorDigits ( const EFormat ); // Rückgabe der Nachkommastellengenauigkeit des ausgewählten Antriebs; entweder Digits (für Positionsangaben) oder Digits+1 (für Schrittweiten)
82
83 LONG GetMeasurementTime ( void )
84 {
85 return m_lMeasurementTime;
86 };
87 DWORD GetCurTime ( void )
88 {
89 return m_dwCurrentTime;
90 };
91 DWORD GetStartTime ( void )
92 {
93 return m_dwStartTime;
94 };
95 float GetMaxTime ( void )
96 {
97 return m_fMaxTime;
98 };
99
100 DWORD GetMaxCounts ( void )
101 {
102 return m_dwMaxCounts;
103 };
104 WORD GetNumberCycle ( void )
105 {
106 return m_nNumberCycle;
107 };
108 WORD GetRestShots ( void )
109 {
110 return m_nRestShots;
111 };
112
113 float GetControlStep ( void )
114 {
115 return m_fControlStep;
116 };
117 float GetControlRange ( void )
118 {
119 return m_fControlRange;
120 };
121 float GetMoveStep ( void )
122 {
123 return m_fMoveStep;
124 };
125 float GetMaxAngleEscape ( void )
126 {
127 return m_fMaxAngleEscape;
128 };
129 float GetWorkPoint ( void )
130 {
131 return m_fWorkPoint;
132 };
133 float GetAngleBetweenShots ( void )
134 {
135 return m_fAngleBetweenShots;
136 };
137 //------------------------------------------------------------------------------
138 // Mutator-Methoden
139 public:
140 BOOL SetMotor( EAxisType );
141 BOOL SetMotor( int );
142 void SetDetector( TDetector *aDetector )
143 {
144 m_lnkDetector= aDetector;
145 };
146 void SetMonitor ( TDetector *aMonitor )
147 {
148 m_lnkMonitor= aMonitor;
149 };
150
151 BOOL SetMeasurementTime( LONG );
152 void SetStartTime ( DWORD aTime )
153 {
154 m_dwStartTime= aTime;
155 };
156 void SetCurrentTime ( DWORD aTime )
157 {
158 m_dwCurrentTime= aTime;
159 };
160 BOOL SetMaxTime ( float );
161
162 BOOL SetNumberCycle ( WORD );
163 BOOL SetMaxCounts ( LONG );
164 void SetRestShots ( WORD aShots )
165 {
166 m_nRestShots= aShots;
167 };
168
169 BOOL SetControlRange ( float );
170 BOOL SetAngleBetweenShots( float );
171 BOOL SetStartAngle ( double );
172 BOOL SetControlStep ( float );
173 BOOL SetMoveStep ( float );
174 BOOL SetAngleWidth ( float );
175 BOOL SetMaxAngleEscape ( float );
176 BOOL SetWorkPoint ( float );
177 //------------------------------------------------------------------------------
178 // Setzen logischer Ausdrücke
179 public:
180 void SetTimeFinish ( BOOL aValid )
181 {
182 m_bTimeFinish= aValid;
183 };
184 void SetTimeRunning ( BOOL aValid )
185 {
186 m_bTimeRunning= aValid;
187 };
188 void SetAdditionalTime ( BOOL aValid )
189 {
190 m_bAdditionalTime= aValid;
191 };
192 void SetStartPointOk ( BOOL aValid )
193 {
194 m_bStartPointOk= aValid;
195 };
196 void SetExceptionOccured( BOOL aValid )
197 {
198 m_bExceptionOccured= aValid;
199 };
200 void SetControlActive ( BOOL aValid )
201 {
202 m_bControlActive= aValid;
203 };
204 void SetMonitorUsed ( BOOL aValid )
205 {
206 m_bMonitorUsed= aValid;
207 };
208 void SetMultipleShot ( BOOL aValid )
209 {
210 m_bMultipleShot= aValid;
211 };
212 void SetSmallAngleSide ( BOOL aValid )
213 {
214 m_bSmallAngleSide= aValid;
215 };
216 //------------------------------------------------------------------------------
217 // Lesen logischer Ausdrücke
218 public:
219 BOOL HasMotor ( void )
220 {
221 return (m_Motor != -1);
222 };
223 BOOL HasAdditionalTime( void )
224 {
225 return m_bAdditionalTime;
226 };
227 BOOL IsMultipleShot ( void )
228 {
229 return m_bMultipleShot;
230 };
231 BOOL IsControlActive ( void )
232 {
233 return m_bControlActive;
234 };
235 BOOL IsSmallAngleSide ( void )
236 {
237 return m_bSmallAngleSide;
238 };
239 BOOL IsSetupOk ( void )
240 {
241 return m_bSetupOk;
242 };
243 BOOL IsStartPointOk ( void )
244 {
245 return m_bStartPointOk;
246 };
247 BOOL IsMonitorUsed ( void )
248 {
249 return m_bMonitorUsed;
250 };
251 BOOL IsTimeRunning ( void )
252 {
253 return m_bTimeRunning;
254 };
255 BOOL IsExeptionOccured( void )
256 {
257 return m_bExceptionOccured;
258 };
259 //------------------------------------------------------------------------------
260 // Lesen und Setzen von Attributen der Ablaufsteuerung
261 public:
262 void SetStrngStartPoint ( double );
263
264 double GetStrngStartPoint ( void );
265 double GetStrngDistance ( void );
266 BOOL DetectorRequest ( void );
267 float GetStrngPeakIntensity( void );
268 float GetStrngStartIntensity( void );
269 float GetStrngIntensity ( void );
270 double GetStrngHwb ( void );
271 //------------------------------------------------------------------------------
272 // Auslösen von Aktionen
273 public:
274 BOOL DoInitDetectors( void ); // Initialisierung des aktuellen Detektors und Monitors
275 BOOL DoInitMotor( void ); // Initialisierung des Motors (bevorzugt Omega)
276 void DoInitWorkPoint( void ); // Ablaufsteuerung initialisieren
277 BOOL DoStartMeasure ( ECmdId, int, int, LPSTR, HWND ); // Durchführung einer Messung mittels Kommandoverarbeitung
278 BOOL DoStartMeasure ( TMacroTag*, HWND ); // Durchführung einer Messung mittels Macroverarbeitung
279 BOOL DoStopMeasure( void ); // Unterbrechung einer Messung
280 void DoSetDetectorParams ( float, DWORD, BOOL ); // setzt Parameter für die Belichtung
281 void DoResetDetectorParams( void ); // löschen der im Detektor gespeicherten Daten zur Topography
282 BOOL DoSaveMonitorSignal( void );
283 BOOL DoSaveMotorSettings( void ); // Settings des aktuellen Motors sichern
284 BOOL DoLoadMotorSettings( void ); // Settings des aktuellen Motors zurückschreiben
285
286 //------------------------------------------------------------------------------
287 // privates
288 private:
289 BOOL DoInitMotor( EAxisType, BOOL ); // angegebenen Antrieb initialisieren
290 virtual void OnLeave ( ); // neu! Kullmann+Reinecker (31.01.2004) Singleton-Objekt freigeben, wenn Hauptprogramm beendet wird
291
292 //------------------------------------------------------------------------------
293 // Attribute
294 private:
295 TDetector *m_lnkDetector; // Messgeraet
296 TDetector *m_lnkMonitor; // Zweiter Zaehler fuer Monitor-Signal
297 TMacroTag *m_lnkMWorkPoint; // Makro zum Arbeitspunkt anfahren
298
299 WORD m_nNumberCycle; // Anzahl der Mess-Zyklen
300 float m_fWorkPoint; // Arbeitspunkt
301 float m_fControlRange; // Regel-Bereich nach Intensitaet
302 float m_fControlStep; // Regel-Schrittweite
303 float m_fMoveStep; // Schrittweite zum Anfahren des Arbeitspunktes
304 float m_fMaxAngleEscape; // Bei Weglaufen der Regelung
305 int m_Motor; // Regelmotor
306 DWORD m_dwMaxCounts; // Maximale Anzahl Impulse
307 double m_dStartAngle; // Startwinkel relativ zum Peak
308 float m_fAngleBetweenShots; // Abstand bei Mehrfachbelichtung
309 LONG m_lMeasurementTime; // Mess-Zeit in Sekunden je Zyklus
310 float m_fMaxTime; // Maximale Messzeit
311 DWORD m_dwCurrentTime; // aktuelle Zeit einer Messung
312 DWORD m_dwStartTime; // Startzeit einer Messung
313
314 BOOL m_bSmallAngleSide; // Klein-Winkel= TRUE
315 BOOL m_bMonitorUsed; // ob Monitor-Detektor genutzt werden soll
316 BOOL m_bMultipleShot; // Mehrfach-Belichtungen
317 BOOL m_bControlActive; // ob die Messung laeuft
318 BOOL m_bSetupOk; // ob Motor und Detektor korrekt gesetzt
319 BOOL m_bStartPointOk; // ob der Arbeitspunkt angefahren wurde
320 WORD m_nRestShots; // Anzahl der restlichen Zyklen
321 BOOL m_bTimeFinish;
322 BOOL m_bAdditionalTime; // ob zusaetzliche Zeit entstanden ist
323 BOOL m_bExceptionOccured; // ob Fehler aufgetreten
324 BOOL m_bTimeRunning;
325
326 static TTopography *s_Instance; // enthält die EINZIGE Instanz
327 };
328
329 #endif //_TP_FUNK_H
330 //------------------------------------------------------------------------------
331 // __LastLine__
332