| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- ****************************************************************************
- 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
|