📄 modvar.h
字号:
//和硬件相关的MODBUS变量声明,包括:
//1。1/2个串口对应的MODBUS变量、和硬件相关的中断号
//EEPROM的地址分配:和通讯相关的分配在10-30的地方
//////////////////////////////////////////////////FOR COM0
//for modbus
uchar is_modbus_master; //1=主,0=从
#define EEPADD_MODBUS_MASTER 10
uchar uc_mod_plc_add; //主时PLC地址
#define EEPADD_UC_MOD_PLC_ADD 11
uint ui_mod_write_to_plc_w_add; //做主时,把数据写到PLC的寄存器的地址
#define EEPADD_UI_WRITE_PLC_ADDR 12
uint ui_mod_read_from_plc_w_add;//做主时,从PLC读数据的寄存器的地址
#define EEPADD_UI_READ_PLC_ADDR 14
uchar uc_mod_plc_sent_ms; //主时发送时间间隔
#define EEPADD_UC_MOD_PLC_SENT_MS 16
uchar is_mod_master_need_send = 0; //当modbus当主时,需要发送.
#ifdef PROGRAME_FOR_PPI
uchar is_ppi_master_need_send[MCU_UART_NUM];
#endif
uchar is_modbus_asc=0; //modbus是否是rtu模式
#define EEPADD_MODBUS_ASC 17
uchar uc_mod_parity;
#define EEPADD_UC_MOD_PARITY 18
uchar bt[2] = {3,3};
#define EEPADD_BT0 19
#define EEPADD_BT1 20
uchar uc_client[2];
#define EEPADD_UC_CLIENT0 21
#define EEPADD_UC_CLIENT1 22
//下面是modbus当主时,定义的modbus表中,读位,写位,读字写字个数.
const uchar uc_mod_read_plc_w_num = 0; //读字寄存器的个数.
const uchar uc_mod_wirte_plc_w_num = 4; //写字寄存器的个数
const uchar uc_mod_read_plc_b_num = 0; //读位的个数.
const uchar uc_mod_wirte_plc_b_num = 0; //写位的个数
//注意:定义该结构数组的大小的宏在每个程序中
typedef struct Mod_Master_OP
{
uchar uc_cmd; //功能码
uchar uc_lenth; //长度
uint ui_plc_begin_addr; //plc的内存地址
uint ui_mem_begin_addr; //本地内存开始地址
//当从PLC读时,ui_plc_begin_addr表示读PLC的开始地址,ui_mem_begin_addr为读来后存放在表的地址
//当写如PLC时,ui_plc_begin_addr表示写入的PLC内存的开始地址,ui_mem_begin_addr为写出数据的表内存地址
//uc_lenth为操作的字个数或位个数,注意不是下标
//下面仅仅用于0x17命令时,用于写到plc去
uint ui_write_plc_addr; //写到plc的内存开始地址
uint ui_write_mem_addr; //写的数据存放的内存地址
uchar uc_write_len; //为操作的字个数
//当写时,表从内存地址获取要写的数据.
}MB_OP_TBL;
//MB_OP_TBL* gp_lastOpTblPtr[MCU_UART_NUM];
struct Mod_Master_OP stMod_Master_OP[OP_TABLE_LENTH];
uchar uc_Mod_Master_OP_Point = 0;//指向modbus表的数组的下标。
uchar uc_PPI_Master_OP_Point[MCU_UART_NUM] ={0,0};
const uchar uc_modbus_timeout_4bytes[7]={8,5,3,2,2,2,2};//each 1ms--
uchar uc_modbus_timeout_4bytes0,uc_modbus_timeout_4bytes1;
#ifdef AT12MHZ //for 12M
const uint code_bt_value[7]={ 312, 155, 77, 38, 25, 12, 7};
const uint code_bt[7]={4800,9600,19200,38400,57600,11520, 18750};
#else
#ifdef AT8MHZ
const uint code_bt_value[7]={207, 103, 51, 25, 16, 8, 4};
const uint code_bt[7]={4800,9600,19200,38400,57600,11520, 18750};
#endif
#endif
uchar uc_modbus_timeout0=0,uc_modbus_timeout1=0;
uchar uc_is_have_new_modbus[2] = {0,0};
const uint code_sent_ms[6]={10,20,50,100,200,250};
const uchar comm_min_ms[6] ={5, 3, 2, 2, 1, 0};
uchar g_uc_commmain_send_count = 200;
#ifdef PROGRAME_FOR_PPI
uchar g_uc_ppi_main_send_count[2] = {200,200};
#endif
//
//////////////////////////////////////////////////FOR COM0
#define comm_word_num 8
//comm_word_num*2+10
#define comm_array_max_xb 70 //定义串口数组最大下标.(当写时,可以定义一个要写的字寄存器的最大数
#define SEND_WORD_NUM_MAX_ASC ((comm_array_max_xb - 8)/4 ) //**
#define SEND_BIT_NUM_MAX_ASC (((comm_array_max_xb - 8)/4)*16)
#define SEND_WORD_NUM_MAX_RTU ((comm_array_max_xb - 6)/2 ) //**
#define SEND_BIT_NUM_MAX_RTU (((comm_array_max_xb - 6)/2)*16)
//发送缓冲的长度不超过这个最大长度.
//for send
uchar uc_sendarray_num[2]; //指向发送数组中要发送的字符个数
uchar uc_send_point[2]; //在中断中发送时,已发送的字符个数。
uchar uc_send[2][comm_array_max_xb + 1]; //发送缓冲。
//use for receive
uchar now_buf0,now_buf1;
uchar uc_rec_buf[2][comm_array_max_xb + 1]; //接收缓冲
uchar point_uchar[2];
//for ADAM
uchar uc_head[2];
//uchar cmd_pc_need[2],cmd_pc_need1[2];
uchar uc_send_status[2]={0,0};
uchar uc_send_over_timer[2];
//////////////////////////////////PUBLIC USE
#define is_have_new_subf 0
#define is_need_receive 1
#define is_need_check 2
#define is_have_error 3
#define is_need_send 4
#define is_sending 5
#define is_change_ai 6
#define is_change_do 7
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//for test
//uchar uc_comm_num;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -