00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef __M_MOTCOM_H
00026
#define __M_MOTCOM_H
00027
00028
#include "internls\evrythng.h"
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;
00041 const UINT
_MAXLENUNIT= 20;
00042 const UINT
_MAXLENFORMAT= 5;
00043
00044
00045
00046
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
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
00081
00082 class _MOTORCLASS TMotor
00083 {
00084
00085
00086
00087
00088
00089
public:
00090 TMotor(
void );
00091 virtual ~TMotor(
void )
00092 {}
00093 ;
00094
00095
public:
00096 int GetId (
void )
00097 {
00098
return nId;
00099 };
00100 static int GetMaxId (
void )
00101 {
00102
return nMaxId;
00103 };
00104 LPCSTR pCharacteristic (
void )
00105 {
00106
return (LPCSTR)szCharacteristic;
00107 };
00108
00109 BOOL GetAngle ( BOOL );
00110
double GetAngle ( BOOL, BOOL& );
00111 double GetAngle (
void )
00112 {
00113
return dAngle;
00114 };
00115
double GetAngleAbs ( BOOL, BOOL& );
00116
00117 double GetAngleMin (
void )
00118 {
00119
return dAngleMin;
00120 };
00121 void SetAngleMin (
double aAngle )
00122 {
00123 dAngleMin= aAngle;
00124 };
00125
double GetAngleRelativeMin (
void );
00126
00127 double GetAngleMax (
void )
00128 {
00129
return dAngleMax;
00130 };
00131 void SetAngleMax (
double aAngle )
00132 {
00133 dAngleMax= aAngle;
00134 };
00135
double GetAngleRelativeMax (
void );
00136
00137 double GetAngleWidth (
void )
00138 {
00139
return dAngleWidth;
00140 };
00141 BOOL SetAngleWidth (
double );
00142
00143
double GetMinAngleWidth(
void );
00144
double GetMaxAngleWidth(
void );
00145
00146 BOOL MoveToAngle (
double );
00147 BOOL MoveByAngle (
double );
00148
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 );
00159
double GetMaxSpeed (
void );
00160
double GetAcceleration (
void );
00161
00162 BOOL PushSettings (
void );
00163 BOOL PopSettings ( EMParameter );
00164
00165 UINT GetDigits (
void );
00166 LPCSTR pSF (
void )
00167 {
00168
return (LPCSTR)SFmt;
00169 };
00170 LPCSTR pDF (
void )
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
00185 long GetPosition (
void )
00186 {
00187
return lPosition;
00188 };
00189 void SetDeltaPosition (
long aPos )
00190 {
00191 lDeltaPosition= aPos;
00192 };
00193
00194 long GetPositionMin (
void )
00195 {
00196
return lPositionMin;
00197 };
00198 void SetPositionMin (
long aPos)
00199 {
00200 lPositionMin= aPos;
00201 };
00202
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
00218 WORD GetPositionWidth ()
00219 {
00220
return max( wPositionWidth, GetMinPrecision(
true) );
00221 };
00222 void SetPositionWidth ( WORD aWidth )
00223 {
00224 wPositionWidth= max( aWidth, GetMinPrecision(
true) );
00225 };
00226
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
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
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 }
00323 virtual BOOL GetPosition( BOOL )
00324 {
00325
return TRUE;
00326 }
00327 virtual long GetFailure(
void )
00328 {
00329
return 0;
00330 }
00331
00332
virtual BOOL MoveByPosition(
long );
00333
virtual BOOL MoveToPosition(
long );
00334
00335
virtual BOOL SetHome(
void );
00336
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
00354
00355
00356
00357
protected:
00358 int nId;
00359
00360 long lPosition;
00361 long lDeltaPosition;
00362 long lPositionMax;
00363 long lPositionMin;
00364 WORD wPositionWidth;
00365 WORD wPositionMinWidth;
00366 WORD wPositionMaxWidth;
00367
00368 double dAngle;
00369 double dAngleBias;
00370 double dAngleWidth;
00371 double dAngleMin;
00372 double dAngleMax;
00373 double dInitialAngle;
00374
00375 double dSpeed;
00376 float fSpeedScale;
00377
00378 EUnitType eUnit;
00379 UINT nDigits;
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
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
00400
00401
00402
00403
private:
00404 BOOL Translate(
long&,
double );
00405 BOOL Translate(
double&,
long );
00406 BOOL TranslateAbs(
double&,
long );
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
00427
00428 class _MOTORCLASS TMList
00429 {
00430
public:
00431 TMList(
int );
00432
virtual ~TMList(
void );
00433
00434
private:
00435 TMList(
const TMList& ) {}
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
00468 int GetAxisNumber(
void )
00469 {
00470
return ( nLastDrive + 1 );
00471 };
00472
00473
static EAxisType ParsingAxis( LPCSTR );
00474
00475
private:
00476
00477
int nMaxNumber;
00478
int nLastDrive;
00479
int nActiveDrive;
00480 TMotor** aMotor;
00481 };
00482
00483
00484 typedef TMList FAR *
LPMList;
00485 typedef TMotor FAR *
LPMotor;
00486
#endif
00487
00488