device_message.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef DEVICE_MESSAGE_H
  2. #define DEVICE_MESSAGE_H
  3. #include <stdint.h>
  4. #define MODBUS 3
  5. #define DLT645_97 2
  6. #define DLT645_07 1
  7. // 节点所存储的modbus写命令
  8. typedef struct _WRITE_MODBUS_COMMAND
  9. {
  10. uint8_t slaveAddress;
  11. uint16_t registerByteNum;
  12. uint8_t functionCode;
  13. uint8_t keyword[20]; // 所写属性的名称
  14. uint16_t registerAddress; // 寄存器地址
  15. uint8_t write_command_flag; // 是否成功写入的标志
  16. struct _WRITE_MODBUS_COMMAND *nextParams;
  17. } WRITE_MODBUS_COMMAND;
  18. // 节点所存储的modbus读命令
  19. typedef struct _READ_MODBUS_COMMAND
  20. {
  21. uint8_t slaveAddress;
  22. uint8_t functionCode;
  23. uint8_t keyword[20]; // 所读属性的名称
  24. uint16_t registerAddress; // 寄存器地址
  25. uint8_t read_command_flag; // 是否成功读取到的标志
  26. uint8_t value[4]; //读取到的数据值
  27. uint8_t rxLen;
  28. uint16_t registerByteNum;
  29. uint8_t decimalPoint;
  30. struct _READ_MODBUS_COMMAND *nextParams;
  31. } READ_MODBUS_COMMAND;
  32. // 节点所存储都DLT645读指令
  33. typedef struct _READ_DLT645_COMMAND
  34. {
  35. uint8_t deviceID645[6];
  36. uint8_t keyword[20]; // 所读属性的名称
  37. uint32_t Identification; // 645数据标识
  38. uint8_t data[9]; // 读到的数据
  39. uint8_t rxLen; // 从机应答值的长度
  40. struct _READ_DLT645_COMMAND *nextParams;
  41. } READ_DLT645_COMMAND;
  42. typedef struct _PARAMS_PROTOCOL_COMMAND
  43. {
  44. READ_MODBUS_COMMAND *node_read_modbus_command;
  45. WRITE_MODBUS_COMMAND *node_write_modbus_command;
  46. READ_DLT645_COMMAND *node_read_dlt645_command;
  47. }PARAMS_PROTOCOL_COMMAND;
  48. // 节点包含的设备信息
  49. typedef struct _DEVICE_PARAMS
  50. {
  51. uint8_t aliveflag; // 存活证明(由轮询来进行保证,当有轮询回应是确定其存活,当链路变化时立即上报设备已经死去,当轮询有相应的相应值时去上报已经存活)
  52. uint8_t deviceID[20];
  53. uint8_t protocol; // 所属协议类型 1:modbus read 2:modbus write 3:dlt97 4:dlt07 一个设备只能存在一个协议
  54. PARAMS_PROTOCOL_COMMAND *params;
  55. //当为modbus协议时设备层还包含大小端,和底层数据类型
  56. uint8_t MDBbigLittleFormat;
  57. uint8_t MDBdataType;
  58. struct _DEVICE_PARAMS *nextDevice; // 指向下一个设备地址
  59. } DEVICE_PARAMS;
  60. typedef struct _GATEWAY_PARAMS
  61. {
  62. uint8_t data_valid_flag; // 数据有效标志 0xF1:有效 其它:无效
  63. uint8_t host[20]; // MQTT服务器地址
  64. uint16_t port; // MQTT服务器端口号
  65. uint8_t messageTopic[50]; // MQTT消息主题
  66. uint8_t commandTopic[50]; // MQTT指令主题
  67. uint8_t mqttUserName[20]; //mqtt用户姓名
  68. uint8_t mqttPassword[20]; //mqtt 密码
  69. uint8_t deviceId[25]; // 设备ID
  70. uint32_t pollTime; // 轮询时间
  71. uint32_t inboundTime;
  72. uint8_t state; // 检测是否上位机配置过当上位机配置过该状态位,则以后均不走http获取相应配置 置位值为0xF1
  73. uint32_t baudrate;
  74. uint8_t dataBits;
  75. uint8_t stopBit;
  76. uint8_t checkBit;
  77. uint8_t gatewayId[10]; // 固化信息
  78. uint8_t gatewayMode[10]; // 工作模式、后续版本迭代使用
  79. uint8_t version[10];
  80. // 网关相关信息
  81. uint8_t gateName[10];
  82. // 附属设备相关信息
  83. DEVICE_PARAMS *device_params;
  84. } GATEWAY_PARAMS;
  85. int addGatewayParams(char *gatewayString);
  86. GATEWAY_PARAMS *get_gateway_config_params();
  87. #endif