/* DPRRealT.h - Header file for PMAC Dual Ported RAM Real Time Data Buffer (DPRRTDB)
|
|
HISTORY
|
|
17Aug99 JET added hwpos (Master Position) to realmTURBO struct
|
added PmacDPRNetActualPosition();
|
20Jan98 EBL Latest Servo Structure
|
12Dec97 EBL AS First Created
|
*/
|
|
#ifndef _DPRREALT_H
|
#define _DPRREALT_H
|
|
#include "windows.h"
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
///////////////////////////////////////////////////////////////////////////
|
// TURBO -------------------------------------------------------
|
///////////////////////////////////////////////////////////////////////////
|
typedef struct ssTURBO { // Motor Servo Status ( ? 1st 24 bit word )
|
USHORT rapid_spd_sel : 1; // B00 - RAPID MOVE SPEED SELECT (IXX90)
|
USHORT dac_sign_mag : 1; // B01 - SIGN/MAGNITUDE SERVO (IXX96)
|
USHORT sw_capture : 1; // B02 - SOFTWARE HOME CAPTURE (IXX97.0)
|
USHORT fe_capture : 1; // B03 - CAPTURE ON FOLLOWING ERROR (IXX97.1)
|
USHORT handwheel_ena : 1; // B04 - HANDWHEEL ENABLE FLAG (IXX06.0)
|
USHORT hw_mode : 1; // B05 - HANDWHEEL MODE FLAG (IXX06.1)
|
USHORT phased_motor : 1; // B06 - PHASED MOTOR ENABLE FLAG (IXX01.0)
|
USHORT yenc_phase : 1; // B07 - Y PHASE ENCODER (IXX01.1)
|
USHORT user_servo : 1; // B08 - USER WRITEN SERVO ENABLE (IXX59.0)
|
USHORT user_phase : 1; // B09 - USER WRITEN PHASE ENABLE (IXX59.1)
|
USHORT home_search : 1; // B10 - HOME IN PROGRESS FLAG
|
USHORT block_request : 1; // B11 - BLOCK REQUEST FLAG
|
USHORT limit_stop : 1; // B12 - Limit Stop Flag
|
USHORT desired_vel_0 : 1; // B13 - Desired Velocity = 0
|
USHORT data_block_err : 1; // B14 - DATA BLOCK ERROR
|
USHORT dwelling : 1; // B15 - Dwell Mode
|
USHORT integrator_ena : 1; // B16 - Ixx34
|
USHORT run_program : 1; // B17 - MOVE TIMER ACTIVE
|
USHORT open_loop : 1; // B18 - OPEN LOOP MODE
|
USHORT amp_enabled : 1; // B19 - AMPLIFIER ENABLED FLAG
|
USHORT algo_ena : 1; // B20 - EXTENDED ALGO ENABLE FLAG (I3300+50*N)
|
USHORT pos_limit : 1; // B21 - POSITIVE POSITION LIMIT
|
USHORT neg_limit : 1; // B22 - NEGATIVE POSITION LIMIT
|
USHORT activated : 1; // B23 - Ixx00
|
USHORT pads : 8; // B24..31 - Not Available
|
} SERVOSTATUSTURBO;
|
|
typedef struct msTURBO { // Motor Status ( ? 1st 24 bit word )
|
USHORT in_position : 1; // B00 - IN POSITION
|
USHORT warn_ferr : 1; // B01 - SOFT FOLLOWING ERROR
|
USHORT fatal_ferr : 1; // B02 - FATAL FOLLOWING ERROR
|
USHORT amp_fault : 1; // B03 - AMP FAULT ERROR
|
USHORT backlash_dir : 1; // B04 - BACKLASH DIRECTION FLAG
|
USHORT amp_i2t_err : 1; // B05 - I2T AMP FAULT
|
USHORT integral_ferr : 1; // B06 - INTEGRATED FOLLOWING ERROR FAULT
|
USHORT triger_home_flg : 1; // B07 - TRIGGER/HOME MOVE FLAG
|
USHORT phase_find_err : 1; // B08 - PHASE FINDING ERROR FLAG
|
USHORT tbd09 : 1; // B09 - TBD
|
USHORT home_complete : 1; // B10 - HOME COMPLETE FLAG
|
USHORT stopped_on_limit : 1; // B11 - POS LIMIT STOP FLAG
|
USHORT: 1; // B12 - TBD
|
USHORT: 1; // B13 - TBD
|
USHORT: 1; // B14 - TBD
|
USHORT cs_assigned : 1; // B15 - TBD
|
USHORT cs_def : 4; // B16..19 - Coord. Sys. Axis Def
|
USHORT coord_sys : 4; // B20..23 - MOTOR COORDINATE SYSTEM NUMBER (-1)
|
USHORT padm : 8; // B24..31 - Not Available
|
} MOTORSTATUSTURBO;
|
|
struct realmTURBO { // real time buffer motor structure
|
long pepos[2 ]; // $6001D-1E - Mtr position following err
|
long pdac; // $6001F - Mtr previous DAC
|
struct ssTURBO sstatus; // $60020 - Mtr servo status
|
struct msTURBO mstatus; // $60021 - Mtr Status
|
long bpos[2 ]; // $60022-23 - Mtr Postion Bias
|
long fvel; // $60024 - Mtr Filtered/Average Velocity
|
long hwpos[2 ]; // $60025-26 - Mtr Master Position
|
long pos[2 ]; // $60027-28 - Mtr Net actual position
|
};
|
|
struct realtTURBO { // real time buffer structure
|
USHORT: 16; // Y:$6001A
|
USHORT: 8; // X:$6001A B0-30 spare
|
USHORT: 7;
|
USHORT hostbusy : 1; // X:$6001A B31 host busy
|
USHORT servotimer; // Y:$6001B Servo Timer
|
USHORT servotimerms8 : 8; // X:$6001B Servo Timer upper 8 bits
|
USHORT pspare : 7;
|
USHORT dataready : 1; // X:$6001B pmac data ready/busy = 1/0
|
long motor_mask; // L:$6001C Motor Mask (motors 1-32)
|
|
struct realmTURBO motor[32 ]; // L:$6001D - $60028 1 thru 32 motor structures
|
};
|
|
|
///////////////////////////////////////////////////////////////////////////
|
// PMAC -------------------------------------------------------
|
///////////////////////////////////////////////////////////////////////////
|
typedef struct ss { // Motor Servo Status ( ? 1st 24 bit word )
|
USHORT internal1 : 8;
|
USHORT internal2 : 2;
|
USHORT home_search : 1;
|
USHORT block_request : 1;
|
USHORT rffu1 : 1;
|
USHORT desired_vel_0 : 1;
|
USHORT data_block_err : 1;
|
USHORT dwelling : 1;
|
USHORT integration : 1;
|
USHORT run_program : 1;
|
USHORT open_loop : 1;
|
USHORT phased_motor : 1;
|
USHORT handwheel_ena : 1;
|
USHORT pos_limit : 1;
|
USHORT neg_limit : 1;
|
USHORT activated : 1;
|
USHORT pad : 8;
|
} SERVOSTATUS;
|
|
typedef struct gs { // Global Status
|
// DWord 1 ( ??? 1st 24/32 bit word )
|
USHORT rffu2 : 8; // 0-7
|
USHORT internal1 : 3; // 8-10
|
USHORT buffer_full : 1;
|
USHORT internal2 : 3; // 12-14
|
USHORT dpram_response : 1;
|
USHORT plc_command : 1;
|
USHORT plc_buf_open : 1;
|
USHORT rot_buf_open : 1; // 18
|
USHORT prog_buf_open : 1; // 19
|
USHORT internal3 : 2;
|
USHORT host_comm_mode : 1;
|
USHORT internal4 : 1;
|
USHORT pad2 : 8;
|
// DWord 2 ( ??? 2nd 24/32 bit word )
|
USHORT card_adrssed : 1; // 0
|
USHORT all_adrssed : 1; // 1
|
USHORT rffu1 : 2;
|
USHORT ring_error : 1; // 4
|
USHORT ring_io_error : 1; // 5
|
USHORT tws_error : 1; // 6
|
USHORT end_gather : 1;
|
USHORT rapid_m_flag : 1;
|
USHORT rti_warning : 1;
|
USHORT earom_error : 1;
|
USHORT dpram_error : 1;
|
USHORT prom_checksum : 1;
|
USHORT mem_checksum : 1;
|
USHORT comp_on : 1;
|
USHORT stimulate_on : 1;
|
USHORT stimulus_ent : 1;
|
USHORT prep_trig_gat : 1;
|
USHORT prep_next_serv : 1;
|
USHORT data_gat_on : 1;
|
USHORT servo_err : 1;
|
USHORT servo_active : 1;
|
USHORT intr_reentry : 1;
|
USHORT intr_active : 1;
|
USHORT pad1 : 8;
|
} GLOBALSTATUS;
|
|
struct realm { // real time buffer motor structure
|
// addresses below are for motor 1
|
long dpos[2 ]; // $D012 - $D013 commanded position
|
long apos[2 ]; // $D014 - $D015 actual position
|
long hwpos[2 ]; // $D016 - $D017 hand wheel position
|
long cpos[2 ]; // $D018 - $D019 compensation position
|
unsigned long pdac; // $D01A previous DAC
|
struct ss sstatus; // $D01B servo status
|
long fvel; // $D01C velocity delta position
|
long movtim; // $D01D Mtr Move Time remaining / %feedpot
|
// valid when I13 = 0
|
unsigned long mspare[3 ]; // $D01E - $D020 motor spares
|
|
};
|
|
|
struct realt { // real time buffer structure
|
|
USHORT hostbusy : 1; // Y:$D009 B0
|
USHORT rffu1 : 15; // Y:$D009 B1-15
|
USHORT servotimer : 15; // X:$D009 B0-14
|
USHORT pmacbusy : 1; // X:$D009 B15
|
struct gs globalstatus; // $D00A - $D00B
|
long ffdrate[2 ][2 ]; // Coord. System feedrate(F) or Time(TM)
|
unsigned long spareglobal[2 ]; // $D020 - $D011
|
struct realm mtrcrd[8 ]; // 1 thru 8 motor structures
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
// Functions
|
// *************************************************************************
|
///////////////////////////////////////////////////////////////////////////*
|
///////////////////// INITIALIZATION ROUTINES /////////////////////////////*
|
///////////////////////////////////////////////////////////////////////////*
|
// *************************************************************************
|
|
BOOL CALLBACK PmacDPRRealTime( DWORD dwDevice, UINT period, int on );
|
BOOL CALLBACK PmacDPRRealTimeEx( DWORD dwDevice, long mask, UINT period, int on );
|
void CALLBACK PmacDPRRealTimeSetMotor( DWORD dwDevice, long mask );
|
|
// *************************************************************************
|
///////////////////////////////////////////////////////////////////////////*
|
///////////////////// HANDSHAKING ROUTINES ////////////////////////////////*
|
///////////////////////////////////////////////////////////////////////////*
|
// *************************************************************************
|
|
BOOL CALLBACK PmacDPRUpdateRealTime( DWORD dwDevice );
|
void CALLBACK PmacDPRLockRealTime( DWORD dwDevice );
|
void CALLBACK PmacDPRUnlockRealTime( DWORD dwDevice );
|
|
BOOL CALLBACK PmacDPRRealTimeDataReady( DWORD dwDevice );
|
void CALLBACK PmacDPRSetRealTimeDataReady( DWORD dwDevice );
|
void CALLBACK PmacDPRResetRealTimeDataReady( DWORD dwDevice );
|
|
void CALLBACK PmacDPRSetRealTimeMotorMask(DWORD dwDevice, DWORD mask);
|
|
// *************************************************************************
|
///////////////////////////////////////////////////////////////////////////*
|
///////////////////// DATA ACCESS ROUTINES ////////////////////////////////*
|
///////////////////////////////////////////////////////////////////////////*
|
// *************************************************************************
|
int CALLBACK PmacDPRGetServoTimer( DWORD dwDevice );
|
double CALLBACK PmacDPRGetCommandedPos( DWORD dwDevice, int mtr, double units );
|
double CALLBACK PmacDPRPosition( DWORD dwDevice, int mtr, double units );
|
double CALLBACK PmacDPRNetActualPosition( DWORD dwDevice, int mtr, double units );
|
double CALLBACK PmacDPRFollowError( DWORD dwDevice, int mtr, double units );
|
void CALLBACK PmacDPRGetMasterPos( DWORD dwDevice, int mtr, double units, double *the_double );
|
void CALLBACK PmacDPRGetCompensationPos( DWORD dwDevice, int mtr, double units, double *the_double );
|
double CALLBACK PmacDPRGetVel( DWORD dwDevice, int mtr, double units );
|
DWORD CALLBACK PmacDPRGetPrevDAC( DWORD dwDevice, int mtr );
|
DWORD CALLBACK PmacDPRGetMoveTime( DWORD dwDevice, int mtr );
|
|
|
// Functions pertaining to individual motors
|
BOOL CALLBACK PmacDPRMotorEnabled( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRHandwheelEnabled( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRPhasedMotor( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPRDataBlock( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPROnNegativeLimit( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPROnPositiveLimit( DWORD dwDevice, int mtr );
|
BOOL CALLBACK PmacDPROpenLoop( DWORD dwDevice, int mtr );
|
void CALLBACK PmacDPRSetJogReturn( DWORD dwDevice, int mtr );
|
|
|
//------------------- PMAC SPECIFIC --------------------------------------//
|
struct ss CALLBACK PmacDPRMotorServoStatus( DWORD dwDevice, int mtr );
|
|
|
//------------------- TURBO SPECIFIC -------------------------------------//
|
struct ssTURBO CALLBACK PmacDPRMotorServoStatusTurbo( DWORD dwDevice, int mtr );
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif
|