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

📄 modbus.h

📁 modbus 通信协议在dsp2407中的应用代码
💻 H
字号:

#define READ_COIL 			01  	//读取线圈状态
#define SET_COIL 			05   	//对单个线圈进行强制
#define SET_COILs 			15  	//对多个线圈进行强制
				
#define READ_DI 			02    	//读取输入状态
				
#define READ_AI 			04    	//读取输入寄存器
				
#define READ_HLD_REGs 		03      //读单个保持寄存器
#define SET_HLD_REG 		06      //写单个保持寄存器
#define SET_HLD_REGs 		16      //写多个保持寄存器
#define READ_SET_HLD_REGs 	23  	//读/写 保持寄存器
#define LOCAL_ADD   		1  

#define FRM_ERR 	(-2)
#define CRC_ERR 	(-3)
#define CMD_ERR 	(-4) 

extern int GwSciRxFlag;			//SCI接收中断标志,'1'表示接收中断发生

//extern unsigned int  	GwRxCount;  			// GwSciRxBuffer[]数组的下标
//extern unsigned int 	GwTxCount;  			// GwSciTxBuffer[]数组的下标

//extern unsigned char  	GwRxFlag; 			// 接收标志  1: 准备接收; 0: 接收结束
//extern unsigned char  	GwTxFlag; 			// 发送标志  1: 准备发送; 0: 发送结束
extern unsigned char  	GwSciTxBuffer[32],GwSciRxBuffer[32];
extern unsigned int   	GwSciTxBytes; 			// 每帧信息中发送字节总数
extern unsigned int   	GwSciRxBytes; 			// 每帧信息中接收字节总数

extern unsigned int CRC16( const unsigned char *buf, int len);
extern unsigned char CheckCRC(unsigned char *crctmp,unsigned int length);
extern void SciSend(void);
extern void SciReceive(void);

// 功能  构建RTU模式帧,RTU模式的ADU
extern void ConstructRtuFrame(unsigned char *dst_buf,unsigned char *src_buf,unsigned char lenth);
extern char ProcessMasterRTU(unsigned int *dest, unsigned char *src,unsigned int start_address, unsigned int fr_lenth);

//////////////////////////////////////////
// 功能  :读取继电器状态:CMD == 1 
// 返回  :成功返回1,否则返回0

// 请求命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的高8位] [CRC校验的低8位]
// 设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的高8位] [CRC校验的低8位]
// tmmp存放读回寄存器的状态
extern char ReadCoilStatus(unsigned int *tmmp, unsigned char DeviceID,unsigned int start_address,unsigned int lenth);

//////////////////////////////////////////
// 功能  :读取开关量输入:CMD == 2 
// 返回  :成功返回1,否则返回0
// 备注  :全局变量Modbus_mode,GwSciTxBuffer[],GwSciTxBytes,GwSciRxBuffer[],GwSciRxBytes
// 请求命令:[设备地址] [命令号02] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的高8位] [CRC校验的低8位]  
// 设备响应:[设备地址] [命令号02] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的高8位] [CRC校验的低8位]
extern char ReadInStatus(unsigned int *tmmp, unsigned char DeviceID, unsigned int start_address, unsigned int lenth);

/////////////////////////////////////////////
// 功能  :读取保持寄存器:CMD == 3 
// 返回  :成功返回1,否则返回0

// 请求命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的高8位] [CRC校验的低8位] 
// 设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低高8位] [CRC校验的低8位]
extern char ReadHldreg(unsigned int *tmmp, unsigned char DeviceID, unsigned int start_address, unsigned int lenth);

/////////////////////////////////////////////
// 功能  :读取模拟量输入:CMD == 4 
// 返回  :成功返回1,否则返回0

// 请求命令:[设备地址] [命令号04] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
// 设备响应:[设备地址] [命令号04] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位]
extern char ReadAnlogIn(unsigned int *tmmp, unsigned char DeviceID, unsigned int start_address, unsigned int lenth);

/////////////////////////////////////////////
// 功能  :设置继电器:CMD == 5 
// 返回  :成功返回1,否则返回0

// 请求命令:[设备地址] [命令号05] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
// 设备响应:如果成功把计算机发送的命令原样返回,否则不响应
extern char SetCoil(unsigned char DeviceID, unsigned int start_address, unsigned int value);

////////////////////////////////////////////
// 功能  :设置单保持寄存器 CMD == 6 
// 返回  :成功返回1,否则返回0

// 请求命令:[设备地址] [命令号06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
// 设备响应:如果成功把计算机发送的命令原样返回,否则不响应
extern char SetHldreg(unsigned char DeviceID, unsigned int start_address, unsigned int value);   

/////////////////////////////////////////////
// 功能  :对多个线圈进行强制:CMD == 15 
// 返回  :成功返回1,否则返回0

// 请求格式:从站地址 0x0F 第一个位首地址 所写位数 值占用的字节数 值
//         (例如,置从站5的位12至17为1,则:05 0F 000C 0006 01 3F CRC)
extern char SetCoils(unsigned char DeviceID, unsigned int Startbit_Add, unsigned int Bit2Write, unsigned char ByteValue, unsigned char *Values);

extern char SetMultiHldreg(unsigned char DeviceID, unsigned int start_address, unsigned int WNum, unsigned char BNum, unsigned int *values);

⌨️ 快捷键说明

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