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

MOTRSTRG.H

gehe zur Dokumentation dieser Datei
00001 #ifndef __MOTRSTRG_H 00002 #define __MOTRSTRG_H 00003 00004 #include "motrstrg\m_motcom.h" // TMotor 00005 #include "motrstrg\msimstat.h" // Motorsimulator 00006 00007 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||-- 00008 00009 00010 #if defined (Build_Motors) 00011 #define _MOTORCLASS __declspec(dllexport) 00012 #elif defined(Use_Motors) 00013 #define _MOTORCLASS __declspec(dllimport) 00014 #else 00015 #define _MOTORCLASS 00016 #endif 00017 00018 00019 /* Benutzt in m_motcom.h, m_layer.h/cpp */ 00020 enum EValueType 00021 { 00022 Distance= 1, MinDistance, MaxDistance, MinDistanceRel, MaxDistanceRel, Speed, MinSpeed, MaxSpeed, Width, MinWidth, Acceleration 00023 00024 }; 00025 00026 /* 00027 * High Level layer der Motoransteuerung. 00028 * Funktionen von ausserhalb sollten diese benutzen und nicht die 00029 * aus motors.h 00030 * 00031 * mFunctionName = funktion benutzt den aktivierten Motor 00032 * mlFunctionName= funktion benutzt den Motor mit der uebergebenen 00033 * MotorID (mid) 00034 * Achse= ein Motor, der eine bestimmte Achse bewegt 00035 * 00036 * Viele hier benutzte Typen werden in comhead.h definiert, auf 00037 * jeden Fall einmal anschauen. 00038 * In m_motcom.h stehen einige Kurzroutinen!! 00039 * 00040 * Kommentare: Jens-Uwe Rumstich, 18. Februar 1999 00041 * Stefan Lützkendorf, Februar 2001 00042 */ 00043 00044 #ifdef __cplusplus 00045 extern "C" 00046 { 00047 #endif 00048 // prototypes for export functions 00049 00050 /******************************************************************************* 00051 ******************** MotorListen-Funktionen *********************************** 00052 ******************************************************************************/ 00053 00054 /* initialisiere DLL. 00055 * TRUE = initialisierung erfolgreich 00056 * FALSE= sonst 00057 */ 00058 BOOL _MOTORCLASS WINAPI mlInitializeMotorsDLL( void ); 00059 00060 /* Auswahl der aktiven Axis (Motor). 00061 * Auswahl des Motors, der danach direkt ueber die mFuntionsname 00062 * Funktionen angesprochen wird. 00063 * 00064 * der Parameter id endspricht der Position des Motors in der 00065 * Motoren-Liste bzw. dem X in [MotorX] im ini-file 00066 * 00067 * fuer id muss gelten: 0 <= id && id < mlGetAxisNumber() 00068 * 00069 * standardmaessig ist Achse 0 aktiv 00070 * 00071 * TRUE = Auswahl erfolgreich 00072 * FALSE= Auswahl schlug fehl (id ausserhalb des gueltigen Bereiches) 00073 */ 00074 BOOL _MOTORCLASS WINAPI mlSetAxis( int id ); 00075 00076 /* Ermittle derzeit aktivierte Achse 00077 * siehe mlSetAxis fuer mehr 00078 */ 00079 int _MOTORCLASS WINAPI mlGetAxis( void ); 00080 00081 /* liefert die id der Achse die einem Achsentype zugeordnet ist 00082 * 00083 * liefert -1 falls diese Achse nicht existiert bzw. nicht initialisiert wurde 00084 * s.a. mlIsAxisValid 00085 * 00086 * moegliche achsen: X, Y, Z, Omega, Theta, Phi, Spi, Encoder, Monochromator, 00087 * Absorber, Collimator, DF, DC, Tilt, Rotation 00088 * (siehe auch comhead.h) 00089 */ 00090 int _MOTORCLASS WINAPI mlGetIdByName( EAxisType axis); 00091 00093 //ACHTUNG die Schrittweite muss eine Nachkommastelle mehr haben!!! 00094 //ACHTUNG der Index dex Antriebs (erster Parameter) wird nicht auf seine Gültigkeit hin überprüft! 00095 UINT _MOTORCLASS WINAPI mlGetDigits ( int ); 00096 00097 /* returns the value of TValueType of the motor. 00098 * TValueType might be one of : 00099 * Distance - aktuelle Position in Nutzereinheiten (incl. AngleBias) 00100 * MinDistance - kleinstmögliche Position in Nutzereinheiten 00101 * MinDistanceRel - WIEVOR, jedoch incl. AngleBias 00102 * MaxDistance - größtmögliche Position in Nutzereinheiten 00103 * MaxDistanceRel - WIEVOR, jedoch incl. AngleBias 00104 * Speed - aktuelle Geschwindigkeit in Nutzereinheiten 00105 * MinSpeed - minimale Geschwindigkeit in Nutzereinheiten/Sekunde 00106 * MaxSpeed - maximale Geschwindigkeit in Nutzereinheiten/Sekunde 00107 * Width - Schrittweite in Nutzereinheiten 00108 * MinWidth - minimale Schrittweite in Nutzereinheiten 00109 * Acceleration - Beschleunigung in Nutzereinheiten/(Sekunde*Sekunde) 00110 * fuer TValueType siehe auch comhead.h 00111 * 00112 * s.a. mGetValue 00113 */ 00114 double _MOTORCLASS WINAPI mlGetValue( int, EValueType ); 00115 00116 //Neu : Kullmann, Reinecker (22.10.2002); minimale, relative Antriebsposition in Nutzereinheiten 00117 double _MOTORCLASS WINAPI mlGetAngleRelativeMin( int ); 00118 00119 //Neu : Kullmann, Reinecker (22.10.2002); maximale, relative Antriebsposition in Nutzereinheiten 00120 double _MOTORCLASS WINAPI mlGetAngleRelativeMax( int ); 00121 00122 /* Bewegt den gegebenen Motor zur gegebenen Position (in Nutzereinheiten) 00123 */ 00124 BOOL _MOTORCLASS WINAPI mlMoveToDistance( int mid, double position); 00125 00126 /* Feststellen, ob sich der Motor noch bewegt. 00127 * TRUE : motor finished to move (stands still) 00128 oder befindet sich in einem toten Bereich 00129 */ 00130 BOOL _MOTORCLASS WINAPI mlIsMoveFinish( int ); 00131 00132 /* returns Offset (dAngleBias) 00133 * Offset, dass die Verschiebung der Relativen zur Absoluten Null angibt 00134 * Wenn Offset != 0, dann beziehen sich alle Positionsangaben auf relative Null. 00135 */ 00136 double _MOTORCLASS WINAPI mlGetOffset( int ); 00137 00138 /* Umwandeln eines Strings in einen AxisType. 00139 * Allows more than one name for the same axis type. for example will 00140 * all of AzimutalRotation, AZ, Rotation and Azimute get to axis type 00141 * Rotation. 00142 * wird zum Beispiel ueber mehrere Ecken von ParsingCmd in m_steering.cpp 00143 * benutzt. useless ?? 00144 */ 00145 EAxisType _MOTORCLASS WINAPI mlParsingAxis( LPSTR ); 00146 00147 /* herausfinden, ob eine bestimmte Achse initialisiert wurde 00148 * TRUE = Achse wurde bereits initialisiert 00149 * FALSE= sonst 00150 */ 00151 BOOL _MOTORCLASS WINAPI mlIsAxisValid( EAxisType ); 00152 00153 /* liefert die Anzahl der Achsen/Motoren in der Motoren Liste 00154 * 00155 * gueltige Motor-IDs liegen im Bereich von 0 bis mlGetAxisNumber()-1 00156 */ 00157 int _MOTORCLASS WINAPI mlGetAxisNumber( void ); 00158 00159 /* Abspeichern der Einstellungen aller Motoren im ini-File 00160 * - v.a. der aktuellen Position fuer den Programm-Neustart 00161 * - setzt RestartPossible=TRUE um eine ordnugsgemaesses schliessen 00162 * des Programmes zu signalisieren 00163 * - stoppt die Motoren 00164 * (motors.cpp) 00165 */ 00166 void _MOTORCLASS WINAPI mlSaveModuleSettings( void ); 00167 00168 /* Setzen der Defaults fuer Winkel (dAngleBias auf 0 ) und der 00169 * (erlaubten ?)Winkelbereiche (SetAngleRange). Die Werte brauchen nicht 00170 * uebergeben zu werden. 00171 */ 00172 void _MOTORCLASS WINAPI mlSetAngleDefault( void ); 00173 00174 /* Rueckgabe der Versionsnummer von der m_layer-Schicht 00175 */ 00176 LPCSTR _MOTORCLASS WINAPI mlGetVersion( void ); 00177 00178 /* returns instance of module 00179 */ 00180 HINSTANCE _MOTORCLASS WINAPI mlGetInstance( void ); 00181 00182 /******************************************************************************* 00183 ************************ Motor-Funktionen ************************************* 00184 ******************************************************************************/ 00185 00186 /* Bewegt den aktuellen Motor zur gegebenen Position (in Nutzereinheiten) 00187 * Die Position wird im Bogenmass (Nutzereinheiten) uebergeben 00188 */ 00189 BOOL _MOTORCLASS WINAPI mMoveToDistance( double position); 00190 00191 /* Feststellen, ob sich der Motor noch bewegt. 00192 * TRUE : motor finished to move (stands still) 00193 oder befindet sich in einem toten Bereich 00194 */ 00195 BOOL _MOTORCLASS WINAPI mIsMoveFinish( void ); 00196 00197 /* Feststellen, ob ein Motor (vielleicht auch nur frueher berechneter 00198 * Winkel, wird in Translate gesetzt) ausserhalb des erlaubten Bereich 00199 * ist. 00200 * TRUE = Ausserhalb des erlaubten Bereichs, Fehler! 00201 * FALSE= Innerhalb des erlaubten Bereichs, kein Problem :-) 00202 */ 00203 BOOL _MOTORCLASS WINAPI mIsRangeHit( void ); 00204 00205 /* Test ob Motor kalibriert ist und Werte über einen gültigen Referenzpunktlauf 00206 * vorhanden sind. 00207 * 00208 * FALSE= die Positionsangaben kommen aus einem ungültigen Koordinatensystem 00209 * TRUE = die Positionsangaben sind relativ zur Absoluten bzw. zur Relativen Null 00210 * 00211 * == ini_InitialMove OR (ini_RestartPossible OR Referenzkunktlauf_ist_erfolgt) 00212 */ 00213 BOOL _MOTORCLASS WINAPI mlIsCalibrated( int axis ); 00214 BOOL _MOTORCLASS WINAPI mIsCalibrated( void ); 00215 00216 /* TRUE = WinkelOffset != 0, sprich der Winkel bezieht sich auf 00217 * relative Null 00218 * FALSE= WinkelOffset= 0. 00219 */ 00220 BOOL _MOTORCLASS WINAPI mlIsDistanceRelative( int axis ); 00221 BOOL _MOTORCLASS WINAPI mIsDistanceRelative( void ); 00222 00223 /* Wenn FALSE, dann wird Befehl auf der 812 ignoriert !!! BUG ?? 00224 * Stoppen des Motors. 00225 * Der Bool-Wert gibt eventuell an, ob der Motor wieder neu gestartet 00226 * werden soll. Leider Source ohne Doc nicht lesbar :-( 00227 */ 00228 void _MOTORCLASS WINAPI mStopDrive( BOOL ); 00229 00230 /* Ermittle Distance des Motors mit der gegebenen Motor ID. 00231 * TRUE = Ok, Distanz konnte ermittelt werden 00232 -> Distanz steht im Double-Parameter!! 00233 * FALSE= sorry, funktion ging schief 00234 */ 00235 BOOL _MOTORCLASS WINAPI mlGetDistance( int, double& ); 00236 BOOL _MOTORCLASS WINAPI mGetDistance( double& ); 00237 00238 // WIEVOR, jedoch auch in Bewegung möglich 00239 double _MOTORCLASS WINAPI mlGetDistanceProcess( int axis ); 00240 double _MOTORCLASS WINAPI mGetDistanceProcess( void ); 00241 00243 //ACHTUNG die Schrittweite muss eine Nachkommastelle mehr haben!!! 00244 UINT _MOTORCLASS WINAPI mGetDigits ( void ); 00245 00246 /* s. mlGetValue 00247 */ 00248 double _MOTORCLASS WINAPI mGetValue( EValueType ); 00249 00250 //Neu : Kullmann, Reinecker (22.10.2002); minimale, relative Antriebsposition in Nutzereinheiten 00251 double _MOTORCLASS WINAPI mGetAngleRelativeMin( void ); 00252 00253 //Neu : Kullmann, Reinecker (22.10.2002); maximale, relative Antriebsposition in Nutzereinheiten 00254 double _MOTORCLASS WINAPI mGetAngleRelativeMax( void ); 00255 00256 /* returns Unittype. 00257 * this might be one of Grad,Minuten,Sekunden,Millimeter,Mikrometer 00258 * Channel. See comhead.h for deklaration of TUniType 00259 */ 00260 EUnitType _MOTORCLASS WINAPI mGetUnitType( void ); 00261 00262 /* set value of a special ValueType. TValueType might be Speed or Width. 00263 * Distance, MaxDistance, MinDistance allways return false an can not be set! 00264 * 00265 * wenn valType == Speed 00266 * Einheit ist Unit / Sekunde (s. ini-Params. Unit, SpeedScale) 00267 * der Wert wird automatisch durch MaxVelocity beschränkt 00268 * 00269 * TRUE : Function successfull 00270 * FALSE: Function failed 00271 * This function depends on a LowLevel-Driver to return false/true correctly 00272 */ 00273 BOOL _MOTORCLASS WINAPI mlSetValue( int axis, EValueType vtype, double value ); 00274 BOOL _MOTORCLASS WINAPI mSetValue( EValueType valType, double value); 00275 00276 /* Aktiviere einen Motor (Ansteuerungskarte?) 00277 * Dieses geschieht direkt auf der Hardware Ebene 00278 */ 00279 void _MOTORCLASS WINAPI mActivateDrive( void ); 00280 00281 /* der Correctionstate wird entweder ON oder OFF (oder 0) geschaltet 00282 */ 00283 void _MOTORCLASS WINAPI mlSetCorrectionState( int axis, BOOL onoff ); 00284 void _MOTORCLASS WINAPI mSetCorrectionState( BOOL ); 00285 00286 /* liefert den namen des aktuellen motors (name-parameter in ini-file) 00287 */ 00288 LPCSTR _MOTORCLASS WINAPI mlGetAxisName( int axis ); 00289 LPCSTR _MOTORCLASS WINAPI mGetAxisName( void ); 00290 00291 /* ausgabe von szUnit. Wird aus ini-file ausgelesen*/ 00292 LPCSTR _MOTORCLASS WINAPI mlGetAxisUnit( int mid ); 00293 LPCSTR _MOTORCLASS WINAPI mGetAxisUnit( void ); 00294 00295 /* rueckgabe eines String. Siehe DFmt in motors.cpp 00296 */ 00297 LPCSTR _MOTORCLASS WINAPI mGetDF( void ); 00298 00299 /* rueckgabe eines String. Siehe SFmt in motors.cpp 00300 */ 00301 LPCSTR _MOTORCLASS WINAPI mGetSF( void ); 00302 00303 /* setzen der relativen Null. 00304 * Wenn Bool= TRUE -> Die relative Null wird um offset verschoben; ist bereits 00305 * eine relative Null gesetzt, wird die relative Null 00306 * relativ zur bisherigen relative Null gesetzt. 00307 * = FALSE-> Die relative Null wird zurückgesetzt, d.h. sie wird 00308 * gleich der absoluten Null gesetzt. 00309 */ 00310 void _MOTORCLASS WINAPI mlSetRelativeZero( int axis, BOOL yes, double value ); 00311 void _MOTORCLASS WINAPI mSetRelativeZero( BOOL, double offset); 00312 00313 /* Ausfuehren des Kommandos in LPSTR direkt auf der Karte/dem Motor. 00314 * 00315 * sollte solcherlei direktes Ansprechen der Hardware in diesem 00316 * High-Level-Layer nicht unmoeglich sein? 00317 */ 00318 int _MOTORCLASS WINAPI mExecuteCmd( LPSTR ); 00319 00320 /* Zwischenspeichern von dAngle, dAngleMin, dAngleMax, dAngleWidth und 00321 * dSpeed. Achtung, es werden eventuell frueher gespeicherte Werte 00322 * ueberschrieben. Zwischen 2 PushSettings muss also ein PopSettings 00323 * erfolgen, sonst gehen diese Werte verloren! 00324 * Frage: ist es wirklich sinnvoll, eine solche Routine nach aussen 00325 * anzubieten? Sollte so etwas nicht irgendwie abgeschirmt werden? 00326 */ 00327 void _MOTORCLASS WINAPI mPushSettings( void ); 00328 00329 /* Zurueckschreiben der (letzten) mit PushSettings gespeicherten 00330 * Werte in die entsprechenden Variablen! 00331 */ 00332 void _MOTORCLASS WINAPI mPopSettings( EMParameter ); 00333 00334 /******************************************************************************* 00335 ****** "MoveScan"-Funktionen ************************************************** 00336 ******************************************************************************* 00337 * 00338 * Ein MoveScan setzt den Motor mit den aktuellen Parametern 00339 * in Bewegung und tastet die Position in regelmäßigen Abständen 00340 * ab. Der Entstehende Vektor von Positionsangaben steht danach zur 00341 * Verfügung. 00342 * 00343 */ 00344 00345 /* liefert die maximale Anzahl von Abtastungen die durchgeführt wird, 00346 * d.h. die Größe des Vektors 00347 * (liefert konstant 150) 00348 */ 00349 int _MOTORCLASS WINAPI mGetScanSize( void ); 00350 00351 /* liefert die tatsächliche Anzahl von Abtastungen die durchgeführt wurden 00352 * d.h. die Anzahl der Werte im Vektor die gültig sind 00353 */ 00354 int _MOTORCLASS WINAPI mGetMoveFinishIdx( void ); 00355 00356 /* liefert einen Zeiger auf den Vektor der abgetasteten Positionswerte 00357 * der Verktor hat die Größe mGetScanSize() und der mGetMoveFinishIdx() 00358 * gültige Werte enthält 00359 */ 00360 LPLONG _MOTORCLASS WINAPI mGetMoveScan( void ); 00361 00362 /******************************************************************************* 00363 ************************ Motor-Dialoge **************************************** 00364 ******************************************************************************/ 00365 /* ich habe alles mit DLG im Namen hierhin an das Ende verbannt. Alles mit 00366 * Dialogen hat hier nichts zu suchen und sollte an eine entsprechende 00367 * Files bewegt werden!! 00368 * should be moved out of m_layer !!! 00369 */ 00370 00371 /* start InquireReferencePoint-Dialog 00372 */ 00373 void _MOTORCLASS WINAPI mlInquireReferencePointDlg( BOOL ); // Parameter geändert int -> BOOL (08.08.02) 00374 00375 /* start PositionControl-Dialog 00376 */ 00377 void _MOTORCLASS WINAPI mlPositionControlDlg( void ); 00378 00379 /* start SetParameter-Dialog 00380 */ 00381 void _MOTORCLASS WINAPI mlSetParametersDlg ( void ); 00382 00383 /* send cm_CallExecuteScan and start Optimizing-Dialog 00384 */ 00385 void _MOTORCLASS WINAPI mlOptimizingDlg( void ); 00386 #ifdef __cplusplus 00387 00388 } 00389 #endif 00390 00391 00392 #endif 00393 // __LastLine__ 00394 00395

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