⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spc3dps2.h

📁 profibus TO RS485 profibus TO RS485
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
/*****************************************************
//  程序名:	   spc3dps2.h                    	//
//  软件名称及版本: 1.0				        //
//  系统/模块名称:  Profibus从站			        //
//  编写工程师:    Schmidt Xaver(SIMENS demo)	        //
//  编写及完成日期: 2001-12-29				//
//  最后修改日期与修改人:唐铭山			        //
//  程序描述:该程序是根据183从站板的module程序修改           //
*******************************************************/

#ifndef SPC3_H__   /* include only once */
#define SPC3_H__

#ifndef TRUE
  #define TRUE  1
#endif
#ifndef FALSE
  #define FALSE 0
#endif

#ifndef SPC3_INTEL_MODE
  #error !!! FEHLER !!! SPC3_INTEL_MODE wurde nicht deklariert !!!
#endif  /* Ende fuer SPC3_INTEL_MODE */


/*+-------------------------------------------------------------------------+
  |    C o m p i l e r - d e p e n d e n d     D e f i n i t i o n s        |
  +-------------------------------------------------------------------------+*/

/*------------------------ BSO Tasking C166-Compiler ------------------------*/
#ifdef  _C166
  #define _INTEL_COMP   /* iNTEL-mode */
  #define SPC3_DATA_ATTR
  #ifndef SPC3_NO_BASE_TYPES
#ifndef SPC3_BASE_TYPES_DEF__
  typedef unsigned char UBYTE;
  typedef unsigned int UWORD;
  typedef char BYTE;
  typedef int WORD;
  #define SPC3_BASE_TYPES_DEF__
  #endif    /* end SPC3_BASE_TYPES_DEF__ */
  #endif    /* end SPC3_NO_BASE_TYPES */
  #ifdef  SPC3_FAR
	#define SPC3_PTR_ATTR far
	typedef unsigned long SPC3_ADTYP;
  #else
	#ifdef SPC3_NEAR
	  #define SPC3_PTR_ATTR near
	  typedef unsigned int SPC3_ADTYP;
	  typedef unsigned short SPC3_OFFS;
	#else
	#error !!! ERROR !!! neither SPC3_FAR nor SPC3_NEAR defined !!!
	#endif    /* end SPC3_NEAR */
  #endif    /* end SPC3_FAR */
/*--------------------- end  BSO Tasking C166-Compiler ----------------------*/
/*--------------------------- Keil 80C32-Compiler ---------------------------*/
#elif defined __C51__   /* Motorola-mode */
  #ifndef SPC3_NO_BASE_TYPES
	#ifndef SPC3_BASE_TYPES_DEF__
	  typedef unsigned char UBYTE;
	  typedef unsigned int UWORD;
	  typedef char BYTE;
	  typedef int WORD;
	  #define SPC3_BASE_TYPES_DEF__
	#endif    /* end SPC3_BASE_TYPES_DEF__ */
  #endif    /* end SPC3_NO_BASE_TYPES */
  #define SPC3_PTR_ATTR xdata
  #ifdef SPC3_DATA_XDATA
	#define SPC3_DATA_ATTR xdata
  #else
	#ifdef SPC3_DATA_IDATA
	  #define SPC3_DATA_ATTR idata
	#else
	  #define SPC3_DATA_ATTR
	#endif
  #endif
  typedef unsigned int SPC3_ADTYP;
  typedef unsigned short SPC3_OFFS;
  typedef unsigned int SPC3_PTR;
/*------------------------ end Keil 80C32-Compiler -------------------------*/
#else /* no supported compiler found */
  #error  !!! ERROR !!! Unknown compiler !!!
#endif  /*-- end Compiler-dependent Declarations */

/*---------------------------- helpmakros ----------------------------------*/
/*-- byte-swapping --*/
#if SPC3_INTEL_MODE
  /*-- SPC3 with iNTEL-interface --*/
  #define _IML  0   /* Interface-Motorola, Low-Byte */
  #define _IMH  1   /* Interface-Motorola, High-Byte */
  #ifndef _INTEL_COMP
	/*-- iNTEL-interface, but no iNTEL-Compiler */
	#define _SWAP_WORDS   /* words must be swapped */
  #endif
#else
  /*-- SPC3 with Motorola-interface --*/
  #define _IML  1   /* Interface-Motorola, High-Byte */
  #define _IMH  0   /* Interface-Motorola, Low-Byte */
  #ifdef _INTEL_COMP
	/*-- Motorola-interface, but iNTEL-Compiler */
	#define _SWAP_WORDS   /* words must be swapped */
  #endif
#endif

#ifdef  _SWAP_WORDS
  #define SWAP_W(WX)  (((WX)<<8) | (((WX)>>8)&0xff))
#else
  #define SWAP_W(WX)  (WX)
#endif

/*-- use of spec prm buf (for dps2_buf_init) --*/
#ifdef  DPS2_USE_SPEC_PRM_BUF
  #define _USE_SPEC_PRM_BUF__ TRUE
#else
  #define _USE_SPEC_PRM_BUF__ FALSE
#endif

/*-- NULL-pointer in SPC3-compatible memory-model --*/
#define SPC3_NIL    ((void SPC3_PTR_ATTR*)0)

/*+-------------------------------------------------------------------------+
  |           T y p e d e f s   a n d   S t r u c t u r e s                 |
  +-------------------------------------------------------------------------+*/

/*-- returncodes of SPC3_INIT() --*/
enum SPC3_INIT_RET {SPC3_INIT_OK, SPC3_INITF_LESS_MEM, SPC3_INITF_NOFF,
					DPS2_INITF_DIN_DOUT_LEN, DPS2_INITF_DIAG_LEN,
					DPS2_INITF_PRM_LEN, DPS2_INITF_CFG_LEN, DPS2_INITF_SSA_LEN,
					FDL_INITF_IVP, FDL_INITF_SCNT };

/*-- struktur of the SPC3 --*/
typedef struct {
  /*-- start of the processor-registers --*/
  union {                       /* 0x00: Int.-Request-Register */
	UWORD w;
	UBYTE b[2];
	} int_req;
  union {                       /* 0x02: */
	union {                     /*  Int.-Register (read) */
	  UWORD w;
	  UBYTE b[2];
	  } com;
	union {                     /*  Int.-Acknowledge-Reg. (write) */
	  UWORD w;
	  UBYTE b[2];
	  } ack;
	} int_reg;
  union {                       /* 0x04: Interrupt-Mask- and Status-Reg. */
	UWORD mask;                 /*  Interrupt-Mask-Register (write) */
	UBYTE status[2];            /*  Status-Register (read) */
	} is_reg;
  UWORD mode_reg0;              /* 0x06 */
  union {  /*-- union x1 is for R/W */
	struct {  /*-- read-area */
	  UBYTE din_buffer_sm;      /* 0x08 */
	  UBYTE new_din_buf_cmd;    /* 0x09 */
	  UBYTE dout_buffer_sm;     /* 0x0a */
	  UBYTE next_dout_buf_cmd;  /* 0x0b */
	  } r;
	struct {  /*-- write-area */
	  UBYTE mode_reg1_s;        /* 0x08 */
	  UBYTE mode_reg1_r;        /* 0x09 */
	  UBYTE wd_baud_ctrl_val;   /* 0x0a */
	  UBYTE mintsdr_val;        /* 0x0b */
	  } w;
	} x1;
  UBYTE diag_buffer_sm;         /* 0x0c */
  UBYTE new_diag_buffer_cmd;    /* 0x0d */
  UBYTE user_prm_data_ok;       /* 0x0e */
  UBYTE user_prm_data_nok;      /* 0x0f */
  UBYTE user_cfg_data_ok;       /* 0x10 */
  UBYTE user_cfg_data_nok;      /* 0x11 */
  UBYTE user_ddb_prm_data_ok;   /* 0x12 */
  UBYTE user_ddb_prm_data_nok;  /* 0x13 */
  UBYTE ssa_buffer_free_cmd;    /* 0x14 */
  UBYTE reserved_15;            /* 0x15 */
  /*-- start of theorganizational parameters --*/
  UBYTE r_ts_adr;               /* 0x16 */
  UBYTE r_fdl_sap_list_ptr;     /* 0x17 */
  UWORD r_user_wd_value;        /* 0x18 */
  UBYTE r_len_dout_buf;         /* 0x1a */
  UBYTE r_dout_buf_ptr[3];      /* 0x1b */
  UBYTE r_len_din_buf;          /* 0x1e */
  UBYTE r_din_buf_ptr[3];       /* 0x1f */
  UBYTE r_len_ddbout_buf;       /* 0x22 */
  UBYTE r_ddbout_buf_ptr;       /* 0x23 */
  UBYTE r_len_diag_buf[2];      /* 0x24 */
  UBYTE r_diag_buf_ptr[2];      /* 0x26 */
  UBYTE r_len_cntrl_buf[2];     /* 0x28 */
  UBYTE r_aux_buf_sel;          /* 0x2a */
  UBYTE r_aux_buf_ptr[2];       /* 0x2b */
  UBYTE r_len_ssa_buf;          /* 0x2d */
  UBYTE r_ssa_buf_ptr;          /* 0x2e */
  UBYTE r_len_prm_buf;          /* 0x2f */
  UBYTE r_prm_buf_ptr;          /* 0x30 */
  UBYTE r_len_cfg_buf;          /* 0x31 */
  UBYTE r_cfg_buf_ptr;          /* 0x32 */
  UBYTE r_len_read_cfg_buf;     /* 0x33 */
  UBYTE r_read_cfg_buf_ptr;     /* 0x34 */
  UBYTE r_len_ddb_prm_buf;      /* 0x35 */
  UBYTE r_ddb_prm_buf_ptr;      /* 0x36 */
  UBYTE r_score_exp;            /* 0x37 */
  UBYTE r_score_error;          /* 0x38 */
  UBYTE r_real_no_add_change;   /* 0x39 */
  UBYTE r_ident_low;            /* 0x3a */
  UBYTE r_ident_high;           /* 0x3b */
  UBYTE r_gc_command;           /* 0x3c */
  UBYTE r_len_spec_prm_buf;     /* 0x3d */
  UBYTE reserved_3e_3f[2];      /* 0x3e - 0x3f */
  UBYTE user[1472];             /* 0x40: Speicherbereich fuer User */
} SPC3;

/*-- structure for DPS2-Buffer-Initialization --*/
typedef struct {
  UWORD din_dout_buf_len; /* total len of I/O data */
  UBYTE diag_buf_len;     /* len of diagnosticdatabuffer */
  UBYTE prm_buf_len;      /* len of parameterbuffer */
  UBYTE cfg_buf_len;      /* len of config-databuffer */
  UBYTE ssa_buf_len;      /* len of set-slave-address-buffer */
  } DPS2_BUFINIT;

/*============= DPS2-specific Typedefs and Structures =============*/

/*-- structure for I/O-len calculation --*/
typedef struct {
  UBYTE inp_data_len;
  UBYTE outp_data_len;
  } DPS2_IO_DATA_LEN;

/*-- structure for Diagstic-data-telegramms --*/
struct dps_diag_state_def
{
  UBYTE state_1;
  UBYTE state_2;
  UBYTE state_3;
  UBYTE master_add;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE first_header_byte;
};

/*-- structure for parameter-telegramms --*/
struct dps_prm_state_def
{
  UBYTE state;
  UBYTE wd_fact_1;
  UBYTE wd_fact_2;
  UBYTE t_sdr_min;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE group_ident;
  UBYTE first_user_prm_byte;
};

/*-- structure for Set-Slave-Address-telegramms --*/
struct dps_address_data
{
  UBYTE new_address;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE no_add_chg;
  UBYTE first_rem_data_byte;
};


/*+-------------------------------------------------------------------------+
  |                           L i t e r a l s                               |
  +-------------------------------------------------------------------------+*/

/*--------------------- Mode-Register 0 ----------------------*/
  #define DIS_START_CONTROL   ((UWORD)0x0001)
  #define DIS_STOP_CONTROL    ((UWORD)0x0002)
  #define EN_FDL_DDB          ((UWORD)0x0004)
  #define ENABLE_DEF_MINTSDR  ((UWORD)0x0008)
  #define INT_POL_LOW         ((UWORD)0x0000)
  #define INT_POL_HIGH        ((UWORD)0x0010)
  #define EARLY_RDY           ((UWORD)0x0020)
  #define SYNC_SUPPORTED      ((UWORD)0x0040)
  #define FREEZE_SUPPORTED    ((UWORD)0x0080)
  #define DP_MODE             ((UWORD)0x0100)
  #define EOI_TIMEBASE_1u     ((UWORD)0x0000)
  #define EOI_TIMEBASE_1m     ((UWORD)0x0200)
  #define USER_TIMEBASE_1m    ((UWORD)0x0000)
  #define USER_TIMEBASE_10m   ((UWORD)0x0400)
  #define SPEC_PRM_BUF        ((UWORD)0x1000)
  #define SPEC_CLEAR          ((UWORD)0x2000)

/*--------------------- Mode-Register 1 ----------------------*/
  #define START_SPC3          0x01
  #define EOI_SPC3            0x02
  #define GO_OFFLINE_SPC3     0x04
  #define USER_LEAVE_MASTER   0x08
  #define EN_CHG_CFG_BUFFER   0x10
  #define RES_USER_WD         0x20

/*-------------------- Status-Register 0 ---------------------*/
  #define SPC3_OFFLINE_PASS   0x01
  #define FDL_IND_ST          0x02
  #define DPS2_DIAG_FLAG      0x04
  #define ACCESS_VIOLATION    0x08

/*------------------ diagnostic-control -------------------*/
  #define DPS2_EXT_DIAG       0x01
  #define DPS2_STAT_DIAG      0x02
  #define DPS2_EXT_DIAG_OVF   0x04

/*----------------- Global-Control-command ------------------*/
  #define DPS2_CLEAR_DATA     0x02
  #define DPS2_UNFREEZE       0x04
  #define DPS2_FREEZE         0x08
  #define DPS2_UNSYNC         0x10
  #define DPS2_SYNC           0x20

/*----------------- indications (IR-Register) -----------------*/
  /*-- indications as bytes --*/
  #define MAC_RESET_B             0x01 /* Offline; DPS2 */
  #define GO_LEAVE_DATA_EX_B      0x02 /* Leave DataExcahnge; DPS2 */
  #define BAUDRATE_DETECT_B       0x04 /* Baudrate found; DPS2 */
  #define WD_DP_MODE_TIMEOUT_B    0x08 /* DP-Watchdog expired; DPS2 */
  #define USER_TIMER_CLOCK_B      0x10 /* Timer-Interval; DPS2 */
  #define DDB_SCORE_ERROR_B       0x20 /* reserved */
  #define NEW_DDB_PRM_DATA_B      0x40 /* reserved */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -