TypeDefine.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. /*--------------------------------------------------------------------------------------
  2. * @file TypeDefine.c
  3. * @author ZhangJing
  4. * @version base on stm32f0x
  5. * @date 2015.09.11
  6. * @brief 公共变量、函数定义
  7. ---------------------------------------------------------------------------------------*/
  8. #include <string.h>
  9. #include "stm32f10x_rcc.h"
  10. #include "stm32f10x_gpio.h"
  11. #include "TypeDefine.h"
  12. #include "Driver.h"
  13. #include "LCDSetup.h"
  14. #include "DrawLCDGUI.h"
  15. #include "ControlSystem.h"
  16. #include "History.h"
  17. #include "ParameterSet.h"
  18. #include "SystemAlarm.h"
  19. #include "FM31256.h"
  20. //#include "ZigbeeNet.h"
  21. #include "FlashSetup.h"
  22. #include "ProgramData.h" // add by wulianwei
  23. TaskSchedulerFlagFrame TaskSchedulerFlag;//任务调度标志
  24. TaskSchedulerTimerFrame TaskSchedulerTimer;//任务调度定时器
  25. KeyTypeFrame KeyScanStatus;//按键扫描状态
  26. KeyFlagFrame KeyActionFlag;//按键动作标志
  27. KeyScanQtyFrame KeyScanQty; //按键扫描次数
  28. KeyFlagFrame MoreKeyActionFlag;//多键组合动作标志
  29. bool motorWorkState = MOTOR_WORK_OFF;//电机工作状态
  30. TimeFrame displayTimeBuf;//显示时间
  31. RTDFrame realTimeData;//实时数据
  32. uint8_t dateLimit = 0;//日期分为29,30,31
  33. VerifyInfoSetFrame verifyInfo;//病人住院信息确认
  34. SetParamFrame setParamInfo;//参数设置信息
  35. RunParamFrame runParamInfo;//运行参数,因为有两页参数设置相同的参数,所以要有个运行参数
  36. AlarmFrame alarmRecord;//报警信息存储
  37. SetTimeType emSetTimeChoose;//时间设置选择
  38. TimeFrame displayTimeBuf;//显示时间
  39. TimeFrame setTimeBuf;//显示时间
  40. uint8_t setPasswordBuf[3] = {1,2,0};//密码设置--设置密码界面变量,通用密码改为120
  41. uint8_t verifyPasswordBuf[3] = {0,0,0};//确认密码--设置密码界面变量
  42. EvaluateTransfuseType emEvaluateTransfuseChoose;//随访评价选择类型
  43. EvaluateTransfuseFrame evaluateTransfuseValue;//随访评价中的数据
  44. EngineeringModeType emEngineeringMode1Choose;//工程控制画面1设置选择类型
  45. EngineeringModeType emEngineeringMode3Choose;//工程控制画面3设置选择类型
  46. EngineeringModeFrame EngineeringModeValue;//工程模式中的数据
  47. PictureEnterType emPictureRunState = FirstEnter;//页面运行状态,是首次进入,还是有数据更新
  48. SpeakerWorkType HornWorkStep; //喇叭工作类型
  49. SpeakerWorkType speakerWorkStep;//蜂鸣器工作类型
  50. SpeakerWorkType speakerWorkStep = emSpeakerNoneWork;//蜂鸣器工作步骤
  51. SpeakerType sysPromptToneType = SoundOff;//系统提示音类型
  52. SpeakerType SysHornToneType;
  53. uint8_t sysPromptToneCounts = 0;//提示音响的次数
  54. uint8_t testDispCounts = 0;//测试页面数据次数
  55. extern uint16_t inputDose_bf; //已输入量备份
  56. extern uint8_t SetParametersAgain ; //运行过程中重新设置参数标志
  57. uint8_t FirstSurplusDose = 0; //堵塞时首次量剩余量
  58. uint8_t PCASurplusDose = 0; //堵塞时PCA量剩余量
  59. /*********************************************************************************
  60. * Function: Delay_ms
  61. * Object: Inserts a delay time.
  62. * 输入: nCount: specifies the delay time length (time base 1 ms).
  63. * 输出: 无
  64. * 备注:
  65. **********************************************************************************/
  66. void Delay_ms(uint32_t nCount)
  67. {
  68. TaskSchedulerTimer.delayTimer = nCount;
  69. while(TaskSchedulerTimer.delayTimer != 0)
  70. {
  71. }
  72. }
  73. /***************************************
  74. *
  75. * Function: void ReadInputTotalDose(void)
  76. * Object: 从FM31256中读取输入总量的历史数据
  77. * 输入: 无
  78. * 输出: 无
  79. * 备注:
  80. ***************************************/
  81. void ReadInputTotalDose(void)
  82. {
  83. uint8_t InputTotalDoseBuff[4];
  84. //Read_Multi31256RAM( HISTORY31256_DATA_InputTotalDose, InputTotalDoseBuff, 4 );
  85. FlashReadOperate( InputTotalDoseBuff,4,HISTORY31256_DATA_InputTotalDose );
  86. realTimeData.InputTotalDose=0;
  87. realTimeData.InputTotalDose=(((uint32_t)InputTotalDoseBuff[0]<<24) + ((uint32_t)InputTotalDoseBuff[1]<<16) + ((uint32_t)InputTotalDoseBuff[2]<<8) + ((uint32_t)InputTotalDoseBuff[3]));
  88. }
  89. /*********************************************************************************
  90. * Function: SystemSWInit
  91. * Object: 系统软件初始化
  92. * 输入: 无
  93. * 输出: 无
  94. * 备注: 1、开机系统进行初始化时将全局变量进行初始化
  95. * 2、读取FM31256中存储的参数
  96. * 3、读取存储的历史数据第一条
  97. **********************************************************************************/
  98. void SystemSWInit( void )
  99. {
  100. uint8_t InputTotalDoseBuff[4];
  101. (void) memset (&realTimeData, 0, sizeof(realTimeData)); //将realTimeData数据清零
  102. (void) memset (&setParamInfo, 0, sizeof(setParamInfo)); //将setParamInfo数据清零
  103. (void) memset (&paramRecordBuf, 0, sizeof(paramRecordBuf)); //将paramRecordBuf数据清零
  104. (void) memset (&historyRecordBuf, 0, sizeof(paramRecordBuf)); //将historyRecordBuf数据清零
  105. (void) memset (&historyRecord, 0, sizeof(historyRecord)); //将historyRecord数据清零
  106. /*按键工作状态,用来判断消抖*/
  107. KeyScanStatus.keyPower = emKeyActionWait;
  108. KeyScanStatus.keyPS = emKeyActionOff;
  109. KeyScanStatus.keyAirout = emKeyActionOff;
  110. KeyScanStatus.keyEnter = emKeyActionOff;
  111. KeyScanStatus.keyPlus = emKeyActionWait;
  112. KeyScanStatus.keyMinus = emKeyActionOff;
  113. KeyScanStatus.keyRunPause = emKeyActionOff;
  114. KeyScanStatus.keyPCA = emKeyActionOff;
  115. /*用计数方式扫描按键按下状态,按键分为长按短按连续按下*/
  116. KeyScanQty.keyEnter = 0;
  117. KeyScanQty.keyRunPause = 0;
  118. KeyScanQty.keyPlus = 0;
  119. KeyScanQty.keyMinus = 0;
  120. KeyScanQty.keyPower = 0;
  121. KeyScanQty.keyAirout = 0;
  122. KeyScanQty.keyPS = 0;
  123. KeyScanQty.keyPCA = 0;
  124. /*按键扫描消抖时长,全部消抖都为定长,按消抖次数(KeyScanQty)判断是长按还是短按*/
  125. TaskSchedulerTimer.powerKeyScanTimer = 0;//上电时不让有消抖处理,否则会出现开机误操作的情况
  126. TaskSchedulerTimer.enterKeyScanTimer = KEY_TIMER_SCAN;
  127. TaskSchedulerTimer.runPauseKeyScanTimer = KEY_TIMER_SCAN;
  128. TaskSchedulerTimer.airoutKeyScanTimer = KEY_TIMER_SCAN;
  129. TaskSchedulerTimer.psKeyScanTimer = KEY_TIMER_SCAN;
  130. TaskSchedulerTimer.plusKeyScanTimer = KEY_TIMER_SCAN;
  131. TaskSchedulerTimer.minusKeyScanTimer = KEY_TIMER_SCAN;
  132. TaskSchedulerTimer.pcaKeyScanTimer = KEY_TIMER_SCAN;
  133. /*任务标志位初始化*/
  134. TaskSchedulerFlag.initFinishFlag = TASK_FLAG_WAIT;
  135. TaskSchedulerFlag.zigbeeRecvFlag = TASK_FLAG_CLEAR;
  136. TaskSchedulerFlag.zigbeeXmitFlag = TASK_FLAG_CLEAR;
  137. TaskSchedulerFlag.zigbeeComReadFlag = TASK_FLAG_WAIT;
  138. TaskSchedulerFlag.zigbeeInNetFlag = TASK_FLAG_CLEAR;
  139. TaskSchedulerFlag.zigbeeETXmitFlag = TASK_FLAG_CLEAR;
  140. TaskSchedulerFlag.historyRequestFlag = TASK_FLAG_CLEAR;
  141. TaskSchedulerFlag.historyReponseFlag = TASK_FLAG_CLEAR;
  142. TaskSchedulerFlag.pressureConvertFlag = TASK_FLAG_CLEAR;
  143. TaskSchedulerFlag.forceConvertFlag = TASK_FLAG_CLEAR;
  144. TaskSchedulerFlag.fromSlaveRecvFlag = TASK_FLAG_CLEAR;
  145. TaskSchedulerFlag.toSlaveXmitFlag = TASK_FLAG_CLEAR;
  146. TaskSchedulerFlag.motorRunFlag = TASK_FLAG_CLEAR;
  147. TaskSchedulerFlag.motorStopFlag = TASK_FLAG_SET;//默认是置位状态
  148. TaskSchedulerFlag.motorSelfTestFlag = TASK_FLAG_CLEAR;
  149. TaskSchedulerFlag.ipnutFlag = TASK_FLAG_CLEAR;
  150. TaskSchedulerFlag.timeReadFlag = TASK_FLAG_CLEAR;
  151. TaskSchedulerFlag.lockDispFlag = TASK_FLAG_CLEAR;
  152. TaskSchedulerFlag.hostXmitFlag = TASK_FLAG_CLEAR;
  153. TaskSchedulerFlag.unlockPasswordFlag = TASK_FLAG_CLEAR;
  154. TaskSchedulerFlag.rtdUpdateFlag = TASK_FLAG_CLEAR;
  155. TaskSchedulerFlag.speakerFlag = TASK_FLAG_SET;//TASK_FLAG_CLEAR;
  156. TaskSchedulerFlag.silenceFlag = TASK_FLAG_CLEAR;
  157. TaskSchedulerFlag.pcaLockFlag = TASK_FLAG_CLEAR;
  158. TaskSchedulerFlag.pcaCountDispFlag = TASK_FLAG_CLEAR;
  159. TaskSchedulerFlag.pcaLockTimeFlag = TASK_FLAG_CLEAR;
  160. TaskSchedulerFlag.batLowPrepareFlag = TASK_FLAG_CLEAR;
  161. // TaskSchedulerFlag.autoPowerOffFlag = TASK_FLAG_CLEAR;
  162. TaskSchedulerFlag.sysPowerOffFlag = TASK_FLAG_CLEAR;
  163. TaskSchedulerFlag.callFunctionFlag = TASK_FLAG_CLEAR;
  164. TaskSchedulerFlag.lcdBlackFlag = TASK_FLAG_CLEAR;
  165. TaskSchedulerFlag.lcdFlashFlag = TASK_FLAG_CLEAR;
  166. TaskSchedulerFlag.lcdBlackFlashFlag = TASK_FLAG_CLEAR;
  167. TaskSchedulerFlag.sysStandbyFlag = TASK_FLAG_WAIT;
  168. TaskSchedulerFlag.limitJudgeFlag = TASK_FLAG_SET;
  169. TaskSchedulerFlag.sensorPWHallFlag = TASK_FLAG_SET;//传感器电源-霍尔打开
  170. TaskSchedulerFlag.sensorPWPressureFlag = TASK_FLAG_SET;//传感器电源-压力打开
  171. TaskSchedulerFlag.sensorPWBatteryFlag = TASK_FLAG_CLEAR;//传感器电源-电压打开
  172. TaskSchedulerFlag.testDispFlag = TASK_FLAG_CLEAR;
  173. TaskSchedulerFlag.batteryVoltHeaderFlag = TASK_FLAG_CLEAR;
  174. TaskSchedulerFlag.PCAOneTimeFlag = TASK_FLAG_WAIT;
  175. TaskSchedulerFlag.IrregularShutdownFlag = TASK_FLAG_CLEAR;
  176. TaskSchedulerFlag.JamSelfcheckingFlag = TASK_FLAG_WAIT;//堵塞自检标志等待
  177. TaskSchedulerFlag.PasswordTimeOverFlag = TASK_FLAG_WAIT;
  178. TaskSchedulerFlag.LimitBeginsTime = 0; //极限T1计时
  179. TaskSchedulerFlag.EnterDelayFlag = TASK_FLAG_CLEAR;//enter按键长按开始延时标志
  180. TaskSchedulerFlag.HistoryDontSetFlag = TASK_FLAG_CLEAR;//住院号未设置
  181. TaskSchedulerFlag.AirOutFlag = TASK_FLAG_CLEAR;//排气标志清除
  182. TaskSchedulerFlag.AlarmInitFlag = TASK_FLAG_CLEAR;
  183. TaskSchedulerFlag.pcaCountFlashFlag = TASK_FLAG_CLEAR;//PCA计数闪烁标志用来进行闪烁计时使用
  184. TaskSchedulerFlag.PCATimerFlashFlag = TASK_FLAG_CLEAR;//PCA锁时闪烁标志
  185. /********固定频率刷新,也跟随电机停止刷新*********/
  186. TaskSchedulerFlag.LcdLogoFlag = TASK_FLAG_CLEAR;//屏幕上方标志分时闪烁进入刷新标志
  187. TaskSchedulerFlag.PCATimerFlashFlag1 = TASK_FLAG_CLEAR;//屏幕中PCA锁时时间闪烁刷新标志
  188. TaskSchedulerFlag.lcdFlashFlag1 = TASK_FLAG_CLEAR;//PCA有无效次数闪烁刷新标志
  189. TaskSchedulerFlag.MqttSendFlag = TASK_FLAG_SET;//Mqtt发送标志 add by wulianwei
  190. /****************************************/
  191. TaskSchedulerTimer.delayTimer = 0;
  192. TaskSchedulerTimer.EnterDelayTimer = EnterDelay_TIMER;
  193. TaskSchedulerTimer.pcaLockTimer = 0;
  194. TaskSchedulerTimer.initFinishTimer = TRI_SECOND_TIMER;
  195. TaskSchedulerTimer.rtdXmitTimer = TASK_TIMER_XMIT_RTD;
  196. TaskSchedulerTimer.timeReadTimer = ONE_SECOND_TIMER;
  197. TaskSchedulerTimer.pressureConvertTimer = TASK_TIMER_PRES_CONV;
  198. // TaskSchedulerTimer.dispAutoJumpTimer = DISP_TIME_AUTO_JUMP;
  199. TaskSchedulerTimer.lockDispTimer = DISP_TIME_LOCK_JUMP;
  200. TaskSchedulerTimer.sysRunTestTimer = SYS_RUN_TEST_TIMER;
  201. TaskSchedulerTimer.alarmCollectTimer = ALARM_COLLECT_TIMER;
  202. TaskSchedulerTimer.totalDoseOneHourTimer = ONE_HOUR_TIMER;
  203. TaskSchedulerTimer.motorSignalCollectTimer = MOTOR_TESTSELF_TIMER;
  204. TaskSchedulerTimer.motorSelfTestTimer = MOTOR_TESTSELF_TIMER;//电机自检时间
  205. TaskSchedulerTimer.motorStopTimer = InfusionStopTimer;//电机停止等待时间
  206. TaskSchedulerTimer.hostXmitTimer = ONE_MSEC_TIMER;
  207. TaskSchedulerTimer.lockPassWordTimer = THREE_MINUTE_TIMER;
  208. TaskSchedulerTimer.batLowPrepareDispTimer = ONE_SECOND_TIMER;
  209. TaskSchedulerTimer.universalTimer = TWO_SECOND_TIMER;//通用计时
  210. TaskSchedulerTimer.speakerTimer = ONE_SECOND_TIMER;//蜂鸣器计时
  211. TaskSchedulerTimer.speakerWaitTimer = THIRTY_SECOND_TIMER;//蜂鸣器等待计时
  212. // TaskSchedulerTimer.autoPowerOffTimer = THIRTY_MINUTE_TIMER;//自动关机计时
  213. TaskSchedulerTimer.lcdBlackCloseTimer = FIFTEEN_SECOND_TIMER;//TWO_SECOND_TIMER;//LCD背光关闭计时
  214. TaskSchedulerTimer.alarmLCDFlashTimer = TEN_SECOND_TIMER;//报警LCD闪屏次数显示计时
  215. TaskSchedulerTimer.sysStandbyTimer = TEN_SECOND_TIMER;//系统休眠计时
  216. TaskSchedulerTimer.hostPowerSaveTimer = TEN_SECOND_TIMER;//主芯片节能计时
  217. TaskSchedulerTimer.batteryVoltTimer = FIFTEEN_SECOND_TIMER;//电池电压采集计时
  218. TaskSchedulerTimer.pcaOneHourTimer = ONE_HOUR_TIMER;//有效次数>2次在1小时内疼痛不足报警
  219. TaskSchedulerTimer.JamSelfcheckingTimer = FIVE_MINUTE_TIMER;//堵塞自检计时5min
  220. TaskSchedulerTimer.PainAssessmentUploadTimer = ONE_SECOND_TIMER;//疼痛评价确认上传时间,假时间
  221. TaskSchedulerFlag.StartToRunDontSend = SendWait;//长数据包发送等待标志
  222. TaskSchedulerTimer.pcaCountsFlashTimer = THREE_MSEC_TIMER;//PCA计数闪烁计时,
  223. TaskSchedulerTimer.ModuleInitTimer = FIFTEEN_SECOND_TIMER; //TCP检测计时 add by wulianwei
  224. TaskSchedulerTimer.MQTTSendTimer = TASK_TIMER_XMIT_RTD;// mqtt数据发送定时 add by wulianwei
  225. pca_count = 0; //开机或者重新设值参数一小时内PCA按压次数清零
  226. /*报警记录清零*/
  227. AlarmRecord.MechanicalFault = ALARM_OFF;
  228. AlarmRecord.NonePillCase = ALARM_OFF;
  229. AlarmRecord.BubbleFault = ALARM_OFF;
  230. AlarmRecord.LineLost = ALARM_OFF;
  231. AlarmRecord.JamFault = ALARM_OFF;
  232. AlarmRecord.MaxFault = ALARM_OFF;
  233. AlarmRecord.InputTotal = ALARM_OFF;
  234. sysAlarmFlag.Zhentongxiaoguo = ALARM_OFF;
  235. SysHornToneType = SoundWate;
  236. SysAlarmJudge.JamFaultJudgeFlag = TASK_FLAG_CLEAR;
  237. SysAlarmJudge.BubbleFaultJudgeFlag = TASK_FLAG_CLEAR;
  238. SysAlarmJudge.NonePillCaseJudgeFlag = TASK_FLAG_CLEAR;
  239. SysAlarmJudge.VoltLowestJudgeFlag = TASK_FLAG_CLEAR;
  240. SysAlarmJudge.JamFaultJudgeCounts = 0;
  241. SysAlarmJudge.BubbleFaultJudgeCounts = 0;
  242. SysAlarmJudge.NonePillCaseJudgeCounts = 0;
  243. SysAlarmJudge.VoltLowestJudgeCounts = 0;
  244. emSetTimeChoose = Year;
  245. verifyInfo.modifyInfoType = HOSPITALNO_SELECTED;
  246. setParamInfo.emModifyParam = TotalDose;
  247. emEvaluateTransfuseChoose = Pruritus;//随访评价选项
  248. emEngineeringMode3Choose = DeviceIDChoose;
  249. emEngineeringMode1Choose = SickroomQty;
  250. TotalDoesChange0 = 0;//工程模式输注总量变化1变0
  251. TotalDoesChange1 = 0;//工程模式输注总量变化0变1
  252. realTimeData.stateRun = SelfTest;//StartWork;//系统运行状态-开始工作
  253. realTimeData.ctlSlaveRun = StartWork;//从机运行状态-开始工作
  254. sysPromptToneType = SoundOff;
  255. emDisplayPicture = ClearDisp;
  256. emCurrentPicture = ClearDisp;
  257. emSysWorkStep = EnterPowerON;
  258. displayTimeBuf.year = 2021;
  259. displayTimeBuf.month = 1;
  260. displayTimeBuf.date = 1;
  261. displayTimeBuf.hour = 0;
  262. displayTimeBuf.minute = 0;
  263. displayTimeBuf.seconds = 0;
  264. realTimeData.batteryVolt = 255;
  265. LCDInit();
  266. LCDClear( GRAY0 );
  267. GetCurDateTimeFromRTC();//上电1s以后再读时间,否则影响开机速度
  268. FlashReadOperate( paramRecordBuf,2,((uint32_t)0x0806407E) );
  269. if(paramRecordBuf[0] == 0x0A)
  270. {
  271. ReadParameterRecord();//读出参数
  272. }
  273. else
  274. {
  275. WriteInitParameterRecord();
  276. ReadParameterRecord();//读出参数
  277. InputTotalDoseBuff[0]=00;
  278. InputTotalDoseBuff[1]=00;
  279. InputTotalDoseBuff[2]=00;
  280. InputTotalDoseBuff[3]=00;
  281. FlashWriteOperate( InputTotalDoseBuff,4,HISTORY31256_DATA_InputTotalDose );
  282. WriteInitProgramData();//初始化程序参数, add by wulianwei
  283. }
  284. // ReadParameterRecord();//读出参数
  285. ReadHistoryRecordQTY();//读出历史数据现有数量
  286. if(historyRecordQTY>=10)
  287. {
  288. if(historyRecordPointer == 0)
  289. {
  290. historyRecord.readIndex = (historyRecordQTY-1);
  291. }
  292. else
  293. {
  294. historyRecord.readIndex = historyRecordPointer-1;
  295. }
  296. }
  297. else
  298. {
  299. historyRecord.readIndex = (historyRecordQTY-1);
  300. }
  301. // historyRecord.readIndex = (historyRecordQTY-1); //师进赏修改为读出历史数据为最新的一条 2020.4.2
  302. ReadHistoryRecord();//读一条历史数据
  303. ReadInputTotalDose();//读取FM31256中存储的输入总量数据
  304. ReadProgramData();// 读出程序参数 add by wulianwei
  305. (*classification)++;//输注次数加一 add by wulianwei
  306. if( EngineeringModeValue.networkState == ENGINEERINGMODE_OFF )
  307. {
  308. registInfo->flag='N'; //设置设备未注册
  309. }
  310. WriteProgramData();
  311. }
  312. /*********************************************************************************
  313. * Function: RunParamUpdate
  314. * Object: 运行参数更新
  315. * 输入: 无
  316. * 输出: 无
  317. * 备注: 1、为避免在运行中会对设置参数修改,在运行前对实时运行数据进行装载更新
  318. * 2、emSysWorkStep工作步骤必须在参数设置时
  319. **********************************************************************************/
  320. void RunParamUpdate( void )
  321. {
  322. if( emSysWorkStep == EnterSetParam )
  323. {
  324. runParamInfo.totalDose = setParamInfo.totalDose * 10;
  325. runParamInfo.firstDose = setParamInfo.firstDose * 10;
  326. runParamInfo.continueDose = setParamInfo.continueDose1;
  327. runParamInfo.limitDose = setParamInfo.limitDose1;
  328. runParamInfo.superaddition = setParamInfo.superaddition1;
  329. runParamInfo.lockTime = setParamInfo.lockTime1;
  330. realTimeData.firstDose = setParamInfo.firstDose * 10;
  331. realTimeData.surplusDose = setParamInfo.totalDose * 10;
  332. //realTimeData.inputDose = ( setParamInfo.totalDose * 10 - realTimeData.surplusDose );
  333. realTimeData.inputDose = inputDose_bf; //20170415
  334. realTimeData.superaddition = 0;
  335. }
  336. }