应急联调完成

This commit is contained in:
zjk
2025-05-19 20:42:20 +08:00
parent baa2e395fa
commit fea319d3bf
35 changed files with 1188 additions and 558 deletions
+18 -18
View File
@@ -48,14 +48,14 @@ bool SQLiteDB::bindParameters<DriverTable>(sqlite3_stmt* stmt, const DriverTable
sqlite3_bind_int(stmt, index++, data.DVL); sqlite3_bind_int(stmt, index++, data.DVL);
sqlite3_bind_int(stmt, index++, data.lowFreqSonar); sqlite3_bind_int(stmt, index++, data.lowFreqSonar);
sqlite3_bind_int(stmt, index++, data.USBL); sqlite3_bind_int(stmt, index++, data.USBL);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet1); sqlite3_bind_int(stmt, index++, data.bowWaterInet1);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet2); sqlite3_bind_int(stmt, index++, data.bowWaterInet2);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet3); sqlite3_bind_int(stmt, index++, data.bowWaterInet3);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet4); sqlite3_bind_int(stmt, index++, data.bowWaterInet4);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet5); sqlite3_bind_int(stmt, index++, data.bowWaterInet5);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet6); sqlite3_bind_int(stmt, index++, data.bowWaterInet6);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet7); sqlite3_bind_int(stmt, index++, data.bowWaterInet7);
sqlite3_bind_int(stmt, index++, data.bowWaterlnet8); sqlite3_bind_int(stmt, index++, data.bowWaterInet8);
sqlite3_bind_int(stmt, index++, data.bowRudderDeploy); sqlite3_bind_int(stmt, index++, data.bowRudderDeploy);
sqlite3_bind_int(stmt, index++, data.bowRudderServo1); sqlite3_bind_int(stmt, index++, data.bowRudderServo1);
sqlite3_bind_int(stmt, index++, data.bowRudderServo2); sqlite3_bind_int(stmt, index++, data.bowRudderServo2);
@@ -405,14 +405,14 @@ bool SQLiteDB::createDriversTables(string tableName)
"bowRudderServo1 INTEGER DEFAULT 0, " "bowRudderServo1 INTEGER DEFAULT 0, "
"bowRudderServo2 INTEGER DEFAULT 0, " "bowRudderServo2 INTEGER DEFAULT 0, "
"bowThrow INTEGER DEFAULT 0, " "bowThrow INTEGER DEFAULT 0, "
"bowWaterlnet1 INTEGER DEFAULT 0, " "bowWaterInet1 INTEGER DEFAULT 0, "
"bowWaterlnet2 INTEGER DEFAULT 0, " "bowWaterInet2 INTEGER DEFAULT 0, "
"bowWaterlnet3 INTEGER DEFAULT 0, " "bowWaterInet3 INTEGER DEFAULT 0, "
"bowWaterlnet4 INTEGER DEFAULT 0, " "bowWaterInet4 INTEGER DEFAULT 0, "
"bowWaterlnet5 INTEGER DEFAULT 0, " "bowWaterInet5 INTEGER DEFAULT 0, "
"bowWaterlnet6 INTEGER DEFAULT 0, " "bowWaterInet6 INTEGER DEFAULT 0, "
"bowWaterlnet7 INTEGER DEFAULT 0, " "bowWaterInet7 INTEGER DEFAULT 0, "
"bowWaterlnet8 INTEGER DEFAULT 0, " "bowWaterInet8 INTEGER DEFAULT 0, "
"buoyage INTEGER DEFAULT 0, " "buoyage INTEGER DEFAULT 0, "
"buoyancyAdjust1 INTEGER DEFAULT 0, " "buoyancyAdjust1 INTEGER DEFAULT 0, "
"buoyancyAdjust2 INTEGER DEFAULT 0, " "buoyancyAdjust2 INTEGER DEFAULT 0, "
@@ -1019,8 +1019,8 @@ bool SQLiteDB::insertDriverTables(DriverTable driverTable,string tableName)
"inputWaterSensor1, inputWaterSensor2, inputWaterSensor3, " "inputWaterSensor1, inputWaterSensor2, inputWaterSensor3, "
"singleBeamSonar1, singleBeamSonar2, singleBeamSonar3, singleBeamSonar4, singleBeamSonar5, " "singleBeamSonar1, singleBeamSonar2, singleBeamSonar3, singleBeamSonar4, singleBeamSonar5, "
"singleBeamSonar6, singleBeamSonar7, singleBeamSonar8, forwardSonar, DVL, lowFreqSonar, USBL, " "singleBeamSonar6, singleBeamSonar7, singleBeamSonar8, forwardSonar, DVL, lowFreqSonar, USBL, "
"bowWaterlnet1, bowWaterlnet2, bowWaterlnet3, bowWaterlnet4, bowWaterlnet5, bowWaterlnet6, " "bowWaterInet1, bowWaterInet2, bowWaterInet3, bowWaterInet4, bowWaterInet5, bowWaterInet6, "
"bowWaterlnet7, bowWaterlnet8, bowRudderDeploy, bowRudderServo1, bowRudderServo2, " "bowWaterInet7, bowWaterInet8, bowRudderDeploy, bowRudderServo1, bowRudderServo2, "
"bowCover1, bowCover2, bowCover3, bowCover4, bowCover5, bowCover6, waterInject, " "bowCover1, bowCover2, bowCover3, bowCover4, bowCover5, bowCover6, waterInject, "
"mastLiftingServo, buoyancyAdjust1, buoyancyAdjust2, buoyancyAdjust3, buoyancyAdjust4, " "mastLiftingServo, buoyancyAdjust1, buoyancyAdjust2, buoyancyAdjust3, buoyancyAdjust4, "
"buoyancyAdjust5, sternRudderServo1, sternRudderServo2, sternRudderServo3, sternRudderServo4, " "buoyancyAdjust5, sternRudderServo1, sternRudderServo2, sternRudderServo3, sternRudderServo4, "
+2
View File
@@ -1,3 +1,5 @@
//SERVERHOST = 192.168.0.100
//SERVERPORT = 9000
ProcessConfig = pPowerManger ProcessConfig = pPowerManger
{ {
AppTick = 4 AppTick = 4
+8 -8
View File
@@ -11,14 +11,14 @@
"bowRudderServo1" : 0, "bowRudderServo1" : 0,
"bowRudderServo2" : 0, "bowRudderServo2" : 0,
"bowThrow" : 0, "bowThrow" : 0,
"bowWaterlnet1" : 0, "bowWaterInet1" : 0,
"bowWaterlnet2" : 0, "bowWaterInet2" : 0,
"bowWaterlnet3" : 0, "bowWaterInet3" : 0,
"bowWaterlnet4" : 0, "bowWaterInet4" : 0,
"bowWaterlnet5" : 0, "bowWaterInet5" : 0,
"bowWaterlnet6" : 0, "bowWaterInet6" : 0,
"bowWaterlnet7" : 0, "bowWaterInet7" : 0,
"bowWaterlnet8" : 0, "bowWaterInet8" : 0,
"buoyage" : 0, "buoyage" : 0,
"buoyancyAdjust1" : 0, "buoyancyAdjust1" : 0,
"buoyancyAdjust2" : 0, "buoyancyAdjust2" : 0,
+8 -8
View File
@@ -11,14 +11,14 @@
"bowRudderServo1_uni8" : 0, "bowRudderServo1_uni8" : 0,
"bowRudderServo2_uni8" : 0, "bowRudderServo2_uni8" : 0,
"bowThrow_uni8" : 0, "bowThrow_uni8" : 0,
"bowWaterlnet1_uni8" : 0, "bowWaterInet1_uni8" : 0,
"bowWaterlnet2_uni8" : 0, "bowWaterInet2_uni8" : 0,
"bowWaterlnet3_uni8" : 0, "bowWaterInet3_uni8" : 0,
"bowWaterlnet4_uni8" : 0, "bowWaterInet4_uni8" : 0,
"bowWaterlnet5_uni8" : 0, "bowWaterInet5_uni8" : 0,
"bowWaterlnet6_uni8" : 0, "bowWaterInet6_uni8" : 0,
"bowWaterlnet7_uni8" : 0, "bowWaterInet7_uni8" : 0,
"bowWaterlnet8_uni8" : 0, "bowWaterInet8_uni8" : 0,
"buoyage_uni8" : 0, "buoyage_uni8" : 0,
"buoyancyAdjust1_uni8" : 0, "buoyancyAdjust1_uni8" : 0,
"buoyancyAdjust2_uni8" : 0, "buoyancyAdjust2_uni8" : 0,
+8 -8
View File
@@ -11,14 +11,14 @@
"bowRudderServo1_uni8" : 0, "bowRudderServo1_uni8" : 0,
"bowRudderServo2_uni8" : 0, "bowRudderServo2_uni8" : 0,
"bowThrow_uni8" : 0, "bowThrow_uni8" : 0,
"bowWaterlnet1_uni8" : 0, "bowWaterInet1_uni8" : 0,
"bowWaterlnet2_uni8" : 0, "bowWaterInet2_uni8" : 0,
"bowWaterlnet3_uni8" : 0, "bowWaterInet3_uni8" : 0,
"bowWaterlnet4_uni8" : 0, "bowWaterInet4_uni8" : 0,
"bowWaterlnet5_uni8" : 0, "bowWaterInet5_uni8" : 0,
"bowWaterlnet6_uni8" : 0, "bowWaterInet6_uni8" : 0,
"bowWaterlnet7_uni8" : 0, "bowWaterInet7_uni8" : 0,
"bowWaterlnet8_uni8" : 0, "bowWaterInet8_uni8" : 0,
"buoyage_uni8" : 0, "buoyage_uni8" : 0,
"buoyancyAdjust1_uni8" : 0, "buoyancyAdjust1_uni8" : 0,
"buoyancyAdjust2_uni8" : 0, "buoyancyAdjust2_uni8" : 0,
+8 -8
View File
@@ -11,14 +11,14 @@
"bowRudderServo1" : 0, "bowRudderServo1" : 0,
"bowRudderServo2" : 0, "bowRudderServo2" : 0,
"bowThrow" : 0, "bowThrow" : 0,
"bowWaterlnet1" : 0, "bowWaterInet1" : 0,
"bowWaterlnet2" : 0, "bowWaterInet2" : 0,
"bowWaterlnet3" : 0, "bowWaterInet3" : 0,
"bowWaterlnet4" : 0, "bowWaterInet4" : 0,
"bowWaterlnet5" : 0, "bowWaterInet5" : 0,
"bowWaterlnet6" : 0, "bowWaterInet6" : 0,
"bowWaterlnet7" : 0, "bowWaterInet7" : 0,
"bowWaterlnet8" : 0, "bowWaterInet8" : 0,
"buoyage" : 0, "buoyage" : 0,
"buoyancyAdjust1" : 0, "buoyancyAdjust1" : 0,
"buoyancyAdjust2" : 0, "buoyancyAdjust2" : 0,
+8 -8
View File
@@ -11,14 +11,14 @@
"bowRudderServo1" : 0, "bowRudderServo1" : 0,
"bowRudderServo2" : 0, "bowRudderServo2" : 0,
"bowThrow" : 0, "bowThrow" : 0,
"bowWaterlnet1" : 0, "bowWaterInet1" : 0,
"bowWaterlnet2" : 0, "bowWaterInet2" : 0,
"bowWaterlnet3" : 0, "bowWaterInet3" : 0,
"bowWaterlnet4" : 0, "bowWaterInet4" : 0,
"bowWaterlnet5" : 0, "bowWaterInet5" : 0,
"bowWaterlnet6" : 0, "bowWaterInet6" : 0,
"bowWaterlnet7" : 0, "bowWaterInet7" : 0,
"bowWaterlnet8" : 0, "bowWaterInet8" : 0,
"buoyage" : 0, "buoyage" : 0,
"buoyancyAdjust1" : 0, "buoyancyAdjust1" : 0,
"buoyancyAdjust2" : 0, "buoyancyAdjust2" : 0,
+8 -4
View File
@@ -25,6 +25,9 @@ SET(HTTP_SRC
httpserver/mongoose.c httpserver/mongoose.c
httpserver/httpserver.cpp) httpserver/httpserver.cpp)
SET(UDP_COMM_SRC
udpcomm/udpComm.cpp)
SET(FSMLIB_SRC SET(FSMLIB_SRC
fsm/PowerManagerFsm.cpp fsm/PowerManagerFsm.cpp
fsm/CruiseMode.cpp fsm/CruiseMode.cpp
@@ -46,9 +49,10 @@ SET(SRC
${FSMLIB_SRC} ${FSMLIB_SRC}
${SQLITE_SRC} ${SQLITE_SRC}
${HTTP_SRC} ${HTTP_SRC}
${UDP_COMM_SRC}
PowerManger.cpp PowerManger.cpp
PowerManger_Info.cpp PowerManger_Info.cpp
udpComm.cpp # udpComm.cpp
main.cpp main.cpp
# SQLiteDB.cpp # SQLiteDB.cpp
driver.cpp driver.cpp
@@ -93,7 +97,7 @@ SET(DRIVER_SRC
# PowerManagerFsm.cpp) # PowerManagerFsm.cpp)
# ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC}) # ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC})
ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC}) # ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC})
# ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC}) # # ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC})
ADD_LIBRARY(Driver STATIC ${DRIVER_SRC}) # ADD_LIBRARY(Driver STATIC ${DRIVER_SRC})
# ADD_LIBRARY(PowerMange STATIC ${POWERMANGE_SRC}) # ADD_LIBRARY(PowerMange STATIC ${POWERMANGE_SRC})
+1 -1
View File
@@ -1,7 +1,7 @@
#include "LowerCommManager.h" #include "LowerCommManager.h"
#include "PowerManger.h" #include "PowerManger.h"
#include "driver.h" #include "driver.h"
#include "udpComm.h" #include "udpcomm/udpComm.h"
bool _ListenCB(void * pParam) bool _ListenCB(void * pParam)
{ {
+2 -2
View File
@@ -5,14 +5,14 @@
#include "MOOS/libMOOS/Comms/XPCUdpSocket.h" #include "MOOS/libMOOS/Comms/XPCUdpSocket.h"
#include "MOOS/libMOOS/Utils/MOOSThread.h" #include "MOOS/libMOOS/Utils/MOOSThread.h"
#include "MOOS/libMOOS/Utils/MOOSLock.h" #include "MOOS/libMOOS/Utils/MOOSLock.h"
#include "ccuUdpMsg.h" #include "../udpcomm/ccuUdpMsg.h"
#include "pmSysvariable.h" #include "pmSysvariable.h"
#include <queue> #include <queue>
#include <map> #include <map>
#include <functional> #include <functional>
#include <atomic> #include <atomic>
#include <vector> #include <vector>
#include "udpComm.h" #include "udpcomm/udpComm.h"
#include <functional> #include <functional>
class PowerManger; // 前向声明 class PowerManger; // 前向声明
+8 -3
View File
@@ -35,7 +35,7 @@ PowerManger::PowerManger()
m_faultNum = 0; m_faultNum = 0;
m_ticker = 0; m_ticker = 0;
m_leakage = 0; m_leakage = 0;
faultCode.push_back(0); faultCode.clear();
m_pmCurrentState = {}; m_pmCurrentState = {};
m_currentDisBreakerState = {}; m_currentDisBreakerState = {};
@@ -68,7 +68,6 @@ PowerManger::PowerManger()
m_httpServer->setLowerCommManager(m_lowerCommManager); m_httpServer->setLowerCommManager(m_lowerCommManager);
m_httpServer->setSystemData(m_systemData); m_httpServer->setSystemData(m_systemData);
m_httpServer->start(); m_httpServer->start();
} }
//--------------------------------------------------------- //---------------------------------------------------------
@@ -151,7 +150,6 @@ bool PowerManger::Iterate()
m_systemData->device_common_status.dis_lv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighBVolBusFbMsg_Update_time; m_systemData->device_common_status.dis_lv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighBVolBusFbMsg_Update_time;
m_systemData->device_common_status.dis_lv_c2.lastUpdateTime = m_lowerCommManager->msg_disLowBusFbMsg_Update_time; m_systemData->device_common_status.dis_lv_c2.lastUpdateTime = m_lowerCommManager->msg_disLowBusFbMsg_Update_time;
m_systemData->updateCommonStatus(); m_systemData->updateCommonStatus();
if (m_ticker++ % 5 == 0) if (m_ticker++ % 5 == 0)
{ {
m_CcuColCmd.heartbeat++; m_CcuColCmd.heartbeat++;
@@ -358,3 +356,10 @@ unsigned char PowerManger::getFaultLevel()
} }
return maxLevel; return maxLevel;
} }
void PowerManger::injectFault(unsigned type,unsigned int faultCode){
LOG_F(INFO, "注入故障: %d %d", type, faultCode);
TestEvent testEvent("故障注入测试",type,faultCode);
PowerManagerFsm::dispatch(testEvent);
}
+8 -5
View File
@@ -26,9 +26,9 @@
#include "MOOS/libMOOS/Utils/MOOSThread.h" #include "MOOS/libMOOS/Utils/MOOSThread.h"
#include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h" #include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h"
#include "MOOS/libMOOS/Utils/ConsoleColours.h" #include "MOOS/libMOOS/Utils/ConsoleColours.h"
#include "ccuUdpMsg.h" #include "../udpcomm/ccuUdpMsg.h"
#include "json/json.h" #include "json/json.h"
#include "udpComm.h" #include "udpcomm/udpComm.h"
#include "pmSysvariable.h" #include "pmSysvariable.h"
#include "fsm/PowerManagerFsm.hpp" #include "fsm/PowerManagerFsm.hpp"
#include "driver.h" #include "driver.h"
@@ -37,11 +37,11 @@
#include "sqlit3/SQLite.h" #include "sqlit3/SQLite.h"
#include "systemData.h" #include "systemData.h"
#include "httpserver/httpserver.h" #include "httpserver/httpserver.h"
#include "faultCode.h"
#define IPORT 5001 #define IPORT 5001
#define CCUPORT 7000 #define CCUPORT 7000
// #define CCUHOST "192.168.0.140" #define CCUHOST "192.168.0.140"
#define CCUHOST "127.0.0.0" // #define CCUHOST "127.0.0.0"
#define MAX_UDP_PKT_SIZE 65535 #define MAX_UDP_PKT_SIZE 65535
#define SKEW_TOLERANCE 5 #define SKEW_TOLERANCE 5
@@ -138,6 +138,9 @@ class PowerManger : public AppCastingMOOSApp
double GetPublicCPULoad() { return GetCPULoad(); } double GetPublicCPULoad() { return GetCPULoad(); }
double GetPublicTimeSinceIterate() { return GetTimeSinceIterate(); } double GetPublicTimeSinceIterate() { return GetTimeSinceIterate(); }
double GetPublicLastIterateTime() { return GetLastIterateTime(); } double GetPublicLastIterateTime() { return GetLastIterateTime(); }
public:
//故障注入
void injectFault(unsigned type,unsigned int faultCode);
}; };
#endif #endif
+4 -3
View File
@@ -134,14 +134,15 @@ void UpperCommManager::buildSystemReport() {
m_pmStateMsg.state.powerState = m_pm->powerState; m_pmStateMsg.state.powerState = m_pm->powerState;
m_pmStateMsg.state.faultLevel = m_pm->faultLevel; m_pmStateMsg.state.faultLevel = m_pm->faultLevel;
m_pmStateMsg.state.faultCode = m_pm->faultCode; m_pmStateMsg.state.faultCode = m_pm->faultCode;
// cout << "m_pmStateMsg.state.faultCode.size():" << m_pmStateMsg.state.faultCode.size() << endl;
m_pmStateMsg.state.soc = m_pm->soc; m_pmStateMsg.state.soc = m_pm->soc;
m_pmStateMsg.state.sustainableTime = m_pm->sustainableTime; m_pmStateMsg.state.sustainableTime = m_pm->sustainableTime;
m_pmStateMsg.state.m_leakage = m_pm->m_leakage; m_pmStateMsg.state.m_leakage = m_pm->m_leakage;
m_pmStateMsg.state.m_faultNum = m_pm->m_faultNum; m_pmStateMsg.state.m_faultNum = m_pm->m_faultNum;
m_pm->sendNotification(m_pmStateMsg.key, m_pmStateMsg.buildMsg()); m_pm->sendNotification(m_pmStateMsg.key, m_pmStateMsg.buildMsg());
m_pm->sendNotification(m_fcsStateMsg.key, m_fcsStateMsg.buildMsg(m_pm->m_pmCurrentState.ccustate)); m_pm->sendNotification(m_fcsStateMsg.key, m_fcsStateMsg.buildMsg(*(m_pm->m_systemData)));
m_pm->sendNotification(m_liBatStateMsg.key, m_liBatStateMsg.buildMsg(m_pm->m_pmCurrentState.ccustate)); m_pm->sendNotification(m_liBatStateMsg.key, m_liBatStateMsg.buildMsg(*(m_pm->m_systemData)));
m_pm->sendNotification(m_disSysStateMsg.key, m_disSysStateMsg.buildMsg(m_pm->m_currentDisBreakerState)); m_pm->sendNotification(m_disSysStateMsg.key, m_disSysStateMsg.buildMsg(*(m_pm->m_systemData),m_pm->m_currentDisBreakerState));
m_pm->sendNotification(m_currentStateMsg.key, m_currentStateMsg.buildMsg(m_pm->m_pmCurrentState)); m_pm->sendNotification(m_currentStateMsg.key, m_currentStateMsg.buildMsg(m_pm->m_pmCurrentState));
} }
-16
View File
@@ -59,22 +59,6 @@ public:
// 生成系统报告 // 生成系统报告
void buildSystemReport(); void buildSystemReport();
// 消息处理函数
// const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg);
// const DriverTable getEquipmentCmd(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 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);
// bool getTaskStop(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);
// const std::string getSubDisCmd(DriverTable& driver);
// 其他公共函数
// bool saveStringToJsonFile(const string &strJson, const string &filePath);
public: public:
//定义上位机消息 //定义上位机消息
uPower_equInsStateMsg m_equInsStateMsg; uPower_equInsStateMsg m_equInsStateMsg;
+99 -99
View File
@@ -66,14 +66,14 @@ void Driver::getSTANDBYTable(DriverTable* driverTable)
driverTable->bowRudderDeploy = 0; driverTable->bowRudderDeploy = 0;
driverTable->bowRudderServo1 = 0; driverTable->bowRudderServo1 = 0;
driverTable->bowRudderServo2 = 0; driverTable->bowRudderServo2 = 0;
driverTable->bowWaterlnet1 = 0; driverTable->bowWaterInet1 = 0;
driverTable->bowWaterlnet2 = 0; driverTable->bowWaterInet2 = 0;
driverTable->bowWaterlnet3 = 0; driverTable->bowWaterInet3 = 0;
driverTable->bowWaterlnet4 = 0; driverTable->bowWaterInet4 = 0;
driverTable->bowWaterlnet5 = 0; driverTable->bowWaterInet5 = 0;
driverTable->bowWaterlnet6 = 0; driverTable->bowWaterInet6 = 0;
driverTable->bowWaterlnet7 = 0; driverTable->bowWaterInet7 = 0;
driverTable->bowWaterlnet8 = 0; driverTable->bowWaterInet8 = 0;
driverTable->waterInject = 0; driverTable->waterInject = 0;
driverTable->mastLiftingServo = 0; driverTable->mastLiftingServo = 0;
driverTable->buoyancyAdjust1 = 0; driverTable->buoyancyAdjust1 = 0;
@@ -140,14 +140,14 @@ void Driver::getSHORE_BASED_READYable(DriverTable* driverTable)
driverTable->bowRudderDeploy = 1; driverTable->bowRudderDeploy = 1;
driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo1 = 1;
driverTable->bowRudderServo2 = 1; driverTable->bowRudderServo2 = 1;
driverTable->bowWaterlnet1 = 1; driverTable->bowWaterInet1 = 1;
driverTable->bowWaterlnet2 = 1; driverTable->bowWaterInet2 = 1;
driverTable->bowWaterlnet3 = 1; driverTable->bowWaterInet3 = 1;
driverTable->bowWaterlnet4 = 1; driverTable->bowWaterInet4 = 1;
driverTable->bowWaterlnet5 = 1; driverTable->bowWaterInet5 = 1;
driverTable->bowWaterlnet6 = 1; driverTable->bowWaterInet6 = 1;
driverTable->bowWaterlnet7 = 1; driverTable->bowWaterInet7 = 1;
driverTable->bowWaterlnet8 = 1; driverTable->bowWaterInet8 = 1;
driverTable->waterInject = 1; driverTable->waterInject = 1;
driverTable->mastLiftingServo = 1; driverTable->mastLiftingServo = 1;
driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust1 = 1;
@@ -213,14 +213,14 @@ void Driver::getWATER_BASED_READYable(DriverTable* driverTable)
driverTable->bowRudderDeploy = 1; driverTable->bowRudderDeploy = 1;
driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo1 = 1;
driverTable->bowRudderServo2 = 1; driverTable->bowRudderServo2 = 1;
driverTable->bowWaterlnet1 = 1; driverTable->bowWaterInet1 = 1;
driverTable->bowWaterlnet2 = 1; driverTable->bowWaterInet2 = 1;
driverTable->bowWaterlnet3 = 1; driverTable->bowWaterInet3 = 1;
driverTable->bowWaterlnet4 = 1; driverTable->bowWaterInet4 = 1;
driverTable->bowWaterlnet5 = 1; driverTable->bowWaterInet5 = 1;
driverTable->bowWaterlnet6 = 1; driverTable->bowWaterInet6 = 1;
driverTable->bowWaterlnet7 = 1; driverTable->bowWaterInet7 = 1;
driverTable->bowWaterlnet8 = 1; driverTable->bowWaterInet8 = 1;
driverTable->waterInject = 1; driverTable->waterInject = 1;
driverTable->mastLiftingServo = 1; driverTable->mastLiftingServo = 1;
driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust1 = 1;
@@ -273,14 +273,14 @@ void Driver::getCRUISE_MODEable(DriverTable* driverTable)
driverTable->bowRudderDeploy = 1; driverTable->bowRudderDeploy = 1;
driverTable->bowRudderServo1 = 1; driverTable->bowRudderServo1 = 1;
driverTable->bowRudderServo2 = 1; driverTable->bowRudderServo2 = 1;
driverTable->bowWaterlnet1 = 0; driverTable->bowWaterInet1 = 0;
driverTable->bowWaterlnet2 = 0; driverTable->bowWaterInet2 = 0;
driverTable->bowWaterlnet3 = 0; driverTable->bowWaterInet3 = 0;
driverTable->bowWaterlnet4 = 0; driverTable->bowWaterInet4 = 0;
driverTable->bowWaterlnet5 = 0; driverTable->bowWaterInet5 = 0;
driverTable->bowWaterlnet6 = 0; driverTable->bowWaterInet6 = 0;
driverTable->bowWaterlnet7 = 0; driverTable->bowWaterInet7 = 0;
driverTable->bowWaterlnet8 = 0; driverTable->bowWaterInet8 = 0;
driverTable->waterInject = 0; driverTable->waterInject = 0;
driverTable->mastLiftingServo = 1; driverTable->mastLiftingServo = 1;
driverTable->buoyancyAdjust1 = 1; driverTable->buoyancyAdjust1 = 1;
@@ -334,14 +334,14 @@ void Driver::getHIGH_SPEED_MODEable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet1 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_POWER_OFF;
driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF; driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF;
@@ -395,14 +395,14 @@ void Driver::getASCEND_DESCENDable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet1 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON;
driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON;
@@ -456,14 +456,14 @@ void Driver::getBUOYANCY_ADJUSTable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet1 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON;
driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON;
@@ -517,14 +517,14 @@ void Driver::getUNDERWATER_RECONable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet1 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_POWER_OFF; driverTable->mastLiftingServo = DRIVER_POWER_OFF;
driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON;
@@ -578,14 +578,14 @@ void Driver::getSURFACE_RECONable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF; driverTable->bowWaterInet1 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF; driverTable->bowWaterInet2 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF; driverTable->bowWaterInet3 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF; driverTable->bowWaterInet4 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF; driverTable->bowWaterInet5 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF; driverTable->bowWaterInet6 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF; driverTable->bowWaterInet7 = DRIVER_POWER_OFF;
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF; driverTable->bowWaterInet8 = DRIVER_POWER_OFF;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON;
driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON;
@@ -638,14 +638,14 @@ void Driver::getDJ_MODEable(DriverTable* driverTable)
driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON;
driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet1 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet1 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet2 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet2 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet3 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet3 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet4 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet4 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet5 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet5 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet6 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet6 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet7 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet7 = DRIVER_FULL_POWER_ON;
driverTable->bowWaterlnet8 = DRIVER_FULL_POWER_ON; driverTable->bowWaterInet8 = DRIVER_FULL_POWER_ON;
driverTable->waterInject = DRIVER_POWER_OFF; driverTable->waterInject = DRIVER_POWER_OFF;
driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON; driverTable->mastLiftingServo = DRIVER_FULL_POWER_ON;
driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON;
@@ -703,14 +703,14 @@ std::string Driver::saveDriverTableToJson(const DriverTable* driverTable)
root["bowRudderDeploy_uint8"] = driverTable->bowRudderDeploy; root["bowRudderDeploy_uint8"] = driverTable->bowRudderDeploy;
root["bowRudderServo1_uint8"] = driverTable->bowRudderServo1; root["bowRudderServo1_uint8"] = driverTable->bowRudderServo1;
root["bowRudderServo2_uint8"] = driverTable->bowRudderServo2; root["bowRudderServo2_uint8"] = driverTable->bowRudderServo2;
root["bowWaterlnet1_uint8"] = driverTable->bowWaterlnet1; root["bowWaterInet1_uint8"] = driverTable->bowWaterInet1;
root["bowWaterlnet2_uint8"] = driverTable->bowWaterlnet2; root["bowWaterInet2_uint8"] = driverTable->bowWaterInet2;
root["bowWaterlnet3_uint8"] = driverTable->bowWaterlnet3; root["bowWaterInet3_uint8"] = driverTable->bowWaterInet3;
root["bowWaterlnet4_uint8"] = driverTable->bowWaterlnet4; root["bowWaterInet4_uint8"] = driverTable->bowWaterInet4;
root["bowWaterlnet5_uint8"] = driverTable->bowWaterlnet5; root["bowWaterInet5_uint8"] = driverTable->bowWaterInet5;
root["bowWaterlnet6_uint8"] = driverTable->bowWaterlnet6; root["bowWaterInet6_uint8"] = driverTable->bowWaterInet6;
root["bowWaterlnet7_uint8"] = driverTable->bowWaterlnet7; root["bowWaterInet7_uint8"] = driverTable->bowWaterInet7;
root["bowWaterlnet8_uint8"] = driverTable->bowWaterlnet8; root["bowWaterInet8_uint8"] = driverTable->bowWaterInet8;
root["waterInject_uint8"] = driverTable->waterInject; root["waterInject_uint8"] = driverTable->waterInject;
root["mastLiftingServo_uint8"] = driverTable->mastLiftingServo; root["mastLiftingServo_uint8"] = driverTable->mastLiftingServo;
root["buoyancyAdjust1_uint8"] = driverTable->buoyancyAdjust1; root["buoyancyAdjust1_uint8"] = driverTable->buoyancyAdjust1;
@@ -789,9 +789,9 @@ vector<DriverCommand> Driver::loadDriverIdFromJson(const std::string &strJson) {
{"bowCover1", 9}, {"bowCover2", 10}, {"bowCover3", 11}, {"bowCover1", 9}, {"bowCover2", 10}, {"bowCover3", 11},
{"bowCover4", 12}, {"bowCover5", 13}, {"bowCover6", 14}, {"bowCover4", 12}, {"bowCover5", 13}, {"bowCover6", 14},
{"bowRudderDeploy", 15}, {"bowRudderServo1", 16}, {"bowRudderServo2", 17}, {"bowRudderDeploy", 15}, {"bowRudderServo1", 16}, {"bowRudderServo2", 17},
{"bowWaterlnet1", 27}, {"bowWaterlnet2", 28}, {"bowWaterlnet3", 29}, {"bowWaterInet1", 27}, {"bowWaterInet2", 28}, {"bowWaterInet3", 29},
{"bowWaterlnet4", 30}, {"bowWaterlnet5", 31}, {"bowWaterlnet6", 32}, {"bowWaterInet4", 30}, {"bowWaterInet5", 31}, {"bowWaterInet6", 32},
{"bowWaterlnet7", 33}, {"bowWaterlnet8", 34}, {"waterInject", 26}, {"bowWaterInet7", 33}, {"bowWaterInet8", 34}, {"waterInject", 26},
{"mastLiftingServo", 41}, {"buoyancyAdjust1", 44}, {"buoyancyAdjust2", 45}, {"mastLiftingServo", 41}, {"buoyancyAdjust1", 44}, {"buoyancyAdjust2", 45},
{"buoyancyAdjust3", 46}, {"buoyancyAdjust4", 47}, {"buoyancyAdjust5", 48}, {"buoyancyAdjust3", 46}, {"buoyancyAdjust4", 47}, {"buoyancyAdjust5", 48},
{"sternRudderServo1", 49}, {"sternRudderServo2", 50}, {"sternRudderServo3", 51}, {"sternRudderServo1", 49}, {"sternRudderServo2", 50}, {"sternRudderServo3", 51},
@@ -910,28 +910,28 @@ int Driver::loadDriverTableFromJson(const std::string &strJson, DriverTable& tab
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
// 执行机构 // 执行机构
error_code = SafeReadUInt(root, "bowWaterlnet1_uint8", table.bowWaterlnet1); error_code = SafeReadUInt(root, "bowWaterInet1_uint8", table.bowWaterInet1);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet2_uint8", table.bowWaterlnet2); error_code = SafeReadUInt(root, "bowWaterInet2_uint8", table.bowWaterInet2);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet3_uint8", table.bowWaterlnet3); error_code = SafeReadUInt(root, "bowWaterInet3_uint8", table.bowWaterInet3);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet4_uint8", table.bowWaterlnet4); error_code = SafeReadUInt(root, "bowWaterInet4_uint8", table.bowWaterInet4);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet5_uint8", table.bowWaterlnet5); error_code = SafeReadUInt(root, "bowWaterInet5_uint8", table.bowWaterInet5);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet6_uint8", table.bowWaterlnet6); error_code = SafeReadUInt(root, "bowWaterInet6_uint8", table.bowWaterInet6);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet7_uint8", table.bowWaterlnet7); error_code = SafeReadUInt(root, "bowWaterInet7_uint8", table.bowWaterInet7);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowWaterlnet8_uint8", table.bowWaterlnet8); error_code = SafeReadUInt(root, "bowWaterInet8_uint8", table.bowWaterInet8);
if (error_code != 0) return error_code; if (error_code != 0) return error_code;
error_code = SafeReadUInt(root, "bowRudderDeploy_uint8", table.bowRudderDeploy); error_code = SafeReadUInt(root, "bowRudderDeploy_uint8", table.bowRudderDeploy);
+8 -8
View File
@@ -42,14 +42,14 @@ struct DriverTable
unsigned char lowFreqSonar; unsigned char lowFreqSonar;
unsigned char USBL; unsigned char USBL;
//执行机构 //执行机构
unsigned char bowWaterlnet1; unsigned char bowWaterInet1;
unsigned char bowWaterlnet2; unsigned char bowWaterInet2;
unsigned char bowWaterlnet3; unsigned char bowWaterInet3;
unsigned char bowWaterlnet4; unsigned char bowWaterInet4;
unsigned char bowWaterlnet5; unsigned char bowWaterInet5;
unsigned char bowWaterlnet6; unsigned char bowWaterInet6;
unsigned char bowWaterlnet7; unsigned char bowWaterInet7;
unsigned char bowWaterlnet8; unsigned char bowWaterInet8;
unsigned char bowRudderDeploy; unsigned char bowRudderDeploy;
unsigned char bowRudderServo1; unsigned char bowRudderServo1;
unsigned char bowRudderServo2; unsigned char bowRudderServo2;
+125
View File
@@ -0,0 +1,125 @@
#ifndef FAULTCODE_H
#define FAULTCODE_H
/**
* @file faultCode.h
* @brief 锂电池故障码定义及映射表
*/
// 故障码映射表
typedef struct {
int id; // 序号
int level; // 故障级别
const uint8_t code; // 16进制故障码
const char* desc; // 报警信息
} FaultMap;
static const FaultMap batfaultMap[] = {
//四级故障
{1, 4, 0xC1, "MBMS绝缘故障"},
{2, 4, 0xC2, "温度过高"},
{3, 4, 0xC3, "MBMS预充失败"},
{4, 4, 0xC4, "MBMS正主极继电器失效"},
{5, 4, 0xC5, "MBMS负主极继电器失效"},
{6, 4, 0xC6, "MBMS燃电充电正极继电器正极失效[仪器]"},
{7, 4, 0xC7, "母线高压回路异常"},
{8, 4, 0xC9, "MBMS电压测量异常"},
{9, 4, 0xCA, "MBMS电流测量异常"},
//三级故障
{10, 3, 0x81, "MBMS绝缘故障3级"},
{11, 3, 0x82, "温度过高3级"},
{12, 3, 0x83, "温度过低3级"},
{13, 3, 0x84, "MBMS总放电超功率3级"},
{14, 3, 0x85, "MBMS总充电电流过大3级"},
//二级故障
{15, 1, 0x31, "BMS均衡模块故障2级"},
{16, 2, 0x41, "MBMS绝缘故障2级"},
{17, 2, 0x42, "MBMS总放电超功率2级"},
{18, 2, 0x43, "电池包放电超功率2级"},
{19, 2, 0x44, "MBMS总放电过流2级"},
{20, 2, 0x45, "单包异常剔除2级"},
{21, 2, 0x46, "单包没有电流2级"},
{22, 2, 0x47, "自检有重复ID号2级"},
{23, 2, 0x48, "电池包接入失败2级"},
{24, 2, 0x49, "电池包充电电流过大2级"},
{25, 2, 0x51, "电池包绝缘故障2级"},
{26, 2, 0x52, "电池包温度过高2级"},
{27, 2, 0x53, "电池包温度过低2级"},
{28, 2, 0x54, "电池包单体电压不均衡2级"},
{29, 2, 0x55, "电池包单体温度不均衡2级"},
{30, 2, 0x56, "电池包过流2级"},
{31, 2, 0x57, "电池包充电电流过大2级"},
{32, 2, 0x58, "电池包单体电压过高2级"},
{33, 2, 0x59, "电池包单体电压过低2级"},
{34, 2, 0x5A, "电池包总电压过高2级"},
{35, 2, 0x5B, "电池包总电压过低2级"},
{36, 2, 0x5C, "电池包内部通讯故障2级"},
{37, 2, 0x5D, "电池包初始化故障2级"},
{38, 2, 0x62, "电池包高压回路连接异常2级"},
{39, 2, 0x65, "电池包烟雾报警2级"},
{40, 2, 0x72, "MBMS在线燃电充电超温2级"},
//一级故障
{41, 1, 0x01, "MBMS绝缘故障1级"},
{42, 1, 0x02, "MBMS总放电超功率1级"},
{43, 1, 0x11, "电池包绝缘故障1级"},
{44, 1, 0x12, "电池包最高温度过高1级"},
{45, 1, 0x13, "电池包最低温度过低1级"},
{46, 1, 0x14, "电池包单体电压不均衡1级"},
{47, 1, 0x15, "电池包单体温度不均衡1级"},
{48, 1, 0x16, "电池包放电过流1级"},
{49, 1, 0x17, "电池包充电电流过大1级"},
{50, 1, 0x18, "电池包单体电压过高1级"},
{51, 1, 0x19, "电池包单体电压过低1级"},
{52, 1, 0x1A, "电池包总电压过高1级"},
{53, 1, 0x1B, "电池包总电压过低1级"},
{54, 1, 0x1D, "电池包烟雾报警1级"},
};
static const FaultMap disfaultMap[] = {
{1, 3, 1, "燃料电池断路器故障脱扣"},
{2, 4, 2, "动力锂电池断路器故障脱扣"},
{3, 4, 3, "推进电机断路器故障脱扣"},
{4, 4, 4, "锂电池组仪表断路器故障脱扣"},
{5, 4, 5, "DC/DC5模块断路器故障脱扣"},
{6, 4, 6, "艏部高压配电箱断路器故障脱扣"},
{7, 4, 7, "艉部FT装置4/5断路器故障脱扣"},
{8, 4, 8, "艉舵开关1断路器故障脱扣"},
{9, 4, 9, "艉舵开关2断路器故障脱扣"},
{10, 4, 10, "FB预留断路器故障脱扣"},
{11, 4, 11, "TYZ预留断路器故障脱扣"},
{12, 4, 12, "预留断路器故障脱扣"},
{13, 4, 13, "艏部FT装置1-3 断路器故障脱扣"},
{14, 4, 14, "启闭机构断路器故障脱扣"},
{15, 4, 15, "桅杆舵机控制箱断路器故障脱扣"},
{16, 4, 16, "XCZ 断路器故障脱扣"},
{17, 4, 17, "艏舵控制箱断路器故障脱扣"},
{18, 4, 18, "敞水盖启动电缸断路器故障脱扣"},
{19, 4, 19, "锂电池组(仪表)断路器故障脱扣"},
{20, 4, 20, "艏部低压配电箱断路器故障脱扣"},
{21, 4, 21, "UNIT4仪表DC48V断路器故障脱扣"},
{22, 4, 22, "DC-DC1直流配电板断路器故障脱扣"},
{23, 4, 23, "预留断路器故障脱扣"},
{24, 4, 24, "预留断路器故障脱扣"},
{25, 4, 25, "应急锂电池组2断路器"},
{26, 4, 26, "UNIT1断路器故障脱扣"},
{27, 4, 27, "UNIT2断路器故障脱扣"},
{28, 4, 28, "UNIT3断路器故障脱扣"},
{29, 4, 29, "UNIT5断路器故障脱扣"},
{30, 4, 30, "艏部PZ装置断路器故障脱扣"},
{31, 4, 31, "预留断路器故障脱扣"},
{32, 4, 32, "预留断路器故障脱扣"},
{33, 4, 33, "应急锂电池组1断路器故障脱扣"},
{34, 4, 34, "动力母排绝缘低"},
{35, 4, 35, "A汇流排绝缘低"},
{36, 4, 36, "高压母线配电控制器仪表电源失电信号"},
{37, 4, 37, "高压母线配电控制器应急电源失电信号"},
{38, 4, 38, "高压汇流排A仪表电源失电信号"},
{39, 4, 39, "高压汇流排A应急电源失电信号"},
{40, 4, 40, "高压汇流排A仪表汇流排绝缘低"},
{41, 4, 41, "高压汇流排B仪表电源失电信号"},
{42, 4, 42, "高压汇流排B应急电源失电信号"},
{43, 4, 43, "高压汇流排B仪表汇流排绝缘低"},
{44, 4, 44, "仪表汇流排失电信号"},
{45, 4, 45, "仪表汇流排浸水报警"}
};
#endif // FAULTCODE_H
+232 -103
View File
@@ -3,8 +3,10 @@
#include "../loguru.hpp" #include "../loguru.hpp"
#include <string> #include <string>
#include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h" #include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h"
#include "../faultCode.h"
#define DEBUG // #define DEBUG
#define DEBUG_1
// 定义静态成员 // 定义静态成员
PowerManger* PowerManagerFsm::pm = nullptr; PowerManger* PowerManagerFsm::pm = nullptr;
void PowerManagerFsm::react(TaskStopEvent const &e) { void PowerManagerFsm::react(TaskStopEvent const &e) {
@@ -14,10 +16,10 @@ void PowerManagerFsm::react(TaskStopEvent const &e) {
void PowerManagerFsm::react(CycleTriggeredEvent const &){ void PowerManagerFsm::react(CycleTriggeredEvent const &){
// 更新当前设备状态 // 更新当前设备状态
// cout << "CycleTriggeredEvent" << endl; #ifdef DEBUG_1
pm->m_currentDriverState = pm->m_subDisSysState; pm->m_currentDriverState = pm->m_subDisSysState;
// cout << (int)pm->m_subDisSysState.depth1 << endl; #endif
// cout << (int)pm->m_subDisSysState.depth1 << endl; // cout << "CycleTriggeredEvent received" << endl;
} }
bool PowerManagerFsm::handPowerProtection(DevCmdExt const &e){ bool PowerManagerFsm::handPowerProtection(DevCmdExt const &e){
if(pm->workCondition > WorkCondition::REMOTE_CONTROL){ if(pm->workCondition > WorkCondition::REMOTE_CONTROL){
@@ -735,23 +737,23 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
case 27: case 27:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet1 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet1 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet1 = e.cmd; pm->m_currentDriverState.bowWaterInet1 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet1 = 0; pm->m_subDisSysCmd.bowWaterInet1 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet1 = 1; pm->m_subDisSysCmd.bowWaterInet1 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet1 = 1; pm->m_subDisSysCmd.bowWaterInet1 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -759,7 +761,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet1 = 0; pm->m_subDisSysCmd.bowWaterInet1 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -767,29 +769,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet1 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet1 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 28: case 28:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet2 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet2 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet2 = e.cmd; pm->m_currentDriverState.bowWaterInet2 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet2 = 0; pm->m_subDisSysCmd.bowWaterInet2 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet2 = 1; pm->m_subDisSysCmd.bowWaterInet2 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet2 = 1; pm->m_subDisSysCmd.bowWaterInet2 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -797,7 +799,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet2 = 0; pm->m_subDisSysCmd.bowWaterInet2 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -805,29 +807,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet2 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet2 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 29: case 29:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet2 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet2 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet3 = e.cmd; pm->m_currentDriverState.bowWaterInet3 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet3 = 0; pm->m_subDisSysCmd.bowWaterInet3 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet3 = 1; pm->m_subDisSysCmd.bowWaterInet3 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet3 = 1; pm->m_subDisSysCmd.bowWaterInet3 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -835,7 +837,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet3 = 0; pm->m_subDisSysCmd.bowWaterInet3 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -843,29 +845,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet3 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet3 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 30: case 30:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet4 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet4 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet4 = e.cmd; pm->m_currentDriverState.bowWaterInet4 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet4 = 0; pm->m_subDisSysCmd.bowWaterInet4 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet4 = 1; pm->m_subDisSysCmd.bowWaterInet4 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet4 = 1; pm->m_subDisSysCmd.bowWaterInet4 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -873,7 +875,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet4 = 0; pm->m_subDisSysCmd.bowWaterInet4 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -881,29 +883,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet4 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet4 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 31: case 31:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet4 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet4 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet5 = e.cmd; pm->m_currentDriverState.bowWaterInet5 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet5 = 0; pm->m_subDisSysCmd.bowWaterInet5 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet5 = 1; pm->m_subDisSysCmd.bowWaterInet5 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet5 = 1; pm->m_subDisSysCmd.bowWaterInet5 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -911,7 +913,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet5 = 0; pm->m_subDisSysCmd.bowWaterInet5 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -919,29 +921,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet5 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet5 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 32: case 32:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet6 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet6 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet6 = e.cmd; pm->m_currentDriverState.bowWaterInet6 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet6 = 0; pm->m_subDisSysCmd.bowWaterInet6 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet6 = 1; pm->m_subDisSysCmd.bowWaterInet6 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet6 = 1; pm->m_subDisSysCmd.bowWaterInet6 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -949,7 +951,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet6 = 0; pm->m_subDisSysCmd.bowWaterInet6 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -957,29 +959,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet6 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet6 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 33: case 33:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet7 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet7 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet7 = e.cmd; pm->m_currentDriverState.bowWaterInet7 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet7 = 0; pm->m_subDisSysCmd.bowWaterInet7 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet7 = 1; pm->m_subDisSysCmd.bowWaterInet7 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet7 = 1; pm->m_subDisSysCmd.bowWaterInet7 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -987,7 +989,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet7 = 0; pm->m_subDisSysCmd.bowWaterInet7 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -995,29 +997,29 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet7 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet7 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
case 34: case 34:
{ {
LOG_F(INFO, "DevCmdExt received bowWaterlnet8 - id: %d, cmd: %d", e.id, e.cmd); LOG_F(INFO, "DevCmdExt received bowWaterInet8 - id: %d, cmd: %d", e.id, e.cmd);
#ifdef DEBUG #ifdef DEBUG
pm->m_currentDriverState.bowWaterlnet8 = e.cmd; pm->m_currentDriverState.bowWaterInet8 = e.cmd;
#endif #endif
if (e.cmd == 0) if (e.cmd == 0)
{ {
pm->m_subDisSysCmd.bowWaterlnet8 = 0; pm->m_subDisSysCmd.bowWaterInet8 = 0;
//TODO :动力电断电 //TODO :动力电断电
} }
else if (e.cmd == 1) else if (e.cmd == 1)
{ {
pm->m_subDisSysCmd.bowWaterlnet8 = 1; pm->m_subDisSysCmd.bowWaterInet8 = 1;
//TODO :动力电上电 //TODO :动力电上电
} }
else if (e.cmd == 2) else if (e.cmd == 2)
{ {
pm->m_subDisSysCmd.bowWaterlnet8 = 1; pm->m_subDisSysCmd.bowWaterInet8 = 1;
} }
else if (e.cmd == 3) else if (e.cmd == 3)
{ {
@@ -1025,7 +1027,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else if (e.cmd == 4) else if (e.cmd == 4)
{ {
pm->m_subDisSysCmd.bowWaterlnet8 = 0; pm->m_subDisSysCmd.bowWaterInet8 = 0;
} }
else if (e.cmd == 5) else if (e.cmd == 5)
{ {
@@ -1033,7 +1035,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
} }
else else
{ {
LOG_F(WARNING, "DevCmdExt received bowWaterlnet8 - id: %d, cmd: %d is out of range", e.id, e.cmd); LOG_F(WARNING, "DevCmdExt received bowWaterInet8 - id: %d, cmd: %d is out of range", e.id, e.cmd);
} }
break; break;
} }
@@ -1744,57 +1746,57 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
void PowerManagerFsm::basicNavigationFault(FaultEvent const &e) void PowerManagerFsm::basicNavigationFault(FaultEvent const &e)
{ {
LOG_F(INFO, "basicNavigationFault"); LOG_F(INFO, "basicNavigationFault");
if(FaultEnable::BasicNavigationFault_1) if((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "部分深度计失效"); LOG_F(INFO, "部分深度计失效");
pm->faultCode.push_back(0x1102); pm->faultCode.push_back(0x1102);
pm->faultCode.push_back(0x1103); pm->faultCode.push_back(0x1103);
pm->faultCode.push_back(0x1104); pm->faultCode.push_back(0x1104);
} }
if(FaultEnable::BasicNavigationFault_2) if((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "DVL失效"); LOG_F(INFO, "DVL失效");
pm->faultCode.push_back(0x1301); pm->faultCode.push_back(0x1301);
} }
if (FaultEnable::BasicNavigationFault_3) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "单个艉舵失效"); LOG_F(INFO, "单个艉舵失效");
pm->faultCode.push_back(0x1207); pm->faultCode.push_back(0x1207);
} }
if (FaultEnable::BasicNavigationFault_4) if ((e.injectionFaultCode==4))
{ {
LOG_F(INFO, "部分艉舵失效"); LOG_F(INFO, "部分艉舵失效");
pm->faultCode.push_back(0x1308); pm->faultCode.push_back(0x1308);
pm->faultCode.push_back(0x1307); pm->faultCode.push_back(0x1307);
} }
if (FaultEnable::BasicNavigationFault_5) if ((e.injectionFaultCode==5))
{ {
LOG_F(INFO, "动力锂电池失效"); LOG_F(INFO, "动力锂电池失效");
pm->faultCode.push_back(0x130B); pm->faultCode.push_back(0x130B);
} }
if (FaultEnable::BasicNavigationFault_6) if ((e.injectionFaultCode==6))
{ {
LOG_F(INFO, "推进电机失效"); LOG_F(INFO, "推进电机失效");
pm->faultCode.push_back(0x130A); pm->faultCode.push_back(0x130A);
} }
if (FaultEnable::BasicNavigationFault_7) if ((e.injectionFaultCode==7))
{ {
LOG_F(INFO, "惯导失效"); LOG_F(INFO, "惯导失效");
pm->faultCode.push_back(0x1305); pm->faultCode.push_back(0x1305);
} }
if (FaultEnable::BasicNavigationFault_8) if ((e.injectionFaultCode==8))
{ {
LOG_F(INFO, "深度失效"); LOG_F(INFO, "深度失效");
pm->faultCode.push_back(0x1302); pm->faultCode.push_back(0x1302);
pm->faultCode.push_back(0x1303); pm->faultCode.push_back(0x1303);
pm->faultCode.push_back(0x1304); pm->faultCode.push_back(0x1304);
} }
if (FaultEnable::BasicNavigationFault_9) if ((e.injectionFaultCode==9))
{ {
LOG_F(INFO, "仪表锂电池失效"); LOG_F(INFO, "仪表锂电池失效");
pm->faultCode.push_back(0x1412); pm->faultCode.push_back(0x1412);
} }
if (FaultEnable::BasicNavigationFault_9) if ((e.injectionFaultCode==10))
{ {
LOG_F(INFO, "复合管控器失效"); LOG_F(INFO, "复合管控器失效");
pm->faultCode.push_back(0x1413); pm->faultCode.push_back(0x1413);
@@ -1803,22 +1805,22 @@ void PowerManagerFsm::basicNavigationFault(FaultEvent const &e)
void PowerManagerFsm::extendedNavigationFault(FaultEvent const &e) void PowerManagerFsm::extendedNavigationFault(FaultEvent const &e)
{ {
LOG_F(INFO, "extendedNavigationFault"); LOG_F(INFO, "extendedNavigationFault");
if (FaultEnable::ExtendedNavigationFault_1) if ((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "艏舵展开电缸失效"); LOG_F(INFO, "艏舵展开电缸失效");
pm->faultCode.push_back(0x2311); pm->faultCode.push_back(0x2311);
} }
if (FaultEnable::ExtendedNavigationFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "艏舵控制控制失效"); LOG_F(INFO, "艏舵控制控制失效");
pm->faultCode.push_back(0x2312); pm->faultCode.push_back(0x2312);
} }
if (FaultEnable::ExtendedNavigationFault_3) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "动力锂电池功率不满/失效"); LOG_F(INFO, "动力锂电池功率不满/失效");
pm->faultCode.push_back(0x2323); pm->faultCode.push_back(0x2323);
} }
if (FaultEnable::ExtendedNavigationFault_4) if ((e.injectionFaultCode==4))
{ {
LOG_F(INFO, "燃料电池失效"); LOG_F(INFO, "燃料电池失效");
pm->faultCode.push_back(0x2334); pm->faultCode.push_back(0x2334);
@@ -1827,12 +1829,12 @@ void PowerManagerFsm::extendedNavigationFault(FaultEvent const &e)
void PowerManagerFsm::obstacleAvoidanceFault(FaultEvent const &e) void PowerManagerFsm::obstacleAvoidanceFault(FaultEvent const &e)
{ {
LOG_F(INFO, "obstacleAvoidanceFault"); LOG_F(INFO, "obstacleAvoidanceFault");
if (FaultEnable::ObstacleAvoidanceFault_1) if ((e.injectionFaultCode==1))
{ {
pm->faultCode.push_back(0x3108); pm->faultCode.push_back(0x3108);
pm->faultCode.push_back(0x3109); pm->faultCode.push_back(0x3109);
} }
if (FaultEnable::ObstacleAvoidanceFault_2) if ((e.injectionFaultCode==2))
{ {
pm->faultCode.push_back(0x3201); pm->faultCode.push_back(0x3201);
pm->faultCode.push_back(0x3202); pm->faultCode.push_back(0x3202);
@@ -1842,7 +1844,7 @@ void PowerManagerFsm::obstacleAvoidanceFault(FaultEvent const &e)
pm->faultCode.push_back(0x3206); pm->faultCode.push_back(0x3206);
pm->faultCode.push_back(0x3207); pm->faultCode.push_back(0x3207);
} }
if (FaultEnable::ObstacleAvoidanceFault_2) if ((e.injectionFaultCode==3))
{ {
pm->faultCode.push_back(0x3301); pm->faultCode.push_back(0x3301);
} }
@@ -1851,24 +1853,24 @@ void PowerManagerFsm::obstacleAvoidanceFault(FaultEvent const &e)
void PowerManagerFsm::buoyancyControlFault(FaultEvent const &e) void PowerManagerFsm::buoyancyControlFault(FaultEvent const &e)
{ {
LOG_F(INFO, "buoyancyControlFault"); LOG_F(INFO, "buoyancyControlFault");
if (FaultEnable::BuoyancyControlFault_1) if ((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "单一浮调机构失效"); LOG_F(INFO, "单一浮调机构失效");
pm->faultCode.push_back(0x4101); pm->faultCode.push_back(0x4201);
} }
if (FaultEnable::BuoyancyControlFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "2-4及以上浮调装置失效"); LOG_F(INFO, "2-4及以上浮调装置失效");
pm->faultCode.push_back(0x4301); pm->faultCode.push_back(0x4301);
pm->faultCode.push_back(0x4302); pm->faultCode.push_back(0x4302);
pm->faultCode.push_back(0x4303); pm->faultCode.push_back(0x4303);
} }
if (FaultEnable::BuoyancyControlFault_3) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "功率不足满足浮调要求"); LOG_F(INFO, "功率不足满足浮调要求");
pm->faultCode.push_back(0x4336); pm->faultCode.push_back(0x4436);
} }
if (FaultEnable::BuoyancyControlFault_4) if ((e.injectionFaultCode==4))
{ {
LOG_F(INFO, "所有浮调系统失效"); LOG_F(INFO, "所有浮调系统失效");
pm->faultCode.push_back(0x4301); pm->faultCode.push_back(0x4301);
@@ -1878,21 +1880,21 @@ void PowerManagerFsm::buoyancyControlFault(FaultEvent const &e)
void PowerManagerFsm::communicationSystemFault(FaultEvent const &e) void PowerManagerFsm::communicationSystemFault(FaultEvent const &e)
{ {
LOG_F(INFO, "communicationSystemFault"); LOG_F(INFO, "communicationSystemFault");
if (FaultEnable::CommunicationSystemFault_1) if ((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "部分水下通信失效"); LOG_F(INFO, "部分水下通信失效");
pm->faultCode.push_back(0x5203); pm->faultCode.push_back(0x5203);
pm->faultCode.push_back(0x5204); pm->faultCode.push_back(0x5204);
pm->faultCode.push_back(0x5205); pm->faultCode.push_back(0x5205);
} }
if (FaultEnable::CommunicationSystemFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "水下通信失效"); LOG_F(INFO, "水下通信失效");
pm->faultCode.push_back(0x5303); pm->faultCode.push_back(0x5303);
pm->faultCode.push_back(0x5304); pm->faultCode.push_back(0x5304);
pm->faultCode.push_back(0x5305); pm->faultCode.push_back(0x5305);
} }
if (FaultEnable::CommunicationSystemFault_2) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "水面通信失效"); LOG_F(INFO, "水面通信失效");
pm->faultCode.push_back(0x5301); pm->faultCode.push_back(0x5301);
@@ -1902,7 +1904,7 @@ void PowerManagerFsm::communicationSystemFault(FaultEvent const &e)
void PowerManagerFsm::payloadSystemFault(FaultEvent const &e) void PowerManagerFsm::payloadSystemFault(FaultEvent const &e)
{ {
LOG_F(INFO, "payloadSystemFault"); LOG_F(INFO, "payloadSystemFault");
if (FaultEnable::PayloadSystemFault_1) if ((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "存在启闭机构或者敞水电缸失效"); LOG_F(INFO, "存在启闭机构或者敞水电缸失效");
pm->faultCode.push_back(0x6211); pm->faultCode.push_back(0x6211);
@@ -1920,32 +1922,32 @@ void PowerManagerFsm::payloadSystemFault(FaultEvent const &e)
pm->faultCode.push_back(0x621D); pm->faultCode.push_back(0x621D);
pm->faultCode.push_back(0x621E); pm->faultCode.push_back(0x621E);
} }
if (FaultEnable::PayloadSystemFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "舷侧探测失效"); LOG_F(INFO, "舷侧探测失效");
pm->faultCode.push_back(0x6321); pm->faultCode.push_back(0x6321);
} }
if (FaultEnable::PayloadSystemFault_3) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "舷侧主动探测失效"); LOG_F(INFO, "舷侧主动探测失效");
pm->faultCode.push_back(0x6323); pm->faultCode.push_back(0x6323);
} }
if (FaultEnable::PayloadSystemFault_4) if ((e.injectionFaultCode==4))
{ {
LOG_F(INFO, "TYZ失效"); LOG_F(INFO, "TYZ失效");
pm->faultCode.push_back(0x6322); pm->faultCode.push_back(0x6322);
} }
if (FaultEnable::PayloadSystemFault_5) if ((e.injectionFaultCode==5))
{ {
LOG_F(INFO, "光电探测失效"); LOG_F(INFO, "光电探测失效");
pm->faultCode.push_back(0x6332); pm->faultCode.push_back(0x6332);
} }
if (FaultEnable::PayloadSystemFault_6) if ((e.injectionFaultCode==6))
{ {
LOG_F(INFO, "电磁探测失效"); LOG_F(INFO, "电磁探测失效");
pm->faultCode.push_back(0x6331); pm->faultCode.push_back(0x6331);
} }
if (FaultEnable::PayloadSystemFault_7) if ((e.injectionFaultCode==7))
{ {
LOG_F(INFO, "载荷失效或者全部载荷启闭机构均失效"); LOG_F(INFO, "载荷失效或者全部载荷启闭机构均失效");
pm->faultCode.push_back(0x633F); pm->faultCode.push_back(0x633F);
@@ -1954,36 +1956,36 @@ void PowerManagerFsm::payloadSystemFault(FaultEvent const &e)
void PowerManagerFsm::emergencySystemFault(FaultEvent const &e) void PowerManagerFsm::emergencySystemFault(FaultEvent const &e)
{ {
LOG_F(INFO, "emergencySystemFault"); LOG_F(INFO, "emergencySystemFault");
if (FaultEnable::EmergencySystemFault_1) if ((e.injectionFaultCode==1))
{ {
//备注:抛载具有自己的电池 //备注:抛载具有自己的电池
LOG_F(INFO, "部分抛载失效"); LOG_F(INFO, "部分抛载失效");
pm->faultCode.push_back(0x7102); pm->faultCode.push_back(0x7102);
pm->faultCode.push_back(0x7103); pm->faultCode.push_back(0x7103);
} }
if (FaultEnable::EmergencySystemFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "一个超深检测装置失效"); LOG_F(INFO, "一个超深检测装置失效");
pm->faultCode.push_back(0x7204); pm->faultCode.push_back(0x7204);
pm->faultCode.push_back(0x7205); pm->faultCode.push_back(0x7205);
} }
if (FaultEnable::EmergencySystemFault_3) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "注水机构失效"); LOG_F(INFO, "注水机构失效");
pm->faultCode.push_back(0x7301); pm->faultCode.push_back(0x7301);
} }
if (FaultEnable::EmergencySystemFault_4) if ((e.injectionFaultCode==4))
{ {
LOG_F(INFO, "抛载失效"); LOG_F(INFO, "抛载失效");
pm->faultCode.push_back(0x7302); pm->faultCode.push_back(0x7302);
pm->faultCode.push_back(0x7303); pm->faultCode.push_back(0x7303);
} }
if (FaultEnable::EmergencySystemFault_5) if ((e.injectionFaultCode==5))
{ {
LOG_F(INFO, "艏部应急电源失效"); LOG_F(INFO, "艏部应急电源失效");
pm->faultCode.push_back(0x7306); pm->faultCode.push_back(0x7306);
} }
if (FaultEnable::EmergencySystemFault_6) if ((e.injectionFaultCode==6))
{ {
LOG_F(INFO, "艉部应急电源失效"); LOG_F(INFO, "艉部应急电源失效");
pm->faultCode.push_back(0x7307); pm->faultCode.push_back(0x7307);
@@ -1992,18 +1994,18 @@ void PowerManagerFsm::emergencySystemFault(FaultEvent const &e)
void PowerManagerFsm::sensorSystemFault(FaultEvent const &e) void PowerManagerFsm::sensorSystemFault(FaultEvent const &e)
{ {
LOG_F(INFO, "sensorSystemFault"); LOG_F(INFO, "sensorSystemFault");
if (FaultEnable::SensorSystemFault_1) if ((e.injectionFaultCode==1))
{ {
LOG_F(INFO, "部分CTD失效"); LOG_F(INFO, "部分CTD失效");
pm->faultCode.push_back(0x8202); pm->faultCode.push_back(0x8202);
} }
if (FaultEnable::SensorSystemFault_2) if ((e.injectionFaultCode==2))
{ {
LOG_F(INFO, "CTD失效"); LOG_F(INFO, "CTD失效");
pm->faultCode.push_back(0x8302); pm->faultCode.push_back(0x8302);
pm->faultCode.push_back(0x8303); pm->faultCode.push_back(0x8303);
} }
if (FaultEnable::SensorSystemFault_2) if ((e.injectionFaultCode==3))
{ {
LOG_F(INFO, "声速仪失效"); LOG_F(INFO, "声速仪失效");
pm->faultCode.push_back(0x8301); pm->faultCode.push_back(0x8301);
@@ -2145,5 +2147,132 @@ void PowerManagerFsm::handleDeviceCmd() {
LOG_F(INFO, "开始处理设备命令:"); LOG_F(INFO, "开始处理设备命令:");
} }
void PowerManagerFsm::react(TestEvent const &e)
{
LOG_F(INFO, "测试消息");
if(e.type == 0){
LOG_F(INFO, "清空故障代码");
pm->faultCode.clear();
pm->m_leakage = 0x00;
pm->m_systemData->insfaultCode = 0x00;
pm->m_systemData->powfaultCode = 0x00;
pm->m_systemData->fc_fault_level_4 = 0;
pm->m_systemData->fc_fault_level_3 = 0;
pm->m_systemData->fc_fault_level_2 = 0;
pm->m_systemData->fc_fault_level_1 = 0;
pm->m_systemData->distributeFaultCode.clear();
cout << "清空故障代码" << endl;
};
// if(e.eventId == 0) return ;
LOG_F(INFO, "测试消息类型: %d,测试代码:%d", e.type, e.eventId);
FaultEvent faultEvent;
faultEvent.injectionFaultCode = e.eventId;
//故障注入
switch (e.type)
{
case 0:
break;
case 1:
basicNavigationFault(faultEvent);
break;
case 2:
extendedNavigationFault(faultEvent);
break;
case 3:
obstacleAvoidanceFault(faultEvent);
break;
case 4:
buoyancyControlFault(faultEvent);
break;
case 5:
communicationSystemFault(faultEvent);
break;
case 6:
payloadSystemFault(faultEvent);
break;
case 7:
emergencySystemFault(faultEvent);
break;
case 8:
sensorSystemFault(faultEvent);
break;
case 9:
LOG_F(INFO, "漏水故障");
switch (e.eventId)
{
case 1:
pm->m_leakage = 0x10; //锂电池舱
break;
case 2:
pm->m_leakage = 0x20; //艉应急
break;
case 3:
pm->m_leakage = 0x40;
break;
case 4:
pm->m_leakage = 0x80;
break;
case 5:
pm->m_leakage = 0x01; //艏部应急漏水
break;
case 6:
pm->m_leakage = 0x02; //艏高压漏水
break;
case 7:
pm->m_leakage = 0x04; //艏低压漏水
break;
case 8:
pm->m_leakage = 0x08; //燃电舱漏水
break;
default:
break;
}
break;
case 10:
LOG_F(INFO,"锂电池故障测试");
pm->m_systemData->insfaultCode = batfaultMap[e.eventId].code;
pm->m_systemData->powfaultCode = batfaultMap[e.eventId].code;
cout << "=======================" << (int)pm->m_systemData->insfaultCode << endl;
cout << "=======================" << (int)pm->m_systemData->powfaultCode << endl;
break;
case 11:
{
LOG_F(INFO,"燃料电池1级故障测试");
uint16_t code = 0x0001;
pm->m_systemData->fc_fault_level_1 = code << (e.eventId);
break;
}
case 12:
{
LOG_F(INFO,"燃料电池2级故障测试");
uint16_t code = 0x0001;
pm->m_systemData->fc_fault_level_2 = code << (e.eventId);
break;
}
case 13:
{
LOG_F(INFO,"燃料电池3级故障测试");
uint16_t code = 0x0001;
pm->m_systemData->fc_fault_level_3 = code << (e.eventId);
break;
}
case 14:
{
LOG_F(INFO,"燃料电池4级故障测试");
uint16_t code = 0x0001;
pm->m_systemData->fc_fault_level_4 = code << (e.eventId);
break;
}
case 15:
{
LOG_F(INFO,"配电系统故障测试");
pm->m_systemData->distributeFaultCode.push_back(disfaultMap[e.eventId].code);
}
default:
LOG_F(INFO, "测试消息类型错误");
break;
}
}
FSM_INITIAL_STATE(PowerManagerFsm, InitState); FSM_INITIAL_STATE(PowerManagerFsm, InitState);
+18 -4
View File
@@ -40,23 +40,34 @@ struct DevCmdExt : tinyfsm::Event {
DevCmdExt() : id(0), cmd(0) {}; DevCmdExt() : id(0), cmd(0) {};
DevCmdExt(int id, int cmd) : id(id), cmd(cmd) {}; DevCmdExt(int id, int cmd) : id(id), cmd(cmd) {};
}; };
//==================测试事件================================
struct TestEvent : tinyfsm::Event {
std::string eventName;
unsigned int type;
unsigned int eventId;
TestEvent() : eventName(""), eventId(0),type(0) {};
TestEvent(std::string eventName, unsigned int type,unsigned int eventId) : eventName(eventName), eventId(eventId),type(type) {};
};
struct FaultEvent : tinyfsm::Event { struct FaultEvent : tinyfsm::Event {
unsigned int subDisSysFaultCode; unsigned int subDisSysFaultCode;
unsigned int disSysFaultCode; unsigned int disSysFaultCode;
unsigned int powerFaultCode; unsigned int powerFaultCode;
unsigned int fcsFaultCode; unsigned int fcsFaultCode;
unsigned int ccsFaultCode; unsigned int ccsFaultCode;
FaultEvent() : subDisSysFaultCode(0), disSysFaultCode(0), powerFaultCode(0), fcsFaultCode(0), ccsFaultCode(0) {}; unsigned int injectionFaultCode;
FaultEvent() : subDisSysFaultCode(0), disSysFaultCode(0), powerFaultCode(0), fcsFaultCode(0), ccsFaultCode(0),injectionFaultCode(0) {};
FaultEvent(unsigned int subDisSysFaultCode, FaultEvent(unsigned int subDisSysFaultCode,
unsigned int disSysFaultCode, unsigned int disSysFaultCode,
unsigned int powerFaultCode, unsigned int powerFaultCode,
unsigned int fcsFaultCode, unsigned int fcsFaultCode,
unsigned int ccsFaultCode) unsigned int ccsFaultCode,
unsigned int injectionFaultCode)
: subDisSysFaultCode(subDisSysFaultCode), : subDisSysFaultCode(subDisSysFaultCode),
disSysFaultCode(disSysFaultCode), disSysFaultCode(disSysFaultCode),
powerFaultCode(powerFaultCode), powerFaultCode(powerFaultCode),
fcsFaultCode(fcsFaultCode), fcsFaultCode(fcsFaultCode),
ccsFaultCode(ccsFaultCode) {}; ccsFaultCode(ccsFaultCode),
injectionFaultCode(injectionFaultCode) {};
}; };
class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> { class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> {
@@ -78,7 +89,10 @@ public:
virtual void react(TaskStartEvent const &e); virtual void react(TaskStartEvent const &e);
virtual void react(FaultEvent const &e); virtual void react(FaultEvent const &e);
virtual void react(TaskStopEvent const &e); virtual void react(TaskStopEvent const &e);
virtual void react(CycleTriggeredEvent const &); virtual void react(CycleTriggeredEvent const &e);
//测试事件
virtual void react(TestEvent const &);
//操作函数 //操作函数
void handelPowerCmd(); void handelPowerCmd();
@@ -8,6 +8,7 @@
#include <sys/resource.h> #include <sys/resource.h>
#include "data.h" #include "data.h"
#include "logpage.h" #include "logpage.h"
#include "testpage.h"
using json = Json::Value; using json = Json::Value;
@@ -76,6 +77,15 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
} else if (mg_match(hm->uri, mg_str("/logs"), NULL)) { } else if (mg_match(hm->uri, mg_str("/logs"), NULL)) {
// 返回日志页面HTML // 返回日志页面HTML
mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", LOG_PAGE_HTML.c_str()); mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", LOG_PAGE_HTML.c_str());
} else if (mg_match(hm->uri, mg_str("/testpage"), NULL)) {
if (mg_strcmp(hm->method, mg_str("POST")) == 0) {
// 解析POST请求并调用处理函数
std::string msg(hm->body.buf, hm->body.len);
handleTestPage(c, msg);
} else {
// 返回测试页面HTML
mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", TESTPAGE_HTML.c_str());
}
} else if (mg_match(hm->uri, mg_str("/control"), NULL)) { } else if (mg_match(hm->uri, mg_str("/control"), NULL)) {
// 处理断路器控制请求 // 处理断路器控制请求
if (mg_strcmp(hm->method, mg_str("POST")) == 0) { if (mg_strcmp(hm->method, mg_str("POST")) == 0) {
@@ -655,6 +665,84 @@ std::vector<std::string> HttpServer::readLogFile(int page, int pageSize, const s
return std::vector<std::string>(filteredLogs.begin() + start, filteredLogs.begin() + end); return std::vector<std::string>(filteredLogs.begin() + start, filteredLogs.begin() + end);
} }
void HttpServer::handleTestPage(struct mg_connection* c, const std::string& msg) {
try {
// 检查空消息
if (msg.empty()) {
LOG_F(ERROR, "Empty test page request received");
mg_http_reply(c, 400, "Content-Type: application/json\r\n",
"{\"success\": false, \"error\": \"Empty request body\"}");
return;
}
// 解析JSON请求
Json::Value json;
Json::CharReaderBuilder builder;
std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
std::string errors;
const char* msg_start = msg.c_str();
const char* msg_end = msg_start + msg.size();
if (!reader->parse(msg_start, msg_end, &json, &errors)) {
// 记录详细的解析错误
LOG_F(ERROR, "Failed to parse test page request JSON: %s\nRequest content: %s",
errors.c_str(), msg.c_str());
// 返回结构化的错误响应
mg_http_reply(c, 400, "Content-Type: application/json\r\n",
"{\"success\": false, \"error\": \"Invalid JSON format\", "
"\"details\": \"%s\", \"position\": %d}",
errors.c_str(), (int)(errors.find("offset") != std::string::npos ?
std::stoi(errors.substr(errors.find("offset") + 7)) : 0));
return;
}
// 记录接收到的请求
LOG_F(INFO, "Received valid test page request: %s", msg.c_str());
// 检查必需字段是否存在
if (!json.isMember("type") || !json.isMember("id")) {
mg_http_reply(c, 400, "Content-Type: application/json\r\n",
"{\"success\": false, \"error\": \"type and id fields are required\"}");
return;
}
unsigned int type = 0;
unsigned int id = 0;
try {
if (json["type"].isString()) {
type = std::stoul(json["type"].asString());
} else if (json["type"].isNumeric()) {
type = json["type"].asUInt();
} else {
throw std::invalid_argument("type must be number or numeric string");
}
if (json["id"].isString()) {
id = std::stoul(json["id"].asString());
} else if (json["id"].isNumeric()) {
id = json["id"].asUInt();
} else {
throw std::invalid_argument("id must be number or numeric string");
}
} catch (const std::exception& e) {
mg_http_reply(c, 400, "Content-Type: application/json\r\n",
"{\"success\": false, \"error\": \"%s\"}", e.what());
return;
}
m_powerManger->injectFault(type, id);
// 返回成功响应
mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{\"success\": true, \"message\": \"Request received\", "
"\"content\": %s}",
msg.c_str());
} catch (const std::exception& e) {
LOG_F(ERROR, "Error handling test page request: %s", e.what());
mg_http_reply(c, 500, "Content-Type: text/plain\r\n", "Internal server error");
}
}
void HttpServer::monitorLogFile() { void HttpServer::monitorLogFile() {
static std::streampos lastPos = 0; static std::streampos lastPos = 0;
std::ifstream file(m_logFilePath); std::ifstream file(m_logFilePath);
+3
View File
@@ -54,6 +54,9 @@ public:
// 读取日志文件 // 读取日志文件
std::vector<std::string> readLogFile(int page, int pageSize, const std::string& level, const std::string& search); std::vector<std::string> readLogFile(int page, int pageSize, const std::string& level, const std::string& search);
// 测试页面请求处理函数
void handleTestPage(struct mg_connection* c, const std::string& msg);
private: private:
// WebSocket事件处理函数 // WebSocket事件处理函数
void handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_data, void* fn_data); void handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_data, void* fn_data);
+4
View File
@@ -210,6 +210,10 @@ body {
<span class="sidebar-icon">📝</span> <span class="sidebar-icon">📝</span>
<span>系统日志</span> <span>系统日志</span>
</a> </a>
<a href="/testpage" class="sidebar-button">
<span class="sidebar-icon">🧪</span>
<span>测试页面</span>
</a>
</div> </div>
</div> </div>
+4
View File
@@ -300,6 +300,10 @@ const std::string LOG_PAGE_HTML = R"(
<span class="sidebar-icon">📝</span> <span class="sidebar-icon">📝</span>
<span>系统日志</span> <span>系统日志</span>
</a> </a>
<a href="/testpage" class="sidebar-button">
<span class="sidebar-icon">🧪</span>
<span>测试页面</span>
</a>
</div> </div>
</div> </div>
+378
View File
@@ -0,0 +1,378 @@
#ifndef HTTP_SERVER_TESTPAGE_H
#define HTTP_SERVER_TESTPAGE_H
#include <string>
const std::string TESTPAGE_HTML = R"row(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试页面</title>
<link rel="stylesheet" href="/static/style.css">
<style>
:root {
--primary-color: #2563eb;
--primary-hover: #1d4ed8;
--bg-color: #f8fafc;
--sidebar-width: 60px;
--sidebar-expanded: 220px;
--header-height: 36px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background-color: var(--bg-color);
color: #1a1a1a;
}
.container {
display: grid;
grid-template-areas:
"sidebar main-content";
grid-template-columns: var(--sidebar-width) 1fr;
grid-template-rows: 1fr;
min-height: 100vh;
gap: 0;
}
.header {
grid-area: unset;
background: white;
padding: 0 0.5rem;
display: flex;
align-items: center;
justify-content: space-between;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
position: fixed;
top: 0;
right: 0;
left: var(--sidebar-width);
height: var(--header-height);
z-index: 10;
}
.header h1 {
font-size: 1.25rem;
font-weight: 600;
color: #1a1a1a;
}
.sidebar {
grid-area: sidebar;
background: white;
width: var(--sidebar-width);
height: 100vh;
position: fixed;
left: 0;
top: 0;
padding: 0.5rem 0.25rem;
transition: width 0.3s ease;
box-shadow: 1px 0 3px rgba(0, 0, 0, 0.1);
z-index: 20;
}
.sidebar:hover {
width: var(--sidebar-expanded);
}
.sidebar-menu {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.sidebar-button {
display: flex;
align-items: center;
padding: 0.5rem 0.75rem;
border-radius: 0.375rem;
color: #4b5563;
text-decoration: none;
transition: all 0.2s ease;
white-space: nowrap;
overflow: hidden;
}
.sidebar-button:hover {
background: var(--bg-color);
color: var(--primary-color);
}
.sidebar-icon {
min-width: 1.5rem;
margin-right: 1rem;
font-size: 1.25rem;
}
.main-content {
grid-area: main-content;
padding: 1px;
margin-top: var(--header-height);
}
.status-bar {
position: fixed;
top: 4px;
right: 8px;
background: white;
padding: 4px 8px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
display: flex;
gap: 8px;
z-index: 15;
}
.status-info {
display: flex;
align-items: center;
gap: 8px;
color: #4b5563;
font-size: 0.875rem;
}
.data-panel {
background: white;
border-radius: 4px;
padding: 16px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
height: calc(100vh - var(--header-height) + 3px);
overflow: auto;
}
.panel-title {
font-size: 1rem;
font-weight: 600;
color: #1a1a1a;
margin-bottom: 16px;
padding-bottom: 8px;
border-bottom: 1px solid #e5e7eb;
}
.form-group {
margin-bottom: 16px;
}
.form-label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #374151;
}
.form-input {
width: 100%;
padding: 8px 12px;
border: 1px solid #d1d5db;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.2s;
}
.form-input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
}
.btn {
display: inline-block;
padding: 8px 16px;
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 4px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: background-color 0.2s;
}
.btn:hover {
background-color: var(--primary-hover);
}
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main-content";
}
.sidebar {
transform: translateX(-100%);
}
.header {
left: 0;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<div class="sidebar-menu">
<a href="/" class="sidebar-button">
<span class="sidebar-icon">🏠</span>
<span>系统主页</span>
</a>
<a href="/data" class="sidebar-button">
<span class="sidebar-icon">📊</span>
<span>系统数据</span>
</a>
<a href="/dashboard" class="sidebar-button">
<span class="sidebar-icon">⚡</span>
<span>配电操作</span>
</a>
<a href="/logs" class="sidebar-button">
<span class="sidebar-icon">📝</span>
<span>系统日志</span>
</a>
<a href="/testpage" class="sidebar-button">
<span class="sidebar-icon">🧪</span>
<span>测试页面</span>
</a>
</div>
</div>
<div class="header">
<h1>测试页面</h1>
<div class="status-bar">
<div class="status-info">
<span>🟢 系统状态: <span id="systemStatus">运行中</span></span>
<span>⚡ 应用频率: <span id="appFreq">0</span> Hz</span>
<span>📡 通信频率: <span id="commFreq">0</span> Hz</span>
<span>💻 CPU负载: <span id="cpuLoad">0</span>%</span>
<span>⏱️ 迭代间隔: <span id="timeSinceIterate">0</span>ms</span>
<span>🕒 更新时间: <time id="updateTime">2025-05-19 11:54</time></span>
</div>
</div>
</div>
<div class="main-content">
<div class="data-panel">
<div class="panel-title">测试表单</div>
<form id="testForm">
<div class="form-group">
<label for="type" class="form-label">类型</label>
<input type="number" id="type" name="type" class="form-input" min="0" required>
</div>
<div class="form-group">
<label for="id" class="form-label">ID</label>
<input type="number" id="id" name="id" class="form-input" min="0" required>
</div>
<button type="button" class="btn" onclick="submitTestForm()">提交</button>
</form>
</div>
</div>
</div>
<script>
let ws = null;
function initWebSocket() {
ws = new WebSocket('ws://' + window.location.host + '/ws');
ws.onopen = () => {
console.log('WebSocket连接已建立');
updateStatus('运行中', true);
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到系统数据:', data);
// 更新MOOSDB信息
if (data.moosdb) {
document.getElementById('appFreq').textContent = data.moosdb.appFreq.toFixed(2);
document.getElementById('commFreq').textContent = data.moosdb.commFreq.toFixed(2);
document.getElementById('cpuLoad').textContent = data.moosdb.cpuLoad.toFixed(1);
document.getElementById('timeSinceIterate').textContent = data.moosdb.timeSinceIterate.toFixed(0);
}
updateTime();
};
ws.onclose = () => {
console.log('WebSocket连接已关闭');
updateStatus('已断开', false);
setTimeout(initWebSocket, 5000);
};
ws.onerror = (error) => {
console.error('WebSocket错误:', error);
updateStatus('错误', false);
};
}
function updateStatus(status, isConnected) {
const statusElement = document.querySelector('.status-info span:first-child');
statusElement.innerHTML = `${isConnected ? '🟢' : '🔴'} 系统状态: ${status}`;
}
function updateTime() {
const now = new Date();
const timeStr = now.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
});
document.getElementById('updateTime').textContent = timeStr;
}
function submitTestForm() {
const form = document.getElementById('testForm');
const typeValue = parseInt(form.type.value);
const idValue = parseInt(form.id.value);
if (typeValue < 0 || idValue < 0) {
alert('请输入非负整数');
return;
}
const formData = {
type: typeValue,
id: idValue
};
fetch('/testpage', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(formData)
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('提交成功: ' + data.message);
} else {
alert('提交失败: ' + data.error);
}
})
.catch(error => {
console.error('提交错误:', error);
alert('提交过程中发生错误');
});
}
window.addEventListener('load', initWebSocket);
</script>
</body>
</html>
)row";
#endif // HTTP_SERVER_TESTPAGE_H
+8 -8
View File
@@ -733,14 +733,14 @@ namespace DeviceId {
ctd2 = 24, ctd2 = 24,
soundVeloc = 25, soundVeloc = 25,
waterInject = 26, waterInject = 26,
bowWaterlnet1 = 27, bowWaterInet1 = 27,
bowWaterlnet2 = 28, bowWaterInet2 = 28,
bowWaterlnet3 = 29, bowWaterInet3 = 29,
bowWaterlnet4 = 30, bowWaterInet4 = 30,
bowWaterlnet5 = 31, bowWaterInet5 = 31,
bowWaterlnet6 = 32, bowWaterInet6 = 32,
bowWaterlnet7 = 33, bowWaterInet7 = 33,
bowWaterlnet8 = 34, bowWaterInet8 = 34,
sideSonar = 35, sideSonar = 35,
lowFreqSonar = 36, lowFreqSonar = 36,
launchControler = 37, launchControler = 37,
+9 -2
View File
@@ -2,7 +2,7 @@
#define SYSTEMDATA_H #define SYSTEMDATA_H
#include "pmSysvariable.h" #include "pmSysvariable.h"
#include "sqlit3/SQLite.h" #include "sqlit3/SQLite.h"
#define DEBUFG
class SystemData class SystemData
{ {
private: private:
@@ -135,6 +135,11 @@ public:
uint32_t reserved4; // 保留字段 uint32_t reserved4; // 保留字段
uint32_t heartbeat; // 主机心跳计数器 uint32_t heartbeat; // 主机心跳计数器
//锂电池故障字段
unsigned char powfaultCode;
unsigned char insfaultCode;
//配电系统故障码
std::vector<unsigned char> distributeFaultCode;
// MOOSD 状态 // MOOSD 状态
bool moosd_status; bool moosd_status;
@@ -386,7 +391,7 @@ public:
//初始化变量全部为0 //初始化变量全部为0
memset(this, 0, sizeof(SystemData)); memset(this, 0, sizeof(SystemData));
}; };
~SystemData(); ~SystemData(){};
void updateCommonStatus(double time_out=3){ void updateCommonStatus(double time_out=3){
//更新时间 //更新时间
@@ -411,10 +416,12 @@ public:
total_generation_power = data.total_generation_power; total_generation_power = data.total_generation_power;
//故障信息 //故障信息
#ifdef DEBUG
fc_fault_level_1 = data.fault_level_1; fc_fault_level_1 = data.fault_level_1;
fc_fault_level_2 = data.fault_level_2; fc_fault_level_2 = data.fault_level_2;
fc_fault_level_3 = data.fault_level_3; fc_fault_level_3 = data.fault_level_3;
fc_fault_level_4 = data.fault_level_4; fc_fault_level_4 = data.fault_level_4;
#endif
//燃料容量 //燃料容量
hydrogen_capacity = static_cast<int>(data.hydrogen_capacity); hydrogen_capacity = static_cast<int>(data.hydrogen_capacity);
@@ -1,6 +1,6 @@
#ifndef CCUUDPMSG__H #ifndef CCUUDPMSG__H
#define CCUUDPMSG__H #define CCUUDPMSG__H
#include "pmSysvariable.h" #include "../pmSysvariable.h"
#define CCU_UDPMSG_START1 0x20 #define CCU_UDPMSG_START1 0x20
#define CCU_UDPMSG_START2 0x20 #define CCU_UDPMSG_START2 0x20
@@ -13,7 +13,7 @@
#include <chrono> #include <chrono>
#include <iostream> #include <iostream>
#include <utility> #include <utility>
#include "loguru.hpp" #include "../loguru.hpp"
using namespace std; using namespace std;
#define QUENUE_SIZE 100 #define QUENUE_SIZE 100
+16 -16
View File
@@ -297,14 +297,14 @@ public:
// UNIT2 // UNIT2
state.sideSonar = driver.sideSonar; state.sideSonar = driver.sideSonar;
state.bowWaterInet1 = driver.bowWaterlnet1; state.bowWaterInet1 = driver.bowWaterInet1;
state.bowWaterInet2 = driver.bowWaterlnet2; state.bowWaterInet2 = driver.bowWaterInet2;
state.bowWaterInet3 = driver.bowWaterlnet3; state.bowWaterInet3 = driver.bowWaterInet3;
state.bowWaterInet4 = driver.bowWaterlnet4; state.bowWaterInet4 = driver.bowWaterInet4;
state.bowWaterInet5 = driver.bowWaterlnet5; state.bowWaterInet5 = driver.bowWaterInet5;
state.bowWaterInet6 = driver.bowWaterlnet6; state.bowWaterInet6 = driver.bowWaterInet6;
state.bowWaterInet7 = driver.bowWaterlnet7; state.bowWaterInet7 = driver.bowWaterInet7;
state.bowWaterInet8 = driver.bowWaterlnet8; state.bowWaterInet8 = driver.bowWaterInet8;
state.launchControler = driver.launchControler; state.launchControler = driver.launchControler;
state.electSensor = driver.electSensor; state.electSensor = driver.electSensor;
state.lowFreqSonar = driver.lowFreqSonar; state.lowFreqSonar = driver.lowFreqSonar;
@@ -381,14 +381,14 @@ public:
// UNIT2 // UNIT2
driver.sideSonar = state.sideSonar; driver.sideSonar = state.sideSonar;
driver.bowWaterlnet1 = state.bowWaterInet1; driver.bowWaterInet1 = state.bowWaterInet1;
driver.bowWaterlnet2 = state.bowWaterInet2; driver.bowWaterInet2 = state.bowWaterInet2;
driver.bowWaterlnet3 = state.bowWaterInet3; driver.bowWaterInet3 = state.bowWaterInet3;
driver.bowWaterlnet4 = state.bowWaterInet4; driver.bowWaterInet4 = state.bowWaterInet4;
driver.bowWaterlnet5 = state.bowWaterInet5; driver.bowWaterInet5 = state.bowWaterInet5;
driver.bowWaterlnet6 = state.bowWaterInet6; driver.bowWaterInet6 = state.bowWaterInet6;
driver.bowWaterlnet7 = state.bowWaterInet7; driver.bowWaterInet7 = state.bowWaterInet7;
driver.bowWaterlnet8 = state.bowWaterInet8; driver.bowWaterInet8 = state.bowWaterInet8;
driver.launchControler = state.launchControler; driver.launchControler = state.launchControler;
driver.electSensor = state.electSensor; driver.electSensor = state.electSensor;
driver.lowFreqSonar = state.lowFreqSonar; driver.lowFreqSonar = state.lowFreqSonar;
+8 -10
View File
@@ -5,7 +5,7 @@
#include "json/json.h" #include "json/json.h"
#include <bitset> #include <bitset>
#include "../pmSysvariable.h" #include "../pmSysvariable.h"
#include "../systemData.h"
class uPower_disSysStateMsg class uPower_disSysStateMsg
{ {
private: private:
@@ -16,9 +16,8 @@ public:
~uPower_disSysStateMsg() {}; ~uPower_disSysStateMsg() {};
std::string key = "uPower_disSysState_st"; std::string key = "uPower_disSysState_st";
disSysBreakerList currentDisBreakerState;
std::string buildMsg(disSysBreakerList currentDisBreakerState) std::string buildMsg(SystemData data,disSysBreakerList currentDisBreakerState)
{ {
//构建配电系统状态报告 //构建配电系统状态报告
Json::Value dis; Json::Value dis;
@@ -38,13 +37,12 @@ public:
dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4; dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4;
//TODO: 构建配电系统故障码 //TODO: 构建配电系统故障码
// Json::Value faultCodeDis_array; Json::Value faultCodeDis_array = Json::Value(Json::arrayValue);
// for(auto val : m_pm->faultCode) for(auto val : data.distributeFaultCode)
// { {
// faultCodeDis_array.append(val); faultCodeDis_array.append(val);
// } }
// dis[VAR_TO_STR(faultCode_array)] = faultCodeDis_array; dis["faultCode_array"] = faultCodeDis_array;
// 转化为json格式
Json::StreamWriterBuilder writerBuilder; Json::StreamWriterBuilder writerBuilder;
writerBuilder.settings_["indentation"] = ""; writerBuilder.settings_["indentation"] = "";
+8 -8
View File
@@ -141,14 +141,14 @@ public:
state.actuatorState.openCloseMechanism4 = s.bowCover4; state.actuatorState.openCloseMechanism4 = s.bowCover4;
state.actuatorState.openCloseMechanism5 = s.bowCover5; state.actuatorState.openCloseMechanism5 = s.bowCover5;
state.actuatorState.openCloseMechanism6 = s.bowCover6; state.actuatorState.openCloseMechanism6 = s.bowCover6;
state.actuatorState.openWaterMechanism1 = s.bowWaterlnet1; state.actuatorState.openWaterMechanism1 = s.bowWaterInet1;
state.actuatorState.openWaterMechanism2 = s.bowWaterlnet2; state.actuatorState.openWaterMechanism2 = s.bowWaterInet2;
state.actuatorState.openWaterMechanism3 = s.bowWaterlnet3; state.actuatorState.openWaterMechanism3 = s.bowWaterInet3;
state.actuatorState.openWaterMechanism4 = s.bowWaterlnet4; state.actuatorState.openWaterMechanism4 = s.bowWaterInet4;
state.actuatorState.openWaterMechanism5 = s.bowWaterlnet5; state.actuatorState.openWaterMechanism5 = s.bowWaterInet5;
state.actuatorState.openWaterMechanism6 = s.bowWaterlnet6; state.actuatorState.openWaterMechanism6 = s.bowWaterInet6;
state.actuatorState.openWaterMechanism7 = s.bowWaterlnet7; state.actuatorState.openWaterMechanism7 = s.bowWaterInet7;
state.actuatorState.openWaterMechanism8 = s.bowWaterlnet8; state.actuatorState.openWaterMechanism8 = s.bowWaterInet8;
// 运动状态赋值 // 运动状态赋值
state.motionState.sternRudder1 = s.sternRudderServo1; state.motionState.sternRudder1 = s.sternRudderServo1;
+31 -77
View File
@@ -4,7 +4,7 @@
#include "string" #include "string"
#include "json/json.h" #include "json/json.h"
#include <bitset> #include <bitset>
#include "../systemData.h"
class uPower_fcsStateMsg class uPower_fcsStateMsg
{ {
private: private:
@@ -24,105 +24,59 @@ public:
unsigned int errorCode : 8; // 错误代码 unsigned int errorCode : 8; // 错误代码
} state; } state;
std::string buildMsg(ccuState ccustate) std::string buildMsg(SystemData data)
{ {
//TODO:根据最新协议修改 //TODO:根据最新协议修改
Json::Value fcs; Json::Value fcs;
// suffix = getTypeName(typeid(ccustate.fcuState).name()); // suffix = getTypeName(typeid(ccustate.fcuState).name());
// fcs["fcuState"] = ccustate.fcuState; // fcs["fcuState"] = ccustate.fcuState;
fcs["backpressure1_fp32"] = data.cabin_pressure1;
fcs["backpressure2_fp32"] = data.cabin_pressure2;
// suffix = getTypeName(typeid(ccustate.fcuFaultLeve).name()); fcs["ch4oConcent1_fp32"] = data.ch3oh_concentration1;
// fcs["fcuFaultLeve"] = ccustate.fcuFaultLeve; fcs["ch4oConcent2_fp32"] = data.ch3oh_concentration2;
// suffix = getTypeName(typeid(ccustate.powerLimit).name()); fcs["ch4o_fp32"] = 0.0; // 备用
// fcs[VAR_TO_STR(powLimit)+suffix] = ccustate.powerLimit;
// suffix = getTypeName(typeid(ccustate.totalPowerGeneration).name()); fcs["excTemp_fp32"] = data.palladium_temp;
// fcs[VAR_TO_STR(powerGen)+suffix] = ccustate.totalPowerGeneration;
// suffix = getTypeName(typeid(ccustate.ch4o).name()); fcs["fcuCurIns_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(ch4o)+suffix] = ccustate.ch4o;
// suffix = getTypeName(typeid(ccustate.o2).name()); fcs["fcuCurPower_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(o2)+suffix] = ccustate.o2;
// suffix = getTypeName(typeid(ccustate.fcuVoltage).name()); fcs["fcuCur_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(fcuVol)+suffix] = ccustate.fcuVoltage;
// suffix = getTypeName(typeid(ccustate.fcuCurrent).name()); fcs["fcuFaultLeve_uint8"] = data.fc_fault_level;
// fcs[VAR_TO_STR(fcuCur)+suffix] = ccustate.fcuCurrent;
// suffix = getTypeName(typeid(ccustate.o2Level).name()); fcs["fcuOutIns_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(o2Level)+suffix] = ccustate.o2Level;
// suffix = getTypeName(typeid(ccustate.exchangerTemperature).name()); fcs["fcuOutPower_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(excTemp)+suffix] = ccustate.exchangerTemperature;
// suffix = getTypeName(typeid(ccustate.fcuOutPower).name()); fcs["fcuState_uint8"] = data.fc_status;
// fcs[VAR_TO_STR(fcuOutPower)+suffix] = ccustate.fcuOutPower;
// suffix = getTypeName(typeid(ccustate.fcuOutIns).name()); fcs["fcuVolIns_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(fcuOutIns)+suffix] = ccustate.fcuOutIns;
// suffix = getTypeName(typeid(ccustate.fcuVoltageIns).name()); fcs["fcuVolPower_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(fcuVolIns)+suffix] = ccustate.fcuVoltageIns;
// suffix = getTypeName(typeid(ccustate.fcuVoltagePower).name()); fcs["fcuVol_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(fcuVolPower)+suffix] = ccustate.fcuVoltagePower;
// suffix = getTypeName(typeid(ccustate.fcuCurrentIns).name()); fcs["h2Concent1_fp32"] = data.h2_concentration1;
// fcs[VAR_TO_STR(fcuCurIns)+suffix] = ccustate.fcuCurrentIns; fcs["h2Concent2_fp32"] = data.h2_concentration2;
// suffix = getTypeName(typeid(ccustate.fcuCurrentPower).name()); fcs[ "o2Concent1_fp32"] = data.o2_concentration1;
// fcs[VAR_TO_STR(fcuCurPower)+suffix] = ccustate.fcuCurrentPower; fcs["o2Concent2_fp32"] = data.o2_concentration2;
// suffix = getTypeName(typeid(ccustate.h2Concentration1).name()); fcs["o2Level_fp32"] = 0.0; //备用
// fcs[VAR_TO_STR(h2Concent1)+suffix] = ccustate.h2Concentration1; fcs["o2_fp32"] = 0.0; //备用
fcs["powLimit_fp32"] = data.output_power_limit;
fcs[ "powerGen_fp32"] = data.total_generation_power;
// suffix = getTypeName(typeid(ccustate.h2Concentration2).name()); fcs["flameDet_uint8"] = data.flame_detector1;
// fcs[VAR_TO_STR(h2Concent2)+suffix] = ccustate.h2Concentration2;
// suffix = getTypeName(typeid(ccustate.o2Concentration1).name()); fcs["faultCode1_uint16"] = data.fc_fault_level_1;
// fcs[VAR_TO_STR(o2Concent1)+suffix] = ccustate.o2Concentration1; fcs["faultCode2_uint16"] = data.fc_fault_level_2;
fcs["faultCode3_uint16"] = data.fc_fault_level_3;
// suffix = getTypeName(typeid(ccustate.o2Concentration2).name()); fcs["faultCode4_uint16"] = data.fc_fault_level_4;
// fcs[VAR_TO_STR(o2Concent2)+suffix] = ccustate.o2Concentration2;
// suffix = getTypeName(typeid(ccustate.ch4oConcentration1).name());
// fcs[VAR_TO_STR(ch4oConcent1)+suffix] = ccustate.ch4oConcentration1;
// suffix = getTypeName(typeid(ccustate.ch4oConcentration2).name());
// fcs[VAR_TO_STR(ch4oConcent2)+suffix] = ccustate.ch4oConcentration2;
// suffix = getTypeName(typeid(ccustate.backpressure1).name());
// fcs[VAR_TO_STR(backpressure1)+suffix] = ccustate.backpressure1;
// suffix = getTypeName(typeid(ccustate.backpressure2).name());
// fcs[VAR_TO_STR(backpressure2)+suffix] = ccustate.backpressure2;
// suffix = getTypeName(typeid(ccustate.flameDetection).name());
// fcs[VAR_TO_STR(flameDet)+suffix] = ccustate.flameDetection;
// unsigned short faultCode1;
// unsigned short faultCode2;
// unsigned short faultCode3;
// faultCode1 = (ccustate.fcuGZ_1H << 8) | ccustate.fcuGZ_1L;
// faultCode2 = (ccustate.fcuGZ_2H << 8) | ccustate.fcuGZ_2L;
// faultCode3 = (ccustate.fcuGZ_3H << 8) | ccustate.fcuGZ_3L;
// suffix = getTypeName(typeid(faultCode1).name());
// fcs[VAR_TO_STR(faultCode1)+suffix] = faultCode1;
// suffix = getTypeName(typeid(faultCode2).name());
// fcs[VAR_TO_STR(faultCode2)+suffix] = faultCode2;
// suffix = getTypeName(typeid(faultCode3).name());
// fcs[VAR_TO_STR(faultCode3)+suffix] = faultCode3;
// // 转化为json格式
// Json::Value root;
// root["fcsStatus"] = state.fcsStatus;
// root["outputPower"] = state.outputPower;
// root["temperature"] = state.temperature;
// root["errorCode"] = state.errorCode;
Json::StreamWriterBuilder writerBuilder; Json::StreamWriterBuilder writerBuilder;
writerBuilder.settings_["indentation"] = ""; writerBuilder.settings_["indentation"] = "";
+36 -108
View File
@@ -4,7 +4,7 @@
#include "string" #include "string"
#include "json/json.h" #include "json/json.h"
#include <bitset> #include <bitset>
#include "../systemData.h"
class uPower_liBatStateMsg class uPower_liBatStateMsg
{ {
private: private:
@@ -16,117 +16,45 @@ public:
std::string key = "uPower_liBatState_st"; std::string key = "uPower_liBatState_st";
std::string buildMsg(ccuState ccustate) std::string buildMsg(SystemData data)
{ {
//TODO:根据最新协议修改 //TODO:根据最新协议修改
Json::Value lbs; Json::Value lbs;
//构建动力锂电池状态报告 //构建动力锂电池状态报告
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insPosRelayState).name()); lbs["insBatCurElect_uint16"] = data.ins_current;
// lbs[VAR_TO_STR(insPosRelayState)+suffix] = m_pm->m_pmCurrentState.ccustate.insPosRelayState; lbs["insBatLimit_uint16"] = data.ins_power_limit1;
lbs[ "insBatSoc_uint8"] = data.ins_soc;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insNegRelayState).name()); lbs["insBatTotalElect_uint16"] = data.ins_total_energy;
// lbs[VAR_TO_STR(insNegRelayState)+suffix] = m_pm->m_pmCurrentState.ccustate.insNegRelayState; lbs["insChargeState_uint8"] = data.ins_charge_status;
lbs["insCurSocHold1_uint8"] = 0; //备用
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerPosRelayState).name()); lbs["insCurSocHold2_uint8"] = 0; //备用
// lbs[VAR_TO_STR(powPosRelayState)+suffix] = m_pm->m_pmCurrentState.ccustate.powerPosRelayState; lbs["insCurSocHold3_uint8"] = 0; //备用
lbs["insCurrent_uint16"] = data.ins_current;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerNegRelayState).name()); lbs[ "insLinkVol_uint16"] = data.ins_voltage_link;
// lbs[VAR_TO_STR(powNegRelayState)+suffix] = m_pm->m_pmCurrentState.ccustate.powerNegRelayState; lbs["insNegRelayState_uint8"] = 0;
lbs["insNegRes_uint16"] = data.ins_resistance_neg;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insBatLimit).name()); lbs[ "insPackVol_uint16"] = data.ins_voltage_pack;
// lbs[VAR_TO_STR(insBatLimit)+suffix] = m_pm->m_pmCurrentState.ccustate.insBatLimit; lbs[ "insPosRelayState_uint8"] = 0;
lbs["insPosRes_uint16"] = data.ins_resistance_pos;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerBatLimit).name()); lbs["powBatCurElect_uint16"] = 0;
// lbs[VAR_TO_STR(powerBatLimit)+suffix] = m_pm->m_pmCurrentState.ccustate.powerBatLimit; lbs["powBatSoc_uint8"] = data.dyn_soc;
lbs[ "powBatTotalElect_uint16"] = data.dyn_total_energy;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insBatSoc).name()); lbs["powChargeState_uint8"] = data.dyn_charge_status;
// lbs[VAR_TO_STR(insBatSoc)+suffix] = m_pm->m_pmCurrentState.ccustate.insBatSoc; lbs["powCurSocHold1_uint8"] = 0; //备用
lbs["powCurSocHold2_uint8"] = 0; //备用
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerBatSoc).name()); lbs["powCurSocHold3_uint8"] = 0; //备用
// lbs[VAR_TO_STR(powBatSoc)+suffix] = m_pm->m_pmCurrentState.ccustate.powerBatSoc; lbs["powCurToInsLimit1_uint8"] = data.dyn_power_limit1;
lbs["powCurToInsLimit2_uint8"] = data.dyn_power_limit2;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insBatTotalElectricity).name()); lbs["powCur_uint16"] = data.dyn_current;
// lbs[VAR_TO_STR(insBatTotalElect)+suffix] = m_pm->m_pmCurrentState.ccustate.insBatTotalElectricity; lbs["powLinkVol_uint16"] = data.dyn_voltage_link;
lbs["powNegRelayState_uint8"] = 0;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerBatTotalElectricity).name()); lbs["powNegRes_uint16"] = data.dyn_resistance_neg;
// lbs[VAR_TO_STR(powBatTotalElect)+suffix] = m_pm->m_pmCurrentState.ccustate.powerBatTotalElectricity; lbs["powPosRelayState_uint8"] = 0;
lbs["powPosRes_uint16"] = data.dyn_resistance_pos;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insBatCurrentElectricity).name()); lbs["powerBatLimit_uint16"] = 0; //备用
// lbs[VAR_TO_STR(insBatCurElect)+suffix] = m_pm->m_pmCurrentState.ccustate.insBatCurrentElectricity; lbs["powerPackVol_uint16"] = data.dyn_voltage_pack;
lbs["powFaultCode_uint8"] = data.powfaultCode;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerBatCurrentElectricity).name()); lbs["insFaultCode_uint8"] = data.insfaultCode;
// lbs[VAR_TO_STR(powBatCurElect)+suffix] = m_pm->m_pmCurrentState.ccustate.powerBatCurrentElectricity;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insChargeState).name());
// lbs[VAR_TO_STR(insChargeState)+suffix] = m_pm->m_pmCurrentState.ccustate.insChargeState;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerChargeState).name());
// lbs[VAR_TO_STR(powChargeState)+suffix] = m_pm->m_pmCurrentState.ccustate.powerChargeState;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insLinkVoltage).name());
// lbs[VAR_TO_STR(insLinkVol)+suffix] = m_pm->m_pmCurrentState.ccustate.insLinkVoltage;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insPackVoltage).name());
// lbs[VAR_TO_STR(insPackVol)+suffix] = m_pm->m_pmCurrentState.ccustate.insPackVoltage;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insCurrent).name());
// lbs[VAR_TO_STR(insCurrent)+suffix] = m_pm->m_pmCurrentState.ccustate.insCurrent;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insPosInsulationResistance).name());
// lbs[VAR_TO_STR(insPosRes)+suffix] = m_pm->m_pmCurrentState.ccustate.insPosInsulationResistance;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insNegInsulationResistance).name());
// lbs[VAR_TO_STR(insNegRes)+suffix] = m_pm->m_pmCurrentState.ccustate.insNegInsulationResistance;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerLinkVoltage).name());
// lbs[VAR_TO_STR(powLinkVol)+suffix] = m_pm->m_pmCurrentState.ccustate.powerLinkVoltage;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerPackVoltage).name());
// lbs[VAR_TO_STR(powerPackVol)+suffix] = m_pm->m_pmCurrentState.ccustate.powerPackVoltage;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrent).name());
// lbs[VAR_TO_STR(powCur)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrent;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerPosInsulationResistance).name());
// lbs[VAR_TO_STR(powPosRes)+suffix] = m_pm->m_pmCurrentState.ccustate.powerPosInsulationResistance;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerNegInsulationResistance).name());
// lbs[VAR_TO_STR(powNegRes)+suffix] = m_pm->m_pmCurrentState.ccustate.powerNegInsulationResistance;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insCurrentSocHold1).name());
// lbs[VAR_TO_STR(insCurSocHold1)+suffix] = m_pm->m_pmCurrentState.ccustate.insCurrentSocHold1;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insCurrentSocHold2).name());
// lbs[VAR_TO_STR(insCurSocHold2)+suffix] = m_pm->m_pmCurrentState.ccustate.insCurrentSocHold2;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insCurrentSocHold3).name());
// lbs[VAR_TO_STR(insCurSocHold3)+suffix] = m_pm->m_pmCurrentState.ccustate.insCurrentSocHold3;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.fcuCurrentToInsLimit1).name());
// lbs[VAR_TO_STR(fcuCurToInsLimit1)+suffix] = m_pm->m_pmCurrentState.ccustate.fcuCurrentToInsLimit1;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.fcuCurrentToinsLimit2).name());
// lbs[VAR_TO_STR(fcuCurToinsLimit2)+suffix] = m_pm->m_pmCurrentState.ccustate.fcuCurrentToinsLimit2;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold1).name());
// lbs[VAR_TO_STR(powCurSocHold1)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold1;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold2).name());
// lbs[VAR_TO_STR(powCurSocHold2)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold2;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold3).name());
// lbs[VAR_TO_STR(powCurSocHold3)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrentSocHold3;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrentToInsLimit1).name());
// lbs[VAR_TO_STR(powCurToInsLimit1)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrentToInsLimit1;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerCurrentToinsLimit2).name());
// lbs[VAR_TO_STR(powCurToinsLimit2)+suffix] = m_pm->m_pmCurrentState.ccustate.powerCurrentToinsLimit2;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.insAlarmIdentificationWord).name());
// lbs[VAR_TO_STR(insfaultCode)+suffix] = m_pm->m_pmCurrentState.ccustate.insAlarmIdentificationWord;
// suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.powerAlarmIdentificationWord).name());
// lbs[VAR_TO_STR(powfaultCode)+suffix] = m_pm->m_pmCurrentState.ccustate.powerAlarmIdentificationWord;
Json::StreamWriterBuilder writerBuilder; Json::StreamWriterBuilder writerBuilder;
writerBuilder.settings_["indentation"] = ""; writerBuilder.settings_["indentation"] = "";
+1 -2
View File
@@ -32,7 +32,6 @@ public:
std::string buildMsg() std::string buildMsg()
{ {
// 状态赋值 // 状态赋值
//1.构建系统状态报告
Json::Value pms; Json::Value pms;
pms["workCondition_uint"] = state.workCondition; pms["workCondition_uint"] = state.workCondition;
@@ -40,7 +39,7 @@ public:
pms["powerState_uint8"] = state.powerState; pms["powerState_uint8"] = state.powerState;
pms["faultLevel_uint8"] = state.faultLevel; pms["faultLevel_uint8"] = state.faultLevel;
Json::Value faultCode_array; Json::Value faultCode_array = Json::Value(Json::arrayValue);
for(auto val : state.faultCode) for(auto val : state.faultCode)
{ {
faultCode_array.append(val); faultCode_array.append(val);