PumpBusiness.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include "PumpBusiness.h"
  7. #include "Usart1.h"
  8. #include "CONFIG.h"
  9. #include "Initialize.h"
  10. #include "UDP_Client.h"
  11. #include "Timer_Module.h"
  12. #include "Log_Module.h"
  13. #include "At_Module.h"
  14. #include "Pump_Dicts_Util.h"
  15. #include "Tuoreniot.h"
  16. #include "Regist.h"
  17. #include "UDP_Client.h"
  18. // 联网成功标识
  19. uint8_t Network_Success_Flag = 0;
  20. struct PUMPDICTS_ParamsStruct pump_params; // 泵参数
  21. static uint16_t Data_Number = 0; // 数据编号
  22. static uint16_t Data_success_Number = 0; // 成功包
  23. static uint16_t Data_fail_Number = 0; // 失败包
  24. int RSRP1=0;
  25. int RSRQ2=0;
  26. int RSSI3=0;
  27. int SINR4=0;
  28. // 泵参数初始化
  29. static void PUMPBUSINESS_ParamsInit(void)
  30. {
  31. pump_params.userId = 0;
  32. pump_params.pumpType = 0;
  33. pump_params.infusionId = 0;
  34. pump_params.appendDose=0;
  35. //报警初始化
  36. pump_params.alarm_BubbleOrAneroid = 0;
  37. pump_params.alarm_Blocked = 0;
  38. pump_params.alarm_Total = 0;
  39. pump_params.alarm_Ultimate = 0;
  40. pump_params.alarm_LowPower = 0;
  41. pump_params.alarm_Finished = 0;
  42. pump_params.alarm_MotorOutofcontrol = 0;
  43. pump_params.alarm_MechanicalBreakdown = 0;
  44. pump_params.alarm_UnfilledPillBox = 0;
  45. //预报初始化
  46. pump_params.forcast_WillFinished = 0;
  47. pump_params.forcast_InsufficientAnalgesia = 0;
  48. pump_params.forcast_LowPowerForecast = 0;
  49. #if BC260Y
  50. pump_params.networkType=1;
  51. #endif
  52. #if EC800M
  53. pump_params.networkType=2;
  54. #endif
  55. #if ESP32
  56. pump_params.networkType=3;
  57. #endif
  58. }
  59. // 刷新泵数据
  60. void PUMPBUSINESS_ParamsRefresh(void)
  61. {
  62. // 初始化
  63. PUMPBUSINESS_ParamsInit();
  64. pump_params.userId = 1000;
  65. pump_params.pumpType = 1;
  66. pump_params.infusionId = 234;
  67. pump_params.dataNumber = Data_Number;
  68. pump_params.electricity=99;
  69. pump_params.validTimes=10;
  70. pump_params.appendDose=3;
  71. pump_params.invalidTimes=4;
  72. pump_params.patientCode = 2000;
  73. pump_params.totalDose=11;
  74. pump_params.ward=2; // 编号124,病区。
  75. pump_params.bedNo=3; // 编号125,床号。
  76. pump_params.alarm_LowPower = 1;
  77. pump_params.alarm_Total = 1;
  78. pump_params.finishDose =20;
  79. pump_params.alarm_UnfilledPillBox = 1;
  80. pump_params.forcast_WillFinished =1;
  81. pump_params.forcast_InsufficientAnalgesia = 0;
  82. pump_params.forcast_LowPowerForecast = 0;
  83. }
  84. // 初始化结果处理
  85. static void Initialize_ResultHandle()
  86. {
  87. // 初始化过程处理
  88. if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being)
  89. {
  90. // 初始化流程处理
  91. INITIALIZE_ProcessHandle();
  92. }
  93. else if(INITIALIZE_GetStatus() == INITIALIZE_Status_Done)
  94. {
  95. Log_Printf_Debug("初始化结束\r\n");
  96. if(INITIALIZE_GetResult() == INITIALIZE_Result_Success)
  97. {
  98. Log_Printf_Debug("初始化成功: %d\r\n", INITIALIZE_GetResult());
  99. Network_Success_Flag = 1;
  100. }
  101. else if(INITIALIZE_GetResult() == INITIALIZE_Result_Failure)
  102. {
  103. Log_Printf_Debug("初始化失败: %d\r\n", INITIALIZE_GetResult());
  104. Network_Success_Flag = 0;
  105. }
  106. // 重置初始化
  107. INITIALIZE_Reset();
  108. }
  109. }
  110. // 注册结果处理
  111. static void Regist_ResultHandle()
  112. {
  113. // 注册过程处理
  114. if(REGIST_GetStatus() == REGIST_Status_Being)
  115. {
  116. // 注册流程处理
  117. REGIST_ProcessHandle();
  118. }
  119. else if(REGIST_GetStatus() == REGIST_Status_Done)
  120. {
  121. Log_Printf_Debug("注册结束\r\n");
  122. if(REGIST_GetResult() == REGIST_Result_Success)
  123. {
  124. Log_Printf_Debug("注册成功: %d\r\n", REGIST_GetResult());
  125. Network_Success_Flag = 1;
  126. }
  127. else if(REGIST_GetResult() == REGIST_Result_Failure)
  128. {
  129. Log_Printf_Debug("注册失败: %d\r\n", REGIST_GetResult());
  130. Network_Success_Flag = 0;
  131. }
  132. // 重置注册
  133. REGIST_Reset();
  134. }
  135. }
  136. // 定时发送
  137. // 计时相关的变量
  138. static struct TIMER_Struct timer;
  139. static uint32_t Business_wait_time = 1200; // 秒
  140. uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
  141. static void UDPClient_SendDataInterval()
  142. {
  143. // 定时发送数据
  144. if(time_get_delay(&timer) > 1000 * Business_wait_time) // // 定时时间,20分钟
  145. {
  146. // 20分钟计时完成,处理业务
  147. send_data_switch = 1; // 发送数据标志
  148. time_clear(&timer); // 重新定时
  149. Log_Printf_Debug("PumpBusines_Handle\r\n");
  150. }
  151. // 判断发送
  152. if(send_data_switch == 1)
  153. {
  154. // 初始化流程处于空闲, 注册流程处于空闲,注册成功时发送
  155. if(INITIALIZE_GetStatus() == INITIALIZE_Status_None
  156. && REGIST_GetStatus() == REGIST_Status_None
  157. && TUORENIOT_GetCodeOfRegistResponse() == 200)
  158. {
  159. Log_Printf_Debug("开始发送\r\n");
  160. UDPCLIENT_Start();
  161. send_data_switch = 0;
  162. // 数据编号加1
  163. Data_Number++;
  164. }
  165. }
  166. }
  167. // 发送结果处理
  168. static void UDPClient_ResultHandle()
  169. {
  170. // 发送过程处理
  171. if(UDPCLIENT_GetStatus() == UDPCLIENT_Status_Being)
  172. {
  173. // 发送流程处理
  174. UDPCLIENT_ProcessHandle();
  175. }
  176. else if(UDPCLIENT_GetStatus() == UDPCLIENT_Status_Done)
  177. {
  178. Log_Printf_Debug("发送结束\r\n");
  179. if(UDPCLIENT_GetResult() == UDPCLIENT_Result_Success)
  180. {
  181. Log_Printf_Debug("发送成功: %d\r\n", UDPCLIENT_GetResult());
  182. if(UDPCLIENT_TestModeFlag==1){
  183. UDPCLIENT_QuerySignal(&RSRP1,&RSRQ2,&RSSI3,&SINR4);
  184. Log_Printf("\r\nRSRP1:%d,RSRQ2:%d,RSSI3:%d,SINR4:%d\r\n", RSRP1,RSRQ2,RSSI3,SINR4);
  185. }
  186. Network_Success_Flag = 1;
  187. Data_success_Number++;
  188. }
  189. else if(UDPCLIENT_GetResult() == UDPCLIENT_Result_Failure)
  190. {
  191. Log_Printf_Debug("发送失败: %d\r\n", UDPCLIENT_GetResult());
  192. Network_Success_Flag = 0;
  193. Data_fail_Number++;
  194. }
  195. // 重置发送
  196. UDPCLIENT_Reset();
  197. }
  198. }
  199. // 业务处理
  200. static void PUMPBUSINESS_Process(void)
  201. {
  202. // 初始化诱因处理
  203. INITIALIZE_TriggerHandle();
  204. // 初始化结果处理
  205. Initialize_ResultHandle();
  206. // 注册结果处理
  207. Regist_ResultHandle();
  208. // 定时发送数据
  209. UDPClient_SendDataInterval();
  210. // 发送结果处理
  211. UDPClient_ResultHandle();
  212. // 一些未处理的数据
  213. AT_ResidueHandle();
  214. }
  215. // 初始化,放到while前
  216. void PUMPBUSINESS_Init(void)
  217. {
  218. TUORENIOT_Init();
  219. }
  220. // 流程处理,放到while循环
  221. void PUMPBUSINESS_ProcessHandle(void)
  222. {
  223. PUMPBUSINESS_Process();
  224. }