增加了次级配电状态,设备状态表,设备上电指令的订阅\解析\发布等功能

This commit is contained in:
zjk
2025-02-20 23:15:37 +08:00
parent d89a1936ee
commit 4ee5cbfb86
7 changed files with 355 additions and 134 deletions
+33 -33
View File
@@ -1,47 +1,47 @@
{ {
"HVABFTDev123Cur_uint16": 65491, "HVABFTDev123Cur_uint16": 0,
"HVABactCur_uint16": 65368, "HVABactCur_uint16": 0,
"HVABbowRudCur_uint16": 0, "HVABbowRudCur_uint16": 0,
"HVABbusBCur_uint16": 46080, "HVABbusBCur_uint16": 0,
"HVABbusBVol_uint16": 127, "HVABbusBVol_uint16": 0,
"HVABmastSteGeaCur_uint16": 127, "HVABmastSteGeaCur_uint16": 0,
"HVABopenWaterCur_uint16": 0, "HVABopenWaterCur_uint16": 0,
"HVABxczCur_uint16": 1792, "HVABxczCur_uint16": 0,
"HVBBCCUCur_uint16": 65492, "HVBBCCUCur_uint16": 0,
"HVBBFCSSecurSysCur_uint16": 65368, "HVBBFCSSecurSysCur_uint16": 0,
"HVBBbatInsCur_uint16": 24700, "HVBBbatInsCur_uint16": 0,
"HVBBbowLowVolDisBoxCur_uint16": 25073, "HVBBbowLowVolDisBoxCur_uint16": 0,
"HVBBdcC1InsCur_uint16": 19436, "HVBBdcC1InsCur_uint16": 0,
"HVBBemer2BusVol_uint16": 32768, "HVBBemer2BusVol_uint16": 0,
"HVBBemerBatCur_uint16": 0, "HVBBemerBatCur_uint16": 0,
"HVBBinsBusVol_uint16": 18176, "HVBBinsBusVol_uint16": 0,
"HVBBplcCur_uint16": 127, "HVBBplcCur_uint16": 0,
"HVBBreservedCur1_uint16": 127, "HVBBreservedCur1_uint16": 0,
"HVBBreservedCur2_uint16": 127, "HVBBreservedCur2_uint16": 0,
"HVBBunit4Cur_uint16": 19436, "HVBBunit4Cur_uint16": 0,
"HVBFTDev45Cur_uint16": 0, "HVBFTDev45Cur_uint16": 0,
"HVBbatGroupCur_uint16": 37, "HVBbatGroupCur_uint16": 0,
"HVBbowHVolDisBoxCur_uint16": 0, "HVBbowHVolDisBoxCur_uint16": 0,
"HVBbusACur_uint16": 0, "HVBbusACur_uint16": 0,
"HVBbusAVol_uint16": 60617, "HVBbusAVol_uint16": 0,
"HVBdcDc5Cur_uint16": 0, "HVBdcDc5Cur_uint16": 0,
"HVBfbCur_uint16": 47824, "HVBfbCur_uint16": 0,
"HVBmotorCur_uint16": 32587, "HVBmotorCur_uint16": 0,
"HVBpowerBusCur_uint16": 8394, "HVBpowerBusCur_uint16": 0,
"HVBpowerBusVol_uint16": 32767, "HVBpowerBusVol_uint16": 0,
"HVBreservedCur1_uint16": 60616, "HVBreservedCur1_uint16": 0,
"HVBreservedCur2_uint16": 0, "HVBreservedCur2_uint16": 0,
"HVBreservedCur3_uint16": 60619, "HVBreservedCur3_uint16": 0,
"HVBsternRud1Cur_uint16": 39104, "HVBsternRud1Cur_uint16": 0,
"HVBsternRud2Cur_uint16": 32587, "HVBsternRud2Cur_uint16": 0,
"HVBtyzCur_uint16": 0, "HVBtyzCur_uint16": 0,
"LVBBbowPZDevCur_uint16": 127, "LVBBbowPZDevCur_uint16": 0,
"LVBBemerBatCur_uint16": 1792, "LVBBemerBatCur_uint16": 0,
"LVBBemerBusVol_uint16": 0, "LVBBemerBusVol_uint16": 0,
"LVBBinsBusCur_uint16": 0, "LVBBinsBusCur_uint16": 0,
"LVBBunit1Cur_uint16": 0, "LVBBunit1Cur_uint16": 0,
"LVBBunit2Cur_uint16": 28672, "LVBBunit2Cur_uint16": 0,
"LVBBunit3Cur_uint16": 41536, "LVBBunit3Cur_uint16": 0,
"LVBBunit5Cur_uint16": 19436, "LVBBunit5Cur_uint16": 0,
"LVBinsBusVol_uint16": 193 "LVBinsBusVol_uint16": 0
} }
+24 -24
View File
@@ -1,30 +1,30 @@
{ {
"backpressure1_fp32": -261504.0, "backpressure1_fp32": 0.0,
"backpressure2_fp32": 1.1690343649017501e-38, "backpressure2_fp32": 0.0,
"ch4oConcent1_fp32": -641600.0, "ch4oConcent1_fp32": 0.0,
"ch4oConcent2_fp32": 1.1690343649017501e-38, "ch4oConcent2_fp32": 0.0,
"ch4o_fp32": 0.0, "ch4o_fp32": 0.0,
"excTemp_fp32": 3.4331812375958018e-43, "excTemp_fp32": 0.0,
"faultCode1_uint16": 1649, "faultCode1_uint16": 0,
"faultCode2_uint16": 38944, "faultCode2_uint16": 0,
"faultCode3_uint16": 0, "faultCode3_uint16": 0,
"fcuCurIns_fp32": null, "fcuCurIns_fp32": 0.0,
"fcuCurPower_fp32": 1.1754708090080869e-38, "fcuCurPower_fp32": 0.0,
"fcuCur_fp32": -282240.0, "fcuCur_fp32": 0.0,
"fcuFaultLeve_uint8": 201, "fcuFaultLeve_uint8": 0,
"fcuOutIns_fp32": 1.1690343649017501e-38, "fcuOutIns_fp32": 0.0,
"fcuOutPower_fp32": 6.9238340671194006e+19, "fcuOutPower_fp32": 0.0,
"fcuState_uint8": 32, "fcuState_uint8": 0,
"fcuVolIns_fp32": 7.2147666030475346e+19, "fcuVolIns_fp32": 0.0,
"fcuVolPower_fp32": 1.1690343649017501e-38, "fcuVolPower_fp32": 0.0,
"fcuVol_fp32": 1.1690343649017501e-38, "fcuVol_fp32": 0.0,
"flameDet_uint8": 0, "flameDet_uint8": 0,
"h2Concent1_fp32": -658592.0, "h2Concent1_fp32": 0.0,
"h2Concent2_fp32": 1.1690343649017501e-38, "h2Concent2_fp32": 0.0,
"o2Concent1_fp32": 8.602403116674333e-40, "o2Concent1_fp32": 0.0,
"o2Concent2_fp32": 0.0, "o2Concent2_fp32": 0.0,
"o2Level_fp32": 1.1690343649017501e-38, "o2Level_fp32": 0.0,
"o2_fp32": -641600.0, "o2_fp32": 0.0,
"powLimit_fp32": 1.1690343649017501e-38, "powLimit_fp32": 0.0,
"powerGen_fp32": 1.8108811898653892e-39 "powerGen_fp32": 0.0
} }
+25 -25
View File
@@ -1,38 +1,38 @@
{ {
"fcuCurToInsLimit1_uint8": 127, "fcuCurToInsLimit1_uint8": 0,
"fcuCurToinsLimit2_uint8": 0, "fcuCurToinsLimit2_uint8": 0,
"insBatCurElect_uint16": 32587, "insBatCurElect_uint16": 0,
"insBatLimit_uint16": 60544, "insBatLimit_uint16": 0,
"insBatSoc_uint8": 0, "insBatSoc_uint8": 0,
"insBatTotalElect_uint16": 36880, "insBatTotalElect_uint16": 0,
"insChargeState_uint8": 116, "insChargeState_uint8": 0,
"insCurSocHold1_uint8": 201, "insCurSocHold1_uint8": 0,
"insCurSocHold2_uint8": 236, "insCurSocHold2_uint8": 0,
"insCurSocHold3_uint8": 75, "insCurSocHold3_uint8": 0,
"insCurrent_uint16": 0, "insCurrent_uint16": 0,
"insLinkVol_uint16": 22783, "insLinkVol_uint16": 0,
"insNegRelayState_uint8": 0, "insNegRelayState_uint8": 0,
"insNegRes_uint16": 60617, "insNegRes_uint16": 0,
"insPackVol_uint16": 32767, "insPackVol_uint16": 0,
"insPosRelayState_uint8": 0, "insPosRelayState_uint8": 0,
"insPosRes_uint16": 8394, "insPosRes_uint16": 0,
"insfaultCode_uint8": 164, "insfaultCode_uint8": 0,
"powBatCurElect_uint16": 0, "powBatCurElect_uint16": 0,
"powBatSoc_uint8": 0, "powBatSoc_uint8": 0,
"powBatTotalElect_uint16": 60544, "powBatTotalElect_uint16": 0,
"powChargeState_uint8": 211, "powChargeState_uint8": 0,
"powCurSocHold1_uint8": 0, "powCurSocHold1_uint8": 0,
"powCurSocHold2_uint8": 208, "powCurSocHold2_uint8": 0,
"powCurSocHold3_uint8": 186, "powCurSocHold3_uint8": 0,
"powCurToInsLimit1_uint8": 203, "powCurToInsLimit1_uint8": 0,
"powCurToinsLimit2_uint8": 236, "powCurToinsLimit2_uint8": 0,
"powCur_uint16": 3590, "powCur_uint16": 0,
"powLinkVol_uint16": 32587, "powLinkVol_uint16": 0,
"powNegRelayState_uint8": 103, "powNegRelayState_uint8": 0,
"powNegRes_uint16": 0, "powNegRes_uint16": 0,
"powPosRelayState_uint8": 208, "powPosRelayState_uint8": 0,
"powPosRes_uint16": 0, "powPosRes_uint16": 0,
"powerBatLimit_uint16": 32587, "powerBatLimit_uint16": 0,
"powerPackVol_uint16": 0, "powerPackVol_uint16": 0,
"powfaultCode_uint8": 28 "powfaultCode_uint8": 0
} }
+72 -43
View File
@@ -50,6 +50,13 @@ PowerManger::PowerManger()
connectState = 0; connectState = 0;
m_pmCurrentState = {};
m_currentDisBreakerState = {};
m_targetDisBreakerState = {};
m_currentDriverState = {};
m_MSDriverCmd = {};
m_subDisSysCmd = {};
m_subDisSysState = {};
//初始化断路器状态 //初始化断路器状态
initControlCmd(); initControlCmd();
@@ -59,6 +66,10 @@ PowerManger::PowerManger()
m_db->createPowerDataTables(); m_db->createPowerDataTables();
m_db->createStateTables(); m_db->createStateTables();
m_db->createDisCcuSysTables(); 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); m_fsm.RegisterState("Init", 1, m_Inite_s1);
@@ -98,11 +109,11 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
{ {
if(getMsCmdFromJson(m_msCmd,strJson)) if(getMsCmdFromJson(m_msCmd,strJson))
{ {
cout << "get ms cmd:" << strJson << endl; cout << "get ms cmd:" << strJson << endl;
} }
else 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) 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) 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(); ccuOption();
//c. 上位机反馈 //c. 上位机反馈
buildPowerSysReport(); 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); // string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd);
saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json"); // saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json");
/////////////////////// ///////////////////////
//4. 打印错误信息 //4. 写状态信息到数据库
if(!m_udpComm.sError.empty()) m_stateData.state_id = m_pmState.id;
{ m_stateData.state_name = m_pmState.name;
for(int i=0;i<m_udpComm.sError.size();i++) m_stateData.event = m_pmEvent;
{ m_stateData.fault_code = m_faultNum;
cout<<MOOS::ConsoleColours::red() << m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl; if(!m_db->insertStateData(m_stateData))
} return false;
m_udpComm.sError.clear();
}
//AppCastingMOOSApp::PostReport(); //AppCastingMOOSApp::PostReport();
//5. 清空UDP消息队列 //5. 清空UDP消息队列
m_udpComm.clearMsgQueue(); m_udpComm.clearMsgQueue();
//6. 写入数据库
writeDataToDB();
return(true); return(true);
} }
@@ -315,18 +326,27 @@ bool PowerManger::ListenLoopUDP()
} }
} }
} }
// updatePmState(); // 打印通信错误信息
if(!m_udpComm.sError.empty())
{
for(int i=0;i<m_udpComm.sError.size();i++)
{
cout<<MOOS::ConsoleColours::red() << m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
}
m_udpComm.sError.clear();
}
} }
return true; return true;
} }
bool PowerManger::FsmLoop() bool PowerManger::FsmLoop()
{ {
//状态机循环
while (!m_FsmThread.IsQuitRequested()) while (!m_FsmThread.IsQuitRequested())
{ {
m_fsm.run(m_pmState,this); m_fsm.run(m_pmState,this);
//延时200ms //延时1s
usleep(200000); usleep(1000000);
} }
return true; return true;
} }
@@ -336,20 +356,20 @@ bool PowerManger::updateConnectState()
double seck = 0; double seck = 0;
updateTime(); updateTime();
connectState = 0; connectState = 0;
IsSkewed(msg_CcuStateFbMsg_Update_time,&seck); if(!IsSkewed(msg_CcuStateFbMsg_Update_time,&seck))
connectState++; connectState++;
// cout << "seck:" << seck << endl; // cout << "seck:" << seck << endl;
IsSkewed(msg_disHighVolBusFbMsg_Update_time,&seck); if(!IsSkewed(msg_disHighVolBusFbMsg_Update_time,&seck))
connectState++; connectState++;
// cout << "seck:" << seck << endl; // cout << "seck:" << seck << endl;
IsSkewed(msg_disHighAVolBusFbMsg_Update_time,&seck); if(!IsSkewed(msg_disHighAVolBusFbMsg_Update_time,&seck))
connectState++; connectState++;
// cout << "seck:" << seck << endl; // cout << "seck:" << seck << endl;
IsSkewed(msg_disHighBVolBusFbMsg_Update_time,&seck); if(!IsSkewed(msg_disHighBVolBusFbMsg_Update_time,&seck))
connectState++; connectState++;
// cout << "seck:" << seck << endl; // cout << "seck:" << seck << endl;
IsSkewed(msg_disLowBusFbMsg_Update_time,&seck); if(!IsSkewed(msg_disLowBusFbMsg_Update_time,&seck))
connectState++; connectState++;
// cout << "seck:" << seck << endl; // cout << "seck:" << seck << endl;
return true; return true;
@@ -546,17 +566,20 @@ bool PowerManger::saveStringToJsonFile(const string &strJson, const string &file
bool PowerManger::writeDataToDB() bool PowerManger::writeDataToDB()
{ {
m_stateData.state_id = m_pmState.id;
m_stateData.state_name = m_pmState.name;
m_stateData.event = m_pmEvent;
m_stateData.event_id = 1;
m_stateData.fault_code = m_faultNum;
m_stateData.note = "No fault";
if(!m_db->insertStateData(m_stateData))
return false;
// //写入配电系统状态 // //写入配电系统状态
// if(!m_db->insertDisCcuData(m_pmCurrentState)) // if(!m_db->insertDisCcuData(m_pmCurrentState))
// return false; // 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; return true;
} }
@@ -577,9 +600,10 @@ void PowerManger::printState(FSM_State st, string desp){
int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
{ {
PowerManger* pm = (PowerManger*)pData; PowerManger* pm = (PowerManger*)pData;
bool ok = true;
//1. 检查通信是否正常 如果超时则进入故障状态 //1. 检查通信是否正常 如果超时则进入故障状态
double StartTime = pm->GetAppStartTime(); double StartTime = pm->GetAppStartTime();
while (!pm->connectState == 5) while (pm->connectState < 5)
{ {
MOOSPause(1000); MOOSPause(1000);
pm->updateTime(); pm->updateTime();
@@ -587,14 +611,14 @@ int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
if(dft > 10) if(dft > 10)
{ {
pm->m_pmState = pm->m_Fault_s99; pm->m_pmState = pm->m_Fault_s99;
pm->m_faultNum = 1; pm->m_faultNum = 1; //通信故障
ok = false;
break; break;
} }
string desp = "等待复合管控消息 : " + to_string(10-dft); string desp = "等待复合管控消息 : " + to_string(10-dft);
pm->printState(fsm,desp); pm->printState(fsm,desp);
} }
//2. 检查复合管控器是否上报故障 如果故障则进入故障状态 //2. 检查复合管控器是否上报故障 如果故障则进入故障状态
bool ok = true;
if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 || if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 ||
pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 || pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 ||
pm->m_pmCurrentState.ccustate.fcuGZ_2H != 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) pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0)
{ {
ok = false; ok = false;
pm->m_faultNum = 2; //能源故障
} }
//3. 初始化系统为待机状态
pm->initControlCmd();
//4.判断关键断路器是否闭合
if(!ok) if(!ok)
{ {
pm->m_pmState = pm->m_Fault_s99; pm->m_pmState = pm->m_Fault_s99;
} }
//3. 初始化系统为待机状态
pm->initControlCmd();
pm->m_pmState = pm->m_Standby_s2; pm->m_pmState = pm->m_Standby_s2;
return 0; return 0;
} }
@@ -701,6 +727,9 @@ void PowerManger::initControlCmd()
m_msCmd.modCMD = 0; m_msCmd.modCMD = 0;
m_msCmd.powerCMD = 0; m_msCmd.powerCMD = 0;
m_msCmd.workCMD = 0; m_msCmd.workCMD = 0;
//================初始化设备驱动指令========================
} }
char PowerManger::getBreakerOption(char cmd) char PowerManger::getBreakerOption(char cmd)
+175 -1
View File
@@ -17,6 +17,75 @@ bool SQLiteDB::bindParameters(sqlite3_stmt* stmt, const T& data) {
return false; return false;
} }
template<>
bool SQLiteDB::bindParameters<DriverTable>(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特化实现 // 为ccuState特化实现
template<> template<>
bool SQLiteDB::bindParameters<ccuState>(sqlite3_stmt* stmt, const ccuState& data) { bool SQLiteDB::bindParameters<ccuState>(sqlite3_stmt* stmt, const ccuState& data) {
@@ -317,6 +386,84 @@ bool SQLiteDB::createPowerDataTables() {
return true; 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() { bool SQLiteDB::createStateTables() {
if (!m_db) return false; if (!m_db) return false;
@@ -482,6 +629,8 @@ bool SQLiteDB::clearStateData() {
return true; return true;
} }
bool SQLiteDB::insertDisCcuData(pmState s, bool filter) { bool SQLiteDB::insertDisCcuData(pmState s, bool filter) {
if (!m_db) return false; if (!m_db) return false;
@@ -774,6 +923,32 @@ bool SQLiteDB::insertDisLowBusData(disLowBusState s)
return result; 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<typename T> template<typename T>
bool SQLiteDB::executeInsert(const char* sql, const T& data) { bool SQLiteDB::executeInsert(const char* sql, const T& data) {
sqlite3_stmt* stmt; sqlite3_stmt* stmt;
@@ -799,7 +974,6 @@ bool SQLiteDB::executeInsert(const char* sql, const T& data) {
} }
bool SQLiteDB::createDisCcuSysTables() { bool SQLiteDB::createDisCcuSysTables() {
if (!m_db) return false; if (!m_db) return false;
+10 -5
View File
@@ -7,6 +7,7 @@
#include "json/json.h" #include "json/json.h"
#include "ccuUdpMsg.h" #include "ccuUdpMsg.h"
#include "pmSysvariable.h" #include "pmSysvariable.h"
#include "driver.h"
using namespace std; using namespace std;
struct PowerData { struct PowerData {
@@ -26,11 +27,11 @@ struct StateData {
}; };
// 前向声明 // 前向声明
struct ccuState; // struct ccuState;
struct disHighVolBusState; // struct disHighVolBusState;
struct disHighAVolBusState; // struct disHighAVolBusState;
struct disHighBVolBusState; // struct disHighBVolBusState;
struct disLowBusState; // struct disLowBusState;
class SQLiteDB { class SQLiteDB {
public: public:
@@ -47,6 +48,7 @@ public:
bool createPowerDataTables(); bool createPowerDataTables();
bool createStateTables(); bool createStateTables();
bool createDisCcuSysTables(); bool createDisCcuSysTables();
bool createDriversTables(string tableName);
bool clearPowerData(); bool clearPowerData();
bool clearStateData(); bool clearStateData();
@@ -55,6 +57,7 @@ public:
bool insertPowerData(const PowerData& powerData); bool insertPowerData(const PowerData& powerData);
bool insertStateData(StateData stateData,bool filter=true); bool insertStateData(StateData stateData,bool filter=true);
bool insertCcuData(ccuState s); bool insertCcuData(ccuState s);
bool insertDisHighVolBusData(disHighVolBusState s); bool insertDisHighVolBusData(disHighVolBusState s);
bool insertDisHighAVolBusData(disHighAVolBusState s); bool insertDisHighAVolBusData(disHighAVolBusState s);
@@ -67,6 +70,8 @@ public:
bool insertDisSysCmd(disHighBVolBusCmd cmd); bool insertDisSysCmd(disHighBVolBusCmd cmd);
bool insertDisSysCmd(disLowBusCmd cmd); bool insertDisSysCmd(disLowBusCmd cmd);
bool insertDriverTables(DriverTable driverTable,string tableName);
bool insertDisCcuData(pmState s,bool filter=true);//由于信息同步原因,暂时不使用该函数 bool insertDisCcuData(pmState s,bool filter=true);//由于信息同步原因,暂时不使用该函数
// 获取最新的状态数据 // 获取最新的状态数据
+14 -1
View File
@@ -1,12 +1,16 @@
#include "catch2/catch.hpp" #include "catch2/catch.hpp"
#include "../src/pPowerManger/SQLiteDB.h" #include "../src/pPowerManger/SQLiteDB.h"
#include "../src/pPowerManger/driver.h"
TEST_CASE("SQLiteDB Test", "[SQLiteDB]") { TEST_CASE("SQLiteDB Test", "[SQLiteDB]") {
SQLiteDB db("test.db"); SQLiteDB db("test.db");
SECTION("Create Tables") { SECTION("Create Tables") {
REQUIRE(db.createPowerDataTables() == true); REQUIRE(db.createPowerDataTables() == true);
REQUIRE(db.createStateTables() == true); // REQUIRE(db.createStateTables() == true);
REQUIRE(db.createDisCcuSysTables() == true);
REQUIRE(db.createDriversTables("test") == true);
} }
SECTION("Test isDatabaseConnected") { SECTION("Test isDatabaseConnected") {
@@ -37,5 +41,14 @@ TEST_CASE("SQLiteDB Test", "[SQLiteDB]") {
//REQUIRE(db.clearPowerData(stateDataForGet) == true); //REQUIRE(db.clearPowerData(stateDataForGet) == true);
} }
SECTION("Test insertStateData") {
for(int i = 0; i < 100; i++)
{ DriverTable driver;
REQUIRE(db.insertDriverTables(driver,"test") == true);
}
}
} }