gateway_message.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #ifndef __GATEWAY_MESSAGE_H
  2. #define __GATEWAY_MESSAGE_H
  3. #include "stm32f2xx.h"
  4. //枚举了协议类型
  5. enum {DLT645_07=1,MODBUS_READ,DLT645_97,MODBUS_WRITE}PROTOCOL;
  6. //枚举了数据的格式
  7. enum {typeInt=1,typeFloat,typeDouble}DATAType;
  8. //大小端
  9. typedef enum
  10. {
  11. MModBus_16bitOrder_AB=1, //大端
  12. MModBus_16bitOrder_BA,
  13. }MModBus_16bitOrder_t;
  14. // 节点所存储的modbus写命令
  15. typedef struct _NODE_WRITE_MODBUS_COMMAND
  16. {
  17. uint8_t slaveAddress;
  18. uint8_t dataType; //数据类型
  19. uint8_t slaveAdress;
  20. uint8_t keyword[20]; // 所写属性的名称
  21. uint8_t bigLittleFormat;
  22. uint16_t registerAddress; // 寄存器地址
  23. uint8_t write_command_flag; // 是否成功写入的标志
  24. } NODE_WRITE_MODBUS_COMMAND;
  25. // 节点所存储的modbus读命令
  26. typedef struct _NODE_READ_MODBUS_COMMAND
  27. {
  28. uint8_t slaveAddress;
  29. uint8_t keyword[20]; // 所读属性的名称
  30. uint8_t bigLittleFormat;
  31. uint8_t dataType; //数据类型
  32. uint16_t registerAddress; // 寄存器地址
  33. uint8_t read_command_flag; // 是否成功读取到的标志
  34. uint8_t value[4]; //读取到的数据值
  35. uint8_t decimalPoint;
  36. } NODE_READ_MODBUS_COMMAND;
  37. // 节点所存储都DLT645读指令
  38. typedef struct _NODE_READ_DLT645_COMMAND
  39. {
  40. uint8_t deviceID645[6];
  41. uint8_t keyword[20]; // 所读属性的名称
  42. uint32_t functionCode; // 645数据标识
  43. uint8_t data[9]; // 读到的数据
  44. uint8_t rxLen; // 从机应答值的长度
  45. } NODE_READ_DLT645_COMMAND;
  46. typedef struct _PARAMS_PROTOCOL_COMMAND
  47. {
  48. NODE_READ_MODBUS_COMMAND *node_read_modbus_command;
  49. NODE_WRITE_MODBUS_COMMAND *node_write_modbus_command;
  50. NODE_READ_DLT645_COMMAND *node_read_dlt645_command;
  51. struct _PARAMS_PROTOCOL_COMMAND *nextParams;
  52. }PARAMS_PROTOCOL_COMMAND;
  53. // 节点包含的设备信息
  54. typedef struct _DEVICE_PARAMS
  55. {
  56. uint8_t aliveflag; // 存活证明(由轮询来进行保证,当有轮询回应是确定其存活,当链路变化时立即上报设备已经死去,当轮询有相应的相应值时去上报已经存活)
  57. uint8_t deviceID[20];
  58. uint8_t protocol; // 所属协议类型 1:modbus read 2:modbus write 3:dlt97 4:dlt07 一个设备只能存在一个协议
  59. PARAMS_PROTOCOL_COMMAND *params;
  60. struct _DEVICE_PARAMS *nextDevice; // 指向下一个设备地址
  61. } DEVICE_PARAMS;
  62. typedef struct _NODE_PARAMS
  63. {
  64. uint8_t node_address[10];
  65. // 外设的串口工作属性仅只有一个
  66. uint32_t baudrate; // 波特率
  67. uint8_t dataBits; // 数据位
  68. uint8_t checkBit; // 校验位
  69. uint8_t stopBit; // 停止位
  70. uint8_t flowControl; // 流控制
  71. // lora通信的属性设置
  72. // 包含的设备结构体
  73. uint8_t deviceCount;
  74. DEVICE_PARAMS *device_params;
  75. struct _NODE_PARAMS *nextNode; // 下一个设备所存地址如果没有下一个设备指向NULL
  76. } NODE_PARAMS;
  77. typedef struct _GATEWAY_PARAMS
  78. {
  79. uint8_t data_valid_flag; // 数据有效标志 0xF1:有效 其它:无效
  80. uint8_t host[20]; // MQTT服务器地址
  81. uint16_t port; // MQTT服务器端口号
  82. uint8_t messageTopic[50]; // MQTT消息主题
  83. uint8_t commandTopic[50]; // MQTT指令主题
  84. uint8_t deviceId[25]; // 设备ID
  85. uint8_t dataSource; // 协议类型 0 保留 1 表示645协议 2表示modbus协议
  86. uint8_t dataType645; // 645协议数据类型 0保留 1 表示07版本 2表示97版本
  87. uint32_t pollTime; // 轮询时间
  88. uint32_t inboundTime;
  89. uint8_t state; // 检测是否上位机配置过当上位机配置过该状态位,则以后均不走http获取相应配置 置位值为0xF1
  90. uint8_t gatewayId[10]; // 固化信息
  91. uint8_t gatewayMode[10]; // 工作模式、后续版本迭代使用
  92. // 网关相关信息
  93. uint8_t gateName[10];
  94. // 附属设备相关信息
  95. NODE_PARAMS *node_params;
  96. } GATEWAY_PARAMS;
  97. void addNode(GATEWAY_PARAMS *gateway, const char *nodeId);
  98. GATEWAY_PARAMS *get_gateway_config_params();
  99. #endif