Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

#ifndef _USMCDLL_H
#define _USMCDLL_H


#include        <stdlib.h>


#define         USMC_ERROR_REF_DEV_DISCONNECTED         0x14141413
#define         USMC_ERROR_NOT_INITIALIZED              0x14141414
#define         USMC_ERROR_NO_DEVICES_CONNECTED         0x14141415
#define         USMC_SUCCESS                            0
#define         TRUE                                    1
#define         FALSE                                   0


typedef         unsigned char   BYTE;
typedef         unsigned int    DWORD;
typedef         unsigned short  WORD;
typedef         unsigned int    BOOL;
typedef         void *          PVOID;


typedef struct  _USMC_Devices
{
        DWORD   NOD;     // Number of devices connected to computer.
        char ** Serial;  // Array of pointers to 16√byte ASCII strings of length √ NOD.
        char ** Version; // Array of pointers to 4√byte ASCII strings of length √ NOD.
} USMC_Devices, * PUSMC_Devices, * LPUSMC_Devices;


typedef struct  _USMC_Parameters
{
        float AccelT;     // Acceleration time (in ms).
        float DecelT;     // Deceleration time (in ms).
        float PTimeout;   // Time (in ms) after which current will be reduced to 60% of normal.
        float BTimeout1;  // Time (in ms) after which speed of step motor rotation will be equal to the one specified at BTO1P field in this structure.
        float BTimeout2;  // Time (in ms) after which speed of step motor rotation will be equal to the one specified at BTO2P field in this structure.
        float BTimeout3;  // Time (in ms) after which speed of step motor rotation will be equal to the one specified at BTO3P field in this structure.
        float BTimeout4;  // Time (in ms) after which speed of step motor rotation will be equal to the one specified at BTO4P field in this structure.
        float BTimeoutR;  // Time (in ms) after which reset command will be performed.
        float BTimeoutD;  // This field is reserved for future use.
        float MinP;               // Speed (steps/sec) while performing reset operation.
        float BTO1P;      // Speed (steps/sec) after BTIMEOUT1 time has passed.
        float BTO2P;      // Speed (steps/sec) after BTIMEOUT2 time has passed.
        float BTO3P;      // Speed (steps/sec) after BTIMEOUT3 time has passed.
        float BTO4P;      // Speed (steps/sec) after BTIMEOUT4 time has passed.
        WORD  MaxLoft;    // Value in full steps that will be used performing backlash operation.
        DWORD StartPos;   // Current Position saved to FLASH.
        WORD  RTDelta;    // Revolution distance √ number of full steps per one full revolution.
        WORD  RTMinError; // Number of full steps missed to raise the error flag.
        float MaxTemp;    // Maximum allowed temperature (centigrade degrees).
        BYTE  SynOUTP;    // Duration of the output synchronization pulse.
        float LoftPeriod; // Speed (steps/sec) of the last phase of the backlash operation.
        float EncMult;    // Encoder step multiplier. Should be <Encoder Steps per Evolution> / <SM Steps per Evolution> and should be integer multiplied by 0.25.
} USMC_Parameters, * PUSMC_Parameters, * LPUSMC_Parameters;


typedef struct  _USMC_StartParameters
{
        BYTE SDivisor;  // Step is divided by this factor (1,2,4,8).
        BOOL DefDir;    // Direction for backlash operation (relative).
        BOOL LoftEn;    // Enable automatic backlash operation (works if slow start/stop mode is off).
        BOOL SlStart;   // If TRUE slow start/stop mode enabled.
        BOOL WSyncIN;   // If TRUE controller will wait for input synchronization signal to start.
        BOOL SyncOUTR;  // If TRUE output synchronization counter will be reset.
        BOOL ForceLoft; // If TRUE and destination position is equal to the current position backlash operation will be performed.
} USMC_StartParameters, * PUSMC_StartParameters, * LPUSMC_StartParameters;


typedef struct  _USMC_Mode
{                                               // Masked               Saved To Flash          Description:
        BOOL  PMode;            //              √                     YES                                     Turn off buttons (TRUE - buttons disabled).
        BOOL  PReg;                     //              √                     YES                                     Current reduction regime (TRUE - regime is on).
        BOOL  ResetD;           //              √                     YES                                     Turn power off and make a whole step (TRUE - apply).
        BOOL  EMReset;          //              √                     √                                     Quick power off.
        BOOL  Tr1T;                     //              √                     YES                                     Trailer 1 TRUE state (TRUE : +3/+5б; FALSE : 0б).
        BOOL  Tr2T;                     //              √                     YES                                     Trailer 2 TRUE state (TRUE : +3/+5б; FALSE : 0б).
        BOOL  RotTrT;           //              √                     YES                                     Rotary Transducer TRUE state (TRUE : +3/+5б; FALSE : 0б).
        BOOL  TrSwap;           //              √                     YES                                     If TRUE, Trailers are treated to be swapped.
        BOOL  Tr1En;            //              √                     YES                                     If TRUE Trailer 1 Operation Enabled.
        BOOL  Tr2En;            //              √                     YES                                     If TRUE Trailer 2 Operation Enabled.
        BOOL  RotTeEn;          //              √                     YES                                     If TRUE Rotary Transducer Operation Enabled.
        BOOL  RotTrOp;          //              √                     YES                                     Rotary Transducer Operation Select (stop on error if TRUE).
        BOOL  Butt1T;           //              √                     YES                                     Button 1 TRUE state (TRUE : +3/+5б; FALSE : 0б).
        BOOL  Butt2T;           //              √                     YES                                     Button 2 TRUE state (TRUE : +3/+5б; FALSE : 0б).
        BOOL  ResetRT;          //              YES                     √                                     Reset Rotary Transducer Check Positions (need one full revolution before it can detect error).
        BOOL  SyncOUTEn;        //              √                     YES                                     If TRUE output synchronization enabled.
        BOOL  SyncOUTR;         //              YES                     √                                     If TRUE output synchronization counter will be reset.
        BOOL  SyncINOp;         //              √                     YES                                     Synchronization input mode:
                                                //                                                                              TRUE - Step motor will move one time to the DestPos
                                                //                                                                              FALSE - Step motor will move multiple times by DestPos microsteps as distance.
        DWORD SyncCount;        //              √                     YES                                     Number of steps after which synchronization output signal occurs.
        BOOL  SyncInvert;       //              √                     YES                                     Set this bit to TRUE to invert output synchronization polarity.
        BOOL  EncoderEn;        //              √                     YES                                     Enable Encoder on pins {SYNCIN,ROTTR} - disables Synchronization input and Rotary Transducer.
        BOOL  EncoderInv;       //              √                     YES                                     Invert Encoder Counter Direction.
        BOOL  ResBEnc;          //              YES                     √                                     Reset <EncoderPos> and <ECurPos> to 0.
        BOOL  ResEnc;           //              YES                     √                                     Reset <ECurPos> to <EncoderPos>.
} USMC_Mode, * PUSMC_Mode, * LPUSMC_Mode;


typedef struct  _USMC_State
{
        int CurPos;             // Current position (in 1/8 steps).
        float Temp;             // Current temperature of the power driver.
        BYTE SDivisor;  // Step is divided by this factor.
        BOOL Loft;              // Indicates backlash status.
        BOOL FullPower; // Full power if TRUE.
        BOOL CW_CCW;    // Current direction of rotation (relatively to some direction √ dependent on step motor circuits connection and on its construction).
        BOOL Power;             // If TRUE then Step Motor power is ON.
        BOOL FullSpeed; // If TRUE then full speed. Valid in "Slow Start" mode only.
        BOOL AReset;    // TRUE After Device reset, FALSE after "Set Position".
        BOOL RUN;               // TRUE if step motor is rotating.
        BOOL SyncIN;    // Logical state directly from input synchronization PIN (pulses treated as positive).
        BOOL SyncOUT;   // Logical state directly from output synchronization PIN (pulses are positive).
        BOOL RotTr;             // Indicates current rotary transducer logical press state.
        BOOL RotTrErr;  // Indicates rotary transducer error flag (reset by USMC_SetMode function with ResetRT bit √ TRUE).
        BOOL EmReset;   // Indicates state of emergency disable button (TRUE √ Step motor power off).
        BOOL Trailer1;  // Indicates trailer 1 logical press state.
        BOOL Trailer2;  // Indicates trailer 2 logical press state.
        float Voltage;  // Input power source voltage (6-39V) -= 24 version 0nly=-.
} USMC_State, * PUSMC_State, * LPUSMC_State;


typedef struct  _USMC_EncoderState
{
        int EncoderPos; // Current position measured by encoder.
        int ECurPos;    // Current position (in Encoder Steps) - Synchronized with request call.
} USMC_EncoderState, * PUSMC_EncoderState, * LPUSMC_EncoderState;


typedef USMC_Devices const * PCUSMC_Devices;
typedef USMC_Devices const * LPCUSMC_Devices;
typedef USMC_Parameters const * PCUSMC_Parameters;
typedef USMC_Parameters const * LPCUSMC_Parameters;
typedef USMC_StartParameters const * PCUSMC_StartParameters;
typedef USMC_StartParameters const * LPCUSMC_StartParameters;
typedef USMC_Mode const * PCUSMC_Mode;
typedef USMC_Mode const * LPCUSMC_Mode;
typedef USMC_State const * PCUSMC_State;
typedef USMC_State const * LPCUSMC_State;
typedef USMC_EncoderState const * PCUSMC_EncoderState;
typedef USMC_EncoderState const * LPCUSMC_EncoderState;


DWORD USMC_Init ( USMC_Devices * Str );
DWORD USMC_GetState ( DWORD Device, USMC_State * Str );
DWORD USMC_SaveParametersToFlash ( DWORD Device );
DWORD USMC_GetMode ( DWORD Device, USMC_Mode * Str );
DWORD USMC_SetMode ( DWORD Device, USMC_Mode * Str );
DWORD USMC_GetParameters ( DWORD Device, USMC_Parameters * Str );
DWORD USMC_SetParameters ( DWORD Device, USMC_Parameters * Str );
DWORD USMC_GetStartParameters ( DWORD Device, USMC_StartParameters * Str );
DWORD USMC_Start ( DWORD Device, int DestPos,
                                   float * Speed,
                                   USMC_StartParameters * Str );
DWORD USMC_Stop ( DWORD Device );
DWORD USMC_SetCurrentPosition ( DWORD Device, int Position );
DWORD USMC_GetEncoderState ( DWORD Device, USMC_EncoderState * Str );
void  USMC_GetLastErr ( char * str, ssize_t len );
DWORD USMC_Close ( void );
#endif  // _USMCDLL_H