PumpBusiness.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include "Usart1.h"
  7. #include "AT.h"
  8. #include "EC800M_UDP_Client5.h"
  9. #include "INflash.h"
  10. // 计时相关的变量
  11. uint8_t Business_time_flag = 0;
  12. uint32_t Business_timer_ms = 0;
  13. uint32_t Business_wait_time = 1200; // 秒
  14. uint8_t network_switch = 0;//0代表开,1代表关
  15. static uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
  16. static struct Pump_Params pump_params; // 泵参数
  17. static uint16_t Data_Number = 1; // 数据编号
  18. extern Coefficient_Data flashdata;
  19. // 泵参数初始化
  20. void Pump_Params_Init(void)
  21. {
  22. pump_params.userId = 0;
  23. pump_params.pumpType = 0;
  24. pump_params.infusionId = 0;
  25. //报警初始化
  26. pump_params.alarm_BubbleOrAneroid = 0;
  27. pump_params.alarm_Blocked = 0;
  28. pump_params.alarm_Total = 0;
  29. pump_params.alarm_Ultimate = 0;
  30. pump_params.alarm_LowPower = 0;
  31. pump_params.alarm_Finished = 0;
  32. pump_params.alarm_MotorOutofcontrol = 0;
  33. pump_params.alarm_MechanicalBreakdown = 0;
  34. pump_params.alarm_UnfilledPillBox = 0;
  35. //预报初始化
  36. pump_params.forcast_WillFinished = 0;
  37. pump_params.forcast_InsufficientAnalgesia = 0;
  38. pump_params.forcast_LowPowerForecast = 0;
  39. }
  40. // 刷新泵数据
  41. void Pump_Params_Refresh(void)
  42. {
  43. pump_params.userId = 1000;
  44. pump_params.pumpType = 1;
  45. pump_params.infusionId = 234;
  46. pump_params.dataNumber = Data_Number;
  47. }
  48. // 业务处理
  49. void PumpBusines_Handle(void)
  50. {
  51. // 定时发送数据
  52. if(Business_time_flag == 0)
  53. {
  54. Business_timer_ms = 0; // 初始化计时变量
  55. Business_time_flag = 1;
  56. }
  57. else if(Business_timer_ms > 1000 * Business_wait_time) // // 定时时间,20分钟
  58. {
  59. // 20分钟计时完成,处理业务
  60. send_data_switch = 1; // 发送数据标志
  61. }
  62. // 发送数据的逻辑
  63. if(send_data_switch == 1)
  64. {
  65. // Pump_Data_Refresh(); // 刷新数据
  66. if(UDP_Client5_Status() == Client_Status_None)
  67. {
  68. Business_time_flag = 0; // 继续定时
  69. // 初始化参数
  70. Pump_Params_Init();
  71. // 更新参数
  72. Pump_Params_Refresh();
  73. // 发送参数
  74. UDP_Client5_Send(pump_params);
  75. }
  76. else if(UDP_Client5_Status() == Client_Status_Success) // 成功
  77. {
  78. Log_Printf("发送成功:%s\r\n", UDP_Client5.info);
  79. UDP_Client5_Clear(); // 清除
  80. send_data_switch = 0; // 关闭发送
  81. Data_Number++; // 数据编号加1
  82. }
  83. else if(UDP_Client5_Status() == Client_Status_Failure) // 失败
  84. {
  85. Log_Printf("发送失败:%s\r\n", UDP_Client5.info);
  86. UDP_Client5_Clear(); // 清除
  87. send_data_switch = 0; // 关闭发送
  88. Data_Number++; // 数据编号加1
  89. }
  90. }
  91. }
  92. // 循环执行
  93. void pump_business_loop_execution()
  94. {
  95. if(flashdata.read_flag==0)return;//注册失败或flash存储失败
  96. if(network_switch==1)return;//关闭网络状态
  97. // 业务处理
  98. PumpBusines_Handle();
  99. // 客户端
  100. UDP_Client5_Handle();
  101. // 处理AT指令
  102. AT_Handle();
  103. }