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

📄 modvar.h

📁 西门子PPI协议源码
💻 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 + -