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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef CDEVICE_H
00050 #define CDEVICE_H
00051
00052 #include "../Util/Message.h"
00053 #include "../Util/StopWatch.h"
00054 #include "../ComDef/DeviceErrors.h"
00055 #include "../ComDef/ModuleErrors.h"
00056 #include "../ComDef/IOErrors.h"
00057 #include "../Device/ProtocolCommands.h"
00058
00059 class CDevice : public CMessage
00060 {
00061 private:
00062
00063
00064
00065
00066
00067 protected:
00068
00069
00070
00071 bool m_bInitFlag;
00072 char m_acName[128];
00073 char m_acInitString[128];
00074 char m_acRevision[20];
00075 int m_iBaudRate;
00076 int m_iModuleCount;
00077 int m_iModuleCountMax;
00078 std::vector<int> m_aiModuleId;
00079 std::vector<unsigned short> m_auiModuleVersion;
00080 CStopWatch m_clTimer;
00081 int m_iErrorState;
00082
00083
00084
00085 virtual int reinit(unsigned char ucBaudRateId) = 0;
00086 virtual int write8Bytes(int iModuleId, bool ack, void* pBytes ) = 0;
00087 virtual int getUnsignedLong(int iModuleId, unsigned long* puiData) = 0;
00088
00089 virtual int readChar(int iModuleId, int iCommandId, int iParameterId, char* pcData) = 0;
00090 virtual int readUnsignedChar(int iModuleId, int iCommandId, int iParameterId, unsigned char* pucData) = 0;
00091 virtual int readShort(int iModuleId, int iCommandId, int iParameterId, short* piData) = 0;
00092 virtual int readUnsignedShort(int iModuleId, int iCommandId, int iParameterId, unsigned short* puiData) = 0;
00093 virtual int readLong(int iModuleId, int iCommandId, int iParameterId, long* piData) = 0;
00094 virtual int readUnsignedLong(int iModuleId, int iCommandId, int iParameterId, unsigned long* puiData) = 0;
00095 virtual int readFloat(int iModuleId, int iCommandId, int iParameterId, float* pfData) = 0;
00096
00097 virtual int readLongUnsignedChars(int iModuleId, int iCommandId, int iParameterId, long* piData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00098 virtual int readFloatUnsignedChars(int iModuleId, int iCommandId, int iParameterId, float* pfData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00099
00100 virtual int writeChar(int iModuleId, int iCommandId, int iParameterId, char cData) = 0;
00101 virtual int writeUnsignedChar(int iModuleId, int iCommandId, int iParameterId, unsigned char ucData) = 0;
00102 virtual int writeShort(int iModuleId, int iCommandId, int iParameterId, short iData) = 0;
00103 virtual int writeUnsignedShort(int iModuleId, int iCommandId, int iParameterId, unsigned short uiData) = 0;
00104 virtual int writeLong(int iModuleId, int iCommandId, int iParameterId, long iData) = 0;
00105 virtual int writeUnsignedLong(int iModuleId, int iCommandId, int iParameterId, unsigned long uiData) = 0;
00106 virtual int writeFloat(int iModuleId, int iCommandId, int iParameterId, float fData) = 0;
00107
00108 virtual int writeAll(int iCommandId, int iParameterId) = 0;
00109 virtual int writeCommand(int iModuleId, int iCommandId) = 0;
00110 virtual int writeLongShort(int iModuleId, int iCommandId, int iParameterId, long iData, short iTime) = 0;
00111 virtual int writeFloatShort(int iModuleId, int iCommandId, int iParameterId, float fData, short iTime) = 0;
00112
00113 virtual int writeShortReadLongUnsignedChars(int iModuleId, int iCommandId, int iParameterId, short iData, long* piData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00114 virtual int writeLongReadLongUnsignedChars(int iModuleId, int iCommandId, int iParameterId, long iData, long* piData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00115 virtual int writeLongShortReadLongUnsignedChars(int iModuleId, int iCommandId, int iParameterId, long iData1, short iData2, long* piData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00116 virtual int writeFloatReadFloatUnsignedChars(int iModuleId, int iCommandId, int iParameterId, float fData, float* pfData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00117 virtual int writeFloatShortReadFloatUnsignedChars(int iModuleId, int iCommandId, int iParameterId, float fData, short iData, float* pfData, unsigned char* pucData1, unsigned char* pucData2) = 0;
00118
00119 void charStateToLongState(unsigned char uiShort, unsigned long* puiState);
00120
00121 public:
00122
00123
00124
00125
00126
00127
00129 CDevice(void);
00131 CDevice(const CDevice& rclDevice);
00133 virtual ~CDevice();
00134
00135
00136
00137
00138 CDevice& operator=(const CDevice& rclDevice);
00139
00140
00141
00143 bool getInitFlag();
00145 const char* getRevision();
00147 const char* getName();
00149 const char* getInitString();
00151 int getBaudRate(void);
00153 int getModuleCount(void);
00155 int getModuleIdMap(std::vector<int>& raiModuleId);
00156
00157 int getModuleState(int iModuleId, unsigned long* puiState);
00158 int getModuleType(int iModuleId, unsigned char* pucValue);
00159 int getModuleVersion(int iModuleId, unsigned short* puiValue);
00160 int getModuleSerialNo(int iModuleId, unsigned long* puiValue);
00161
00162 int getDefConfig(int iModuleId, unsigned long* puiValue);
00163 int getDefSetup(int iModuleId, unsigned long* puiValue);
00164 int getDefBaudRate(int iModuleId, unsigned char* pucValue);
00165 int getDefBurnCount(int iModuleId, unsigned char* pucValue);
00166 int getDefGearRatio(int iModuleId, float* pfValue);
00167 int getDefLinearRatio(int iModuleId, float* pfValue);
00168 int getDefCurOffset(int iModuleId, float* pfValue);
00169 int getDefCurRatio(int iModuleId, float* pfValue);
00170 int getDefBrakeTimeOut(int iModuleId, unsigned short* puiValue);
00171 int getDefIncPerTurn(int iModuleId, unsigned long* puiValue);
00172 int getDefDioData(int iModuleId, unsigned long* puiValue);
00173 int getDefA0(int iModuleId, short* piValue);
00174 int getDefC0(int iModuleId, short* piValue);
00175 int getDefDamp(int iModuleId, short* piValue);
00176 int getDefHomeOffset(int iModuleId, float* pfValue);
00177 int getDefHomeVel(int iModuleId, float* pfValue);
00178 int getDefMinPos(int iModuleId, float* pfValue);
00179 int getDefMaxPos(int iModuleId, float* pfValue);
00180 int getDefMaxVel(int iModuleId, float* pfValue);
00181 int getDefMaxAcc(int iModuleId, float* pfValue);
00182 int getDefMaxCur(int iModuleId, float* pfValue);
00183 int getDefMaxDeltaPos(int iModuleId, float* pfValue);
00184
00185 int getConfig(int iModuleId, unsigned long* puiValue);
00186 int getIncRatio(int iModuleId, float* pValue );
00187 int getStateDioPos(int iModuleId, unsigned long* puiState,
00188 unsigned char* pucDio, float* pfPos);
00189 int getDioData(int iModuleId, unsigned long* puiValue);
00190 int getA0(int iModuleId, short* piValue);
00191 int getC0(int iModuleId, short* piValue);
00192 int getDamp(int iModuleId, short* piValue);
00193 int getHomeOffset(int iModuleId, float* pValue );
00194 int getHomeOffsetInc(int iModuleId, long* piValue );
00195 int getHomeVel(int iModuleId, float* pfValue );
00196 int getHomeVelInc(int iModuleId, long* piValue);
00197 int getPos(int iModuleId, float* pfPos);
00198 int getPosInc(int iModuleId, long* piValue);
00199 int getPosCountInc(int iModuleId, long* piValue);
00200 int getVel(int iModuleId, float* pfVel);
00201 int getVelInc(int iModuleId, long* piValue);
00202 int getIPolVel(int iModuleId, float* pValue );
00203 int getCur(int iModuleId, float* pfCur);
00204 int getCurInc(int iModuleId, short* piValue);
00205 int getMinPos(int iModuleId, float* pfValue);
00206 int getMinPosInc(int iModuleId, long* piValue);
00207 int getMaxPos(int iModuleId, float* pfValue);
00208 int getMaxPosInc(int iModuleId, long* piValue);
00209 int getMaxVel(int iModuleId, float* pfValue);
00210 int getMaxVelInc(int iModuleId, long* piValue);
00211 int getMaxAcc(int iModuleId, float* pfValue);
00212 int getMaxAccInc(int iModuleId, long* piValue);
00213 int getMaxCur(int iModuleId, float* pfValue);
00214 int getDeltaPos(int iModuleId, float* pfValue);
00215 int getDeltaPosInc(int iModuleId, long* piValue);
00216 int getMaxDeltaPos(int iModuleId, float* pfValue);
00217 int getMaxDeltaPosInc(int iModuleId, long* piValue);
00218 int getSavePos(int iModuleId, float* pfValue);
00219 int getSyncTime(int iModuleId, short* piValue);
00220 int getRawMotorCurrent(int iModuleId, short* piValue);
00221 int getRawMotorSupply(int iModuleId, short* piValue);
00222 int getRawTemperature(int iModuleId, short* piValue);
00223 int getRawLogicSupply(int iModuleId, short* piValue);
00224 int getLoadLimit(int iModuleId, long* piValue);
00225 int getMaxLoadGradient(int iModuleId, long* piValue);
00226 int getLoadDeltaTime(int iModuleId, unsigned short* piValue);
00227
00228 int getMotorCurrent(int iModuleId, float* pfValue);
00229 int getMotorSupply(int iModuleId, float* pfValue);
00230 int getTemperature(int iModuleId, float* pfValue);
00231 int getLogicSupply(int iModuleId, float* pfValue);
00232
00233 int getMinLogicVoltage(int iModuleId, float* pfValue);
00234 int getMaxLogicVoltage(int iModuleId, float* pfValue);
00235 int getMinMotorVoltage(int iModuleId, float* pfValue);
00236 int getMaxMotorVoltage(int iModuleId, float* pfValue);
00237 int getNominalMotorCurrent(int iModuleId, float* pfValue);
00238 int getMaximumMotorCurrent(int iModuleId, float* pfValue);
00239 int getLogicUndershootTime(int iModuleId, long* piValue);
00240 int getLogicOvershootTime(int iModuleId, long* piValue);
00241 int getMotorUndershootTime(int iModuleId, long* piValue);
00242 int getMotorOvershootTime(int iModuleId, long* piValue);
00243 int getNomCurOvershootTime(int iModuleId, long* piValue);
00244 int getHMaxCurOvershootTime(int iModuleId, long* piValue);
00245
00246 int getDefCANBaudRate(int iModuleId, unsigned char* pucValue);
00247 int getDefRSBaudRate(int iModuleId, unsigned char* pucValue);
00248
00249 int getKpPWMLimit(int iModuleId, long* piValue);
00250 int getCurrentLimit(int iModuleId, float* pfValue);
00251 int getMaxPWMOutput(int iModuleId, long* piValue);
00252
00253 virtual int getDataDLR_FTS(std::vector<float>& rafData, long* piState) = 0;
00254 virtual int getDataSCHUNK_FTC(int iModuleId, int iChannelTypeId, std::vector<float>& rafData, short* piState) = 0;
00255 virtual int getDataMP55_IO(int iModuleId, float* pfData) = 0;
00256 virtual int getDataMP55_IO_fast(int iModuleId, float* pfData) = 0;
00257 virtual int getCanOpenRawAbsEnc(int iModuleId, short* piValue) = 0;
00258
00259
00260
00261
00263 void setName(const char* acNameString);
00264 void setInitString(const char* acInitString);
00265
00266 int setConfig(int iModuleId, unsigned long puiValue);
00267 int setDioData(int iModuleId, unsigned long uiValue);
00268 int setA0(int iModuleId, short iValue);
00269 int setC0(int iModuleId, short iValue);
00270 int setDamp(int iModuleId, short iValue);
00271 int setHomeOffset(int iModuleId, float fValue );
00272 int setHomeOffsetInc(int iModuleId, long iValue );
00273 int setHomeVel(int iModuleId, float fValue);
00274 int setHomeVelInc(int iModuleId, long iValue);
00275 int setRampVel(int iModuleId, float fValue );
00276 int setRampAcc(int iModuleId, float fValue );
00277 int setRampVelInc(int iModuleId, long iValue );
00278 int setRampAccInc(int iModuleId, long iValue );
00279 int setMinPos(int iModuleId, float fValue);
00280 int setMinPosInc(int iModuleId, long iValue);
00281 int setMaxPos(int iModuleId, float fValue);
00282 int setMaxPosInc(int iModuleId, long iValue);
00283 int setMaxVel(int iModuleId, float fValue);
00284 int setMaxVelInc(int iModuleId, long iValue);
00285 int setMaxAcc(int iModuleId, float fValue);
00286 int setMaxAccInc(int iModuleId, long iValue);
00287 int setMaxCur(int iModuleId, float fValue);
00288 int setMaxDeltaPos(int iModuleId, float fValue);
00289 int setMaxDeltaPosInc(int iModuleId, long iValue);
00290 int setSyncTime(int iModuleId, short iValue);
00291 int setLoadLimit(int iModuleId, long iValue);
00292 int setMaxLoadGradient(int iModuleId, long iValue);
00293 int setLoadDeltaTime(int iModuleId, unsigned short iValue);
00294
00295 int setDefGearRatio(int iModuleId, float fValue);
00296 int setDefLinRatio(int iModuleId, float fValue);
00297 int setDefCurRatio(int iModuleId, float fValue);
00298 int setDefHomeAcc(int iModuleId, float fValue);
00299 int setModuleSerialNo(int iModuleId, unsigned long uiValue);
00300 int setDefIncPerTurn(int iModuleId, unsigned long uiValue);
00301 int setDefBrakeTimeOut(int iModuleId, unsigned short uiValue);
00302 int setDefAddress(int iModuleId, unsigned char uiValue);
00303 int setDefCANBaudRate(int iModuleId, unsigned char uiValue);
00304 int setDefRSBaudRate(int iModuleId, unsigned char uiValue);
00305 int setDefSetup(int iModuleId, unsigned long uiValue);
00306
00307 int setMinLogicVoltage(int iModuleId, float fValue);
00308 int setMaxLogicVoltage(int iModuleId, float fValue);
00309 int setMinMotorVoltage(int iModuleId, float fValue);
00310 int setMaxMotorVoltage(int iModuleId, float fValue);
00311 int setNominalMotorCurrent(int iModuleId, float fValue);
00312 int setMaximumMotorCurrent(int iModuleId, float fValue);
00313 int setLogicUndershootTime(int iModuleId, long iValue);
00314 int setLogicOvershootTime(int iModuleId, long iValue);
00315 int setMotorUndershootTime(int iModuleId, long iValue);
00316 int setMotorOvershootTime(int iModuleId, long iValue);
00317 int setNomCurOvershootTime(int iModuleId, long iValue);
00318 int setHMaxCurOvershootTime(int iModuleId, long iValue);
00319
00320 int setKpPWMLimit(int iModuleId, long iValue);
00321 int setCurrentLimit(int iModuleId, float fValue);
00322
00323 virtual int setNullSCHUNK_FTC(int iModuleId, short* piState) = 0;
00324 virtual int setTaraMP55_IO(int iModuleId, float fTara) = 0;
00325 virtual int setInitMP55_IO_fast(int iModuleId) = 0;
00326
00327
00328
00329
00330
00331 virtual int init() = 0;
00332 virtual int init(const char* acInitString) = 0;
00333 virtual int exit() = 0;
00334
00335 virtual int initDLR_FTS() = 0;
00336 int updateModuleIdMap();
00337
00338 int homeModule(int iModuleId);
00339 int resetModule(int iModuleId);
00340 int haltModule(int iModuleId);
00341 int recalcPIDParams(int iModuleId);
00342 int saveParameters(int iModuleId);
00343
00344 int movePos(int iModuleId, float fPos);
00345 int movePosInc(int iModuleId, long iPos);
00346 int movePosExtended(int iModuleId, float fPos,
00347 unsigned long* puiState, unsigned char* pucDio, float* pfPos);
00348 int moveRamp(int iModuleId, float fPos, float fVel, float fAcc);
00349 int moveRampInc(int iModuleId, long iPos, long iVel, long iAcc);
00350 int moveRampExtended(int iModuleId, float fPos, float fVel, float fAcc,
00351 unsigned long* puiState, unsigned char* pucDio, float* pfPos);
00352 int moveVel(int iModuleId, float fVel);
00353 int moveVelInc(int iModuleId, long iVel);
00354 int moveVelExtended(int iModuleId, float fCur,
00355 unsigned long* puiState, unsigned char* pucDio, float* pfPos);
00356 int moveCur(int iModuleId, float fCur);
00357 int moveCurInc(int iModuleId, long iCur);
00358 int moveCurExtended(int iModuleId, float fCur,
00359 unsigned long* puiState, unsigned char* pucDio, float* pfPos);
00360 int moveStep(int iModuleId, float fPos, unsigned short uiTime);
00361 int moveStepInc(int iModuleId, long iPos, unsigned short uiTime);
00362 int moveStepExtended(int iModuleId, float fPos, unsigned short uiTime,
00363 unsigned long* puiState, unsigned char* pucDio, float* pfPos);
00364
00365
00366
00367 int waitForHomeEnd(int iModuleId, unsigned long uiTimeOut = 60000);
00368 int waitForMotionEnd(int iModuleId, unsigned long uiTimeOut = 60000);
00369 int waitForRampEnd(int iModuleId, unsigned long uiTimeOut = 60000);
00370 int waitForRampDec(int iModuleId, unsigned long uiTimeOut = 60000);
00371 int waitForRampSteady(int iModuleId, unsigned long uiTimeOut = 60000);
00372 int waitForHomeEndAll(unsigned long uiTimeOut = 60000);
00373 int waitForMotionEndAll(unsigned long uiTimeOut = 60000);
00374 int waitForRampEndAll(unsigned long uiTimeOut = 60000);
00375 virtual int waitForStartMotionAll();
00376
00377
00378
00379 int homeAll(void);
00380 int resetAll(void);
00381 int haltAll(void);
00382 int serveWatchdogAll(void);
00383 int setBaudRateAll(unsigned char ucBaudRateId);
00384 int startMotionAll(void);
00385 int savePosAll(void);
00386
00387
00388
00389 int xmit8Bytes(int iModuleId, void* pBytes );
00390 int xack8Bytes(int iModuleId, void* pBytes );
00391 int doInternal(int iModuleId, void* pBytes );
00392 int getStateInternal(int iModuleId, unsigned long* pBytes );
00393
00394 };
00395
00396 CDevice* newDevice(const char* acInitString);
00397
00398 #endif