Hauptseite | Klassenhierarchie | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente | Datei-Elemente | Zusätzliche Informationen

M_MOTCOM.H

gehe zur Dokumentation dieser Datei
00001 //############################################################################# 00002 // // 00003 // M_MOTCOM.H // 00004 // Subsystem: Motorsteuerung // 00005 // Benutzung durch andere Subsysteme erforderlich: JA // 00006 // Implementation: MOTORS.CPP // 00007 // // 00008 //---------------------------------------------------------------------------// 00009 // Autoren: Heiko Damerow MPG AG "Roentgenbeugung" (C) 1993,94 // 00010 // Stand: 05.08.2002 // 00011 // // 00012 //############################################################################# 00013 00014 //----------------------------------------------------------------------------- 00015 // ÄNDERUNGEN : Kullmann, Reinecker (04.08.02) TMotor, TMList 00016 // 00017 // - einheitlich strukturiert, formatiert und kommentiert 00018 // - Sinneinheiten zusammengefaßt 00019 // - stärkere Datenkapselung und neue Methoden für Memberzugriff in TMotor 00020 // - explizite inline Deklaration 00021 // - unnötige friend Deklarationen und Toten Code auskommentiert 00022 // - Klasse TMotor exportiert 00023 //----------------------------------------------------------------------------- 00024 00025 #ifndef __M_MOTCOM_H 00026 #define __M_MOTCOM_H 00027 00028 #include "internls\evrythng.h" // TUnitType 00029 00030 #if defined (Build_Motors) 00031 #define _MOTORCLASS __declspec(dllexport) 00032 #elif defined(Use_Motors) 00033 #define _MOTORCLASS __declspec(dllimport) 00034 #else 00035 #define _MOTORCLASS 00036 #endif 00037 00038 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||-- 00039 00040 const UINT _MAXLENCHARACTERISTIC= 50; //max. 50 Zeichen als Motorbezeichnung 00041 const UINT _MAXLENUNIT= 20; //max. 20 Zeichen als Einheit eines Antriebs 00042 const UINT _MAXLENFORMAT= 5; //max. 6 Zeichen als Zahlenformat (z.B. "%f:3") 00043 00044 //----------------------------------------------------------------------------- 00045 00046 /* Benutzt in m_layer.h/cpp, m_steerg.cpp, m_motcom.h, motors.cpp */ 00047 enum EAxisType 00048 { 00049 X= 1, Y, Z, Omega, Theta, Phi, Psi, Encoder, Absorber, Tilt, Collimator, 00050 Rotation, Monochromator, DC, DF 00051 }; 00052 00053 //----------------------------------------------------------------------------- 00054 /* Benutzt in m_motcom.h, m_layer.h/cpp, motors.cpp */ 00055 enum EMParameter 00056 { 00057 ThisPosition= 1, OldPosition, WaitExecution, NoWait 00058 }; 00059 00060 //----------------------------------------------------------------------------- 00061 00062 enum ECorrect 00063 { 00064 CorrLinear= 1, CorrPolynom 00065 }; 00066 //----------------------------------------------------------------------------- 00067 00068 enum ETrans 00069 { 00070 ToAngle= 1, ToPosition 00071 }; 00072 //----------------------------------------------------------------------------- 00073 00074 struct TMSettings 00075 { 00076 double dAngleMin, dAngleMax, dAngle, dSpeed, dAngleWidth; 00077 }; 00078 00079 //---------------------------------------------------------------------------------------- 00080 // TMotor 00081 //---------------------------------------------------------------------------------------- 00082 class _MOTORCLASS TMotor 00083 { 00084 //friend class TMList; 00085 //friend class TCalibrateDlg; 00086 //friend class TPositionControl; war sowieso TPosControlDlg gemeint 00087 //friend class TMotorParamDlg; 00088 //---------------------------------------------------------------------------------------- 00089 public: 00090 TMotor( void ); 00091 virtual ~TMotor( void ) 00092 {} 00093 ; 00094 //---------------------------------------------------------------------------------------- 00095 public: 00096 int GetId ( void ) // Index in der Antriebsliste (TMList) 00097 { 00098 return nId; 00099 }; 00100 static int GetMaxId ( void ) 00101 { 00102 return nMaxId; 00103 }; 00104 LPCSTR pCharacteristic ( void ) // Antriebsbezeichnung 00105 { 00106 return (LPCSTR)szCharacteristic; 00107 }; 00108 // aktuelle Antriebsposition in Nutzereinheiten 00109 BOOL GetAngle ( BOOL ); // aktualisiert NUR bei Stillstand den Wert in dAngle um dAngleBias korrigiert 00110 double GetAngle ( BOOL, BOOL& ); // ruft GetAngle( BOOL ) und gibt dAngle zurück 00111 double GetAngle ( void ) // zu zuletzt mit GetAngle( BOOL ) ausgelesenen (und um dAngleBias korrigierten) Wert zurückgeben 00112 { 00113 return dAngle; 00114 }; 00115 double GetAngleAbs ( BOOL, BOOL& ); // aktualisiert NUR bei Stillstand den Wert in dAngle OHNE Korrektur 00116 // minimale Antriebsposition in Nutzereinheiten 00117 double GetAngleMin ( void ) 00118 { 00119 return dAngleMin; 00120 }; 00121 void SetAngleMin ( double aAngle ) 00122 { 00123 dAngleMin= aAngle; 00124 }; 00125 double GetAngleRelativeMin ( void ); 00126 // maximale Antriebsposition in Nutzereinheiten 00127 double GetAngleMax ( void ) 00128 { 00129 return dAngleMax; 00130 }; 00131 void SetAngleMax ( double aAngle ) 00132 { 00133 dAngleMax= aAngle; 00134 }; 00135 double GetAngleRelativeMax ( void ); 00136 // Schrittweite in Nutzereinheiten 00137 double GetAngleWidth ( void ) 00138 { 00139 return dAngleWidth; 00140 }; 00141 BOOL SetAngleWidth ( double ); 00142 // minimale / maximale Schrittweite in Nutzereinheiten 00143 double GetMinAngleWidth( void ); 00144 double GetMaxAngleWidth( void ); 00145 // Bewegung durchführen 00146 BOOL MoveToAngle ( double ); 00147 BOOL MoveByAngle ( double ); 00148 // Offset und relative Null in Nutzereinheiten 00149 double GetAngleBias ( void ) 00150 { 00151 return dAngleBias; 00152 }; 00153 BOOL SetAngleBias ( double ); 00154 BOOL SetRelativeZero ( void ); 00155 BOOL ResetRelativeZero ( void ); 00156 BOOL IsDistanceRelative ( void ); 00157 00158 double GetMinSpeed ( void ); // Minimalgeschwindigkeit in Nutzereinheiten 00159 double GetMaxSpeed ( void ); // Maximalgeschwindigkeit in Nutzereinheiten 00160 double GetAcceleration ( void ); // Beschleunigung in Nutzereinheiten 00161 // Einstellungen lesen / schreiben 00162 BOOL PushSettings ( void ); 00163 BOOL PopSettings ( EMParameter ); 00164 00165 UINT GetDigits ( void ); // Anzahl der Nachkommastellen (nDigits) 00166 LPCSTR pSF ( void ) // Format für Nachkommastellengenauigkeit der Schrittweiten 00167 { 00168 return (LPCSTR)SFmt; 00169 }; 00170 LPCSTR pDF ( void ) // Format für Nachkommastellengenauigkeit der Winkelwerte 00171 { 00172 return (LPCSTR)DFmt; 00173 }; 00174 00175 BOOL IsRangeHit ( void ) 00176 { 00177 return bRangeHit; 00178 }; 00179 BOOL SetAngleRange ( void ); 00180 DWORD GetLimit ( void ) 00181 { 00182 return dwRemoveLimit; 00183 }; 00184 // aktuelle Position in Encoderschritten 00185 long GetPosition ( void ) 00186 { 00187 return lPosition; 00188 }; 00189 void SetDeltaPosition ( long aPos ) 00190 { 00191 lDeltaPosition= aPos; 00192 }; 00193 // minimale Position in Encoderschritten 00194 long GetPositionMin ( void ) 00195 { 00196 return lPositionMin; 00197 }; 00198 void SetPositionMin ( long aPos) 00199 { 00200 lPositionMin= aPos; 00201 }; 00202 // maximale Position in Encoderschritten 00203 long GetPositionMax ( void ) 00204 { 00205 return lPositionMax; 00206 }; 00207 void SetPositionMax ( long aPos) 00208 { 00209 lPositionMax= aPos; 00210 }; 00211 float GetMinPrecision(bool stepWidth=false) 00212 { 00213 UINT digits= GetDigits(); 00214 if ( stepWidth ) digits++; 00215 return ( 1 / (float)pow((float)10, (float)digits) ); 00216 }; 00217 // Schrittweite in Encoderschritten 00218 WORD GetPositionWidth () 00219 { 00220 return max( wPositionWidth, GetMinPrecision(true) ); // verhindert die Rückgabe von 0 und damit das leidige div 0 00221 }; 00222 void SetPositionWidth ( WORD aWidth ) 00223 { 00224 wPositionWidth= max( aWidth, GetMinPrecision(true) ); 00225 }; 00226 // Einheit des Antriebs 00227 EUnitType GetUnit ( void ) 00228 { 00229 return eUnit; 00230 }; 00231 LPCSTR GetUnitName ( void ) 00232 { 00233 return szUnit; 00234 }; 00235 00236 long GetDistanceToZero ( void ) 00237 { 00238 return lDistanceToZero; 00239 }; 00240 void SetDistanceToZero ( long aDist) 00241 { 00242 lDistanceToZero= aDist; 00243 }; 00244 00245 double GetInitialAngle ( void ) 00246 { 00247 return dInitialAngle; 00248 }; 00249 BOOL IsInitialMoveReady ( void ) 00250 { 00251 return bInitialMoveReady; 00252 } 00253 // Status des Refrenzpunktlaufs 00254 BOOL IsCalibrated ( void ) 00255 { 00256 return bIsCalibrated; 00257 } 00258 void SetCalibrationState ( BOOL state ) 00259 { 00260 bIsCalibrated= state; 00261 } 00262 void SetCorrectionState ( BOOL ); 00263 00264 //long PreviousPosition( void ) { return lPreviousPosition; }; (Toter Code, am 02.08.02 auskommentiert) 00265 //---------------------------------------------------------------------------------------- 00266 public: 00267 virtual void OptimizingDlg( void ) 00268 { 00269 return; 00270 } 00271 virtual void StartCheckScan( void ) 00272 { 00273 return; 00274 } 00275 virtual BOOL SetLimit( DWORD ) 00276 { 00277 return TRUE; 00278 } 00279 virtual BOOL SetLine( int, BOOL ) 00280 { 00281 return TRUE; 00282 } 00283 00284 virtual BOOL StartLimitWatch( void ) 00285 { 00286 return R_OK; 00287 } 00288 virtual BOOL StopLimitWatch( void ) 00289 { 00290 return R_OK; 00291 } 00292 00293 virtual int ExecuteCmd( LPSTR ) 00294 { 00295 return R_OK; 00296 } 00297 virtual BOOL ActivateDrive( void ) 00298 { 00299 return TRUE; 00300 } 00301 00302 virtual BOOL IsMoveFinish( void ) 00303 { 00304 return TRUE; 00305 } 00306 virtual BOOL IsLimitHit( void ) 00307 { 00308 return TRUE; 00309 } 00310 virtual BOOL IsIndexArrived( void ) 00311 { 00312 return TRUE; 00313 } 00314 00315 virtual BOOL StartToIndex( long & ) 00316 { 00317 return TRUE; 00318 } 00319 virtual BOOL StopDrive( BOOL ) 00320 { 00321 return TRUE; 00322 } //Parameter geändert int -> BOOL (08.08.02) 00323 virtual BOOL GetPosition( BOOL ) 00324 { 00325 return TRUE; 00326 } 00327 virtual long GetFailure( void ) 00328 { 00329 return 0; 00330 } 00331 // Bewegung in Encoderschritten 00332 virtual BOOL MoveByPosition( long ); 00333 virtual BOOL MoveToPosition( long ); 00334 00335 virtual BOOL SetHome( void ); 00336 // Speed: Geschwindigkeit in Nutzereinheiten 00337 virtual double GetSpeed( void ) 00338 { 00339 return 1.0; 00340 } 00341 virtual BOOL SetSpeed( double ) 00342 { 00343 return TRUE; 00344 } 00345 00346 virtual int SaveSettings( BOOL ); 00347 virtual int Initialize( void ); 00348 virtual WORD GetStatus( void ) 00349 { 00350 return 0xFF; 00351 } 00352 00353 //virtual float GetMoment( void ) { return 1.0; }; (Toter Code, am 02.08.02 auskommentiert) 00354 //virtual BOOL SetMoment( float ) { return TRUE; }; (Toter Code, am 02.08.02 auskommentiert) 00355 //---------------------------------------------------------------------------------------- 00356 // ANFANG: Zugriff auf folgende Member eingeschränkt 00357 protected: 00358 int nId; 00359 // Antriebsdaten in Encoderschritten 00360 long lPosition; 00361 long lDeltaPosition; 00362 long lPositionMax; 00363 long lPositionMin; 00364 WORD wPositionWidth; 00365 WORD wPositionMinWidth; 00366 WORD wPositionMaxWidth; 00367 // Antriebsdaten in Nutzereinheiten 00368 double dAngle; 00369 double dAngleBias; 00370 double dAngleWidth; 00371 double dAngleMin; 00372 double dAngleMax; 00373 double dInitialAngle; 00374 // Geschwindigkeit in Nutzereinheiten 00375 double dSpeed; 00376 float fSpeedScale; 00377 00378 EUnitType eUnit; 00379 UINT nDigits; // Kullmann, Reinecker: neuer Member 00380 BOOL bUpwards; 00381 BOOL bInquireStatus; 00382 BOOL bRangeHit; 00383 BOOL bIndexLine; 00384 BOOL bMoveFirstToLimit; 00385 BOOL bIndexDetected; 00386 BOOL bLimitWatchActive; 00387 BOOL bControlBoardOk; 00388 long lDistanceToZero; 00389 long lCorrPos; 00390 DWORD dwRemoveLimit; 00391 DWORD dwHysteresis; 00392 // Geschwindigkeit in Encoderschritten 00393 DWORD dwVelocity; 00394 DWORD dwMaxVelocity; 00395 DWORD dwAcceleration; 00396 char szUnit[ _MAXLENUNIT + 1 ]; 00397 char SFmt[ _MAXLENFORMAT + 1 ]; 00398 char DFmt[ _MAXLENFORMAT + 1 ]; 00399 //long lPreviousPosition; (Toter Code, am 02.08.02 auskommentiert) 00400 00401 // ENDE: Einschränkung 00402 //---------------------------------------------------------------------------------------- 00403 private: 00404 BOOL Translate( long&, double ); // Umrechnung von Nutzereinheiten(Angle) in Encoderschritte(Position) 00405 BOOL Translate( double&, long ); // Umrechnung von Encoderschritte(Position) in Nutzereinheiten(Angle um den Offset korrigiert) 00406 BOOL TranslateAbs( double&, long ); // Umrechnung von Encoderschritte(Position) in Nutzereinheiten 00407 void funcd( double arg, double offset, double* f, double* df ); 00408 int rtsave( double offset, double x1, double x2, double xacc, double* ret ); 00409 //---------------------------------------------------------------------------------------- 00410 private: 00411 BOOL bIsCalibrated; 00412 BOOL bInitialMoveReady; 00413 static int nMaxId; 00414 double dKoeff_3; 00415 double dKoeff_2; 00416 double dKoeff_1; 00417 DWORD dwInterval; 00418 BOOL bCorrection; 00419 float fCorrBias; 00420 ECorrect eCorrStatus; 00421 char szCharacteristic[ _MAXLENCHARACTERISTIC + 1 ]; 00422 TMSettings Settings; 00423 }; 00424 00425 //---------------------------------------------------------------------------------------- 00426 // TMList 00427 //---------------------------------------------------------------------------------------- 00428 class _MOTORCLASS TMList 00429 { 00430 public: 00431 TMList( int ); // zweiten Parameter HINSTANCE entfernt (08.08.02) 00432 virtual ~TMList( void ); 00433 00434 private: 00435 TMList( const TMList& ) {} // Copy-Konstruktor nicht nutzbar 00436 00437 //---------------------------------------------------------------------------------------- 00438 public: 00439 int AD_Z, AD_Y, AD_X; 00440 int AD_Tilt, AD_DC, AD_Collimator, AD_DF; 00441 int AD_Encoder; 00442 int AD_Phi; 00443 int AD_Psi; 00444 int AD_Rotation; 00445 int AD_Absorber, AD_Monochromator; 00446 int AD_Theta; 00447 int AD_Omega; 00448 //---------------------------------------------------------------------------------------- 00449 public: 00450 TMotor *MP( void ); 00451 TMotor *MP( int ); 00452 void SetAngleDefault( void ); 00453 void PositionControlDlg( void ); 00454 void SetParametersDlg( void ); 00455 void InquireReferencePointDlg( BOOL ); 00456 BOOL InitializeModule( void ); 00457 BOOL SaveModuleSettings( void ); 00458 BOOL SetAxis( int ); 00459 int GetAxis( void ) 00460 { 00461 return nActiveDrive; 00462 }; 00463 int LastId( void ) 00464 { 00465 return nLastDrive; 00466 }; 00467 //HINSTANCE GetModuleHandle( void ) { return hMInstance; }; (Toter Code, am 08.08.02 auskommentiert) 00468 int GetAxisNumber( void ) 00469 { 00470 return ( nLastDrive + 1 ); 00471 }; 00472 00473 static EAxisType ParsingAxis( LPCSTR ); 00474 //---------------------------------------------------------------------------------------- 00475 private: 00476 //HINSTANCE hMInstance; (Toter Code, am 08.08.02 auskommentiert) 00477 int nMaxNumber; 00478 int nLastDrive; // points the last axis 00479 int nActiveDrive; // points the actual axis 00480 TMotor** aMotor; 00481 }; 00482 //---------------------------------------------------------------------------------------- 00483 00484 typedef TMList FAR * LPMList; 00485 typedef TMotor FAR * LPMotor; 00486 #endif 00487 // __LastLine__ 00488

Erzeugt am Sat Nov 13 12:48:06 2004 für XCTL32 von doxygen 1.3.7