?? protomod.h
字號:
/*******************************************************************************
Written by: Haemish Kyd
It is hereby certified that the author of this code specified above
has made reference only to information that is in the public domain
or is available to FieldServer Technologies via a duly signed
Non-Disclosure Agreement. This code is guaranteed free and clear of
any claim upon it by any Third Party.
The basis for this certification includes:
Original work performed by Eddie Hague.
Copyright (c) 1991-2003, FieldServer Technologies.
1991 Tarob Court, Milpitas, CA 95035, USA
(408) 262 2299
********************************************************************************
Versions
1.00aA 15 Oct 04 HLK Created
*******************************************************************************/
#define OPTION_SERVER
#define DIAGNOSTICS 'N'
#ifdef TARGET_LINT
#define rom
#endif
/******************************************************************/
/* MESSAGE STATES (WHILE RECEIVING) */
/******************************************************************/
#define CMPLT_COMPLETE 0x01
#define CMPLT_HOPE 0x02
#define CMPLT_NO_HOPE 0x03
/******************************************************************/
/* MODBUS PARAMETERS */
/******************************************************************/
#define MODBUS_NODE_ID 2
#define MB_POLL_TIMEOUT 1000
#define MB_POLL_DELAY 500
/******************************************************************/
/* USEFUL DEFINITIONS */
/******************************************************************/
#ifndef NOREF
#define NOREF(a) (a=a)
#endif
#define kick_watchdog ClrWdt
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
/******************************************************************/
/* MODBUS FUNCTION CODES */
/******************************************************************/
#define MODBUS_READ_COILS 0x01
#define MODBUS_READ_DISCRETEINPUTS 0x02
#define MODBUS_READ_INPUTREGISTERS 0x04
#define MODBUS_WRITE_COIL 0x05
#define MODBUS_WRITE_REGISTER 0x06
#define MODBUS_WRITE_MULT_REG 0x10
#define MODBUS_WRITE_MULT_COIL 0x0F
#define EX_MODBUS_READ_COILS 0x81
#define EX_MODBUS_READ_DISCRETEINPUTS 0x82
#define EX_MODBUS_READ_INPUTREGISTERS 0x84
#define EX_MODBUS_WRITE_COIL 0x85
#define EX_MODBUS_WRITE_REGISTER 0x86
/******************************************************************/
/* OTHER MODBUS #DEFINES */
/******************************************************************/
#define MX_RX_TX_BUFFERSIZE 20
#define ILLEGAL_DATA_ADDRESS 02
#define ILLEGAL_DATA_VALUE 03
#define BYTE_SIZE 8
#define COIL_ON 0xFF00
#define COIL_OFF 0x0000
#define ON TRUE
#define OFF FALSE
#define MX_COILS 8
#define MX_DI 9
#define MX_REG 8
#define MX_DATA_ARRAY 100
#define WRITE_COIL_RESPONSE_LENGTH 6
#define READ 0x01
#define WRITE 0x02
/******************************************************************/
/* MAP DESCRIPTOR STRUCTURE */
/******************************************************************/
typedef struct
{
BYTE reference ;
UINT16 address ;
BYTE function;
UINT16 data;
UINT16 old_data;
BYTE offset;
BYTE node_id;
} MAP_DESC_TYP ;
typedef struct
{
BYTE *buf ;
BYTE length ;
} RESPONSE_TYP ;
typedef struct
{
BYTE function ;
BYTE node_id ;
UINT16 address;
UINT16 length;
UINT16 data;
UINT16 checksum;
} IN_BUF_TYP ;
/******************************************************************/
/* ENUMS FOR COILS */
/******************************************************************/
enum
{
COIL_1,
COIL_2,
COIL_3,
COIL_4,
COIL_5,
COIL_6,
COIL_7,
COIL_8
} ;
/******************************************************************/
/* ENUMS FOR DISCRETE INPUTS */
/******************************************************************/
enum
{
DI_1 ,
DI_2 ,
DI_3 ,
DI_4 ,
DI_5 ,
DI_6 ,
DI_7 ,
DI_8 ,
DI_9
} ;
/******************************************************************/
/* ENUMS FOR REGISTERS */
/******************************************************************/
enum
{
REG_1 ,
REG_2 ,
REG_3 ,
REG_4 ,
REG_5 ,
REG_6 ,
REG_7 ,
REG_8
};
/******************************************************************/
/* PROTOTYPES */
/******************************************************************/
VOID Init_Variables ( VOID ) ;
VOID modbus_init ( VOID ) ;
BYTE ReadEeprom ( INT EEPROM_Address) ;
VOID WriteEeprom ( INT addr, BYTE val) ;
VOID ToggleLed ( VOID ) ;
VOID application_start ( VOID ) ;
VOID application_idle ( VOID ) ;
VOID Delay_1s( VOID ) ;
VOID Delay_ms ( BYTE param ) ;
VOID Delay_50us(BYTE microsec50) ;
VOID InitHardware ( VOID ) ;
VOID idle_modbus(VOID);
/******************************************************************/
/* MODBUS PROTOTYPES */
/******************************************************************/
VOID build_and_submit_modbus_write_poll (BYTE node_id, UINT16 address, BYTE function, INT16 write_val );
VOID build_and_submit_modbus_read_poll (BYTE node_id, UINT16 address, BYTE function, BYTE amount ) ;
VOID get_PICUART_data (VOID);
VOID clr_rx (VOID);
VOID WritePICUART(const BYTE *buf, BYTE length);
BYTE modbusPacketResponseComplete ( VOID ) ;
UINT16 modrtuChecksum ( BYTE *chkbuf, BYTE len );
BYTE modbusCheckAddress( VOID );
VOID modbusGiveUpCharacter( VOID );
BYTE modbusPollReceiveComplete ( VOID );
VOID modbusRespond ( MAP_DESC_TYP *temp_md );
MAP_DESC_TYP *check_for_next_modbus_message ( VOID );
VOID poll_modbus( MAP_DESC_TYP *temp_md );
VOID parse_reponse_and_store_data ( VOID );
BYTE UARTIntGetChar(BYTE*) ;
BYTE UARTIntGetRxBufferDataSize(VOID) ;
VOID UARTIntInit (VOID) ;
BYTE modbusParseMessage( VOID );
MAP_DESC_TYP *modbusFetchData( VOID );
MAP_DESC_TYP *modbusStoreData( VOID );
MAP_DESC_TYP *store_data_to_data_array(BYTE function,UINT16 address,UINT16 data);
MAP_DESC_TYP *find_map_desc_with_data(BYTE function,UINT16 address);
/******************************************************************/
/* DATA ACCESS API */
/******************************************************************/
VOID da_put_UINT16(MAP_DESC_TYP *temp_md,UINT16 value);
VOID da_put_BIT(MAP_DESC_TYP *temp_md,UINT16 value);
VOID da_get_BIT(MAP_DESC_TYP *temp_md);
VOID da_get_UINT16(MAP_DESC_TYP *temp_md);
VOID init_da( VOID );
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -