modbus_host.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. ****************************************************************************
  3. ModBus主机协议
  4. ****************************************************************************
  5. */
  6. #ifndef __MOSBUS_HOST_H
  7. #define __MOSBUS_HOST_H
  8. #include "stm32g0xx_hal.h"
  9. #include "bsp_user_lib.h"
  10. #define HBAUD485 9600
  11. #define H_RX_BUF_SIZE 64
  12. #define H_TX_BUF_SIZE 256
  13. typedef struct
  14. {
  15. uint16_t slaveaddr;
  16. uint8_t RxBuf[H_RX_BUF_SIZE];
  17. uint8_t RxCount;
  18. uint8_t RxStatus;
  19. uint8_t RxNewFlag;
  20. uint8_t RspCode;
  21. uint8_t TxBuf[H_TX_BUF_SIZE];
  22. uint8_t TxCount;
  23. uint16_t Reg01H; /* 保存主机发送的寄存器首地址 */
  24. uint16_t Reg02H;
  25. uint16_t Reg03H;
  26. uint16_t Reg04H;
  27. uint8_t RegNum; /* 寄存器个数 */
  28. uint8_t fAck01H; /* 应答命令标志 0 表示执行失败 1表示执行成功 */
  29. uint8_t fAck02H;
  30. uint8_t fAck03H;
  31. uint8_t fAck04H;
  32. uint8_t fAck05H;
  33. uint8_t fAck06H;
  34. uint8_t fAck10H;
  35. uint8_t fAck10add; /*10指令设置地址,非本库后期添加*/
  36. uint8_t fAck20inquire; /*20指令查询地址,非本库后期添加*/
  37. uint8_t fAckEE; /*EE指令,非本库后期添加*/
  38. }MODH_T;
  39. typedef struct
  40. {
  41. /* 03H 06H 读写保持寄存器 */
  42. uint16_t P01;
  43. uint16_t P02;
  44. uint16_t P03;
  45. uint16_t P04;
  46. uint16_t P05;
  47. uint16_t P06;
  48. uint16_t P07;
  49. uint16_t P08;
  50. uint16_t P09;
  51. uint16_t P10;
  52. uint16_t P11;
  53. uint16_t P12;
  54. /* 02H 读写离散输入寄存器 */
  55. uint16_t T01;
  56. uint16_t T02;
  57. uint16_t T03;
  58. /* 04H 读取模拟量寄存器 */
  59. uint16_t A01;
  60. /* 01H 05H 读写单个强制线圈 */
  61. uint16_t D01;
  62. uint16_t D02;
  63. uint16_t D03;
  64. uint16_t D04;
  65. /* 20H 读传感器地址 */ /*非本库后期添加*/
  66. uint16_t ADD;
  67. }VAR_T;
  68. typedef struct
  69. {
  70. uint8_t TxBuf[H_TX_BUF_SIZE];
  71. uint8_t TxCount;
  72. // uint8_t Sensor_num;
  73. }LOAR_Tx;
  74. uint8_t MODH_ReadParam_01H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读线圈寄存器
  75. uint8_t MODH_ReadParam_02H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读离散输入寄存器
  76. uint8_t MODH_ReadParam_03H(uint16_t slaveAddr, uint16_t _reg, uint16_t _num , uint8_t sort); //读保存寄存器
  77. uint8_t MODH_ReadParam_04H(uint16_t slaveAddr,uint16_t _reg, uint16_t _num); //读输入寄存器
  78. uint8_t MODH_WriteParam_05H(uint16_t slaveAddr,uint16_t _reg, uint16_t _value); //写单个线圈寄存器
  79. uint8_t MODH_WriteParam_06H(uint16_t slaveAddr,uint16_t _reg, uint16_t _value); //写单个保存寄存器
  80. uint8_t MODH_WriteParam_10H(uint16_t slaveAddr,uint16_t _reg, uint8_t _num, const uint16_t *_buf); //写多个保存寄存器
  81. uint8_t MODH_Writ_10_add(uint16_t slaveAddr); //写地址到传感器
  82. uint8_t MODH_Writ_20_inquire(void); //查询传感器地址
  83. uint8_t MODH_Writ_HOUR(uint16_t slaveAddr);//日照时数传感器写入时间
  84. void LOAR_SEND_DATA(uint8_t address , uint8_t Inclued_Sensor);
  85. void MODBUS_Init(void);
  86. uint8_t MODH_Poll(uint8_t sort);
  87. void Loar_Send_Broadcast(void);
  88. void Loar_Send_CMD(uint8_t Address,uint8_t Cmd);
  89. //uint8_t MODH_ReadParam_03H(uint16_t slaveAddr, uint16_t _reg, uint16_t _num, uint8_t sort);
  90. extern MODH_T g_tModH;
  91. extern VAR_T g_tVar;
  92. #endif