📄 modbusdef.h
字号:
#ifndef __MODBUS__#define __MODBUS__#include "def.h"#include "nucleus.h"#include "UART.h"#define FUNC_03 3#define FUNC_04 4#define FUNC_06 6#define FUNC_65 65#define revCommand_len 11/********************************************************************** Some defines *///----------- MODE switch macro -------------//#define ASCII_MODE#define RTU_MODE //----------- some macro in frame------------- #ifdef ASCII_MODE#define ASCII_FRAME_HEAD 0X3A /* 0X3A是ASCII码 ' : ' */#define ASCII_FRAME_END1 0X0D /* 0X0A 0XOD 是ASCII码的回车换行 */#define ASCII_FRAME_END2 0X0A /* 这两个字符标志着FRAME的结束 */#endif //----------- some function macro -------------/*01 - 21 PROTOCOL USED*/#define read_coil 01#define read_di 02#define read_hld_reg 03#define read_ai 04#define set_coil 05#define set_hld_reg 06/* 22~64 reserved for expanding */#define read_fifo 24 /* 65~72 reserved for user *//* 73~119 illegal function code */#define protocol_exception 0x81/* 120~127 reserved *//* 128~255 reserved : for abort,you can't use it as function code *//* 设备地址 */#define DEVADDR1 1#define DEVADDR2 2#define DEVADDR3 3#define DEVADDR4 4#define DEVADDR5 5#define DEVADDR6 6#define DEVADDR7 7//----------- some erro macro ---------------#define MOD_PROTOCOL_ERR 1#define MOD_FRAM_ERR 2#define MOD_SEND_BUFFER_FULL 3 #define MOD_SEND_BUFFER_EMPTY 4#define MOD_REV_BUFFER_FULL 5#define MOD_REV_BUFFER_EMPTY 6/************************************************************************** basic frame structure define */#ifdef ASCII_MODEtypedef struct { U8 head; /* Frame head */ U16 addr; U16 fucnum; RP8 pData; /* a pointer to the data */ U16 lrc; /* lrc check */ U8 f_tail; /* Frame tail */ U8 s_tail; }_MOD_FRAME_ASCII ; /* MODBUS ASCII FRAME */typedef _MOD_FRAME_ASCII * MOD_PA_frame; U8 lrc_check(RP8, int);#endif#ifdef RTU_MODEtypedef struct { U8 addr; U8 fucnum; RP8 pData; // a pointer to the data U16 crc; // crc check } _MOD_FRAME_RTU; // MODBUS ASCII FRAME typedef _MOD_FRAME_RTU * RTU_PR_frame ; U16 crc_check(RP8, int);typedef struct {\ U32 data_00H,data_01H,data_02H,data_03H,data_04H,data_05H,data_06H,data_07H,data_08H,data_09H,data_0AH,data_0BH,data_0CH,data_0DH,data_0EH,data_0FH,\ data_10H,data_11H,data_12H,data_13H,data_14H,data_15H,data_16H,data_17H,data_18H,data_19H,data_1AH,data_1BH,data_1CH,data_1DH,data_1EH,data_1FH,\ data_20H,data_21H,data_22H,data_23H,data_24H,data_25H,data_26H,data_27H,data_28H,data_29H,data_2AH,data_2BH,data_2CH,data_2DH,data_2EH,data_2FH,\ data_30H,data_31H,data_32H,data_33H,data_34H,data_35H,data_36H,data_37H,data_38H,data_39H,data_3AH,data_3BH,data_3CH,data_3DH,data_3EH,data_3FH,\ data_40H,data_41H,data_42H,data_43H,\ Flag_00H,Flag_01H,Flag_02H,Flag_03H,Flag_04H,Flag_05H,Flag_06H,Flag_07H,Flag_08H,Flag_09H,Flag_0AH,Flag_0BH,Flag_0CH,Flag_0DH,Flag_0EH,Flag_0FH,\ Flag_10H,Flag_11H,Flag_12H,Flag_13H,Flag_14H,Flag_15H,Flag_16H,Flag_17H,Flag_18H,Flag_19H,Flag_1AH,Flag_1BH,Flag_1CH,Flag_1DH,Flag_1EH,Flag_1FH,\ Flag_20H,Flag_21H,Flag_22H,Flag_23H,Flag_24H,Flag_25H,Flag_26H,Flag_27H,Flag_28H,Flag_29H,Flag_2AH,Flag_2BH,Flag_2CH,Flag_2DH,Flag_2EH,Flag_2FH,\ Flag_30H,Flag_31H,Flag_32H,Flag_33H,Flag_34H,Flag_35H,Flag_36H,Flag_37H,Flag_38H,Flag_39H,Flag_3AH,Flag_3BH,Flag_3CH,Flag_3DH,Flag_3EH,Flag_3FH,\ Flag_40H,Flag_41H,Flag_42H,Flag_43H; }_ModBus_DataAdd;#endif//------------ Frame buffer ------------------#ifndef SEND_BUFFER_ADDRESS#define SEND_BUFFER_ADDRESS #endif#ifndef BUFFER_SIZE#define BUFFER_SIZE (512)#endif#ifndef RECEIVE_BUFFER_ADDRESS#define RECEIVE_BUFFER_ADDRESS #endif/****************buffer操作**********************//*buffer 指针前移并循环*/#define INC(a) ((a) = ((a)+1) & (BUFFER_SIZE-1))/*buffer 指针后移并循环*/#define DEC(a) ((a) = ((a)-1) & (BUFFER_SIZE-1))/*buffer 是否为空*/#define EMPTY(a) ((a).head == (a).tail)/*buffer 剩余空间*/#define LEFT(a) (((a).tail-(a).head-1) & (BUFFER_SIZE-1))/*buffer 中最后一个位置*/#define LAST(a) ((a).buf[(BUFFER_SIZE-1) & ((a).head-1)])/*buffer 中第一个位置*/#define FIRST(a) ((a).buf[(BUFFER_SIZE-1) & ((a).tail)])/*buffer 是否满*/#define FULL(a) (!LEFT(a))/*buffer 中已放数据长度*/#define CHARS(a) (((a).head-(a).tail) & (BUFFER_SIZE-1))/*从queue缓冲区中取一字符(从tail处,tail+1)*/#define GETCH(queue, c) do{\ c = (queue).buf[(queue.tail)];\ INC((queue).tail);\}while(0)/*向queue缓冲区中放一字符(从head处,head+1)*/#define PUTCH(c, queue) do{\ (queue).buf[(queue).head] = (c);\ INC((queue).head);\}while(0)/*----------------------------------------------------------*//* buffer define */typedef struct { char buf[BUFFER_SIZE]; unsigned long head; unsigned long tail; int length; //лϢ³¤¶ƍ}MOD_BUF;typedef struct { unsigned long last_timetick; unsigned char buf[20]; int head; int tail;}_MOD_ReciveBUF;/************************************************************************************* Some GLOBLE *///extern INT MOD_Err; /*总的错误码*/ #endifint Modbus_Rec(void);void Modbus_Send(void);int Func_Process(int);int Add(void);//U16 crc_check(RP8 , int );extern int sendover_flag;extern _MOD_ReciveBUF MOD_revbuf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -