From a45ba75c3723381507ec9afd2416f023a9fc49b0 Mon Sep 17 00:00:00 2001 From: zhaojingkui <1553836110@qq.com> Date: Sun, 27 Apr 2025 00:11:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E4=BA=86squit3,=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86=E5=A4=96=E9=83=A8=E9=80=9A=E8=AE=AF=E4=BA=A4?= =?UTF-8?q?=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/msg/uPower_currentState_st.json | 95 ++++++------ data/msg/uPower_disSysState_st.json | 21 ++- data/msg/uPower_fcsState_st.json | 61 ++++---- data/msg/uPower_liBatState_st.json | 77 +++++----- data/msg/uPower_pmState_fb.json | 12 ++ src/CMakeLists.txt | 2 +- src/pPowerManger/CMakeLists.txt | 11 +- src/pPowerManger/LowerCommManager.cpp | 56 ++++--- src/pPowerManger/PowerManagerFsm.cpp | 202 ++++++++++++++++++++++++++ src/pPowerManger/PowerManagerFsm.hpp | 18 ++- src/pPowerManger/PowerManger.cpp | 36 ++--- src/pPowerManger/PowerManger.h | 4 +- src/pPowerManger/UpperCommManager.cpp | 127 +++++++++++++++- src/pPowerManger/UpperCommManager.h | 15 +- src/pPowerManger/driver.cpp | 37 ----- src/pPowerManger/driver.h | 32 +--- src/pPowerManger/pmSysvariable.h | 31 +++- 17 files changed, 580 insertions(+), 257 deletions(-) create mode 100644 data/msg/uPower_pmState_fb.json diff --git a/data/msg/uPower_currentState_st.json b/data/msg/uPower_currentState_st.json index 0edf428..41648bf 100644 --- a/data/msg/uPower_currentState_st.json +++ b/data/msg/uPower_currentState_st.json @@ -1,48 +1,47 @@ -{"uPower_currentState_st":{ - "HVABFTDev123Cur_uint16" : 0, - "HVABactCur_uint16" : 0, - "HVABbowRudCur_uint16" : 0, - "HVABbusBCur_uint16" : 0, - "HVABbusBVol_uint16" : 0, - "HVABmastSteGeaCur_uint16" : 0, - "HVABopenWaterCur_uint16" : 0, - "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" : 0, - "HVBBplcCur_uint16" : 0, - "HVBBreservedCur1_uint16" : 0, - "HVBBreservedCur2_uint16" : 0, - "HVBBunit4Cur_uint16" : 0, - "HVBFTDev45Cur_uint16" : 0, - "HVBbatGroupCur_uint16" : 0, - "HVBbowHVolDisBoxCur_uint16" : 0, - "HVBbusACur_uint16" : 0, - "HVBbusAVol_uint16" : 0, - "HVBdcDc5Cur_uint16" : 0, - "HVBfbCur_uint16" : 0, - "HVBmotorCur_uint16" : 0, - "HVBpowerBusCur_uint16" : 0, - "HVBpowerBusVol_uint16" : 0, - "HVBreservedCur1_uint16" : 0, - "HVBreservedCur2_uint16" : 0, - "HVBreservedCur3_uint16" : 0, - "HVBsternRud1Cur_uint16" : 0, - "HVBsternRud2Cur_uint16" : 0, - "HVBtyzCur_uint16" : 0, - "LVBBbowPZDevCur_uint16" : 0, - "LVBBemerBatCur_uint16" : 0, - "LVBBemerBusVol_uint16" : 0, - "LVBBinsBusCur_uint16" : 0, - "LVBBunit1Cur_uint16" : 0, - "LVBBunit2Cur_uint16" : 0, - "LVBBunit3Cur_uint16" : 0, - "LVBBunit5Cur_uint16" : 0, - "LVBinsBusVol_uint16" : 0 -} -} +{ + "HVABFTDev123Cur_uint16": 0, + "HVABactCur_uint16": 0, + "HVABbowRudCur_uint16": 0, + "HVABbusBCur_uint16": 0, + "HVABbusBVol_uint16": 0, + "HVABmastSteGeaCur_uint16": 0, + "HVABopenWaterCur_uint16": 0, + "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": 0, + "HVBBplcCur_uint16": 0, + "HVBBreservedCur1_uint16": 0, + "HVBBreservedCur2_uint16": 0, + "HVBBunit4Cur_uint16": 0, + "HVBFTDev45Cur_uint16": 0, + "HVBbatGroupCur_uint16": 0, + "HVBbowHVolDisBoxCur_uint16": 0, + "HVBbusACur_uint16": 0, + "HVBbusAVol_uint16": 0, + "HVBdcDc5Cur_uint16": 0, + "HVBfbCur_uint16": 0, + "HVBmotorCur_uint16": 0, + "HVBpowerBusCur_uint16": 0, + "HVBpowerBusVol_uint16": 0, + "HVBreservedCur1_uint16": 0, + "HVBreservedCur2_uint16": 0, + "HVBreservedCur3_uint16": 0, + "HVBsternRud1Cur_uint16": 0, + "HVBsternRud2Cur_uint16": 0, + "HVBtyzCur_uint16": 0, + "LVBBbowPZDevCur_uint16": 0, + "LVBBemerBatCur_uint16": 0, + "LVBBemerBusVol_uint16": 0, + "LVBBinsBusCur_uint16": 0, + "LVBBunit1Cur_uint16": 0, + "LVBBunit2Cur_uint16": 0, + "LVBBunit3Cur_uint16": 0, + "LVBBunit5Cur_uint16": 0, + "LVBinsBusVol_uint16": 0 +} \ No newline at end of file diff --git a/data/msg/uPower_disSysState_st.json b/data/msg/uPower_disSysState_st.json index adb658e..ed8e1bf 100644 --- a/data/msg/uPower_disSysState_st.json +++ b/data/msg/uPower_disSysState_st.json @@ -1,11 +1,10 @@ -{"uPower_disSysState_st":{ - "HVolABusBreaker_unit16" : 0, - "HVolBBusBreaker_unit16" : 0, - "HVolBusBreaker_uint16" : 0, - "LVolBusBreaker_uint16" : 0, - "faultCode_array" : - [ - 0 - ] -} -} +{ + "HVolABusBreaker_unit16": 0, + "HVolBBusBreaker_unit16": 0, + "HVolBusBreaker_uint16": 0, + "LVolBusBreaker_uint16": 0, + "faultCode_array": + [ + 0 + ] +} \ No newline at end of file diff --git a/data/msg/uPower_fcsState_st.json b/data/msg/uPower_fcsState_st.json index 2e81843..31141fb 100644 --- a/data/msg/uPower_fcsState_st.json +++ b/data/msg/uPower_fcsState_st.json @@ -1,31 +1,30 @@ -{"uPower_fcsState_st":{ - "backpressure1_fp32" : 0.0, - "backpressure2_fp32" : 0.0, - "ch4oConcent1_fp32" : 0.0, - "ch4oConcent2_fp32" : 0.0, - "ch4o_fp32" : 0.0, - "excTemp_fp32" : 0.0, - "faultCode1_uint16" : 0, - "faultCode2_uint16" : 0, - "faultCode3_uint16" : 0, - "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" : 0.0, - "h2Concent2_fp32" : 0.0, - "o2Concent1_fp32" : 0.0, - "o2Concent2_fp32" : 0.0, - "o2Level_fp32" : 0.0, - "o2_fp32" : 0.0, - "powLimit_fp32" : 0.0, - "powerGen_fp32" : 0.0 -} -} +{ + "backpressure1_fp32": 0.0, + "backpressure2_fp32": 0.0, + "ch4oConcent1_fp32": 0.0, + "ch4oConcent2_fp32": 0.0, + "ch4o_fp32": 0.0, + "excTemp_fp32": 0.0, + "faultCode1_uint16": 0, + "faultCode2_uint16": 0, + "faultCode3_uint16": 0, + "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": 0.0, + "h2Concent2_fp32": 0.0, + "o2Concent1_fp32": 0.0, + "o2Concent2_fp32": 0.0, + "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 9c92b81..b3e9fd4 100644 --- a/data/msg/uPower_liBatState_st.json +++ b/data/msg/uPower_liBatState_st.json @@ -1,39 +1,38 @@ -{"uPower_liBatState_st":{ - "fcuCurToInsLimit1_uint8" : 0, - "fcuCurToinsLimit2_uint8" : 0, - "insBatCurElect_uint16" : 0, - "insBatLimit_uint16" : 0, - "insBatSoc_uint8" : 0, - "insBatTotalElect_uint16" : 0, - "insChargeState_uint8" : 0, - "insCurSocHold1_uint8" : 0, - "insCurSocHold2_uint8" : 0, - "insCurSocHold3_uint8" : 0, - "insCurrent_uint16" : 0, - "insLinkVol_uint16" : 0, - "insNegRelayState_uint8" : 0, - "insNegRes_uint16" : 0, - "insPackVol_uint16" : 0, - "insPosRelayState_uint8" : 0, - "insPosRes_uint16" : 0, - "insfaultCode_uint8" : 0, - "powBatCurElect_uint16" : 0, - "powBatSoc_uint8" : 0, - "powBatTotalElect_uint16" : 0, - "powChargeState_uint8" : 0, - "powCurSocHold1_uint8" : 0, - "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" : 0, - "powPosRes_uint16" : 0, - "powerBatLimit_uint16" : 0, - "powerPackVol_uint16" : 0, - "powfaultCode_uint8" : 0 -} -} +{ + "fcuCurToInsLimit1_uint8": 0, + "fcuCurToinsLimit2_uint8": 0, + "insBatCurElect_uint16": 0, + "insBatLimit_uint16": 0, + "insBatSoc_uint8": 0, + "insBatTotalElect_uint16": 0, + "insChargeState_uint8": 0, + "insCurSocHold1_uint8": 0, + "insCurSocHold2_uint8": 0, + "insCurSocHold3_uint8": 0, + "insCurrent_uint16": 0, + "insLinkVol_uint16": 0, + "insNegRelayState_uint8": 0, + "insNegRes_uint16": 0, + "insPackVol_uint16": 0, + "insPosRelayState_uint8": 0, + "insPosRes_uint16": 0, + "insfaultCode_uint8": 0, + "powBatCurElect_uint16": 0, + "powBatSoc_uint8": 0, + "powBatTotalElect_uint16": 0, + "powChargeState_uint8": 0, + "powCurSocHold1_uint8": 0, + "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": 0, + "powPosRes_uint16": 0, + "powerBatLimit_uint16": 0, + "powerPackVol_uint16": 0, + "powfaultCode_uint8": 0 +} \ No newline at end of file diff --git a/data/msg/uPower_pmState_fb.json b/data/msg/uPower_pmState_fb.json new file mode 100644 index 0000000..ae91ee7 --- /dev/null +++ b/data/msg/uPower_pmState_fb.json @@ -0,0 +1,12 @@ +{ + "currentMod_uint8": 0, + "falutLevel_uint8": 0, + "faultCode_array": + [ + 0 + ], + "powerState_uint8": 0, + "soc_uint32": 0, + "sustainableTime_uint32": 0, + "workCondition_uint8": 1 +} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e35f7f7..09243c7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,7 @@ INCLUDE_DIRECTORIES(${LOCAL_LIBRARY_DIRS}) # List the subdirectories to build... #============================================================================ ADD_SUBDIRECTORY(pPowerManger) -ADD_SUBDIRECTORY(appPowerMangerWebUI) +# ADD_SUBDIRECTORY(appPowerMangerWebUI) add_subdirectory(pPMtest) ############################################################################## # END of CMakeLists.txt diff --git a/src/pPowerManger/CMakeLists.txt b/src/pPowerManger/CMakeLists.txt index 04e35e7..520e5cb 100644 --- a/src/pPowerManger/CMakeLists.txt +++ b/src/pPowerManger/CMakeLists.txt @@ -16,7 +16,7 @@ else (${WIN32}) endif (${WIN32}) # Find SQLite3 package -find_package(SQLite3 REQUIRED) +# find_package(SQLite3 REQUIRED) SET(SRC PowerManagerFsm.cpp @@ -24,7 +24,7 @@ SET(SRC PowerManger_Info.cpp udpComm.cpp main.cpp - SQLiteDB.cpp + # SQLiteDB.cpp driver.cpp LowerCommManager.cpp UpperCommManager.cpp @@ -41,8 +41,9 @@ TARGET_LINK_LIBRARIES(pPowerManger pthread jsoncpp ${SYSTEM_LIBS} - SQLiteDB - sqlite3) + # SQLiteDB + # sqlite3 + ) # Add SQLiteDB static library SET(UDPCOMM_SRC @@ -67,7 +68,7 @@ SET(DRIVER_SRC # driver.cpp # PowerManagerFsm.cpp) -ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC}) +# ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC}) ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC}) ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC}) ADD_LIBRARY(Driver STATIC ${DRIVER_SRC}) diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index 1b32f2c..0db30f3 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -44,28 +44,36 @@ LowerCommManager::~LowerCommManager(){ } } bool LowerCommManager::initUdpComm(){ - //设置UDP监听端口 - if(m_udpComm->udpScoket) - { - try - { - m_udpComm->udpScoket->vBindSocket(); - cout<udpScoket) { + try { + std::cout << MOOS::ConsoleColours::yellow() << "Attempting to bind UDP socket..." << MOOS::ConsoleColours::reset() << std::endl; + m_udpComm->udpScoket->vBindSocket(); // 可能会抛出 XPCException 或其他 std::exception + std::cout << MOOS::ConsoleColours::green() << "UDP bind succeeded!" << MOOS::ConsoleColours::reset() << std::endl; + LOG_F(INFO, "UDP bind succeeded!"); + } + catch (const std::exception& e) { + std::cerr << MOOS::ConsoleColours::red() + << "[UDP Bind Failed] Exception: " << e.what() + << MOOS::ConsoleColours::reset() << std::endl; + LOG_F(ERROR, "UDP bind failed: %s", e.what()); + return false; + } + catch (...) { + std::cerr << MOOS::ConsoleColours::red() + << "[UDP Bind Failed] Unknown exception occurred!" + << MOOS::ConsoleColours::reset() << std::endl; + LOG_F(ERROR, "Unknown exception occurred during UDP bind"); + return false; + } + } else { + std::cerr << MOOS::ConsoleColours::red() + << "[UDP Init Failed] udpSocket is null!" + << MOOS::ConsoleColours::reset() << std::endl; + LOG_F(ERROR, "udpSocket is null!"); return false; } - } - else - { - cout<m_CcuColCmd); @@ -128,10 +136,10 @@ bool LowerCommManager::sendDisSysCommand(const disSysBreakerList& cmd){ d.emergencyLithiumBatteryGroup1CircuitBreaker = getBreakerOption(cmd.bus4Breaker.emergencyLithiumBatteryGroup1CircuitBreaker); m_udpComm->sendDisSysCmd(d); //将指令写入数据库 - m_pm->m_db->insertDisSysCmd(a); - m_pm->m_db->insertDisSysCmd(b); - m_pm->m_db->insertDisSysCmd(c); - m_pm->m_db->insertDisSysCmd(d); + // m_pm->m_db->insertDisSysCmd(a); + // m_pm->m_db->insertDisSysCmd(b); + // m_pm->m_db->insertDisSysCmd(c); + // m_pm->m_db->insertDisSysCmd(d); return true; } diff --git a/src/pPowerManger/PowerManagerFsm.cpp b/src/pPowerManger/PowerManagerFsm.cpp index 36b7fe3..b899237 100644 --- a/src/pPowerManger/PowerManagerFsm.cpp +++ b/src/pPowerManger/PowerManagerFsm.cpp @@ -7,6 +7,203 @@ // 定义静态成员 PowerManger* PowerManagerFsm::pm = nullptr; +void PowerManagerFsm::react(DevCmdExt const &e) { + LOG_F(INFO, "DevCmdExt received - id: %d, cmd: %d", e.id, e.cmd); + switch (e.id) + { + case 0: + LOG_F(INFO, "DevCmdExt received singleBeamSonar1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 1: + LOG_F(INFO, "DevCmdExt received singleBeamSonar2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 2: + LOG_F(INFO, "DevCmdExt received singleBeamSonar3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 3: + LOG_F(INFO, "DevCmdExt received singleBeamSonar4 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 4: + LOG_F(INFO, "DevCmdExt received singleBeamSonar5 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 5: + LOG_F(INFO, "DevCmdExt received singleBeamSonar6 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 6: + LOG_F(INFO, "DevCmdExt received singleBeamSonar7 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 7: + LOG_F(INFO, "DevCmdExt received singleBeamSonar8 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 8: + LOG_F(INFO, "DevCmdExt received forwardSonar - id: %d, cmd: %d", e.id, e.cmd); + break; + case 9: + LOG_F(INFO, "DevCmdExt received bowCover1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 10: + LOG_F(INFO, "DevCmdExt received bowCover2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 11: + LOG_F(INFO, "DevCmdExt received bowCover3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 12: + LOG_F(INFO, "DevCmdExt received bowCover4 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 13: + LOG_F(INFO, "DevCmdExt received bowCover5 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 14: + LOG_F(INFO, "DevCmdExt received bowCover6 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 15: + LOG_F(INFO, "DevCmdExt received bowRudderDeploy - id: %d, cmd: %d", e.id, e.cmd); + break; + case 16: + LOG_F(INFO, "DevCmdExt received bowRudderServo1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 17: + LOG_F(INFO, "DevCmdExt received bowRudderServo2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 18: + LOG_F(INFO, "DevCmdExt received depth1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 19: + LOG_F(INFO, "DevCmdExt received depth2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 20: + LOG_F(INFO, "DevCmdExt received depth3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 21: + LOG_F(INFO, "DevCmdExt received overDeep1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 22: + LOG_F(INFO, "DevCmdExt received overDeep2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 23: + LOG_F(INFO, "DevCmdExt received ctd1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 24: + LOG_F(INFO, "DevCmdExt received ctd2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 25: + LOG_F(INFO, "DevCmdExt received soundVeloc - id: %d, cmd: %d", e.id, e.cmd); + break; + case 26: + LOG_F(INFO, "DevCmdExt received waterInject - id: %d, cmd: %d", e.id, e.cmd); + break; + case 27: + LOG_F(INFO, "DevCmdExt received bowWaterlnet1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 28: + LOG_F(INFO, "DevCmdExt received bowWaterlnet2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 29: + LOG_F(INFO, "DevCmdExt received bowWaterlnet3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 30: + LOG_F(INFO, "DevCmdExt received bowWaterlnet4 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 31: + LOG_F(INFO, "DevCmdExt received bowWaterlnet5 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 32: + LOG_F(INFO, "DevCmdExt received bowWaterlnet6 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 33: + LOG_F(INFO, "DevCmdExt received bowWaterlnet7 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 34: + LOG_F(INFO, "DevCmdExt received bowWaterlnet8 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 35: + LOG_F(INFO, "DevCmdExt received sideSonar - id: %d, cmd: %d", e.id, e.cmd); + break; + case 36: + LOG_F(INFO, "DevCmdExt received lowFreqSonar - id: %d, cmd: %d", e.id, e.cmd); + break; + case 37: + LOG_F(INFO, "DevCmdExt received launchControler - id: %d, cmd: %d", e.id, e.cmd); + break; + case 38: + LOG_F(INFO, "DevCmdExt received photoSensor - id: %d, cmd: %d", e.id, e.cmd); + break; + case 39: + LOG_F(INFO, "DevCmdExt received electSensor - id: %d, cmd: %d", e.id, e.cmd); + break; + case 40: + LOG_F(INFO, "DevCmdExt received commMast - id: %d, cmd: %d", e.id, e.cmd); + break; + case 41: + LOG_F(INFO, "DevCmdExt received mastLiftingServo - id: %d, cmd: %d", e.id, e.cmd); + break; + case 42: + LOG_F(INFO, "DevCmdExt received USBL - id: %d, cmd: %d", e.id, e.cmd); + break; + case 43: + LOG_F(INFO, "DevCmdExt received DVL - id: %d, cmd: %d", e.id, e.cmd); + break; + case 44: + LOG_F(INFO, "DevCmdExt received buoyancyAdjust1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 45: + LOG_F(INFO, "DevCmdExt received buoyancyAdjust2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 46: + LOG_F(INFO, "DevCmdExt received buoyancyAdjust3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 47: + LOG_F(INFO, "DevCmdExt received buoyancyAdjust4 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 48: + LOG_F(INFO, "DevCmdExt received buoyancyAdjust5 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 49: + LOG_F(INFO, "DevCmdExt received sternRudderServo1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 50: + LOG_F(INFO, "DevCmdExt received sternRudderServo2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 51: + LOG_F(INFO, "DevCmdExt received bowRudderServo3 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 52: + LOG_F(INFO, "DevCmdExt received bowRudderServo4 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 53: + LOG_F(INFO, "DevCmdExt received thruster - id: %d, cmd: %d", e.id, e.cmd); + break; + case 54: + LOG_F(INFO, "DevCmdExt received bowThrow - id: %d, cmd: %d", e.id, e.cmd); + break; + case 55: + LOG_F(INFO, "DevCmdExt received sternThrow - id: %d, cmd: %d", e.id, e.cmd); + break; + case 56: + LOG_F(INFO, "DevCmdExt received buoyage - id: %d, cmd: %d", e.id, e.cmd); + break; + case 57: + LOG_F(INFO, "DevCmdExt received ins - id: %d, cmd: %d", e.id, e.cmd); + break; + case 58: + LOG_F(INFO, "DevCmdExt received ntp - id: %d, cmd: %d", e.id, e.cmd); + break; + case 59: + LOG_F(INFO, "DevCmdExt received inputWaterSensor1 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 60: + LOG_F(INFO, "DevCmdExt received inputWaterSensor2 - id: %d, cmd: %d", e.id, e.cmd); + break; + case 61: + LOG_F(INFO, "DevCmdExt received inputWaterSensor3 - id: %d, cmd: %d", e.id, e.cmd); + break; + default: + LOG_F(WARNING, "DevCmdExt received unknown id: %d, cmd: %d", e.id, e.cmd); + break; + } +} + + // InitState实现 void InitState::entry() { PowerManagerFsm::entry(); @@ -59,6 +256,7 @@ void FaultState::react(FaultEvent const & e) { } } + void PowerManagerFsm::handelPowerCmd(){ switch (pm->m_msCmd.powerCMD) { @@ -176,6 +374,9 @@ void PowerManagerFsm::handleModCmd(){ LOG_F(INFO, "当前工作模式: %d", pm->currentMod); } +void PowerManagerFsm::handleDeviceCmd() { + LOG_F(INFO, "开始处理设备命令:"); +} @@ -386,4 +587,5 @@ void FloatDown::react(TaskStart const &) LOG_F(INFO, "进入上浮下潜模式"); } + FSM_INITIAL_STATE(PowerManagerFsm, InitState); \ No newline at end of file diff --git a/src/pPowerManger/PowerManagerFsm.hpp b/src/pPowerManger/PowerManagerFsm.hpp index 7fde2f2..bbbc747 100644 --- a/src/pPowerManger/PowerManagerFsm.hpp +++ b/src/pPowerManger/PowerManagerFsm.hpp @@ -29,6 +29,13 @@ struct FaultEvent : tinyfsm::Event { struct MasterCommandEvent : tinyfsm::Event {}; struct TaskStart : tinyfsm::Event { }; struct DeviceCmd : tinyfsm::Event { }; +struct DevCmdExt : tinyfsm::Event { + int id; + int cmd; + DevCmdExt() : id(0), cmd(0) {}; + DevCmdExt(int id, int cmd) : id(id), cmd(cmd) {}; +}; + class PowerManagerFsm : public tinyfsm::Fsm { protected: @@ -44,14 +51,16 @@ public: virtual void react(InitEvent const &) {}; virtual void react(StandbyEvent const &) { }; virtual void react(FaultEvent const &) { }; - virtual void react(MasterCommandEvent const &) { std::cout << "[ Reseve Envt ] " << "No Idear" << std::endl; }; - virtual void react(TaskStart const &) { std::cout << "[ Reseve Envt ] " << "No Idear" << std::endl; }; - virtual void react(DeviceCmd const &) { std::cout << "[ Reseve Envt ] " << "No Idear" << std::endl; }; + virtual void react(MasterCommandEvent const &) { LOG_F(INFO, "MasterCommandEvent");}; + virtual void react(TaskStart const &) { LOG_F(INFO, "TaskStart"); }; + virtual void react(DeviceCmd const &) { LOG_F(INFO, "DeviceCmd"); }; + virtual void react(DevCmdExt const &e); //操作函数 void handelPowerCmd(); void handleModCmd(); - void handleWorkCmd(); + void handleWorkCmd(); + void handleDeviceCmd(); // 状态机生命周期方法 virtual void entry() { @@ -104,7 +113,6 @@ public: void react(TaskStart const &) override; // void react(DeviceCmd const &) override; private: - void handlePowerCommands(); void handlePowerOn(); }; diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index ce7972a..b587c58 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -47,15 +47,15 @@ PowerManger::PowerManger() initControlCmd(); //初始化数据库 - string dbPath = "/home/zjk/project/H100/H100PowerManger/data/power_data.db"; - m_db = new SQLiteDB(dbPath); - 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)); + // string dbPath = "/home/zjk/project/H100/H100PowerManger/data/power_data.db"; + // m_db = new SQLiteDB(dbPath); + // 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)); } @@ -64,7 +64,7 @@ PowerManger::PowerManger() PowerManger::~PowerManger() { - delete m_db; + // delete m_db; delete m_lowerCommManager; } @@ -241,14 +241,14 @@ bool PowerManger::FsmLoop() bool PowerManger::writeDataToDB() { //写入设备状态 - 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; + // 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; diff --git a/src/pPowerManger/PowerManger.h b/src/pPowerManger/PowerManger.h index 537ebdc..0d3190c 100644 --- a/src/pPowerManger/PowerManger.h +++ b/src/pPowerManger/PowerManger.h @@ -32,7 +32,7 @@ #include "udpComm.h" #include "pmSysvariable.h" #include "PowerManagerFsm.hpp" -#include "SQLiteDB.h" +// #include "SQLiteDB.h" #include "driver.h" #include "LowerCommManager.h" #include "UpperCommManager.h" @@ -63,7 +63,7 @@ class PowerManger : public AppCastingMOOSApp public: void updateTime(){m_current_time = MOOSTime();} //数据库 - SQLiteDB* m_db; + // SQLiteDB* m_db; bool writeDataToDB(); /************************************************************/ diff --git a/src/pPowerManger/UpperCommManager.cpp b/src/pPowerManger/UpperCommManager.cpp index 6336b7b..7d28acc 100644 --- a/src/pPowerManger/UpperCommManager.cpp +++ b/src/pPowerManger/UpperCommManager.cpp @@ -27,9 +27,39 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) } else if(key == DB_TO_PM_MISSION) { m_pm->m_missionState = getMission(key, strJson); + //TODO:转移到对应工况下 + return true; + } else if(key == DB_TO_PM_SETOPCONDITION) { + m_pm->m_msCmd.workCMD = getSetOpCondition(key, strJson); + MasterCommandEvent event; + PowerManagerFsm::dispatch(event); + return true; + } else if(key == DB_TO_PM_SETOPMODE) { + m_pm->m_msCmd.modCMD = getSetOpMode(key, strJson); + MasterCommandEvent event; + PowerManagerFsm::dispatch(event); + return true; + } else if(key == DB_TO_PM_SETPMSYS) { + m_pm->m_msCmd.powerCMD = getSetPMSys(key, strJson); + MasterCommandEvent event; + PowerManagerFsm::dispatch(event); + return true; + } else if(key == DB_TO_PM_SETDEVSWITCH) { + DeviceSwitchCmd cmd; + cmd = getSetDevSwitch(key, strJson); + if (cmd.id < 0) { + LOG_F(WARNING, "parse device switch error:%s", strJson.c_str()); + } + else { + DevCmdExt devCmdExt; + devCmdExt.id = cmd.id; + devCmdExt.cmd = cmd.cmd; + PowerManagerFsm::dispatch(devCmdExt); + } + LOG_F(INFO, "set dev switch success"); return true; } - std::cout << "Unknown key: " << key << std::endl; + LOG_F(WARNING, "Unknown key: %s", key.c_str()); return false; } @@ -133,6 +163,101 @@ MissionState UpperCommManager::getMission(const std::string& key, const std::str return mission; } +int UpperCommManager::getSetOpCondition(const std::string& key, const std::string& msg) +{ + Json::Value root; + Json::CharReaderBuilder builder; + JSONCPP_STRING errs; + + // 解析JSON字符串 + std::istringstream stream(msg); + if (!Json::parseFromStream(builder, stream, &root, &errs)) { + LOG_F(WARNING, "JSON解析失败: %s", errs.c_str()); + return -1; + } + + // 检查并读取操作条件 + if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) { + return root["opCondition"].asUInt(); + LOG_F(INFO, "上位机指令:opCondition: %d", root["opCondition"].asUInt()); + } else { + LOG_F(WARNING, "缺少或类型不匹配: opCondition"); + return -1; + } +} + +int UpperCommManager::getSetOpMode(const std::string& key, const std::string& msg) +{ + Json::Value root; + Json::CharReaderBuilder builder; + JSONCPP_STRING errs; + + // 解析JSON字符串 + std::istringstream stream(msg); + if (!Json::parseFromStream(builder, stream, &root, &errs)) { + LOG_F(WARNING, "JSON解析失败: %s", errs.c_str()); + return -1; + } + + // 检查并读取操作模式 + if (root.isMember("state_uint8") && root["state_uint8"].isUInt()) { + return root["state_uint8"].asUInt(); + } else { + LOG_F(WARNING, "缺少或类型不匹配: opMode"); + return -1; + } +} + +int UpperCommManager::getSetPMSys(const std::string& key, const std::string& msg) +{ + Json::Value root; + Json::CharReaderBuilder builder; + JSONCPP_STRING errs; + + // 解析JSON字符串 + std::istringstream stream(msg); + if (!Json::parseFromStream(builder, stream, &root, &errs)) { + std::cerr << "JSON解析失败: " << errs << std::endl; + return -1; + } + + // 检查并读取电源系统设置 + if (root.isMember("powerCmd_uint8") && root["powerCmd_uint8"].isUInt()) { + return root["powerCmd_uint8"].asUInt(); + } else { + LOG_F(WARNING, "缺少或类型不匹配: powerCmd_uint8"); + return -1; + } +} + +DeviceSwitchCmd UpperCommManager::getSetDevSwitch(const std::string& key, const std::string& msg) +{ + Json::Value root; + Json::CharReaderBuilder builder; + JSONCPP_STRING errs; + DeviceSwitchCmd cmd; + // 解析JSON字符串 + std::istringstream stream(msg); + if (!Json::parseFromStream(builder, stream, &root, &errs)) { + LOG_F(WARNING, "JSON解析失败: %s", errs.c_str()); + cmd.id = -1; + } + + // 检查并读取设备开关状态 + if (root.isMember("id_uint8") && root["id_uint8"].isUInt()) { + cmd.id = root["id_uint8"].asUInt(); + } else { + cmd.id = -1; + LOG_F(WARNING, "缺少或类型不匹配: id_uint8"); + } + if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) { + cmd.cmd = root["cmd_uint8"].asUInt(); + } else { + LOG_F(WARNING, "缺少或类型不匹配: state_bool"); + } + return cmd; +} + const std::string UpperCommManager::getCurrentEquState(DriverTable& driver) { return m_pm->m_driver.saveDriverTableToJson(&driver); diff --git a/src/pPowerManger/UpperCommManager.h b/src/pPowerManger/UpperCommManager.h index 321cd75..28eecd8 100644 --- a/src/pPowerManger/UpperCommManager.h +++ b/src/pPowerManger/UpperCommManager.h @@ -11,7 +11,7 @@ using namespace std; #define VAR_TO_STR(var) #var //能源管理反馈的消息 -#define PM_TO_DB_STATE "uPower_pmState_st" +#define PM_TO_DB_STATE "uPower_pmState_fb" #define PM_TO_DB_CURRENTSTATE "uPower_currentState_st" #define PM_TO_DB_DISSTATE "uPower_disSysState_st" #define PM_TO_DB_LIBATSTATE "uPower_liBatState_st" @@ -29,6 +29,12 @@ using namespace std; #define DB_TO_PM_DEEPTH "uDevice_depth_st" #define DB_TO_PM_MISSION "uPlan_taskStart_cmd" +//外部通信消息 +#define DB_TO_PM_SETOPCONDITION "uExternComm_setOpCondition_cmd" +#define DB_TO_PM_SETOPMODE "uExternComm_setOpMode_cmd" +#define DB_TO_PM_SETPMSYS "uExternComm_setPowerSystem_cmd" +#define DB_TO_PM_SETDEVSWITCH "uExternComm_setDeviceSwitch_cmd" + class PowerManger; // 前向声明 class UpperCommManager { @@ -51,7 +57,11 @@ public: const DriverTable getSubDisState(const std::string& key, const std::string& msg); const int getDeepth(const std::string& key, const std::string& msg); MissionState getMission(const std::string& key, const std::string& msg); - + // 处理外部通信消息 + int getSetOpCondition(const std::string& key, const std::string& msg); + int getSetOpMode(const std::string& key, const std::string& msg); + int getSetPMSys(const std::string& key, const std::string& msg); + DeviceSwitchCmd getSetDevSwitch(const std::string& key, const std::string& msg); const std::string getCurrentEquState(DriverTable& driver); const std::string getSubDisCmd(DriverTable& driver); @@ -59,6 +69,7 @@ public: string getTypeName(const string typeName); bool saveStringToJsonFile(const string &strJson, const string &filePath); + private: PowerManger* m_pm; MSControlCmd m_msCmd; diff --git a/src/pPowerManger/driver.cpp b/src/pPowerManger/driver.cpp index 7e2cc68..40198e1 100644 --- a/src/pPowerManger/driver.cpp +++ b/src/pPowerManger/driver.cpp @@ -18,43 +18,6 @@ void Driver::setDebug(bool debug) { this->debug = debug; } -int Driver::getDriverTable(workCondition condition, DriverTable* driverTable) -{ - switch (condition) - { - case STANDBY: - - break; - - case SHORE_BASED_READY: - /* code */ - break; - - case WATER_BASED_READY: - /* code */ - break; - - case CRUISE_MODE: - /* code */ - break; - - case HIGH_SPEED_MODE: - /* code */ - break; - - case ASCEND_DESCEND: - /* code */ - break; - - case BUOYANCY_ADJUST: - /* code */ - break; - - default: - break; - } -} - void Driver::getSTANDBYTable(DriverTable* driverTable) { diff --git a/src/pPowerManger/driver.h b/src/pPowerManger/driver.h index e17d2ca..c30d7c7 100644 --- a/src/pPowerManger/driver.h +++ b/src/pPowerManger/driver.h @@ -80,29 +80,6 @@ struct DriverTable unsigned char buoyage; }; -enum DriverState -{ - POWER_OFF, // 断电 - FULL_POWER_ON, // 全电 - INSTRUMENT_POWER_ON, // 仪表电上电 - MOTIVE_POWER_ON, // 动力电上电 -}; - -enum workCondition -{ - STANDBY, // 待机工况 - SHORE_BASED_READY, // 岸基备航 - WATER_BASED_READY, // 水中备航 - CRUISE_MODE, // 巡航模式 - HIGH_SPEED_MODE, // 高速模式 - ASCEND_DESCEND, // 上浮下潜 - BUOYANCY_ADJUST, // 浮调模式 - UNDERWATER_RECON, // 水下侦查 - SURFACE_RECON, // 水面侦查 - DJ_MODE, // DJ模式 - DEBUG_MODE // 调试模式 -}; - class Driver { public: @@ -114,7 +91,10 @@ public: DriverTable* currentDriverTable; DriverTable* nextDriverTable; - int getDriverTable(workCondition condition, DriverTable* driverTable); + //操作函数,操作指定设备 + //TODO: 增加设备操作函数 + // void setDriverTable(DriverTable* driverTable, ,DriverCmd::Type cmd); + void getSTANDBYTable(DriverTable* driverTable); void getSHORE_BASED_READYable(DriverTable* driverTable); @@ -126,6 +106,8 @@ public: void getUNDERWATER_RECONable(DriverTable* driverTable); void getSURFACE_RECONable(DriverTable* driverTable); void getDJ_MODEable(DriverTable* driverTable); + + // void setDriverTable(DriverTable* driverTable, ); std::string getDriverTableJson(); std::string getSubDisCmdJson(const DriverTable* driverTable); @@ -135,7 +117,7 @@ public: int loadDriverTableFromJson(const std::string &strJson, DriverTable& table); int SafeReadUInt(const Json::Value& root, const std::string& key, unsigned char& value); - + private: bool debug; diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h index 7b36fd1..822be2d 100644 --- a/src/pPowerManger/pmSysvariable.h +++ b/src/pPowerManger/pmSysvariable.h @@ -437,14 +437,7 @@ namespace WorkCondition { DEBUG_MODE = 12 // 调试模式 }; }; -// 抛载 throwLoad -// 运动上浮 floatUp -// 回收 recycle -// 悬停 hover -// 上浮通信 satComm -// 上浮校准 satCalibrate -// 游曳 tour -// 航行 sail + namespace TaskType { enum Type : unsigned char { THROW_LOAD = 1, // 抛载 @@ -487,6 +480,22 @@ namespace TaskType { } } +namespace DriverCmd { + enum Type : unsigned char { + OFF = 0, //断电 + ON = 1, //上电 + //仪表电上电 + METER_ON = 2, + //动力电上电 + POWER_ON = 3, + //仪表电断电 + METER_OFF = 4, + //动力电断电 + POWER_OFF = 5, + }; +}; + + struct MissionState { int type; @@ -494,5 +503,11 @@ struct MissionState bool enableBuoyancyAdjustment; }; +struct DeviceSwitchCmd +{ + int id; + int cmd; +}; + #endif \ No newline at end of file