param.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. #ifndef __PARAMX_H
  2. #define __PARAMX_H
  3. #ifndef DEV_ID_LEN
  4. #define DEV_ID_LEN (6)
  5. #endif
  6. #ifndef CHECK_CORRECT_ENABLE
  7. #define CHECK_CORRECT_ENABLE
  8. #endif
  9. #ifndef Q1
  10. #define Q1 (0.0126f) //modified by yuewei 20260610 0.2f->0.0126f
  11. #endif
  12. #ifndef Q3
  13. #define Q3 (6.3f) //modified by yuewei 20260610 100->6.3f
  14. #endif
  15. #ifndef CHECK_Q_VALUE
  16. #define CHECK_Q_VALUE (32)
  17. #endif
  18. #ifndef CHECK_C_VALUE
  19. #define CHECK_C_VALUE (1340)
  20. #endif
  21. #ifndef CHECK_POINT_NUM
  22. #define CHECK_POINT_NUM (8)
  23. #define CHECK_TEMP_POINT (3)
  24. #define EEPROM_MAX_WRITE_SIZE 128
  25. #define EEPROM_MAX_READ_SIZE 128
  26. #define EEPROM_PAGE_SIZE 256
  27. #define EEPROM_MAX_SIZE 128 * 1024
  28. #define PARAMX_START_ADDR 00000
  29. // #define CUM_FLOW_START_ADDR (0x17c00u)//循环存储最新流量记录的eeprom地址
  30. // #define MAX_CUM_FLOW_NUM 256 //循环存储数量
  31. // #define CUM_FLOW_SIZE 40 //每个记录占用的空间大小
  32. #define QUAD_CELL_START_ADDR 0x1B000
  33. #define QUAD_CELL_LEN 500
  34. ///////////////////////FLASH 空间划分////////////////////////
  35. #define FLASH_BOOT_LOADER_START 0x00000
  36. #define FLASH_BOOT_LOADER_SIZE 0x08000 // 32KB bootloader代码空间
  37. #define DIFF_PATCH_PACKET_START 0x38000
  38. #define DIFF_PATCH_PACKET_SIZE 0x7c00 // 31KB//差分包空间
  39. #define DIFF_UPDATE_INFO_START (DIFF_PATCH_PACKET_START + DIFF_PATCH_PACKET_SIZE) // 差分升级相关信息
  40. #define DIFF_UPDATE_INFO_SIZE 0x200 //(APP1_CODE_START-DIFF_UPDATE_INFO_START)
  41. #define APP1_CODE_START 0x08000
  42. #define APP1_CODE_SIZE 0x18000
  43. #define APP2_CODE_START 0x20000
  44. #define APP2_CODE_SIZE 0x18000
  45. #include "stdint.h"
  46. typedef struct
  47. {
  48. uint16_t spd_lvl[CHECK_POINT_NUM];
  49. uint16_t cur_c[CHECK_POINT_NUM];
  50. uint16_t base_c[CHECK_POINT_NUM];
  51. } CheckSpdLvlC_t;
  52. #endif
  53. typedef struct
  54. {
  55. uint32_t para_len;
  56. uint32_t para_crc32;
  57. float path_skew[4]; // 偏差修正系数
  58. float pipe_coe; // coe系数
  59. //char imei[16]; // 设备imei号
  60. //char ccid[32]; // 设备ccid号
  61. uint8_t mux_ch_no[4]; // 多路通道地址
  62. uint8_t dev_id[DEV_ID_LEN]; // 设备地址,6字节
  63. uint8_t reserved1[2]; // 保留 4字节对齐
  64. // uint8_t ver_type; // 水表类型
  65. // uint8_t ver_operator; // 运营商
  66. // uint8_t ver_module; // 模组
  67. // uint8_t ver_firmware; // 软件版本号
  68. uint16_t diameter; // 直径
  69. uint8_t chan_num; // 超声波通道数
  70. uint8_t pressure_sensor; // 是否带压力传感器
  71. uint8_t settlement_day; // 结算日
  72. uint8_t report_base_hour; // 上报时间小时
  73. uint8_t report_base_min; // 分
  74. uint8_t report_base_sec; // 秒
  75. uint16_t report_interval; // 上报时间间隔
  76. uint16_t reserved2;
  77. int16_t high_temp_alarm_thres; // 高温报警阈值
  78. int16_t low_temp_alarm_thres; // 低温报警阈值
  79. uint32_t large_flow_alarm_thres; // 大流量报警阈值
  80. uint16_t large_flow_cnti_moni_time; // 大流量监测持续时间
  81. uint16_t cnti_flow_cnti_moni_time; // 持续流量持续监测时间
  82. uint32_t leak_flow_alarm_thres; // 渗流报警阈值
  83. uint16_t leak_flow_cnti_moni_time; // 渗漏监测持续时间
  84. uint16_t high_press_alarm_thres; // 高压力告警阈值
  85. uint16_t low_press_alarm_thres; // 低压力报警阈值
  86. uint16_t q_value; // q值
  87. uint8_t main_server_ip[4]; // 主服务器ip地址
  88. uint8_t sub_server_ip[4]; // 备用服务器ip地址
  89. uint16_t main_server_port; // 主服务器端口号
  90. uint16_t sub_server_port; // 备用服务器端口号
  91. uint8_t dma_report_start[4]; // DMA上报开始时间,时分秒 第四个字节未用
  92. // uint8_t dma_report_start_min;
  93. // uint8_t dma_report_start_sec;
  94. // uint8_t reserv3;
  95. uint8_t dma_report_end[3]; // DMA上报结束时间,时分秒
  96. // uint8_t dma_report_end_min;
  97. // uint8_t dma_report_end_sec;
  98. uint8_t dma_interval; // DMA上报间隔 分钟单位
  99. uint8_t total_positive_water[4]; // 表底读数
  100. uint8_t cmp_thers[8]; // 自动匹配电平参数
  101. uint8_t cmp_thers_width[8];
  102. uint8_t buffer_config;
  103. uint8_t reserv4[13];
  104. uint8_t reserv5[2];
  105. CheckSpdLvlC_t check_spdLvl_c[CHECK_TEMP_POINT]; // 数据校正参数
  106. uint16_t n; // 新增q3值
  107. uint16_t b; // n始动值
  108. uint16_t q; // q值
  109. uint16_t r; // 量程比
  110. uint8_t nb_band_flag;
  111. } Param_t;
  112. typedef struct
  113. {
  114. uint8_t pressure_sensor;
  115. float pipe_coe;
  116. } HardWareParaDef; // 硬件参数
  117. #include "eeprom.h"
  118. #define DIFF_PACKET_LEN 512
  119. typedef struct
  120. {
  121. uint8_t update_status;
  122. uint8_t cur_ver[5]; // 上位机送下来的当前版本号,校对当前版本号
  123. uint8_t new_ver[5]; // 目标版本号,仅用于比较
  124. // uint8_t reserv[2];
  125. uint32_t patch_len; // 升级包总长度
  126. uint16_t per_packet_len; // 每包大小
  127. uint16_t packet_crc; // crc值(上位机写入的)
  128. // 写入控制的相关参数
  129. uint16_t cur_num; // 当前包序号
  130. uint16_t res_crc16; // 累计当前校验值 uint16_t com_crc16H_next(uint16_t crc_cur, uint8_t *data, uint32_t len, uint16_t pattern)//pattern=0x1021
  131. uint32_t flash_addr_ptr; // 当前flash写入地址
  132. // uint8_t reserv2[3];
  133. uint32_t run_app_ver_addr;
  134. // uint32_t new_app_addr;
  135. // uint8_t run_app_ver[5];//当前正在运行的应用代码版本号
  136. // uint8_t reserv3[3];
  137. } PATCH_INFO_DEF;
  138. typedef struct
  139. {
  140. uint16_t packet_numb;
  141. uint16_t packet_size;
  142. uint8_t data[DIFF_PACKET_LEN];
  143. } DIFF_PACKET_DEF;
  144. typedef struct
  145. {
  146. uint8_t main_server_ip[4];
  147. uint16_t main_server_port;
  148. uint8_t sub_server_ip[4];
  149. uint16_t sub_server_port;
  150. } SERVER_IP_PORT_DEF;
  151. typedef struct
  152. {
  153. uint8_t report_base_hour; // 上报时间小时
  154. uint8_t report_base_min; // 分
  155. uint8_t report_base_sec; // 秒
  156. uint16_t report_interval; // 上报时间间隔
  157. } REGULAR_REPORT_DEF;
  158. typedef struct
  159. {
  160. uint8_t dma_report_start_hour; // DMA上报开始时间,时分秒 第四个字节未用
  161. uint8_t dma_report_start_min;
  162. uint8_t dma_report_start_sec;
  163. uint8_t reserv1;
  164. uint8_t dma_report_end_hour; // DMA上报结束时间,时分秒
  165. uint8_t dma_report_end_min;
  166. uint8_t dma_report_end_sec;
  167. uint8_t dma_interval; // DMA上报间隔 分钟单位
  168. } DMA_REGULAR_REPORT_DEF;
  169. typedef struct
  170. {
  171. uint32_t large_flow_alarm_thres; // 大流量报警阈值
  172. uint16_t large_flow_cnti_moni_time; // 大流量监测持续时间
  173. uint16_t cnti_flow_cnti_moni_time; // 持续流量持续监测时间
  174. uint32_t leak_flow_alarm_thres; // 渗流报警阈值
  175. uint16_t leak_flow_cnti_moni_time; // 渗漏监测持续时间
  176. } FLOW_ALARM_PARA_DEF;
  177. typedef struct
  178. {
  179. uint8_t high_press_alarm_thres; // 高压力告警阈值
  180. uint8_t low_press_alarm_thres; // 低压力报警阈值
  181. } PRESS_ALARM_PARA_DEF;
  182. typedef struct
  183. {
  184. int16_t high_temp_alarm_thres; // 高温报警阈值
  185. int16_t low_temp_alarm_thres; // 低温报警阈值
  186. } TEMP_ALARM_PARA_DEF;
  187. typedef struct
  188. {
  189. int8_t settlement_day;
  190. } SETTLEMENT_DAY_DEF;
  191. typedef struct
  192. {
  193. uint8_t fw[4];
  194. uint8_t bw[4];
  195. } METER_BOTTOM_DEF;
  196. typedef struct
  197. {
  198. uint8_t start_time[6];
  199. uint8_t end_time[6];
  200. } GET_5MIN_REOCORD_DEF;
  201. typedef struct
  202. {
  203. uint16_t cur_c[8];
  204. int16_t temp;
  205. } FLOW_PARA_DEF;
  206. typedef struct
  207. {
  208. uint16_t cur_c[8];
  209. uint16_t spd_lvl[8];
  210. int16_t temp;
  211. } DELTA_TC_FLOW_PARA_DEF;
  212. typedef struct
  213. {
  214. float compensation[125];
  215. uint16_t diameter;
  216. } DIAMETER_AND_TEMP_COMPENSATION_DEF;
  217. typedef struct
  218. {
  219. uint8_t cmp_thers[8];
  220. uint8_t cmp_thers_width[8];
  221. uint8_t buffer_config;
  222. uint8_t reserv4[13];
  223. } AUTO_MATCH_LEVEL_PARA_DEF;
  224. typedef struct
  225. {
  226. uint16_t n;
  227. uint16_t b;
  228. uint16_t q;
  229. uint16_t r;
  230. } NBQR_PARA_DEF;
  231. typedef struct
  232. {
  233. float skew[4];
  234. } SKEW_PARA_DEF;
  235. // #define DIFF_PER_PACKET_SIZE 512
  236. extern PATCH_INFO_DEF PatchInfo;
  237. extern Param_t Paramx;
  238. extern void ParamInit(void);
  239. extern void GetParam(Param_t **);
  240. extern uint32_t BillTime(uint8_t, uint8_t);
  241. extern float CheckFlowCorrectFactor(float, uint16_t);
  242. extern uint8_t CheckCValueIndex(uint16_t, uint16_t);
  243. extern uint16_t CheckTempRangeIndex(float);
  244. extern uint8_t GetChNum(void);
  245. extern uint16_t GetSpdLvl(double);
  246. #ifndef __PARAM_FUN_INCLUDE
  247. #define __PARAM_FUN_INCLUDE
  248. extern void set_param_firmware_ver(uint8_t);
  249. extern void SaveParam(void);
  250. extern int8_t get_current_app_ver_from_flash(void); // 从flash读取当前app版本
  251. extern uint8_t get_param_firmware_ver(void); // 获取当前版本号
  252. extern int8_t set_hardware_para(HardWareParaDef *HardWarePara); // 设置硬件参数
  253. extern int8_t get_hardware_para(HardWareParaDef *HardWarePara); // 读取硬件参数
  254. extern int8_t set_patch_info(PATCH_INFO_DEF *patch_info); // 设置表端开始升级信息,收到升级指令后调用
  255. extern uint8_t write_diff_patch_to_flash(DIFF_PACKET_DEF *Packet); // 写差分包,收到差分包后调用
  256. extern int8_t set_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 设置服务器ip和端口号
  257. extern int8_t get_server_ip_port_para(SERVER_IP_PORT_DEF *server_ip_para); // 读取服务ip和端口号
  258. extern int8_t set_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 设置定时上报周期和时间间隔
  259. extern int8_t get_regular_report_para(REGULAR_REPORT_DEF *regular_report_para); // 读取定时上报周期和时间间隔
  260. extern int8_t set_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 设置dma上报时间参数
  261. extern int8_t get_dma_regular_report_para(DMA_REGULAR_REPORT_DEF *dma_report_para); // 读取dma定时上报时间参数
  262. extern int8_t set_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 设置流量告警参数
  263. extern int8_t get_flow_alarm_para(FLOW_ALARM_PARA_DEF *flow_alarm_para); // 读取流量告警参数
  264. extern int8_t set_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 设置压力告警参数
  265. extern int8_t get_press_alarm_para(PRESS_ALARM_PARA_DEF *press_alarm_para); // 获取压力告警参数
  266. extern int8_t set_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 设施温度告警参数
  267. extern int8_t get_temp_alarm_para(TEMP_ALARM_PARA_DEF *temp_alarm_para); // 读取温度告警参数
  268. extern int8_t set_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 设置表端结算日参数
  269. extern int8_t get_settlement_day_para(SETTLEMENT_DAY_DEF *settlement_day_para); // 读取表端结算日参数
  270. extern int8_t set_meter_bottom_data(METER_BOTTOM_DEF *bottom_data); // 设置表底读数
  271. extern int8_t get_18month_record_data(uint8_t *data); // 读取月结数据
  272. extern int8_t get_30day_record_data(uint8_t *data); // 读取日结数据
  273. extern int8_t get_hour_record_data(uint8_t year, uint8_t month, uint8_t day, uint8_t *data); // 读取时结数据
  274. extern int8_t get_5min_record_data(GET_5MIN_REOCORD_DEF *get_5min_record_data, uint16_t numb, uint8_t *data); // 读取5分钟密集数据
  275. extern int8_t get_log_record(uint8_t start, uint8_t num, uint8_t *data); // 读取日志数据 暂未实现
  276. extern int8_t set_channel_numb(uint8_t *numb); // 设置声道数
  277. extern int8_t get_channel_numb(uint8_t *numb); // 设置声道数
  278. extern int8_t get_device_addr(uint8_t *data); // 获取设备地址
  279. extern int8_t set_device_addr(uint8_t *data); // 设置表地址
  280. extern int8_t set_flow_para(FLOW_PARA_DEF *flow_para); // 设置流量参数
  281. extern int8_t get_flow_para(FLOW_PARA_DEF *flow_para); // 读取流量参数
  282. extern int8_t set_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 设置德尔塔TC流量参数
  283. extern int8_t get_deltaTC_flow_para(DELTA_TC_FLOW_PARA_DEF *deltaTC_para); // 读取德尔塔TC流量参数
  284. // extern int8_t set_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data);//设置口径和温度补偿系数
  285. // extern int8_t get_diameter_and_temp_compensation(DIAMETER_AND_TEMP_COMPENSATION_DEF *data);//读取口径和温度补偿系数
  286. extern int8_t set_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 设置自动匹配电平参数
  287. extern int8_t get_auto_match_level_para(AUTO_MATCH_LEVEL_PARA_DEF *data); // 获取自动匹配电平参数
  288. // extern void get_temp_compensation_from_eeprom(void);
  289. extern uint8_t set_crc_check_para(void);
  290. extern uint16_t pack_crc_check(uint16_t prev_data, uint8_t *data, uint16_t len);
  291. extern uint8_t eeprom_MassRead(uint8_t *dat, uint32_t addr, uint16_t len);
  292. extern uint8_t eeprom_MassWrite(uint8_t *dat, uint32_t addr, uint16_t len);
  293. extern int8_t set_nbqr_para(NBQR_PARA_DEF *nbqr_para);
  294. extern int8_t get_nbqr_para(NBQR_PARA_DEF *nbqr_para);
  295. extern int8_t set_skew_para(SKEW_PARA_DEF *skew_para);
  296. extern int8_t datecmp(tm_t date1, tm_t date2);
  297. extern void update_run_app_info(void);
  298. extern void write_flash_memory(uint8_t *data, uint32_t addr, uint32_t len);
  299. extern void erase_flash_memory(uint32_t addr, uint32_t size);
  300. extern int8_t get_quad_cell_data(void *quad_cell_data);
  301. extern int8_t set_diameter_and_quad_cell_data(uint16_t diameter, void *quad_cell_data);
  302. extern const uint16_t ccitt_table[256];
  303. extern const uint8_t app_addr;
  304. extern int8_t Check_quad_cell_data_valid(uint32_t quad_cell_data);
  305. extern const char SOFT_VER[5];
  306. extern uint8_t rewrite_para_flag;
  307. extern void check_rewrite_para(void);
  308. extern void run_clk_task_handler(void);
  309. extern int8_t set_nb_band(void);
  310. // extern Quad_Cell_t Quad_Cell_Ary[];
  311. #endif
  312. #endif