| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- /*--------------------------------------------------------------------------------------
- * @file TypeDefine.c
- * @author ZhangJing
- * @version base on stm32f0x
- * @date 2015.09.11
- * @brief 公共变量、函数定义
- ---------------------------------------------------------------------------------------*/
- #include <string.h>
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- #include "TypeDefine.h"
- #include "Driver.h"
- #include "LCDSetup.h"
- #include "DrawLCDGUI.h"
- #include "ControlSystem.h"
- #include "History.h"
- #include "ParameterSet.h"
- #include "SystemAlarm.h"
- #include "FM31256.h"
- //#include "ZigbeeNet.h"
- #include "FlashSetup.h"
- #include "ProgramData.h" // add by wulianwei
- TaskSchedulerFlagFrame TaskSchedulerFlag;//任务调度标志
- TaskSchedulerTimerFrame TaskSchedulerTimer;//任务调度定时器
- KeyTypeFrame KeyScanStatus;//按键扫描状态
- KeyFlagFrame KeyActionFlag;//按键动作标志
- KeyScanQtyFrame KeyScanQty; //按键扫描次数
- KeyFlagFrame MoreKeyActionFlag;//多键组合动作标志
- bool motorWorkState = MOTOR_WORK_OFF;//电机工作状态
- TimeFrame displayTimeBuf;//显示时间
- RTDFrame realTimeData;//实时数据
- uint8_t dateLimit = 0;//日期分为29,30,31
- VerifyInfoSetFrame verifyInfo;//病人住院信息确认
- SetParamFrame setParamInfo;//参数设置信息
- RunParamFrame runParamInfo;//运行参数,因为有两页参数设置相同的参数,所以要有个运行参数
- AlarmFrame alarmRecord;//报警信息存储
- SetTimeType emSetTimeChoose;//时间设置选择
- TimeFrame displayTimeBuf;//显示时间
- TimeFrame setTimeBuf;//显示时间
- uint8_t setPasswordBuf[3] = {1,2,0};//密码设置--设置密码界面变量,通用密码改为120
- uint8_t verifyPasswordBuf[3] = {0,0,0};//确认密码--设置密码界面变量
- EvaluateTransfuseType emEvaluateTransfuseChoose;//随访评价选择类型
- EvaluateTransfuseFrame evaluateTransfuseValue;//随访评价中的数据
- EngineeringModeType emEngineeringMode1Choose;//工程控制画面1设置选择类型
- EngineeringModeType emEngineeringMode3Choose;//工程控制画面3设置选择类型
- EngineeringModeFrame EngineeringModeValue;//工程模式中的数据
- PictureEnterType emPictureRunState = FirstEnter;//页面运行状态,是首次进入,还是有数据更新
- SpeakerWorkType HornWorkStep; //喇叭工作类型
- SpeakerWorkType speakerWorkStep;//蜂鸣器工作类型
- SpeakerWorkType speakerWorkStep = emSpeakerNoneWork;//蜂鸣器工作步骤
- SpeakerType sysPromptToneType = SoundOff;//系统提示音类型
- SpeakerType SysHornToneType;
- uint8_t sysPromptToneCounts = 0;//提示音响的次数
- uint8_t testDispCounts = 0;//测试页面数据次数
- extern uint16_t inputDose_bf; //已输入量备份
- extern uint8_t SetParametersAgain ; //运行过程中重新设置参数标志
- uint8_t FirstSurplusDose = 0; //堵塞时首次量剩余量
- uint8_t PCASurplusDose = 0; //堵塞时PCA量剩余量
- /*********************************************************************************
- * Function: Delay_ms
- * Object: Inserts a delay time.
- * 输入: nCount: specifies the delay time length (time base 1 ms).
- * 输出: 无
- * 备注:
- **********************************************************************************/
- void Delay_ms(uint32_t nCount)
- {
- TaskSchedulerTimer.delayTimer = nCount;
- while(TaskSchedulerTimer.delayTimer != 0)
- {
- }
- }
- /***************************************
- *
- * Function: void ReadInputTotalDose(void)
- * Object: 从FM31256中读取输入总量的历史数据
- * 输入: 无
- * 输出: 无
- * 备注:
- ***************************************/
- void ReadInputTotalDose(void)
- {
- uint8_t InputTotalDoseBuff[4];
- //Read_Multi31256RAM( HISTORY31256_DATA_InputTotalDose, InputTotalDoseBuff, 4 );
- FlashReadOperate( InputTotalDoseBuff,4,HISTORY31256_DATA_InputTotalDose );
- realTimeData.InputTotalDose=0;
- realTimeData.InputTotalDose=(((uint32_t)InputTotalDoseBuff[0]<<24) + ((uint32_t)InputTotalDoseBuff[1]<<16) + ((uint32_t)InputTotalDoseBuff[2]<<8) + ((uint32_t)InputTotalDoseBuff[3]));
- }
- /*********************************************************************************
- * Function: SystemSWInit
- * Object: 系统软件初始化
- * 输入: 无
- * 输出: 无
- * 备注: 1、开机系统进行初始化时将全局变量进行初始化
- * 2、读取FM31256中存储的参数
- * 3、读取存储的历史数据第一条
- **********************************************************************************/
- void SystemSWInit( void )
- {
- uint8_t InputTotalDoseBuff[4];
- (void) memset (&realTimeData, 0, sizeof(realTimeData)); //将realTimeData数据清零
- (void) memset (&setParamInfo, 0, sizeof(setParamInfo)); //将setParamInfo数据清零
- (void) memset (¶mRecordBuf, 0, sizeof(paramRecordBuf)); //将paramRecordBuf数据清零
- (void) memset (&historyRecordBuf, 0, sizeof(paramRecordBuf)); //将historyRecordBuf数据清零
- (void) memset (&historyRecord, 0, sizeof(historyRecord)); //将historyRecord数据清零
- /*按键工作状态,用来判断消抖*/
- KeyScanStatus.keyPower = emKeyActionWait;
- KeyScanStatus.keyPS = emKeyActionOff;
- KeyScanStatus.keyAirout = emKeyActionOff;
- KeyScanStatus.keyEnter = emKeyActionOff;
- KeyScanStatus.keyPlus = emKeyActionWait;
- KeyScanStatus.keyMinus = emKeyActionOff;
- KeyScanStatus.keyRunPause = emKeyActionOff;
- KeyScanStatus.keyPCA = emKeyActionOff;
-
- /*用计数方式扫描按键按下状态,按键分为长按短按连续按下*/
- KeyScanQty.keyEnter = 0;
- KeyScanQty.keyRunPause = 0;
- KeyScanQty.keyPlus = 0;
- KeyScanQty.keyMinus = 0;
- KeyScanQty.keyPower = 0;
- KeyScanQty.keyAirout = 0;
- KeyScanQty.keyPS = 0;
- KeyScanQty.keyPCA = 0;
-
- /*按键扫描消抖时长,全部消抖都为定长,按消抖次数(KeyScanQty)判断是长按还是短按*/
- TaskSchedulerTimer.powerKeyScanTimer = 0;//上电时不让有消抖处理,否则会出现开机误操作的情况
- TaskSchedulerTimer.enterKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.runPauseKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.airoutKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.psKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.plusKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.minusKeyScanTimer = KEY_TIMER_SCAN;
- TaskSchedulerTimer.pcaKeyScanTimer = KEY_TIMER_SCAN;
-
- /*任务标志位初始化*/
- TaskSchedulerFlag.initFinishFlag = TASK_FLAG_WAIT;
- TaskSchedulerFlag.zigbeeRecvFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.zigbeeXmitFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.zigbeeComReadFlag = TASK_FLAG_WAIT;
- TaskSchedulerFlag.zigbeeInNetFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.zigbeeETXmitFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.historyRequestFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.historyReponseFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.pressureConvertFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.forceConvertFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.fromSlaveRecvFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.toSlaveXmitFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.motorRunFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.motorStopFlag = TASK_FLAG_SET;//默认是置位状态
- TaskSchedulerFlag.motorSelfTestFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.ipnutFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.timeReadFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.lockDispFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.hostXmitFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.unlockPasswordFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.rtdUpdateFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.speakerFlag = TASK_FLAG_SET;//TASK_FLAG_CLEAR;
- TaskSchedulerFlag.silenceFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.pcaLockFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.pcaCountDispFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.pcaLockTimeFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.batLowPrepareFlag = TASK_FLAG_CLEAR;
- // TaskSchedulerFlag.autoPowerOffFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.sysPowerOffFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.callFunctionFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.lcdBlackFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.lcdFlashFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.lcdBlackFlashFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.sysStandbyFlag = TASK_FLAG_WAIT;
- TaskSchedulerFlag.limitJudgeFlag = TASK_FLAG_SET;
- TaskSchedulerFlag.sensorPWHallFlag = TASK_FLAG_SET;//传感器电源-霍尔打开
- TaskSchedulerFlag.sensorPWPressureFlag = TASK_FLAG_SET;//传感器电源-压力打开
- TaskSchedulerFlag.sensorPWBatteryFlag = TASK_FLAG_CLEAR;//传感器电源-电压打开
- TaskSchedulerFlag.testDispFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.batteryVoltHeaderFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.PCAOneTimeFlag = TASK_FLAG_WAIT;
- TaskSchedulerFlag.IrregularShutdownFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.JamSelfcheckingFlag = TASK_FLAG_WAIT;//堵塞自检标志等待
- TaskSchedulerFlag.PasswordTimeOverFlag = TASK_FLAG_WAIT;
- TaskSchedulerFlag.LimitBeginsTime = 0; //极限T1计时
- TaskSchedulerFlag.EnterDelayFlag = TASK_FLAG_CLEAR;//enter按键长按开始延时标志
- TaskSchedulerFlag.HistoryDontSetFlag = TASK_FLAG_CLEAR;//住院号未设置
- TaskSchedulerFlag.AirOutFlag = TASK_FLAG_CLEAR;//排气标志清除
- TaskSchedulerFlag.AlarmInitFlag = TASK_FLAG_CLEAR;
- TaskSchedulerFlag.pcaCountFlashFlag = TASK_FLAG_CLEAR;//PCA计数闪烁标志用来进行闪烁计时使用
- TaskSchedulerFlag.PCATimerFlashFlag = TASK_FLAG_CLEAR;//PCA锁时闪烁标志
-
- /********固定频率刷新,也跟随电机停止刷新*********/
- TaskSchedulerFlag.LcdLogoFlag = TASK_FLAG_CLEAR;//屏幕上方标志分时闪烁进入刷新标志
- TaskSchedulerFlag.PCATimerFlashFlag1 = TASK_FLAG_CLEAR;//屏幕中PCA锁时时间闪烁刷新标志
- TaskSchedulerFlag.lcdFlashFlag1 = TASK_FLAG_CLEAR;//PCA有无效次数闪烁刷新标志
- TaskSchedulerFlag.MqttSendFlag = TASK_FLAG_SET;//Mqtt发送标志 add by wulianwei
- /****************************************/
-
-
- TaskSchedulerTimer.delayTimer = 0;
- TaskSchedulerTimer.EnterDelayTimer = EnterDelay_TIMER;
- TaskSchedulerTimer.pcaLockTimer = 0;
- TaskSchedulerTimer.initFinishTimer = TRI_SECOND_TIMER;
- TaskSchedulerTimer.rtdXmitTimer = TASK_TIMER_XMIT_RTD;
- TaskSchedulerTimer.timeReadTimer = ONE_SECOND_TIMER;
- TaskSchedulerTimer.pressureConvertTimer = TASK_TIMER_PRES_CONV;
- // TaskSchedulerTimer.dispAutoJumpTimer = DISP_TIME_AUTO_JUMP;
- TaskSchedulerTimer.lockDispTimer = DISP_TIME_LOCK_JUMP;
- TaskSchedulerTimer.sysRunTestTimer = SYS_RUN_TEST_TIMER;
- TaskSchedulerTimer.alarmCollectTimer = ALARM_COLLECT_TIMER;
- TaskSchedulerTimer.totalDoseOneHourTimer = ONE_HOUR_TIMER;
- TaskSchedulerTimer.motorSignalCollectTimer = MOTOR_TESTSELF_TIMER;
- TaskSchedulerTimer.motorSelfTestTimer = MOTOR_TESTSELF_TIMER;//电机自检时间
- TaskSchedulerTimer.motorStopTimer = InfusionStopTimer;//电机停止等待时间
- TaskSchedulerTimer.hostXmitTimer = ONE_MSEC_TIMER;
- TaskSchedulerTimer.lockPassWordTimer = THREE_MINUTE_TIMER;
- TaskSchedulerTimer.batLowPrepareDispTimer = ONE_SECOND_TIMER;
- TaskSchedulerTimer.universalTimer = TWO_SECOND_TIMER;//通用计时
- TaskSchedulerTimer.speakerTimer = ONE_SECOND_TIMER;//蜂鸣器计时
- TaskSchedulerTimer.speakerWaitTimer = THIRTY_SECOND_TIMER;//蜂鸣器等待计时
- // TaskSchedulerTimer.autoPowerOffTimer = THIRTY_MINUTE_TIMER;//自动关机计时
- TaskSchedulerTimer.lcdBlackCloseTimer = FIFTEEN_SECOND_TIMER;//TWO_SECOND_TIMER;//LCD背光关闭计时
- TaskSchedulerTimer.alarmLCDFlashTimer = TEN_SECOND_TIMER;//报警LCD闪屏次数显示计时
- TaskSchedulerTimer.sysStandbyTimer = TEN_SECOND_TIMER;//系统休眠计时
- TaskSchedulerTimer.hostPowerSaveTimer = TEN_SECOND_TIMER;//主芯片节能计时
- TaskSchedulerTimer.batteryVoltTimer = FIFTEEN_SECOND_TIMER;//电池电压采集计时
- TaskSchedulerTimer.pcaOneHourTimer = ONE_HOUR_TIMER;//有效次数>2次在1小时内疼痛不足报警
- TaskSchedulerTimer.JamSelfcheckingTimer = FIVE_MINUTE_TIMER;//堵塞自检计时5min
- TaskSchedulerTimer.PainAssessmentUploadTimer = ONE_SECOND_TIMER;//疼痛评价确认上传时间,假时间
- TaskSchedulerFlag.StartToRunDontSend = SendWait;//长数据包发送等待标志
-
- TaskSchedulerTimer.pcaCountsFlashTimer = THREE_MSEC_TIMER;//PCA计数闪烁计时,
- TaskSchedulerTimer.ModuleInitTimer = FIFTEEN_SECOND_TIMER; //TCP检测计时 add by wulianwei
- TaskSchedulerTimer.MQTTSendTimer = TASK_TIMER_XMIT_RTD;// mqtt数据发送定时 add by wulianwei
- pca_count = 0; //开机或者重新设值参数一小时内PCA按压次数清零
-
- /*报警记录清零*/
- AlarmRecord.MechanicalFault = ALARM_OFF;
- AlarmRecord.NonePillCase = ALARM_OFF;
- AlarmRecord.BubbleFault = ALARM_OFF;
- AlarmRecord.LineLost = ALARM_OFF;
- AlarmRecord.JamFault = ALARM_OFF;
- AlarmRecord.MaxFault = ALARM_OFF;
- AlarmRecord.InputTotal = ALARM_OFF;
- sysAlarmFlag.Zhentongxiaoguo = ALARM_OFF;
-
- SysHornToneType = SoundWate;
-
- SysAlarmJudge.JamFaultJudgeFlag = TASK_FLAG_CLEAR;
- SysAlarmJudge.BubbleFaultJudgeFlag = TASK_FLAG_CLEAR;
- SysAlarmJudge.NonePillCaseJudgeFlag = TASK_FLAG_CLEAR;
- SysAlarmJudge.VoltLowestJudgeFlag = TASK_FLAG_CLEAR;
- SysAlarmJudge.JamFaultJudgeCounts = 0;
- SysAlarmJudge.BubbleFaultJudgeCounts = 0;
- SysAlarmJudge.NonePillCaseJudgeCounts = 0;
- SysAlarmJudge.VoltLowestJudgeCounts = 0;
-
- emSetTimeChoose = Year;
- verifyInfo.modifyInfoType = HOSPITALNO_SELECTED;
- setParamInfo.emModifyParam = TotalDose;
-
- emEvaluateTransfuseChoose = Pruritus;//随访评价选项
- emEngineeringMode3Choose = DeviceIDChoose;
- emEngineeringMode1Choose = SickroomQty;
-
- TotalDoesChange0 = 0;//工程模式输注总量变化1变0
- TotalDoesChange1 = 0;//工程模式输注总量变化0变1
-
- realTimeData.stateRun = SelfTest;//StartWork;//系统运行状态-开始工作
- realTimeData.ctlSlaveRun = StartWork;//从机运行状态-开始工作
- sysPromptToneType = SoundOff;
-
- emDisplayPicture = ClearDisp;
- emCurrentPicture = ClearDisp;
- emSysWorkStep = EnterPowerON;
-
- displayTimeBuf.year = 2021;
- displayTimeBuf.month = 1;
- displayTimeBuf.date = 1;
- displayTimeBuf.hour = 0;
- displayTimeBuf.minute = 0;
- displayTimeBuf.seconds = 0;
-
- realTimeData.batteryVolt = 255;
-
- LCDInit();
- LCDClear( GRAY0 );
- GetCurDateTimeFromRTC();//上电1s以后再读时间,否则影响开机速度
- FlashReadOperate( paramRecordBuf,2,((uint32_t)0x0806407E) );
- if(paramRecordBuf[0] == 0x0A)
- {
- ReadParameterRecord();//读出参数
- }
- else
- {
- WriteInitParameterRecord();
- ReadParameterRecord();//读出参数
- InputTotalDoseBuff[0]=00;
- InputTotalDoseBuff[1]=00;
- InputTotalDoseBuff[2]=00;
- InputTotalDoseBuff[3]=00;
- FlashWriteOperate( InputTotalDoseBuff,4,HISTORY31256_DATA_InputTotalDose );
- WriteInitProgramData();//初始化程序参数, add by wulianwei
- }
-
- // ReadParameterRecord();//读出参数
- ReadHistoryRecordQTY();//读出历史数据现有数量
- if(historyRecordQTY>=10)
- {
- if(historyRecordPointer == 0)
- {
- historyRecord.readIndex = (historyRecordQTY-1);
- }
- else
- {
- historyRecord.readIndex = historyRecordPointer-1;
- }
- }
- else
- {
- historyRecord.readIndex = (historyRecordQTY-1);
- }
- // historyRecord.readIndex = (historyRecordQTY-1); //师进赏修改为读出历史数据为最新的一条 2020.4.2
- ReadHistoryRecord();//读一条历史数据
- ReadInputTotalDose();//读取FM31256中存储的输入总量数据
-
- ReadProgramData();// 读出程序参数 add by wulianwei
- (*classification)++;//输注次数加一 add by wulianwei
- if( EngineeringModeValue.networkState == ENGINEERINGMODE_OFF )
- {
- registInfo->flag='N'; //设置设备未注册
- }
- WriteProgramData();
-
-
- }
- /*********************************************************************************
- * Function: RunParamUpdate
- * Object: 运行参数更新
- * 输入: 无
- * 输出: 无
- * 备注: 1、为避免在运行中会对设置参数修改,在运行前对实时运行数据进行装载更新
- * 2、emSysWorkStep工作步骤必须在参数设置时
- **********************************************************************************/
- void RunParamUpdate( void )
- {
- if( emSysWorkStep == EnterSetParam )
- {
- runParamInfo.totalDose = setParamInfo.totalDose * 10;
- runParamInfo.firstDose = setParamInfo.firstDose * 10;
- runParamInfo.continueDose = setParamInfo.continueDose1;
- runParamInfo.limitDose = setParamInfo.limitDose1;
- runParamInfo.superaddition = setParamInfo.superaddition1;
- runParamInfo.lockTime = setParamInfo.lockTime1;
- realTimeData.firstDose = setParamInfo.firstDose * 10;
- realTimeData.surplusDose = setParamInfo.totalDose * 10;
- //realTimeData.inputDose = ( setParamInfo.totalDose * 10 - realTimeData.surplusDose );
- realTimeData.inputDose = inputDose_bf; //20170415
- realTimeData.superaddition = 0;
- }
- }
|