#include "stm32f10x.h" #include #include #include #include #include "PumpBusiness.h" #include "Usart1.h" #include "AT.h" #include "INflash.h" #if _4GFLAG #include "EC800M_UDP_Client5.h" #include "LowPower.h" #endif #if NBFLAG #include "BC260_UDP_Client5.h" #endif // 计时相关的变量 uint8_t Business_time_flag = 0; uint32_t Business_timer_ms = 0; uint32_t Business_wait_time = 1200; // 秒 uint8_t resend_counter = 0;//nb失败重发标志 uint8_t send_data_switch = 0; // 发送数据的开关,0表示发送数据 uint8_t networkTest_Flag=0;//开机判断是否有信号,0是未知默认状态,1是失败状态,2是成功状态。 static struct Pump_Params pump_params; // 泵参数 uint8_t test_switch=1; //0代表正常流程,1代表测试流程 static uint16_t Data_Number = 0; // 数据编号 static uint16_t Data_success_Number = 0; // 成功包 static uint16_t Data_fail_Number = 0; // 失败包 extern Coefficient_Data flashdata; int RSRP1=0; int RSRQ2=0; int RSSI3=0; int SINR4=0; // 泵参数初始化 void Pump_Params_Init(void) { pump_params.userId = 0; pump_params.pumpType = 0; pump_params.infusionId = 0; pump_params.appendDose=0; //报警初始化 pump_params.alarm_BubbleOrAneroid = 0; pump_params.alarm_Blocked = 0; pump_params.alarm_Total = 0; pump_params.alarm_Ultimate = 0; pump_params.alarm_LowPower = 0; pump_params.alarm_Finished = 0; pump_params.alarm_MotorOutofcontrol = 0; pump_params.alarm_MechanicalBreakdown = 0; pump_params.alarm_UnfilledPillBox = 0; //预报初始化 pump_params.forcast_WillFinished = 0; pump_params.forcast_InsufficientAnalgesia = 0; pump_params.forcast_LowPowerForecast = 0; } // 刷新泵数据 void Pump_Params_Refresh(void) { pump_params.userId = 1000; pump_params.pumpType = 1; pump_params.infusionId = 234; pump_params.dataNumber = Data_Number; pump_params.electricity=99; pump_params.validTimes=10; pump_params.appendDose=3; pump_params.invalidTimes=4; pump_params.patientCode = 2000; pump_params.totalDose=11; pump_params.ward=2; // 编号124,病区。 pump_params.bedNo=3; // 编号125,床号。 pump_params.alarm_LowPower = 1; pump_params.alarm_Total = 1; pump_params.finishDose =20; pump_params.alarm_UnfilledPillBox = 1; pump_params.forcast_WillFinished =1; pump_params.forcast_InsufficientAnalgesia = 0; pump_params.forcast_LowPowerForecast = 0; } // 业务处理 void PumpBusines_Handle(void) { // 定时发送数据 if(Business_time_flag == 0) { Business_timer_ms = 0; // 初始化计时变量 Business_time_flag = 1; } else if(Business_timer_ms > 1000 * Business_wait_time) // // 定时时间,20分钟 { // 20分钟计时完成,处理业务 send_data_switch = 1; // 发送数据标志 } #if NBFLAG if(send_data_switch == 1) { #endif #if _4GFLAG // 发送数据的逻辑 if(send_data_switch == 1 && set_mincfun_flag ==1) { #endif // Pump_Data_Refresh(); // 刷新数据 if(UDP_Client5_Status() == Client_Status_None) { Data_Number++; // 数据编号加1 Business_time_flag = 0; // 继续定时 // 初始化参数 Pump_Params_Init(); // 更新参数 // Pump_Params_Refresh(); if(test_switch==1&&Data_Number>=200) { send_data_switch=0; // Data_Number =0; // Data_success_Number=0; // Data_fail_Number=0; return ; } // 发送参数 UDP_Client5_Send(pump_params,test_switch); } else if(UDP_Client5_Status() == Client_Status_Success) // 成功 { Log_Printf("发送成功:%s\r\n", UDP_Client5.info); UDP_Client5_Clear(); // 清除 send_data_switch = 0; // 关闭发送 Data_success_Number++; resend_counter =0; if(test_switch==1){ Query_Signal(&RSRP1,&RSRQ2,&RSSI3,&SINR4); Log_Printf("\r\nRSRP1:%d,RSRQ2:%d,RSSI3:%d,SINR4:%d\r\n", RSRP1,RSRQ2,RSSI3,SINR4); } } else if(UDP_Client5_Status() == Client_Status_Failure) // 失败 { Log_Printf("发送失败:%s\r\n", UDP_Client5.info); UDP_Client5_Clear(); // 清除 #if NBFLAG resend_counter++; if(resend_counter<=3) { send_data_switch = 1; // 失败重发 } else { send_data_switch = 0; // 关闭发送 resend_counter=4; } #endif #if _4GFLAG send_data_switch = 0; // 关闭发送 #endif Data_fail_Number++; } } } // 循环执行 void pump_business_loop_execution() { #if _4GFLAG Power_Handle(); if(networkTest_Flag==2) { } else if(networkTest_Flag ==1) { } #endif if(flashdata.read_flag==0)return;//注册失败或flash存储失败 //if(network_switch==1)return;//关闭网络状态 // 业务处理 PumpBusines_Handle(); // // 客户端 UDP_Client5_Handle(); // 处理AT指令 AT_Handle(); }