oai问题汇总

mme证书过期

证书一年过期后,需要把旧的证书删掉(目录/usr/local/etc/oai/freeDiameter/所有mme的证书文件),然后重新生成新的证书就可以成功更新证书。

docker中hss数据库无法使用问题
步骤一:
如果将epc安装在docker(mysql与hss,mme安装在一起)内,且宿主机也安装了mysql,此时hss运行会出现权限的错误
mysqld: [ERROR] Fatal error in defaults handling. Program aborted! mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 13 - Permission denied) mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

解决办法:

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ 
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld && service mysql start

参考网址:https://github.com/moby/moby/issues/7512#issuecomment-61787845

步骤二:
"nano.openair4G.eur"在数据库oai_db表mmeidentity中有对应字段,若是改成其他主机名,需要添加或者修改mysql数据库对应字段,否则会出现错误
Function s6a_init (&mme_config) has failed returning 22

void BreathPhaseDispose(void) { //s_EBreathPhs 此时还是当前相位,还没切换为新的相位 switch (s_EBreathPhs) { case BPHS_INSP: { //add by abc 排除气流抖动误触发等情况 // if (s_RespCalculations.InspTimeCnt < 0.2f / RESP_PARAM_SAMPLE_TIME || s_RespCalculations.InspTimeCnt > 10 / RESP_PARAM_SAMPLE_TIME) // { // break; // } s_RespParameters.flow_InspPeak = s_RespCalculations.InspPeakFlow; s_RespParameters.flow_InspPeakRaw = s_RespCalculations.InspRawPeakFlow; s_RespParameters.p_Plat = FilterTwoPole_GetValue(&s_FilterPatientPressure); //FilterDelay_Get_Last_Value( &s_FilterDelayedPressure ); if (s_RespCalculations.InspTimeCnt > 0) { s_RespParameters.p_MeanInsp = s_RespCalculations.InspPressSum / s_RespCalculations.InspTimeCnt; s_RespParameters.p_SqrtMeanInsp = s_RespCalculations.InspSqrtPressSum / s_RespCalculations.InspTimeCnt; } s_RespParameters.VTI_Raw = s_RespCalculations.InspRawFlowSum * 1000.0f / 60.0f * RESP_PARAM_SAMPLE_TIME; //ml s_RespParameters.VTI = s_RespCalculations.InspFlowSum * 1000.0f / 60.0f * RESP_PARAM_SAMPLE_TIME; s_RespParameters.TimeInsp = s_RespCalculations.InspTimeCnt * RESP_PARAM_SAMPLE_TIME; s_RespParameters.VTI_Leak = s_RespParameters.flowLeak_RT; ven_event_inspflowpeak_cal(s_RespParameters.flow_InspPeak, 1); break; } case BPHS_EXP: { //add by abc 排除气流抖动误触发等情况 // if (s_RespCalculations.ExpTimeCnt < 0.2f / RESP_PARAM_SAMPLE_TIME || s_RespCalculations.ExpTimeCnt > 10 / RESP_PARAM_SAMPLE_TIME) // { // break; // } s_RespParameters.flow_ExpPeak = s_RespCalculations.ExpPeakFlow; s_RespParameters.flow_ExpPeakRaw = s_RespCalculations.ExpRawPeakFlow; s_RespParameters.p_PEEP = FilterTwoPole_GetValue(&s_FilterPatientPressure); //FilterDelay_Get_Last_Value( &s_FilterDelayedPressure ); if (s_RespCalculations.ExpTimeCnt > 0) { s_RespParameters.p_MeanExp = s_RespCalculations.ExpPressSum / s_RespCalculations.ExpTimeCnt; s_RespParameters.p_SqrtMeanExp = s_RespCalculations.ExpSqrtPressSum / s_RespCalculations.ExpTimeCnt; } s_RespParameters.VTE_Raw = -s_RespCalculations.ExpRawFlowSum * 1000.0f / 60.0f * RESP_PARAM_SAMPLE_TIME; //ml s_RespParameters.VTE = -s_RespCalculations.ExpFlowSum * 1000.0f / 60.0f * RESP_PARAM_SAMPLE_TIME; // s_RespParameters.VTE = s_RespParameters.VTI;//直接放VTI s_RespParameters.VTE = (u16)Avg_Filter(s_RespParameters.VTE, &VTE_Avg_Filter_Para); s_RespParameters.TimeExp = s_RespCalculations.ExpTimeCnt * RESP_PARAM_SAMPLE_TIME; s_RespParameters.VTE_Leak = s_RespParameters.flowLeak_RT; // Update minute ventilation and frequency s_RespCalculations.TotalBreathTimeCnt -= s_RespCalculations.BreathTimeCnt[s_RespCalculations.BreathID]; s_RespCalculations.BreathTimeCnt[s_RespCalculations.BreathID] = s_RespCalculations.InspTimeCnt + s_RespCalculations.ExpTimeCnt; s_RespCalculations.TotalBreathTimeCnt += s_RespCalculations.BreathTimeCnt[s_RespCalculations.BreathID]; s_RespCalculations.TotalVTE -= s_RespCalculations.VTE[s_RespCalculations.BreathID]; s_RespCalculations.VTE[s_RespCalculations.BreathID] = (INT32S)s_RespParameters.VTE; s_RespCalculations.TotalVTE += s_RespCalculations.VTE[s_RespCalculations.BreathID]; s_RespCalculations.BreathID += 1; if (s_RespCalculations.BreathID >= FMV_BREATHS) { s_RespCalculations.BreathID = 0; } s_RespParameters.MVE = (FP32)s_RespCalculations.TotalVTE / s_RespCalculations.TotalBreathTimeCnt / RESP_PARAM_SAMPLE_TIME * 60.0f / 1000.0f; //chg by abc 在第FMV_BREATHS个呼吸周期之前,取平均的呼吸个数不为FMV_BREATHS if(g_sVentRun.uBreathCount >= FMV_BREATHS) { s_RespParameters.RespRate = 60.0f / (FP32)s_RespCalculations.TotalBreathTimeCnt / RESP_PARAM_SAMPLE_TIME * FMV_BREATHS; } else { s_RespParameters.RespRate = 60.0f / (FP32)s_RespCalculations.TotalBreathTimeCnt / RESP_PARAM_SAMPLE_TIME * (g_sVentRun.uBreathCount + 1); } //通气以来的时间unit:s s_RespParameters.TimeVent = Vent_GetTherapyTime(); /* 2024.3.14 added by Chaoqi * Parameter "s_RespParameters.Apnea_Count" is used to store total apnea. * Added new parameter "Apnea_Temp" to instead of "s_RespParameters.Apnea_Count" here. */ if (s_RespParameters.TimeVent) { uint32 Apnea_Temp = 0; //通气以来的窒息次数 /* 2024.03.28 changed by Chaoqi * 2024.04.07 changed by Chaoqi * There will be an error,when parameter "s_RespParameters.Apnea_Count" is less than the sum of "OAI" and "CAI". * 2024.04.10 changed by Tianyongchang * Add option,the UIA,OAI,CAI and Hi data limilt can be canceled. */ s_RespParameters.Apnea_Count = ven_get_event_apnea_count(); s_RespParameters.Hypopnea_Count = ven_get_hypopnea_count(); if (s_RespParameters.Apnea_Count > (Vent_GetApneaCount(VEN_FOT_C) + Vent_GetApneaCount(VEN_FOT_O))) { Apnea_Temp = s_RespParameters.Apnea_Count - Vent_GetApneaCount(VEN_FOT_C) - Vent_GetApneaCount(VEN_FOT_O); } else { Apnea_Temp = 0; } /* 2025.05.19,changed by Chaoqi, * If therapy time more than an hour,display Apean and Hypopnea index */ if (s_RespParameters.TimeVent >= 3600) { s_RespParameters.UAI = (FP32)Apnea_Temp / (s_RespParameters.TimeVent / 3600); s_RespParameters.CAI = (FP32)Vent_GetApneaCount(VEN_FOT_C) / (s_RespParameters.TimeVent / 3600); s_RespParameters.OAI = (FP32)Vent_GetApneaCount(VEN_FOT_O) / (s_RespParameters.TimeVent / 3600); s_RespParameters.HI = (FP32)s_RespParameters.Hypopnea_Count / (s_RespParameters.TimeVent / 3600); } else { s_RespParameters.UAI = Apnea_Temp; s_RespParameters.CAI = Vent_GetApneaCount(VEN_FOT_C); s_RespParameters.OAI = Vent_GetApneaCount(VEN_FOT_O); s_RespParameters.HI = s_RespParameters.Hypopnea_Count; } // s_RespParameters.UAI = (FP32)Apnea_Temp / (s_RespParameters.TimeVent / 3600); //Number of apneas per hour // //如果时间小于1h,那么ai就等于窒息次数 // #if 0 // s_RespParameters.UAI = s_RespParameters.UAI > Apnea_Temp ? Apnea_Temp : s_RespParameters.UAI; // #endif // // //通气以来的中枢性窒息次数 // Apnea_Temp = Vent_GetApneaCount(VEN_FOT_C); // s_RespParameters.CAI = Apnea_Temp / (s_RespParameters.TimeVent / 3600); //Number of apneas per hour // //如果时间小于1h,那么cai就等于窒息次数 // #if 0 // s_RespParameters.CAI = s_RespParameters.CAI > Apnea_Temp ? Apnea_Temp : s_RespParameters.CAI; // #endif // // //通气以来的阻塞性窒息次数 // Apnea_Temp = Vent_GetApneaCount(VEN_FOT_O); // s_RespParameters.OAI = (FP32)Apnea_Temp / (s_RespParameters.TimeVent / 3600); //Number of apneas per hour // //如果时间小于1h,那么oai就等于窒息次数 // #if 0 // s_RespParameters.OAI = s_RespParameters.OAI > Apnea_Temp ? Apnea_Temp : s_RespParameters.OAI; // #endif // // s_RespParameters.HI = (FP32)s_RespParameters.Hypopnea_Count / (s_RespParameters.TimeVent / 3600); //Number of hypopnea per hour // //如果时间小于1h,那么hi就等于低通气次数 // #if 0 // s_RespParameters.HI = s_RespParameters.HI > s_RespParameters.Hypopnea_Count ? s_RespParameters.Hypopnea_Count : s_RespParameters.HI; // #endif } else { s_RespParameters.UAI = 0; s_RespParameters.CAI = 0; s_RespParameters.OAI = 0; s_RespParameters.HI = 0; } // s_RespParameters.AHI = s_RespParameters.UAI + s_RespParameters.CAI + s_RespParameters.OAI + s_RespParameters.HI; s_RespParameters.AHI = s_RespParameters.CAI + s_RespParameters.OAI + s_RespParameters.HI; AddTrigType(Vent_IsPatientTrig()); s_RespParameters.f_Trig = CountNumberOfPatientTrigs(s_RespParameters.RespRate); if (g_sVentRun.iSampleTime > VENT_SAMPLE_TIME) { if (ven_get_event_status() == VEN_EVENT_STATUS_HYPOPNEA) { g_sVentRun.iHiTrigger++; } else if (ven_get_event_status() == VEN_EVENT_STATUS_APNEA) { /* 2024.3.27 changed by Chaoqi */ g_sVentRun.iAiTrigger++; } } else if (g_sVentRun.iSampleTime < 60) { s_RespCalculations.MVE_LPF = s_RespParameters.MVE; } else { s_RespCalculations.MVE_LPF = s_RespCalculations.MVE_LPF * 0.95f + s_RespParameters.MVE * 0.05f; } break; } case BPHS_START: { s_RespParameters.p_PEEP = FilterDelay_Get_Last_Value(&s_FilterDelayedPressure); //FilterTwoPole_GetValue(&s_FilterPatientPressure); break; } default: { break; } } } 帮助我详细理解
最新发布
11-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值