📄 modbus.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 + -