/*************************************************************************** Title: dprbkg.h Version: 1.00 Date: 01/26/1998 Author(s): Ed Lay & Allen Segall Header file for PMAC Dual Ported RAM Background functions. Note(s): ---------------------------------------------------------------------------- HISTORY: 30Jul98 JET Added DprBackgroundVar() for enable disable of variable background. 26Jan98 EBL Creation ***************************************************************************/ #ifndef _DPRBKG_H #define _DPRBKG_H typedef struct gsTURBO { // Global Status ??? Must be on BYTE boundaries // DWord 1 ( ??? 1st 24/32 bit word ) USHORT rffu2 : 8; // 0-7 USHORT internal1 : 3; // 8-10 USHORT buffer_full : 1; // 11 USHORT internal2 : 4; // 12-16 USHORT internal3 : 1; USHORT plc_buf_open : 1; // 17 USHORT rot_buf_open : 1; // 18 USHORT prog_buf_open : 1; // 19 USHORT bin_rot_buf_open : 1; // 20 USHORT rffu3 : 1; USHORT vme : 1; USHORT ultralite : 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; // 7 USHORT rapid_m_flag : 1; // 8 USHORT rti_warning : 1; // 9 USHORT earom_error : 1; // 10 USHORT dpram_error : 1; // 11 USHORT prom_checksum : 1; // 12 USHORT mem_checksum : 1; // 13 USHORT comp_on : 1; // 14 USHORT wdt1 : 1; // 15 USHORT wdt2 : 1; // 16 USHORT ext_trig_gat : 1; // 17 USHORT prep_trig_gat : 1; // 18 USHORT data_gat_on : 1; // 19 USHORT servo_err : 1; // 20 USHORT servo_active : 1; // 21 USHORT intr_reentry : 1; // 22 USHORT intr_active : 1; // 23 USHORT pad1 : 8; } GLOBALSTATUSTURBO; /////////////////////////////////////////////////////////////////////////// // PMAC Background Buffer ------------------------------------------------------ /////////////////////////////////////////////////////////////////////////// struct ms { // Motor definition word ( ? 2nd 24 bit word ) USHORT in_position : 1; USHORT warn_ferr : 1; USHORT fatal_ferr : 1; USHORT amp_fault : 1; USHORT backlash_dir : 1; USHORT amp_i2t_err : 1; USHORT integral_ferr : 1; USHORT triger_home_flg : 1; USHORT phase_find_err : 1; USHORT rffu2 : 1; USHORT home_complete : 1; USHORT stopped_on_limit : 1; USHORT rffu3 : 2; USHORT amp_enabled : 1; USHORT rffu4 : 1; USHORT rffu5 : 4; USHORT coord_sys : 3; USHORT cs_assigned : 1; USHORT pad : 8; }; struct ps { // Program Execution Status ( ?? 2nd 24 bit word ) USHORT cir_spline_move : 1; // #0 USHORT ccw_move : 1; USHORT cc_on : 1; USHORT cc_left : 1; USHORT pvt_spline_move : 1; USHORT seg_stop_request : 1; USHORT seg_accel : 1; USHORT seg_move : 1; USHORT rapid_move_mode : 1; USHORT cc_buffered : 1; USHORT cc_stop_request : 1; USHORT cc_outside_corner : 1; USHORT dwell_buffered : 1; USHORT sync_m_func : 1; USHORT eob_stop : 1; USHORT delayed_calc : 1; USHORT rot_buff_full : 1; USHORT in_position : 1; USHORT warn_ferr : 1; USHORT fatal_ferr : 1; USHORT amp_fault : 1; USHORT circle_rad_err : 1; USHORT run_time_err : 1; USHORT prog_hold : 1; // #23 Look ahead in TURBO USHORT pad : 8; }; struct cs { // Coord Status // word 1 Motor definition word //DWORD motor_def; unsigned long motor_def; // word 2 Coordinate status ( ?? 1st 24 bit word ) USHORT prog_running : 1; USHORT single_step_mode : 1; USHORT cont_motion_mode : 1; USHORT tm_mode : 1; USHORT cont_motion_req : 1; USHORT rad_vect_inc_mode : 1; USHORT a_axis_inc : 1; USHORT a_axis_infeed : 1; USHORT b_axis_inc : 1; USHORT b_axis_infeed : 1; USHORT c_axis_inc : 1; USHORT c_axis_infeed : 1; USHORT u_axis_inc : 1; USHORT u_axis_infeed : 1; USHORT v_axis_inc : 1; USHORT v_axis_infeed : 1; USHORT w_axis_inc : 1; USHORT w_axis_infeed : 1; USHORT x_axis_inc : 1; USHORT x_axis_infeed : 1; USHORT y_axis_inc : 1; USHORT y_axis_infeed : 1; USHORT z_axis_inc : 1; USHORT z_axis_infeed : 1; USHORT pad2 : 8; }; struct bkfdptr { USHORT fdadr : 16; // Address of current % use to determine // if in normal or time base mode USHORT pad3 : 6; USHORT fdhld : 1; // in feed hold no jog off USHORT pad2 : 1; USHORT pad1 : 8; }; struct backm { // background coord/motor axis structure // addresses below are for motor/coord 1 long mpos[2 ]; // $D093 - $D094 motor desired position long bpos[2 ]; // $D095 - $D096 position bias struct ms mstatus; // $D097 motor status struct cs cstatus; // $D098 - $D099 coord sys status long cpos[9 ][2 ]; // $D09A - $D0AB axis desired position struct ps pstatus; // $D0AC program execution status unsigned long pr; // $D0AD program remaining unsigned long timrem; // $D0AE - time remain in move (I13=0) long tats; // $D0AF - time remain in TA/TS (I13=0) unsigned long pe; // $D0B0 - Program execution line long fvel; // $D0B1 - filtered velocity }; struct backg { // background buffer structure USHORT dataready; // Y:$D08A PMAC done updating USHORT spare1; // X:$D08A spare unsigned long cpanelport; // $D08B control panel port unsigned long thumbwport; // $D08C thumbwheel port unsigned long machineport; // $D08D machine IO port struct bkfdptr fdptr[2 ]; // $DO8E - $D08F long fdpot[2 ]; // $DO90 - $D091 unsigned long spare2[1 ]; // $D08E - $D092 spares struct backm mtrcrd[8 ]; // motor coord structures }; struct bkfdptrTURBO { unsigned long fdadr : 19; // B0..18 - Address of current % use to determine // if in normal or time base mode USHORT pad3 : 2; USHORT fdslew : 1; // B21 = 1 - in feed slew mode USHORT fdhld : 1; // B22 = 1 - in feed hold no jog off USHORT pad2 : 1; USHORT pad1 : 8; }; struct csTURBO { // Coord Status // word 1 Coordinate status ( ?? 2nd 24 bit word ) USHORT: 8; USHORT: 8; USHORT: 2; USHORT in_prog_pmatch : 1; // #18 USHORT sync_m_func_buf_ovrflow : 1; // #19 USHORT sync_m_func_in_buf : 1; // #20 USHORT look_ahead_buf_end : 1; // #21 USHORT look_ahead_buf_lbck : 1; // #22 USHORT look_ahead_buf_wrap : 1; // #23 USHORT: 8; // word 2 Coordinate status ( ?? 1st 24 bit word ) USHORT prog_running : 1; USHORT single_step_mode : 1; USHORT cont_motion_mode : 1; USHORT tm_mode : 1; USHORT cont_motion_req : 1; USHORT rad_vect_inc_mode : 1; USHORT a_axis_inc : 1; USHORT a_axis_infeed : 1; USHORT b_axis_inc : 1; USHORT b_axis_infeed : 1; USHORT c_axis_inc : 1; USHORT c_axis_infeed : 1; USHORT u_axis_inc : 1; USHORT u_axis_infeed : 1; USHORT v_axis_inc : 1; USHORT v_axis_infeed : 1; USHORT w_axis_inc : 1; USHORT w_axis_infeed : 1; USHORT x_axis_inc : 1; USHORT x_axis_infeed : 1; USHORT y_axis_inc : 1; USHORT y_axis_infeed : 1; USHORT z_axis_inc : 1; USHORT z_axis_infeed : 1; USHORT pad2 : 8; }; struct backcTURBO { // background coord. Sys. axis structure // Addresses for C.S. #1 long ffdrate[2 ]; // $602A5 - C.S. Feedrate(F) or Time(TM) long fdpot; // $602A7 - C.S. Feedpot // struct bkfdptrTURBO fdptr; // $602A8 - C.S. Desired Feedpot Ptr. struct bkfdptr fdptr; // $602A8 - C.S. Desired Feedpot Ptr. struct csTURBO cstatus; // $602AA - coord sys status X:mem long cpos[9 ][2 ]; // $602AB - $D0AB axis desired position struct ps pstatus; // $602BD - program execution status unsigned long pr; // $602BE - program remaining unsigned long timrem; // $602BF - time remain in move (I13=0) long tats; // $602C0 - time remain in TA/TS (I13=0) unsigned long pe; // $602C1 - Program execution line unsigned long sparec[3 ]; // $602C2 - $602C4 spares }; struct bkrdycsTURBO { USHORT datardy : 1; // B0 - 1 = Data Rdy/ 0 = Request Data USHORT pad3 : 7; }; struct backgTURBO { // background buffer structure USHORT cordsys : 8; // Y:$6019D B0..7 - Number of C.S. used to be I59 USHORT spare1 : 8; // Y:$6019D B8..15 - Spare USHORT spare2 : 8; // X:$6019D B0..7 - Spare USHORT spare3 : 7; // X:$6019D B8..14 - Spare USHORT hostbusy : 1; // X:$6019D B15 - host accessing buffer USHORT servotimer; // Y:$6019E B0..16 - Servo Timer low 16 of pmac 24 bits USHORT servotimerms8 : 8; // X:$6019E B0..7 - Servo Timer upper 8 bits of pmac 24 bits USHORT pspare : 7; // X:$6019E B8..14 - USHORT datardy : 1; // X:$6019E B15 - pmac has written data unsigned long cpanelport; // $6019F - control panel port unsigned long machineport; // $601A0 - machine IO port unsigned long thumbwport; // $601A1 - thumbwheel port struct gsTURBO globalstatus; // $601A2 unsigned long sparebg[3 ]; // $601A4 - $601A6 spares struct backcTURBO crdsys[16 ]; // $601A7 - $603A6 coord sys structures }; /////////////////////////////////////////////////////////////////////////// // BACK GROUND VARIABLE BUFFER Interface Structure struct backgvar { USHORT dataready; // Y:$D1FA PMAC done updating USHORT servotimer; // X:$D1FA servotimer USHORT bufsize; // Y:$D1FB Size of rotary buffer USHORT bufstart; // X:$D1FB buffer start / TURBO = offset }; /////////////////////////////////////////////////////////////////////////// // BACK GROUND VARIABLE WRITE BUFFER struct backgvarwrite { USHORT num_entries; // Y:$D1F5 Up to 32 writes USHORT buf_start; // X:$D1F5 }; struct VBGWFormat { long type_addr; long data1; long data2; }; /////////////////////////////////////////////////////////////////////////// // BACK GROUND VARIABLE BUFFER Status Structure // Update VBGDB structure struct backgvarbuf_status { USHORT num_entries; // Number of entries in address array USHORT num_data; // Number of PMAC 16 bit words placed in data array USHORT addr_offset; // Offset to begginning of user's address array USHORT data_offset; // Offset to begginning of user's data array }; ////////////////////////////////////////////////////////////////////////// // Functions #ifdef __cplusplus extern "C" { #endif BOOL CALLBACK PmacDPRBackground( DWORD dwDevice, int on ); BOOL CALLBACK PmacDPRBackgroundEx( DWORD dwDevice, int on, UINT period, UINT crd ); BOOL CALLBACK PmacDPRBackGroundVar( DWORD dwDevice, BOOL on ); BOOL CALLBACK PmacDPRUpdateBackground( DWORD dwDevice ); void CALLBACK PmacDPRLockBackground(DWORD dwDevice); void CALLBACK PmacDPRUnlockBackground(DWORD dwDevice); // Functions pertaining to coord systems long CALLBACK PmacDPRPe( DWORD dwDevice, int cs ); BOOL CALLBACK PmacDPRRotBufFull( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysInposition( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysWarnFError( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysFatalFError( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysRunTimeError( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysCircleRadError( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRSysAmpFaultError( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRProgRunning( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRProgStepping( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRProgContMotion( DWORD dwDevice, int crd ); BOOL CALLBACK PmacDPRProgContRequest( DWORD dwDevice, int crd ); int CALLBACK PmacDPRProgRemaining( DWORD dwDevice, int crd ); double CALLBACK PmacDPRCommanded( DWORD dwDevice, int coord, char axchar ); BOOL CALLBACK PmacDPRLookAheadEnabled( DWORD dwDevice, int crd ); // For BACKWARD COMPATIBLITY PURPOSES ONLY BOOL CALLBACK PmacDPRSetBackground( DWORD dwDevice ); // Background VAR buffer functions void CALLBACK PmacDPRSetBackgroundVarBufSize(DWORD dwDevice, WORD size); WORD CALLBACK PmacDPRGetBackgroundVarBufSize(DWORD dwDevice); void CALLBACK PmacDPRSetBackgroundVarBufStart(DWORD dwDevice, WORD start); WORD CALLBACK PmacDPRGetBackgroundVarBufStart(DWORD dwDevice); BOOL CALLBACK PmacDPRBackgroundVarBufDataReady(DWORD dwDevice); void CALLBACK PmacDPRResetBackgroundVarBufDataReady(DWORD dwDevice); // Background VAR WRITE void CALLBACK PmacDPRSetBackgroundWriteBufEntries(DWORD dwDevice, WORD start); WORD CALLBACK PmacDPRGetBackgroundWriteBufEntries(DWORD dwDevice); void CALLBACK PmacDPRSetBackgroundWriteBufStart(DWORD dwDevice, WORD start); WORD CALLBACK PmacDPRGetBackgroundWriteBufStart(DWORD dwDevice); // Background gather buffer WORD CALLBACK PmacDPRGetBackgroundGatStart(DWORD dwDevice); WORD CALLBACK PmacDPRGetBackgroundGatSize(DWORD dwDevice); void CALLBACK PmacDPRSetBackgroundGatSize(DWORD dwDevice,WORD size); #ifdef __cplusplus } #endif #endif