From 4ee5cbfb86e042c2f3eba6fcbd35f6923c7c18ca Mon Sep 17 00:00:00 2001 From: zhaojingkui <1553836110@qq.com> Date: Thu, 20 Feb 2025 23:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=AC=A1=E7=BA=A7?= =?UTF-8?q?=E9=85=8D=E7=94=B5=E7=8A=B6=E6=80=81,=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=A1=A8,=E8=AE=BE=E5=A4=87=E4=B8=8A?= =?UTF-8?q?=E7=94=B5=E6=8C=87=E4=BB=A4=E7=9A=84=E8=AE=A2=E9=98=85\?= =?UTF-8?q?=E8=A7=A3=E6=9E=90\=E5=8F=91=E5=B8=83=E7=AD=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/msg/uPower_currentState_st.json | 66 +++++----- data/msg/uPower_fcsState_st.json | 48 ++++---- data/msg/uPower_liBatState_st.json | 50 ++++---- src/pPowerManger/PowerManger.cpp | 119 +++++++++++------- src/pPowerManger/SQLiteDB.cpp | 176 ++++++++++++++++++++++++++- src/pPowerManger/SQLiteDB.h | 15 ++- test/SQLiteDBTest.cpp | 15 ++- 7 files changed, 355 insertions(+), 134 deletions(-) diff --git a/data/msg/uPower_currentState_st.json b/data/msg/uPower_currentState_st.json index 56887b9..41648bf 100644 --- a/data/msg/uPower_currentState_st.json +++ b/data/msg/uPower_currentState_st.json @@ -1,47 +1,47 @@ { - "HVABFTDev123Cur_uint16": 65491, - "HVABactCur_uint16": 65368, + "HVABFTDev123Cur_uint16": 0, + "HVABactCur_uint16": 0, "HVABbowRudCur_uint16": 0, - "HVABbusBCur_uint16": 46080, - "HVABbusBVol_uint16": 127, - "HVABmastSteGeaCur_uint16": 127, + "HVABbusBCur_uint16": 0, + "HVABbusBVol_uint16": 0, + "HVABmastSteGeaCur_uint16": 0, "HVABopenWaterCur_uint16": 0, - "HVABxczCur_uint16": 1792, - "HVBBCCUCur_uint16": 65492, - "HVBBFCSSecurSysCur_uint16": 65368, - "HVBBbatInsCur_uint16": 24700, - "HVBBbowLowVolDisBoxCur_uint16": 25073, - "HVBBdcC1InsCur_uint16": 19436, - "HVBBemer2BusVol_uint16": 32768, + "HVABxczCur_uint16": 0, + "HVBBCCUCur_uint16": 0, + "HVBBFCSSecurSysCur_uint16": 0, + "HVBBbatInsCur_uint16": 0, + "HVBBbowLowVolDisBoxCur_uint16": 0, + "HVBBdcC1InsCur_uint16": 0, + "HVBBemer2BusVol_uint16": 0, "HVBBemerBatCur_uint16": 0, - "HVBBinsBusVol_uint16": 18176, - "HVBBplcCur_uint16": 127, - "HVBBreservedCur1_uint16": 127, - "HVBBreservedCur2_uint16": 127, - "HVBBunit4Cur_uint16": 19436, + "HVBBinsBusVol_uint16": 0, + "HVBBplcCur_uint16": 0, + "HVBBreservedCur1_uint16": 0, + "HVBBreservedCur2_uint16": 0, + "HVBBunit4Cur_uint16": 0, "HVBFTDev45Cur_uint16": 0, - "HVBbatGroupCur_uint16": 37, + "HVBbatGroupCur_uint16": 0, "HVBbowHVolDisBoxCur_uint16": 0, "HVBbusACur_uint16": 0, - "HVBbusAVol_uint16": 60617, + "HVBbusAVol_uint16": 0, "HVBdcDc5Cur_uint16": 0, - "HVBfbCur_uint16": 47824, - "HVBmotorCur_uint16": 32587, - "HVBpowerBusCur_uint16": 8394, - "HVBpowerBusVol_uint16": 32767, - "HVBreservedCur1_uint16": 60616, + "HVBfbCur_uint16": 0, + "HVBmotorCur_uint16": 0, + "HVBpowerBusCur_uint16": 0, + "HVBpowerBusVol_uint16": 0, + "HVBreservedCur1_uint16": 0, "HVBreservedCur2_uint16": 0, - "HVBreservedCur3_uint16": 60619, - "HVBsternRud1Cur_uint16": 39104, - "HVBsternRud2Cur_uint16": 32587, + "HVBreservedCur3_uint16": 0, + "HVBsternRud1Cur_uint16": 0, + "HVBsternRud2Cur_uint16": 0, "HVBtyzCur_uint16": 0, - "LVBBbowPZDevCur_uint16": 127, - "LVBBemerBatCur_uint16": 1792, + "LVBBbowPZDevCur_uint16": 0, + "LVBBemerBatCur_uint16": 0, "LVBBemerBusVol_uint16": 0, "LVBBinsBusCur_uint16": 0, "LVBBunit1Cur_uint16": 0, - "LVBBunit2Cur_uint16": 28672, - "LVBBunit3Cur_uint16": 41536, - "LVBBunit5Cur_uint16": 19436, - "LVBinsBusVol_uint16": 193 + "LVBBunit2Cur_uint16": 0, + "LVBBunit3Cur_uint16": 0, + "LVBBunit5Cur_uint16": 0, + "LVBinsBusVol_uint16": 0 } \ No newline at end of file diff --git a/data/msg/uPower_fcsState_st.json b/data/msg/uPower_fcsState_st.json index 2d143e9..31141fb 100644 --- a/data/msg/uPower_fcsState_st.json +++ b/data/msg/uPower_fcsState_st.json @@ -1,30 +1,30 @@ { - "backpressure1_fp32": -261504.0, - "backpressure2_fp32": 1.1690343649017501e-38, - "ch4oConcent1_fp32": -641600.0, - "ch4oConcent2_fp32": 1.1690343649017501e-38, + "backpressure1_fp32": 0.0, + "backpressure2_fp32": 0.0, + "ch4oConcent1_fp32": 0.0, + "ch4oConcent2_fp32": 0.0, "ch4o_fp32": 0.0, - "excTemp_fp32": 3.4331812375958018e-43, - "faultCode1_uint16": 1649, - "faultCode2_uint16": 38944, + "excTemp_fp32": 0.0, + "faultCode1_uint16": 0, + "faultCode2_uint16": 0, "faultCode3_uint16": 0, - "fcuCurIns_fp32": null, - "fcuCurPower_fp32": 1.1754708090080869e-38, - "fcuCur_fp32": -282240.0, - "fcuFaultLeve_uint8": 201, - "fcuOutIns_fp32": 1.1690343649017501e-38, - "fcuOutPower_fp32": 6.9238340671194006e+19, - "fcuState_uint8": 32, - "fcuVolIns_fp32": 7.2147666030475346e+19, - "fcuVolPower_fp32": 1.1690343649017501e-38, - "fcuVol_fp32": 1.1690343649017501e-38, + "fcuCurIns_fp32": 0.0, + "fcuCurPower_fp32": 0.0, + "fcuCur_fp32": 0.0, + "fcuFaultLeve_uint8": 0, + "fcuOutIns_fp32": 0.0, + "fcuOutPower_fp32": 0.0, + "fcuState_uint8": 0, + "fcuVolIns_fp32": 0.0, + "fcuVolPower_fp32": 0.0, + "fcuVol_fp32": 0.0, "flameDet_uint8": 0, - "h2Concent1_fp32": -658592.0, - "h2Concent2_fp32": 1.1690343649017501e-38, - "o2Concent1_fp32": 8.602403116674333e-40, + "h2Concent1_fp32": 0.0, + "h2Concent2_fp32": 0.0, + "o2Concent1_fp32": 0.0, "o2Concent2_fp32": 0.0, - "o2Level_fp32": 1.1690343649017501e-38, - "o2_fp32": -641600.0, - "powLimit_fp32": 1.1690343649017501e-38, - "powerGen_fp32": 1.8108811898653892e-39 + "o2Level_fp32": 0.0, + "o2_fp32": 0.0, + "powLimit_fp32": 0.0, + "powerGen_fp32": 0.0 } \ No newline at end of file diff --git a/data/msg/uPower_liBatState_st.json b/data/msg/uPower_liBatState_st.json index 4809148..b3e9fd4 100644 --- a/data/msg/uPower_liBatState_st.json +++ b/data/msg/uPower_liBatState_st.json @@ -1,38 +1,38 @@ { - "fcuCurToInsLimit1_uint8": 127, + "fcuCurToInsLimit1_uint8": 0, "fcuCurToinsLimit2_uint8": 0, - "insBatCurElect_uint16": 32587, - "insBatLimit_uint16": 60544, + "insBatCurElect_uint16": 0, + "insBatLimit_uint16": 0, "insBatSoc_uint8": 0, - "insBatTotalElect_uint16": 36880, - "insChargeState_uint8": 116, - "insCurSocHold1_uint8": 201, - "insCurSocHold2_uint8": 236, - "insCurSocHold3_uint8": 75, + "insBatTotalElect_uint16": 0, + "insChargeState_uint8": 0, + "insCurSocHold1_uint8": 0, + "insCurSocHold2_uint8": 0, + "insCurSocHold3_uint8": 0, "insCurrent_uint16": 0, - "insLinkVol_uint16": 22783, + "insLinkVol_uint16": 0, "insNegRelayState_uint8": 0, - "insNegRes_uint16": 60617, - "insPackVol_uint16": 32767, + "insNegRes_uint16": 0, + "insPackVol_uint16": 0, "insPosRelayState_uint8": 0, - "insPosRes_uint16": 8394, - "insfaultCode_uint8": 164, + "insPosRes_uint16": 0, + "insfaultCode_uint8": 0, "powBatCurElect_uint16": 0, "powBatSoc_uint8": 0, - "powBatTotalElect_uint16": 60544, - "powChargeState_uint8": 211, + "powBatTotalElect_uint16": 0, + "powChargeState_uint8": 0, "powCurSocHold1_uint8": 0, - "powCurSocHold2_uint8": 208, - "powCurSocHold3_uint8": 186, - "powCurToInsLimit1_uint8": 203, - "powCurToinsLimit2_uint8": 236, - "powCur_uint16": 3590, - "powLinkVol_uint16": 32587, - "powNegRelayState_uint8": 103, + "powCurSocHold2_uint8": 0, + "powCurSocHold3_uint8": 0, + "powCurToInsLimit1_uint8": 0, + "powCurToinsLimit2_uint8": 0, + "powCur_uint16": 0, + "powLinkVol_uint16": 0, + "powNegRelayState_uint8": 0, "powNegRes_uint16": 0, - "powPosRelayState_uint8": 208, + "powPosRelayState_uint8": 0, "powPosRes_uint16": 0, - "powerBatLimit_uint16": 32587, + "powerBatLimit_uint16": 0, "powerPackVol_uint16": 0, - "powfaultCode_uint8": 28 + "powfaultCode_uint8": 0 } \ No newline at end of file diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 55910bf..8fc7a92 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -49,7 +49,14 @@ PowerManger::PowerManger() msg_disLowBusFbMsg_Update_time = 0; connectState = 0; - + + m_pmCurrentState = {}; + m_currentDisBreakerState = {}; + m_targetDisBreakerState = {}; + m_currentDriverState = {}; + m_MSDriverCmd = {}; + m_subDisSysCmd = {}; + m_subDisSysState = {}; //初始化断路器状态 initControlCmd(); @@ -59,6 +66,10 @@ PowerManger::PowerManger() m_db->createPowerDataTables(); m_db->createStateTables(); m_db->createDisCcuSysTables(); + m_db->createDriversTables(VAR_TO_STR(m_currentDriverState)); + m_db->createDriversTables(VAR_TO_STR(m_subDisSysState)); + m_db->createDriversTables(VAR_TO_STR(m_subDisSysCmd)); + m_db->createDriversTables(VAR_TO_STR(m_MSDriverCmd)); //注册状态机 m_fsm.RegisterState("Init", 1, m_Inite_s1); @@ -98,11 +109,11 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail) { if(getMsCmdFromJson(m_msCmd,strJson)) { - cout << "get ms cmd:" << strJson << endl; + cout << "get ms cmd:" << strJson << endl; } else { - cout << "get ms cmd error:" << strJson << endl; + cout << MOOS::ConsoleColours::Red << "get ms cmd error:" << strJson << MOOS::ConsoleColours::reset << endl; } } //处理设备上电指令 @@ -110,7 +121,7 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail) { if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysCmd) < 0) { - cout << "get sub dis cmd error:" << strJson << endl; + cout << MOOS::ConsoleColours::Red << "get sub dis cmd error:" << strJson << MOOS::ConsoleColours::reset << endl; } } //处理设备状态反馈 @@ -118,7 +129,7 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail) { if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysState) < 0) { - cout << "get sub dis state error:" << strJson << endl; + cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << strJson << MOOS::ConsoleColours::reset << endl; } } @@ -175,25 +186,25 @@ bool PowerManger::Iterate() ccuOption(); //c. 上位机反馈 buildPowerSysReport(); + Notify(PM_TO_DB_SUBDISCMD,m_driver.saveDriverTableToJson(&m_subDisSysCmd)); + Notify(PM_TO_DB_EQUIPMENTSTATE,m_driver.saveDriverTableToJson(&m_currentDriverState)); + //d.保存到数据库 + writeDataToDB(); } /////////////////////// - string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd); - saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json"); + // string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd); + // saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json"); /////////////////////// - //4. 打印错误信息 - if(!m_udpComm.sError.empty()) - { - for(int i=0;iinsertStateData(m_stateData)) + return false; //AppCastingMOOSApp::PostReport(); //5. 清空UDP消息队列 - m_udpComm.clearMsgQueue(); - //6. 写入数据库 - writeDataToDB(); + m_udpComm.clearMsgQueue(); return(true); } @@ -315,18 +326,27 @@ bool PowerManger::ListenLoopUDP() } } } - // updatePmState(); + // 打印通信错误信息 + if(!m_udpComm.sError.empty()) + { + for(int i=0;iinsertStateData(m_stateData)) - return false; + // //写入配电系统状态 // if(!m_db->insertDisCcuData(m_pmCurrentState)) // return false; + //写入设备状态 + if(!m_db->insertDriverTables(m_currentDriverState,VAR_TO_STR(m_currentDriverState))) + return false; + if(!m_db->insertDriverTables(m_subDisSysState,VAR_TO_STR(m_subDisSysState))) + return false; + if(!m_db->insertDriverTables(m_subDisSysCmd,VAR_TO_STR(m_subDisSysCmd))) + return false; + if(!m_db->insertDriverTables(m_MSDriverCmd,VAR_TO_STR(m_MSDriverCmd))) + return false; + return true; } @@ -577,9 +600,10 @@ void PowerManger::printState(FSM_State st, string desp){ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) { PowerManger* pm = (PowerManger*)pData; + bool ok = true; //1. 检查通信是否正常 如果超时则进入故障状态 double StartTime = pm->GetAppStartTime(); - while (!pm->connectState == 5) + while (pm->connectState < 5) { MOOSPause(1000); pm->updateTime(); @@ -587,14 +611,14 @@ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) if(dft > 10) { pm->m_pmState = pm->m_Fault_s99; - pm->m_faultNum = 1; + pm->m_faultNum = 1; //通信故障 + ok = false; break; } string desp = "等待复合管控消息 : " + to_string(10-dft); pm->printState(fsm,desp); } //2. 检查复合管控器是否上报故障 如果故障则进入故障状态 - bool ok = true; if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 || pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 || pm->m_pmCurrentState.ccustate.fcuGZ_2H != 0 || @@ -604,13 +628,15 @@ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0) { ok = false; + pm->m_faultNum = 2; //能源故障 } + //3. 初始化系统为待机状态 + pm->initControlCmd(); + //4.判断关键断路器是否闭合 if(!ok) { pm->m_pmState = pm->m_Fault_s99; } - //3. 初始化系统为待机状态 - pm->initControlCmd(); pm->m_pmState = pm->m_Standby_s2; return 0; } @@ -701,6 +727,9 @@ void PowerManger::initControlCmd() m_msCmd.modCMD = 0; m_msCmd.powerCMD = 0; m_msCmd.workCMD = 0; + + //================初始化设备驱动指令======================== + } char PowerManger::getBreakerOption(char cmd) diff --git a/src/pPowerManger/SQLiteDB.cpp b/src/pPowerManger/SQLiteDB.cpp index ea28da2..e1aa135 100644 --- a/src/pPowerManger/SQLiteDB.cpp +++ b/src/pPowerManger/SQLiteDB.cpp @@ -17,6 +17,75 @@ bool SQLiteDB::bindParameters(sqlite3_stmt* stmt, const T& data) { return false; } +template<> +bool SQLiteDB::bindParameters(sqlite3_stmt* stmt, const DriverTable& data) +{ + int index = 1; + sqlite3_bind_int(stmt, index++, data.depth1); + sqlite3_bind_int(stmt, index++, data.depth2); + sqlite3_bind_int(stmt, index++, data.depth3); + sqlite3_bind_int(stmt, index++, data.overDeep1); + sqlite3_bind_int(stmt, index++, data.overDeep2); + sqlite3_bind_int(stmt, index++, data.ctd1); + sqlite3_bind_int(stmt, index++, data.ctd2); + sqlite3_bind_int(stmt, index++, data.soundVeloc); + sqlite3_bind_int(stmt, index++, data.commMast); + sqlite3_bind_int(stmt, index++, data.ins); + sqlite3_bind_int(stmt, index++, data.ntp); + sqlite3_bind_int(stmt, index++, data.inputWaterSensor1); + sqlite3_bind_int(stmt, index++, data.inputWaterSensor2); + sqlite3_bind_int(stmt, index++, data.inputWaterSensor3); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar1); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar2); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar3); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar4); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar5); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar6); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar7); + sqlite3_bind_int(stmt, index++, data.singleBeamSonar8); + sqlite3_bind_int(stmt, index++, data.forwardSonar); + sqlite3_bind_int(stmt, index++, data.DVL); + sqlite3_bind_int(stmt, index++, data.lowFreqSonar); + sqlite3_bind_int(stmt, index++, data.USBL); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet1); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet2); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet3); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet4); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet5); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet6); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet7); + sqlite3_bind_int(stmt, index++, data.bowWaterlnet8); + sqlite3_bind_int(stmt, index++, data.bowRudderDeploy); + sqlite3_bind_int(stmt, index++, data.bowRudderServo1); + sqlite3_bind_int(stmt, index++, data.bowRudderServo2); + sqlite3_bind_int(stmt, index++, data.bowCover1); + sqlite3_bind_int(stmt, index++, data.bowCover2); + sqlite3_bind_int(stmt, index++, data.bowCover3); + sqlite3_bind_int(stmt, index++, data.bowCover4); + sqlite3_bind_int(stmt, index++, data.bowCover5); + sqlite3_bind_int(stmt, index++, data.bowCover6); + sqlite3_bind_int(stmt, index++, data.waterInject); + sqlite3_bind_int(stmt, index++, data.mastLiftingServo); + sqlite3_bind_int(stmt, index++, data.buoyancyAdjust1); + sqlite3_bind_int(stmt, index++, data.buoyancyAdjust2); + sqlite3_bind_int(stmt, index++, data.buoyancyAdjust3); + sqlite3_bind_int(stmt, index++, data.buoyancyAdjust4); + sqlite3_bind_int(stmt, index++, data.buoyancyAdjust5); + sqlite3_bind_int(stmt, index++, data.sternRudderServo1); + sqlite3_bind_int(stmt, index++, data.sternRudderServo2); + sqlite3_bind_int(stmt, index++, data.sternRudderServo3); + sqlite3_bind_int(stmt, index++, data.sternRudderServo4); + sqlite3_bind_int(stmt, index++, data.thruster); + sqlite3_bind_int(stmt, index++, data.bowThrow); + sqlite3_bind_int(stmt, index++, data.sternThrow); + sqlite3_bind_int(stmt, index++, data.photoSensor); + sqlite3_bind_int(stmt, index++, data.electSensor); + sqlite3_bind_int(stmt, index++, data.launchControler); + sqlite3_bind_int(stmt, index++, data.sideSonar); + sqlite3_bind_int(stmt, index++, data.buoyage); + return true; +} + // 为ccuState特化实现 template<> bool SQLiteDB::bindParameters(sqlite3_stmt* stmt, const ccuState& data) { @@ -317,6 +386,84 @@ bool SQLiteDB::createPowerDataTables() { return true; } +bool SQLiteDB::createDriversTables(string tableName) +{ + if (!m_db) return false; + + string createTableSQL = "CREATE TABLE IF NOT EXISTS " + tableName + " (" + "timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now')), " + "DVL INTEGER DEFAULT 0, " + "USBL INTEGER DEFAULT 0, " + "bowCover1 INTEGER DEFAULT 0, " + "bowCover2 INTEGER DEFAULT 0, " + "bowCover3 INTEGER DEFAULT 0, " + "bowCover4 INTEGER DEFAULT 0, " + "bowCover5 INTEGER DEFAULT 0, " + "bowCover6 INTEGER DEFAULT 0, " + "bowRudderDeploy INTEGER DEFAULT 0, " + "bowRudderServo1 INTEGER DEFAULT 0, " + "bowRudderServo2 INTEGER DEFAULT 0, " + "bowThrow INTEGER DEFAULT 0, " + "bowWaterlnet1 INTEGER DEFAULT 0, " + "bowWaterlnet2 INTEGER DEFAULT 0, " + "bowWaterlnet3 INTEGER DEFAULT 0, " + "bowWaterlnet4 INTEGER DEFAULT 0, " + "bowWaterlnet5 INTEGER DEFAULT 0, " + "bowWaterlnet6 INTEGER DEFAULT 0, " + "bowWaterlnet7 INTEGER DEFAULT 0, " + "bowWaterlnet8 INTEGER DEFAULT 0, " + "buoyage INTEGER DEFAULT 0, " + "buoyancyAdjust1 INTEGER DEFAULT 0, " + "buoyancyAdjust2 INTEGER DEFAULT 0, " + "buoyancyAdjust3 INTEGER DEFAULT 0, " + "buoyancyAdjust4 INTEGER DEFAULT 0, " + "buoyancyAdjust5 INTEGER DEFAULT 0, " + "commMast INTEGER DEFAULT 0, " + "ctd1 INTEGER DEFAULT 0, " + "ctd2 INTEGER DEFAULT 0, " + "depth1 INTEGER DEFAULT 0, " + "depth2 INTEGER DEFAULT 0, " + "depth3 INTEGER DEFAULT 0, " + "electSensor INTEGER DEFAULT 0, " + "forwardSonar INTEGER DEFAULT 0, " + "inputWaterSensor1 INTEGER DEFAULT 0, " + "inputWaterSensor2 INTEGER DEFAULT 0, " + "inputWaterSensor3 INTEGER DEFAULT 0, " + "ins INTEGER DEFAULT 0, " + "launchControler INTEGER DEFAULT 0, " + "lowFreqSonar INTEGER DEFAULT 0, " + "mastLiftingServo INTEGER DEFAULT 0, " + "ntp INTEGER DEFAULT 0, " + "overDeep1 INTEGER DEFAULT 0, " + "overDeep2 INTEGER DEFAULT 0, " + "photoSensor INTEGER DEFAULT 0, " + "sideSonar INTEGER DEFAULT 0, " + "singleBeamSonar1 INTEGER DEFAULT 0, " + "singleBeamSonar2 INTEGER DEFAULT 0, " + "singleBeamSonar3 INTEGER DEFAULT 0, " + "singleBeamSonar4 INTEGER DEFAULT 0, " + "singleBeamSonar5 INTEGER DEFAULT 0, " + "singleBeamSonar6 INTEGER DEFAULT 0, " + "singleBeamSonar7 INTEGER DEFAULT 0, " + "singleBeamSonar8 INTEGER DEFAULT 0, " + "soundVeloc INTEGER DEFAULT 0, " + "sternRudderServo1 INTEGER DEFAULT 0, " + "sternRudderServo2 INTEGER DEFAULT 0, " + "sternRudderServo3 INTEGER DEFAULT 0, " + "sternRudderServo4 INTEGER DEFAULT 0, " + "sternThrow INTEGER DEFAULT 0, " + "thruster INTEGER DEFAULT 0, " + "waterInject INTEGER DEFAULT 0" + ");"; + char* errMsg = nullptr; + if (sqlite3_exec(m_db, createTableSQL.c_str(), nullptr, nullptr, &errMsg) != SQLITE_OK) { + std::cerr << "SQL error: " << errMsg << std::endl; + sqlite3_free(errMsg); + return false; + } + return true; +} + bool SQLiteDB::createStateTables() { if (!m_db) return false; @@ -482,6 +629,8 @@ bool SQLiteDB::clearStateData() { return true; } + + bool SQLiteDB::insertDisCcuData(pmState s, bool filter) { if (!m_db) return false; @@ -774,6 +923,32 @@ bool SQLiteDB::insertDisLowBusData(disLowBusState s) return result; } +bool SQLiteDB::insertDriverTables(DriverTable driverTable,string tableName) +{ + if (!m_db) return false; + + // 构建插入语句 + std::string insertSql = "INSERT INTO " + tableName + " (" + "depth1, depth2, depth3, overDeep1, overDeep2, ctd1, ctd2, soundVeloc, commMast, ins, ntp, " + "inputWaterSensor1, inputWaterSensor2, inputWaterSensor3, " + "singleBeamSonar1, singleBeamSonar2, singleBeamSonar3, singleBeamSonar4, singleBeamSonar5, " + "singleBeamSonar6, singleBeamSonar7, singleBeamSonar8, forwardSonar, DVL, lowFreqSonar, USBL, " + "bowWaterlnet1, bowWaterlnet2, bowWaterlnet3, bowWaterlnet4, bowWaterlnet5, bowWaterlnet6, " + "bowWaterlnet7, bowWaterlnet8, bowRudderDeploy, bowRudderServo1, bowRudderServo2, " + "bowCover1, bowCover2, bowCover3, bowCover4, bowCover5, bowCover6, waterInject, " + "mastLiftingServo, buoyancyAdjust1, buoyancyAdjust2, buoyancyAdjust3, buoyancyAdjust4, " + "buoyancyAdjust5, sternRudderServo1, sternRudderServo2, sternRudderServo3, sternRudderServo4, " + "thruster, bowThrow, sternThrow, " + "photoSensor, electSensor, launchControler, sideSonar, buoyage) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " + "?, ?, ?, ?, ?, ?, ?, ?);"; + + // 执行插入操作 + bool result = executeInsert(insertSql.c_str(), driverTable); + return result; +} + template bool SQLiteDB::executeInsert(const char* sql, const T& data) { sqlite3_stmt* stmt; @@ -799,7 +974,6 @@ bool SQLiteDB::executeInsert(const char* sql, const T& data) { } - bool SQLiteDB::createDisCcuSysTables() { if (!m_db) return false; diff --git a/src/pPowerManger/SQLiteDB.h b/src/pPowerManger/SQLiteDB.h index 425eb55..38ff49e 100644 --- a/src/pPowerManger/SQLiteDB.h +++ b/src/pPowerManger/SQLiteDB.h @@ -7,6 +7,7 @@ #include "json/json.h" #include "ccuUdpMsg.h" #include "pmSysvariable.h" +#include "driver.h" using namespace std; struct PowerData { @@ -26,11 +27,11 @@ struct StateData { }; // 前向声明 -struct ccuState; -struct disHighVolBusState; -struct disHighAVolBusState; -struct disHighBVolBusState; -struct disLowBusState; +// struct ccuState; +// struct disHighVolBusState; +// struct disHighAVolBusState; +// struct disHighBVolBusState; +// struct disLowBusState; class SQLiteDB { public: @@ -47,6 +48,7 @@ public: bool createPowerDataTables(); bool createStateTables(); bool createDisCcuSysTables(); + bool createDriversTables(string tableName); bool clearPowerData(); bool clearStateData(); @@ -55,6 +57,7 @@ public: bool insertPowerData(const PowerData& powerData); bool insertStateData(StateData stateData,bool filter=true); + bool insertCcuData(ccuState s); bool insertDisHighVolBusData(disHighVolBusState s); bool insertDisHighAVolBusData(disHighAVolBusState s); @@ -67,6 +70,8 @@ public: bool insertDisSysCmd(disHighBVolBusCmd cmd); bool insertDisSysCmd(disLowBusCmd cmd); + bool insertDriverTables(DriverTable driverTable,string tableName); + bool insertDisCcuData(pmState s,bool filter=true);//由于信息同步原因,暂时不使用该函数 // 获取最新的状态数据 diff --git a/test/SQLiteDBTest.cpp b/test/SQLiteDBTest.cpp index 80ef718..08e4b44 100644 --- a/test/SQLiteDBTest.cpp +++ b/test/SQLiteDBTest.cpp @@ -1,12 +1,16 @@ #include "catch2/catch.hpp" #include "../src/pPowerManger/SQLiteDB.h" +#include "../src/pPowerManger/driver.h" TEST_CASE("SQLiteDB Test", "[SQLiteDB]") { SQLiteDB db("test.db"); SECTION("Create Tables") { REQUIRE(db.createPowerDataTables() == true); - REQUIRE(db.createStateTables() == true); + // REQUIRE(db.createStateTables() == true); + REQUIRE(db.createDisCcuSysTables() == true); + REQUIRE(db.createDriversTables("test") == true); + } SECTION("Test isDatabaseConnected") { @@ -36,6 +40,15 @@ TEST_CASE("SQLiteDB Test", "[SQLiteDB]") { //REQUIRE(db.clearPowerData(stateDataForGet) == true); } + + SECTION("Test insertStateData") { + + for(int i = 0; i < 100; i++) + { DriverTable driver; + REQUIRE(db.insertDriverTables(driver,"test") == true); + } + + } }