dprrealt.h
来自「美国Delta Tau公司PMAC多轴运动控制卡的VC++示例程序」· C头文件 代码 · 共 258 行
H
258 行
/* 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?