/* **************************************************************************** ModBus主机协议 **************************************************************************** */ #ifndef __MOSBUS_HOST_H #define __MOSBUS_HOST_H #include "stm32g0xx_hal.h" #include "bsp_user_lib.h" #define HBAUD485 9600 #define H_RX_BUF_SIZE 64 #define H_TX_BUF_SIZE 256 typedef struct { uint16_t slaveaddr; uint8_t RxBuf[H_RX_BUF_SIZE]; uint8_t RxCount; uint8_t RxStatus; uint8_t RxNewFlag; uint8_t RspCode; uint8_t TxBuf[H_TX_BUF_SIZE]; uint8_t TxCount; uint16_t Reg01H; /* 保存主机发送的寄存器首地址 */ uint16_t Reg02H; uint16_t Reg03H; uint16_t Reg04H; uint8_t RegNum; /* 寄存器个数 */ uint8_t fAck01H; /* 应答命令标志 0 表示执行失败 1表示执行成功 */ uint8_t fAck02H; uint8_t fAck03H; uint8_t fAck04H; uint8_t fAck05H; uint8_t fAck06H; uint8_t fAck10H; uint8_t fAck10add; /*10指令设置地址,非本库后期添加*/ uint8_t fAck20inquire; /*20指令查询地址,非本库后期添加*/ uint8_t fAckEE; /*EE指令,非本库后期添加*/ }MODH_T; typedef struct { /* 03H 06H 读写保持寄存器 */ uint16_t P01; uint16_t P02; uint16_t P03; uint16_t P04; uint16_t P05; uint16_t P06; uint16_t P07; uint16_t P08; uint16_t P09; uint16_t P10; uint16_t P11; uint16_t P12; /* 02H 读写离散输入寄存器 */ uint16_t T01; uint16_t T02; uint16_t T03; /* 04H 读取模拟量寄存器 */ uint16_t A01; /* 01H 05H 读写单个强制线圈 */ uint16_t D01; uint16_t D02; uint16_t D03; uint16_t D04; /* 20H 读传感器地址 */ /*非本库后期添加*/ uint16_t ADD; }VAR_T; typedef struct { uint8_t TxBuf[H_TX_BUF_SIZE]; uint8_t TxCount; // uint8_t Sensor_num; }LOAR_Tx; uint8_t MODH_ReadParam_01H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读线圈寄存器 uint8_t MODH_ReadParam_02H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读离散输入寄存器 uint8_t MODH_ReadParam_03H(uint16_t slaveAddr, uint16_t _reg, uint16_t _num , uint8_t sort); //读保存寄存器 uint8_t MODH_ReadParam_04H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读输入寄存器 uint8_t MODH_WriteParam_05H(uint16_t slaveAddr,uint16_t _reg, uint16_t _value); //写单个线圈寄存器 uint8_t MODH_WriteParam_06H(uint16_t slaveAddr,uint16_t _reg, uint16_t _value); //写单个保存寄存器 uint8_t MODH_WriteParam_10H(uint16_t slaveAddr,uint16_t _reg, uint8_t _num, const uint16_t *_buf); //写多个保存寄存器 uint8_t MODH_Writ_10_add(uint16_t slaveAddr); //写地址到传感器 uint8_t MODH_Writ_20_inquire(void); //查询传感器地址 uint8_t MODH_Writ_HOUR(uint16_t slaveAddr);//日照时数传感器写入时间 void LOAR_SEND_DATA(uint8_t address , uint8_t Inclued_Sensor); void MODBUS_Init(void); uint8_t MODH_Poll(uint8_t sort); void Loar_Send_Broadcast(void); void Loar_Send_CMD(uint8_t Address,uint8_t Cmd); //uint8_t MODH_ReadParam_03H(uint16_t slaveAddr, uint16_t _reg, uint16_t _num, uint8_t sort); extern MODH_T g_tModH; extern VAR_T g_tVar; #endif