屏蔽了squit3,实现了外部通讯交互

This commit is contained in:
zjk
2025-04-27 00:11:30 +08:00
parent 06226b6704
commit a45ba75c37
17 changed files with 580 additions and 257 deletions
+47 -48
View File
@@ -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
}
+10 -11
View File
@@ -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
]
}
+30 -31
View File
@@ -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
}
+38 -39
View File
@@ -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
}
+12
View File
@@ -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
}
+1 -1
View File
@@ -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
+6 -5
View File
@@ -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})
+32 -24
View File
@@ -44,28 +44,36 @@ LowerCommManager::~LowerCommManager(){
}
}
bool LowerCommManager::initUdpComm(){
//设置UDP监听端口
if(m_udpComm->udpScoket)
{
try
{
m_udpComm->udpScoket->vBindSocket();
cout<<MOOS::ConsoleColours::green()<< "UDP set succeed!"<< MOOS::ConsoleColours::reset() << endl;
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
cout<<MOOS::ConsoleColours::red()<< "UDP set Fild!"<< MOOS::ConsoleColours::reset() << endl;
if (m_udpComm->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<<MOOS::ConsoleColours::red()<< "UDP set Fild!"<< MOOS::ConsoleColours::reset() << endl;
return false;
}
return true;
return true;
}
void LowerCommManager::processPeriodicTasks() {
sendCcuCommand(m_pm->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;
}
+202
View File
@@ -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);
+13 -5
View File
@@ -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<PowerManagerFsm> {
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();
};
+18 -18
View File
@@ -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;
+2 -2
View File
@@ -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();
/************************************************************/
+126 -1
View File
@@ -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);
+13 -2
View File
@@ -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;
-37
View File
@@ -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)
{
+7 -25
View File
@@ -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;
+23 -8
View File
@@ -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