PumpBusiness.c 5.8 KB

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