gateway_message.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef __GATEWAY_MESSAGE_H
  2. #define __GATEWAY_MESSAGE_H
  3. #include "stm32f2xx.h"
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "malloc.h"
  7. // 解析发过来的数据是modbus、dl/t645 、CT/J
  8. #define DLT645_07 1
  9. #define DLT645_97 2
  10. #define MODBUS 3
  11. #define CTJ1883 4
  12. // 网关所存储的modbus写命令
  13. typedef struct _GATEWAY_WRITE_MODBUS_COMMAND
  14. {
  15. uint16_t registerByteNum;
  16. uint8_t slaveAddress;
  17. uint8_t functionCode;
  18. uint8_t dataType; //数据类型
  19. uint8_t keyword[20]; // 所写属性的名称
  20. uint8_t bigLittleFormat;
  21. uint16_t registerAddress; // 寄存器地址
  22. uint8_t write_command_flag; // 是否成功写入的标志
  23. struct _GATEWAY_WRITE_MODBUS_COMMAND *nextParams;
  24. } GATEWAY_WRITE_MODBUS_COMMAND;
  25. // 网关所存储的modbus读命令
  26. typedef struct _GATEWAY_READ_MODBUS_COMMAND
  27. {
  28. uint8_t slaveAddress;
  29. uint8_t functionCode;
  30. uint8_t keyword[20]; // 所读属性的名称
  31. uint16_t registerAddress; // 寄存器地址
  32. uint8_t read_command_flag; // 是否成功读取到的标志
  33. uint32_t value; //读取到的数据值
  34. uint16_t registerByteNum;
  35. uint8_t decimalPoint;
  36. struct _GATEWAY_READ_MODBUS_COMMAND *nextParams;
  37. } GATEWAY_READ_MODBUS_COMMAND;
  38. // 节点所存储都DLT645读指令
  39. typedef struct _GATEWAY_READ_DLT645_COMMAND
  40. {
  41. uint8_t deviceID645[6];
  42. uint8_t keyword[20]; // 所读属性的名称
  43. uint32_t Identification; // 645数据标识
  44. uint8_t data[9]; // 读到的数据
  45. uint8_t rxLen; // 从机应答值的长度
  46. struct _GATEWAY_READ_DLT645_COMMAND *nextParams;
  47. } GATEWAY_READ_DLT645_COMMAND;
  48. // 节点所存储都CJT读指令
  49. typedef struct _GATEWAY_READ_CJT_COMMAND
  50. {
  51. uint8_t deviceAddress[7]; // 设备地址
  52. uint8_t cmd; // 控制码 0x10(水表) 0x30(燃气表) 0x40(电表)
  53. uint8_t keyword[20]; // 所读属性的名称
  54. double value; //读取到的数据值
  55. struct _GATEWAY_READ_CJT_COMMAND *nextParams;
  56. } GATEWAY_READ_CJT_COMMAND;
  57. typedef struct _PARAMS_PROTOCOL_COMMAND
  58. {
  59. GATEWAY_READ_MODBUS_COMMAND *gateway_read_modbus_command;
  60. GATEWAY_WRITE_MODBUS_COMMAND *gateway_write_modbus_command;
  61. GATEWAY_READ_DLT645_COMMAND *gateway_read_dlt645_command;
  62. GATEWAY_READ_CJT_COMMAND *gateway_read_cjt_command;
  63. }PARAMS_PROTOCOL_COMMAND;
  64. // 节点包含的设备信息
  65. typedef struct _DEVICE_PARAMS
  66. {
  67. uint8_t aliveflag; // 存活证明(由轮询来进行保证,当有轮询回应是确定其存活,当链路变化时立即上报设备已经死去,当轮询有相应的相应值时去上报已经存活)
  68. uint8_t deviceID[20];
  69. uint8_t protocol; // 所属协议类型 1:dlt07 2:dlt97 3:modbus 4:CJT 一个设备只能存在一个协议
  70. uint8_t MDBbigLittleFormat;
  71. uint8_t MDBdataType;
  72. PARAMS_PROTOCOL_COMMAND *params;
  73. struct _DEVICE_PARAMS *nextDevice; // 指向下一个设备地址
  74. } DEVICE_PARAMS;
  75. // 网关包含的设备信息
  76. typedef struct _GATEWAY_PARAMS
  77. {
  78. uint8_t data_valid_flag; // 数据有效标志 0xF1:有效 其它:无效
  79. uint8_t host[20]; // MQTT服务器地址
  80. uint16_t port; // MQTT服务器端口号
  81. uint8_t messageTopic[50]; // MQTT消息主题
  82. uint8_t commandTopic[50]; // MQTT指令主题
  83. uint8_t username[20]; //MQTT用户名
  84. uint8_t passwd[20]; // MQTT用户密码
  85. uint8_t deviceId[25]; // 设备ID
  86. uint8_t dataSource; // 协议类型 0 保留 1 表示645协议 2表示modbus协议
  87. uint8_t dataType645; // 645协议数据类型 0 保留 1 表示07版本 2表示97版本
  88. uint32_t pollTime; // 轮询时间
  89. uint32_t inboundTime;
  90. uint8_t state; // 检测是否上位机配置过当上位机配置过该状态位,则以后均不走http获取相应配置 置位值为0xF1
  91. uint8_t gatewayId[10]; // 固化信息
  92. uint8_t gatewayMode[10]; // 工作模式、后续版本迭代使用
  93. uint8_t gateName[10]; // 网关相关信息
  94. uint8_t comProtocol; // 通讯接口 默认 0 : 485 1 : 232
  95. // 包含的设备结构体
  96. uint8_t deviceCount;
  97. DEVICE_PARAMS *device_params;
  98. // 外设的串口工作属性仅只有一个
  99. uint32_t baudrate; // 波特率
  100. uint8_t dataBits; // 数据位
  101. uint8_t checkBit; // 校验位
  102. uint8_t stopBit; // 停止位
  103. uint8_t flowControl; // 流控制
  104. } GATEWAY_PARAMS;
  105. void addGatewayParams(char *gatewayString);
  106. void addDevice(char *string);
  107. int parseIntField(const char *data, const char *field);
  108. void parseStringField(const char *data, const char *field, char *value);
  109. GATEWAY_PARAMS *get_gateway_config_params(void);
  110. int extract_substring(const char *input_string, const char *start_token, const char *end_token, char *result);
  111. #endif