0702调试

This commit is contained in:
zjk
2025-07-02 16:20:36 +08:00
parent 16d4c25c77
commit ba8cd0383a
13 changed files with 1761 additions and 156 deletions
+6 -4
View File
@@ -600,11 +600,12 @@ bool LowerCommManager::operate_HV_dcDc5_Breaker(char opt)
m_udpComm->sendDisSysCmd(cmd);
ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02);
// ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02);
ok = m_pm->m_systemData->m_dcdcStatus.workingStatus;
MOOSPause(100);
while ( !ok ) {
if( m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02) == 1 )
if( m_pm->m_systemData->m_dcdcStatus.workingStatus )
{
ok = true;
break;
@@ -651,11 +652,12 @@ bool LowerCommManager::operate_HV_coolingSystem_Breaker(char opt)
m_udpComm->sendDisSysCmd(cmd);
ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60;
// ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60;
ok = m_pm->m_systemData->m_dcdcStatus.coolingPump1Running || m_pm->m_systemData->m_dcdcStatus.coolingPump2Running;
MOOSPause(100);
while ( !ok ) {
if( m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60 )
if( (m_pm->m_systemData->m_dcdcStatus.coolingPump1Running || m_pm->m_systemData->m_dcdcStatus.coolingPump2Running) )
{
ok = true;
break;
+55 -54
View File
@@ -6,7 +6,7 @@
#include "../faultCode.h"
// #define DEBUG
#define DEBUG_1
// #define DEBUG_1
// 定义静态成员
PowerManger* PowerManagerFsm::pm = nullptr;
void PowerManagerFsm::react(TaskStopEvent const &e) {
@@ -15,7 +15,7 @@ void PowerManagerFsm::react(TaskStopEvent const &e) {
};
void PowerManagerFsm::react(CycleTriggeredEvent const &){
// 更新当前设备状态
// 检测和更新状态
#ifdef DEBUG_1
pm->m_currentDriverState = pm->m_subDisSysState;
#else
@@ -33,10 +33,11 @@ void PowerManagerFsm::react(CycleTriggeredEvent const &){
//非调试模式下,对水声设备进行保护
if(pm->currentMod != PMMode::Debug)
{
if(pm->m_depth < 10)
if(pm->m_depth > 10)
{
if(pm->m_systemData->power_a_bus_status.xczCircuitBreaker == 1)
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
//舷侧阵自动下电
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
MOOSPause(3);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, 0);
//所有水声设备下电
@@ -82,7 +83,7 @@ void PowerManagerFsm::handleBowRudderSystemCmd(int id, int cmd){
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderDeploy, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderServo1, (unsigned char)cmd);
@@ -95,7 +96,7 @@ void PowerManagerFsm::handleBowRudderSystemCmd(int id, int cmd){
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderServo2, (unsigned char)cmd);
pm->m_upperCommManager->processPeriodicTasks();
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(1);
}
}
}
@@ -112,7 +113,7 @@ void PowerManagerFsm::handleActuatorCmd(int id, int cmd){
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover2, (unsigned char)cmd);
@@ -129,7 +130,7 @@ void PowerManagerFsm::handleActuatorCmd(int id, int cmd){
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover5, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover6, (unsigned char)cmd);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(1);
}
}
}
@@ -149,7 +150,7 @@ void PowerManagerFsm::handleOpenWaterCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet2, (unsigned char)cmd);
@@ -170,7 +171,7 @@ void PowerManagerFsm::handleOpenWaterCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet7, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet8, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(1);
}
}
}
@@ -186,8 +187,8 @@ void PowerManagerFsm::handleSternRudderCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo2, (unsigned char)cmd);
@@ -201,8 +202,8 @@ void PowerManagerFsm::handleSternRudderCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo3, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo4, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(1);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(1);
}
}
}
@@ -216,14 +217,14 @@ void PowerManagerFsm::handlePropulsionMotorCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::thruster, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::thruster, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(1);
}
}
}
@@ -239,7 +240,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust2, (unsigned char)cmd);
@@ -250,7 +251,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust2, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust3, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(1);
}
}
}
@@ -262,7 +263,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust5, (unsigned char)cmd);
@@ -271,7 +272,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust5, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(1);
}
}
}
@@ -285,14 +286,14 @@ void PowerManagerFsm::handleFBSystemCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyage, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyage, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(1);
}
}
}
@@ -314,14 +315,14 @@ void PowerManagerFsm::handleSideSonarCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(1);
}
}
}
@@ -336,14 +337,14 @@ void PowerManagerFsm::handleMastFoldingSystemCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::mastLiftingServo, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::mastLiftingServo, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(1);
}
}
}
@@ -3100,34 +3101,34 @@ void PowerManagerFsm::handelPowerCmd(){
LOG_F(INFO, "动力锂电池已下电");
//2. 断掉所有动力电断路器
//2.1 断开所有艏部高压断路器
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
//2.2 断开所有艉部高压设备断路器
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_tyzReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_reserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_dcDc5_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_coolingSystem_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(0);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_tyzReserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_reserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_dcDc5_Breaker(0);
pm->m_lowerCommManager->operate_HV_coolingSystem_Breaker(0);
//2.3 断开仪表预留断路器
pm->m_lowerCommManager->operate_LV_reservedCircuit1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_reservedCircuit2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_reservedCircuit1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_reservedCircuit2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_bowPZDeviceCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_reservedCircuit1_Breaker(0);
pm->m_lowerCommManager->operate_LV_reservedCircuit2_Breaker(0);
pm->m_lowerCommManager->operate_LVA_reservedCircuit1_Breaker(0);
pm->m_lowerCommManager->operate_LVA_reservedCircuit2_Breaker(0);
pm->m_lowerCommManager->operate_LVA_bowPZDeviceCircuit_Breaker(0);
//2.4 断开应急电池断路器
pm->m_lowerCommManager->operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(0);
pm->m_lowerCommManager->operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(0);
//3. 次级配电系统恢复待机
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
@@ -3140,7 +3141,7 @@ void PowerManagerFsm::handelPowerCmd(){
{
LOG_F(INFO, "收到上位机控制指令:动力电上电");
//闭合动力电断路器
if(pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON))
if(pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(1))
LOG_F(INFO,"动力锂电池断路器闭合成功");
else
LOG_F(INFO,"动力锂电池断路器闭合操作失败");
@@ -3153,7 +3154,7 @@ void PowerManagerFsm::handelPowerCmd(){
{
LOG_F(INFO, "收到上位机控制指令:锂动力电上电");
//1. 闭合动力电断路器
pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(1);
//2. 动力锂电池上电
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
break;
@@ -3299,7 +3300,7 @@ void PowerManagerFsm::react(TestEvent const &e)
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();
pm->m_systemData->disSysFaultCode.clear();
cout << "清空故障代码" << endl;
};
// if(e.eventId == 0) return ;
@@ -3346,10 +3347,10 @@ void PowerManagerFsm::react(TestEvent const &e)
pm->m_leakage = 0x20; //艉应急
break;
case 3:
pm->m_leakage = 0x40;
pm->m_leakage = 0x40; //燃料电池舱漏水
break;
case 4:
pm->m_leakage = 0x80;
pm->m_leakage = 0x80; //艏部应急漏水
break;
case 5:
pm->m_leakage = 0x01; //艏部应急漏水
@@ -3406,7 +3407,7 @@ void PowerManagerFsm::react(TestEvent const &e)
{
LOG_F(INFO,"配电系统故障测试");
// pm->m_systemData->distributeFaultCode.push_back(disfaultMap[e.eventId].code);
pm->m_systemData->distributeFaultCode.insert(disfaultMap[e.eventId].code);
pm->m_systemData->disSysFaultCode.insert(disfaultMap[e.eventId].code);
}
default:
LOG_F(INFO, "测试消息类型错误");
@@ -579,6 +579,9 @@ void HttpServer::pushSystemData() {
j["power_bus_status"]["reservedCurrent3"] = Json::Value(m_systemData->power_bus_status.reservedCurrent3); // 预留电流3
j["power_bus_status"]["coolWaterPressure"] = Json::Value(m_systemData->power_bus_status.coolWaterPressure); // 冷却水压力
j["power_bus_status"]["dcdcStatus1"] = Json::Value(m_systemData->m_dcdcStatus.lowFaultWord);
j["power_bus_status"]["dcdcStatus2"] = Json::Value(m_systemData->m_dcdcStatus.highFaultWord);
//动力母线A状态
j["power_a_bus_status"]["bowFTDevice123CircuitBreaker"] = Json::Value(m_systemData->power_a_bus_status.bowFTDevice123CircuitBreaker); // 艏部FT装置1/2/3断路器状态: 0-断开 1-闭合 2-故障
j["power_a_bus_status"]["actuatorCircuitBreaker"] = Json::Value(m_systemData->power_a_bus_status.actuatorCircuitBreaker); // 启闭机构断路器状态: 0-断开 1-闭合 2-故障
+7
View File
@@ -0,0 +1,7 @@
//SERVERHOST = 192.168.0.223
//SERVERPORT = 9000
ProcessConfig = pPowerManger
{
AppTick = 4
CommsTick = 4
}
+135 -83
View File
@@ -3,6 +3,7 @@
#include "pmSysvariable.h"
#include "sqlit3/SQLite.h"
#include <set>
#include <mutex>
#define DEBUFG
class SystemData
{
@@ -162,11 +163,47 @@ public:
unsigned char powfaultCode;
unsigned char insfaultCode;
//配电系统故障码
std::set<unsigned int> distributeFaultCode;
std::set<unsigned int> disSysFaultCode;
// MOOSD 状态
bool moosd_status;
//配电系统状态
//DC/DC状态字
struct DcdcStatus
{
// DC/DC5故障字低
union {
unsigned char lowFaultWord;
struct {
bool overTemperatureShutdown : 1; // Bit0: DC/DC模块过温关机
bool outputOverCurrent : 1; // Bit1: 输出过流
bool outputOverVoltage : 1; // Bit2: 输出过压
bool outputUnderVoltage : 1; // Bit3: 输出欠压
bool inputOverVoltage : 1; // Bit4: 输入过压
bool inputUnderVoltage : 1; // Bit5: 输入欠压
bool outputShortCircuit : 1; // Bit6: 输出短路保护
bool internalFault : 1; // Bit7: 内部故障
};
};
// DC/DC5故障字高
union {
unsigned char highFaultWord;
struct {
bool communicationFault : 1; // Bit0: 通讯故障报警
bool workingStatus : 1; // Bit1: 工作状态(1:启动, 0:关闭)
bool coolingPump1Fault : 1; // Bit2: 冷却泵1故障
bool coolingPump2Fault : 1; // Bit3: 冷却泵2故障
bool coolingWaterLeak : 1; // Bit4: 冷却水泄露
bool coolingPump1Running : 1; // Bit5: 冷却泵1运行状态
bool coolingPump2Running : 1; // Bit6: 冷却泵2运行状态
bool reserved : 1; // Bit7: 保留位
};
};
// 构造函数,初始化所有状态为正常
DcdcStatus() : lowFaultWord(0x00), highFaultWord(0x00) {}
} m_dcdcStatus;
//动力母线状态
struct POWER_BUS_STATUS
@@ -409,7 +446,33 @@ public:
uint8_t composite_online_state; //复合管控主机在线标志位
uint8_t composite_backup_online_state; //复合管控备机在线标志位
} device_online_status;
enum LeakageStatus {
LEAKAGE_BOW_EMERGENCY = 0, // 艏部应急漏水 (0x01)
LEAKAGE_BOW_HIGH_VOLTAGE, // 艏高压漏水 (0x02)
LEAKAGE_BOW_LOW_VOLTAGE, // 艏低压漏水 (0x04)
LEAKAGE_FUEL_CELL, // 燃电舱漏水 (0x08)
LEAKAGE_LI_BATTERY, // 锂电池舱漏水 (0x10)
LEAKAGE_STERN_EMERGENCY, // 艉应急漏水 (0x20)
LEAKAGE_FUEL_CELL_CABIN, // 燃料电池舱漏水 (0x40)
LEAKAGE_BOW_EMERGENCY2 // 艏部应急漏水2 (0x80)
};
unsigned char leakageCode = 0;
bool leakStatus[8] = {false};
unsigned char generateLeakageCode() {
unsigned char code = 0;
if(leakStatus[LEAKAGE_BOW_EMERGENCY]) code |= 0x01;
if(leakStatus[LEAKAGE_BOW_HIGH_VOLTAGE]) code |= 0x02;
if(leakStatus[LEAKAGE_BOW_LOW_VOLTAGE]) code |= 0x04;
if(leakStatus[LEAKAGE_FUEL_CELL]) code |= 0x08;
if(leakStatus[LEAKAGE_LI_BATTERY]) code |= 0x10;
if(leakStatus[LEAKAGE_STERN_EMERGENCY]) code |= 0x20;
if(leakStatus[LEAKAGE_FUEL_CELL_CABIN]) code |= 0x40;
if(leakStatus[LEAKAGE_BOW_EMERGENCY2]) code |= 0x80;
return code;
}
public:
SystemData(){
//初始化变量全部为0
@@ -441,10 +504,10 @@ public:
//故障信息
#ifdef DEBUG
fc_fault_level_1 = data.fault_level_1;
fc_fault_level_2 = data.fault_level_2;
fc_fault_level_3 = data.fault_level_3;
fc_fault_level_4 = data.fault_level_4;
fc_fault_level_1 = data.fault_level_1;
fc_fault_level_2 = data.fault_level_2;
fc_fault_level_3 = data.fault_level_3;
fc_fault_level_4 = data.fault_level_4;
#endif
//燃料容量
@@ -581,7 +644,6 @@ public:
device_online_status.composite_online_state = (data.device_online_flag2 >> 8) & 0xFF; // byte1:复合管控主机在线标志位
device_online_status.composite_backup_online_state = (data.device_online_flag2 >> 16) & 0xFF; // byte2:复合管控备机在线标志位
// 更新锂电池其他状态
dyn_water_leak_status = data.dyn_water_leak_status;
ins_water_leak_dcdc_status = data.ins_water_leak_dcdc_status;
@@ -591,53 +653,53 @@ public:
water_leak_status_from_dynbat = (data.dyn_water_leak_status >> 4) & 0x0F; // 00 正常,01 异常漏水
dcdc_status_from_insbat = (data.ins_water_leak_dcdc_status) & 0x0F; // 00 正常,01 故障
// std::cout << "dyn_charge_level: " << std::hex << static_cast<int>(dyn_charge_level) << std::endl;
// std::cout << "ins_water_leak_dcdc_status: " << std::hex << static_cast<int>(ins_water_leak_dcdc_status) << std::endl;
// std::cout << "dcdc_status_from_insbat: " << std::hex << static_cast<int>(dcdc_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_insbat: " << std::hex << static_cast<int>(water_leak_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_dynbat: " << std::hex << static_cast<int>(water_leak_status_from_dynbat) << std::endl;
//心跳计数器
heartbeat = data.heartbeat;
}
// std::mutex faultCodeMutex; // 添加互斥锁
void updateBreakerFault(unsigned char& breakerStatus, unsigned char rawStatus, unsigned int faultCode)
{
// std::lock_guard<std::mutex> lock(faultCodeMutex);
breakerStatus = rawStatus == 0x55 ? 1 : (rawStatus == 0xAA ? 0 : 2);
// if(breakerStatus == 2) {
// disSysFaultCode.insert(faultCode);
// } else {
// disSysFaultCode.erase(faultCode);
// }
}
void updateSystemData(disHighVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_bus_status.fuelCellCircuitBreaker = data.fuelCellCircuitBreaker == 0x55 ? 1 :
(data.fuelCellCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.powerLithiumBatteryCircuitBreaker = data.powerLithiumBatteryCircuitBreaker == 0x55 ? 1 :
(data.powerLithiumBatteryCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.propulsionMotorCircuitBreaker = data.propulsionMotorCircuitBreaker == 0x55 ? 1 :
(data.propulsionMotorCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.dcDc5ModuleCircuitBreaker = data.dcDc5ModuleCircuitBreaker == 0x55 ? 1 :
(data.dcDc5ModuleCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker = data.bowHighVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowHighVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternFTDevice45CircuitBreaker = data.sternFTDevice45CircuitBreaker == 0x55 ? 1 :
(data.sternFTDevice45CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch1CircuitBreaker = data.sternRudderSwitch1CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch1CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch2CircuitBreaker = data.sternRudderSwitch2CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch2CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.fbReservedCircuitBreaker = data.fbReservedCircuitBreaker == 0x55 ? 1 :
(data.fbReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.tyzReservedCircuitBreaker = data.tyzReservedCircuitBreaker == 0x55 ? 1 :
(data.tyzReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.reservedCircuitBreaker = data.reservedCircuitBreaker == 0x55 ? 1 :
(data.reservedCircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(power_bus_status.fuelCellCircuitBreaker, data.fuelCellCircuitBreaker, 1);
updateBreakerFault(power_bus_status.powerLithiumBatteryCircuitBreaker, data.powerLithiumBatteryCircuitBreaker, 2);
updateBreakerFault(power_bus_status.propulsionMotorCircuitBreaker, data.propulsionMotorCircuitBreaker, 3);
updateBreakerFault(power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker, data.lithiumBatteryGroupInstrumentCircuitBreaker, 4);
updateBreakerFault(power_bus_status.dcDc5ModuleCircuitBreaker, data.dcDc5ModuleCircuitBreaker, 5);
updateBreakerFault(power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker, data.bowHighVoltageDistributionBoxCircuitBreaker, 6);
updateBreakerFault(power_bus_status.sternFTDevice45CircuitBreaker, data.sternFTDevice45CircuitBreaker, 7);
updateBreakerFault(power_bus_status.sternRudderSwitch1CircuitBreaker, data.sternRudderSwitch1CircuitBreaker, 8);
updateBreakerFault(power_bus_status.sternRudderSwitch2CircuitBreaker, data.sternRudderSwitch2CircuitBreaker, 9);
updateBreakerFault(power_bus_status.fbReservedCircuitBreaker, data.fbReservedCircuitBreaker, 10);
updateBreakerFault(power_bus_status.tyzReservedCircuitBreaker, data.tyzReservedCircuitBreaker, 11);
updateBreakerFault(power_bus_status.reservedCircuitBreaker, data.reservedCircuitBreaker, 12);
//模块状态
power_bus_status.dcDcModuleStatus = data.dcDcFaultWord1;
power_bus_status.coolingSystemStatus = data.dcDcFaultWord2;
m_dcdcStatus.lowFaultWord = data.dcDcFaultWord1;
m_dcdcStatus.highFaultWord = data.dcDcFaultWord2;
//绝缘状态
power_bus_status.powerBusInsulationStatus = data.powerBusInsulationStatus == 0x55 ? 0 : 1;
// if(power_bus_status.powerBusInsulationStatus == 1) disSysFaultCode.insert(34); else disSysFaultCode.erase(34);
power_bus_status.aBusInsulationStatus = data.aBusInsulationStatus == 0x55 ? 0 : 1;
// if(power_bus_status.aBusInsulationStatus == 1) disSysFaultCode.insert(35); else disSysFaultCode.erase(35);
//电源状态
//电源状态
power_bus_status.meterPowerLossSignal = data.meterPowerLossSignal == 0x55 ? 0 : 1;
// if(power_bus_status.meterPowerLossSignal == 1) disSysFaultCode.insert(36); else disSysFaultCode.erase(36);
power_bus_status.emergencyPowerLossSignal = data.emergencyPowerLossSignal == 0x55 ? 0 : 1;
// if(power_bus_status.emergencyPowerLossSignal == 1) disSysFaultCode.insert(37); else disSysFaultCode.erase(37);
//温度
power_bus_status.dcDcTemperature = data.dcDcTemperature-40;
@@ -665,25 +727,23 @@ public:
};
void updateSystemData(disHighAVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_a_bus_status.bowFTDevice123CircuitBreaker = data.bowFTDevice123CircuitBreaker == 0x55 ? 1 :
(data.bowFTDevice123CircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.actuatorCircuitBreaker = data.actuatorCircuitBreaker == 0x55 ? 1 :
(data.actuatorCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker = data.mastSteeringGearControlBoxCircuitBreaker == 0x55 ? 1 :
(data.mastSteeringGearControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.xczCircuitBreaker = data.xczCircuitBreaker == 0x55 ? 1 :
(data.xczCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.bowRudderControlBoxCircuitBreaker = data.bowRudderControlBoxCircuitBreaker == 0x55 ? 1 :
(data.bowRudderControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker = data.openWaterCoverStartCylinderCircuitBreaker == 0x55 ? 1 :
(data.openWaterCoverStartCylinderCircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(power_a_bus_status.bowFTDevice123CircuitBreaker, data.bowFTDevice123CircuitBreaker, 13);
updateBreakerFault(power_a_bus_status.actuatorCircuitBreaker, data.actuatorCircuitBreaker, 14);
updateBreakerFault(power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker, data.mastSteeringGearControlBoxCircuitBreaker, 15);
updateBreakerFault(power_a_bus_status.xczCircuitBreaker, data.xczCircuitBreaker, 16);
updateBreakerFault(power_a_bus_status.bowRudderControlBoxCircuitBreaker, data.bowRudderControlBoxCircuitBreaker, 17);
updateBreakerFault(power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker, data.openWaterCoverStartCylinderCircuitBreaker, 18);
//电源状态
power_a_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
// if(power_a_bus_status.instrumentPowerFailureSignal == 1) disSysFaultCode.insert(38); else disSysFaultCode.erase(38);
power_a_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(power_a_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(39); else disSysFaultCode.erase(39);
//浸水报警
power_a_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
//电压电流参数
power_a_bus_status.busbarBVoltage = data.busbarBVoltage * 0.1;
@@ -697,27 +757,24 @@ public:
};
void updateSystemData(disLowMainBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker = data.bowLowVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowLowVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker = data.unit4InstrumentDC48VCircuitBreaker == 0x55 ? 1 :
(data.unit4InstrumentDC48VCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker = data.dcC1DCDistributionPanelCircuitBreaker == 0x55 ? 1 :
(data.dcC1DCDistributionPanelCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker = data.emergencyLithiumBatteryGroup2CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup2CircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker, data.lithiumBatteryGroupInstrumentCircuitBreaker, 19);
updateBreakerFault(instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker,data.bowLowVoltageDistributionBoxCircuitBreaker, 20);
updateBreakerFault(instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker,data.unit4InstrumentDC48VCircuitBreaker, 21);
updateBreakerFault(instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker, data.dcC1DCDistributionPanelCircuitBreaker, 22);
updateBreakerFault(instrument_main_bus_status.reservedCircuitBreaker1, data.reservedCircuitBreaker1, 23);
updateBreakerFault(instrument_main_bus_status.reservedCircuitBreaker2, data.reservedCircuitBreaker2, 24);
updateBreakerFault(instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker, data.emergencyLithiumBatteryGroup2CircuitBreaker, 25);
//电源状态
instrument_main_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.instrumentPowerFailureSignal == 1) disSysFaultCode.insert(40); else disSysFaultCode.erase(41);
instrument_main_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(41); else disSysFaultCode.erase(42);
//绝缘状态
instrument_main_bus_status.instrumentBusbarInsulationLow = data.instrumentBusbarInsulationLow == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.instrumentBusbarInsulationLow == 1) disSysFaultCode.insert(42); else disSysFaultCode.erase(43);
//电压电流参数
instrument_main_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage * 0.1;
@@ -735,26 +792,21 @@ public:
}
void updateSystemData(disLowBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_bus_status.unit1CircuitBreaker = data.unit1CircuitBreaker == 0x55 ? 1 :
(data.unit1CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit2CircuitBreaker = data.unit2CircuitBreaker == 0x55 ? 1 :
(data.unit2CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit3CircuitBreaker = data.unit3CircuitBreaker == 0x55 ? 1 :
(data.unit3CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit5CircuitBreaker = data.unit5CircuitBreaker == 0x55 ? 1 :
(data.unit5CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.bowPZDeviceCircuitBreaker = data.bowPZDeviceCircuitBreaker == 0x55 ? 1 :
(data.bowPZDeviceCircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker = data.emergencyLithiumBatteryGroup1CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup1CircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(instrument_bus_status.unit1CircuitBreaker, data.unit1CircuitBreaker, 26);
updateBreakerFault(instrument_bus_status.unit2CircuitBreaker, data.unit2CircuitBreaker, 27);
updateBreakerFault(instrument_bus_status.unit3CircuitBreaker, data.unit3CircuitBreaker, 28);
updateBreakerFault(instrument_bus_status.unit5CircuitBreaker, data.unit5CircuitBreaker, 29);
updateBreakerFault(instrument_bus_status.bowPZDeviceCircuitBreaker, data.bowPZDeviceCircuitBreaker, 30);
updateBreakerFault(instrument_bus_status.reservedCircuitBreaker1, data.reservedCircuitBreaker1, 31);
updateBreakerFault(instrument_bus_status.reservedCircuitBreaker2, data.reservedCircuitBreaker2, 32);
updateBreakerFault(instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker, data.emergencyLithiumBatteryGroup1CircuitBreaker, 33);
//电源状态
instrument_bus_status.powerFailureSignal = data.powerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_bus_status.powerFailureSignal == 1) disSysFaultCode.insert(44); else disSysFaultCode.erase(44);
instrument_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(45); else disSysFaultCode.erase(45);
//浸水报警
instrument_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
+160 -9
View File
@@ -12,28 +12,179 @@ private:
/* data */
public:
uPower_disSysStateMsg() {
// state_of_bus_hv = {};
// state_of_bus_hv_a = {};
// state_of_bus_lv = {};
// state_of_bus_lv_a = {};
};
~uPower_disSysStateMsg() {};
std::string key = "uPower_disSysState_st";
struct state_of_bus_hv
{
// 使用 std::bitset 存储 16 位继电器状态
std::bitset<16> relay_states;
// 燃料电池断路器
void set_fuel_cell_breaker(bool state) { relay_states[0] = state; }
// 动力锂电池断路器
void set_power_lithium_battery_breaker(bool state) { relay_states[1] = state; }
// 推进电机断路器
void set_propulsion_motor_breaker(bool state) { relay_states[2] = state; }
// 锂电池组仪表断路器
void set_lithium_battery_meter_breaker(bool state) { relay_states[3] = state; }
// DC/DC5模块断路器
void set_dc_dc5_module_breaker(bool state) { relay_states[4] = state; }
// 艏部高压配电箱断路器
void set_bow_high_voltage_box_breaker(bool state) { relay_states[5] = state; }
// 艉部FT装置4/5断路器
void set_stern_ft_device_breaker(bool state) { relay_states[6] = state; }
// 艉舵开关1断路器
void set_stern_rudder_switch1_breaker(bool state) { relay_states[7] = state; }
// 艉舵开关2断路器
void set_stern_rudder_switch2_breaker(bool state) { relay_states[8] = state; }
// FB预留断路器
void set_fb_reserved_breaker(bool state) { relay_states[9] = state; }
// TYZ预留断路器
void set_tyz_reserved_breaker(bool state) { relay_states[10] = state; }
// 预留断路器
void set_reserved_breaker(bool state) { relay_states[11] = state; }
// 初始化后 16 - 12 位为 0
state_of_bus_hv() {
relay_states.reset(12);
relay_states.reset(13);
relay_states.reset(14);
relay_states.reset(15);
}
} m_state_of_bus_hv;
struct state_of_bus_hv_a
{
std::bitset<16> relay_states;
// 艏部FT装置1 - 3 断路器
void set_bow_ft_device_1_3_breaker(bool state) { relay_states[0] = state; }
// 启闭机构断路器
void set_opening_closing_mechanism_breaker(bool state) { relay_states[1] = state; }
// 桅杆舵机控制箱断路器
void set_mast_servo_control_box_breaker(bool state) { relay_states[2] = state; }
// XCZ 断路器
void set_xcz_breaker(bool state) { relay_states[3] = state; }
// 艏舵控制箱断路器
void set_bow_rudder_control_box_breaker(bool state) { relay_states[4] = state; }
// 敞水盖启动电缸断路器
void set_open_water_cover_actuator_breaker(bool state) { relay_states[5] = state; }
// 初始化后 6 - 15 位为 0
state_of_bus_hv_a() {
for (int i = 6; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_hv_a;
struct state_of_bus_lv
{
std::bitset<16> relay_states;
// 锂电池组(仪表)断路器
void set_lithium_battery_group_meter_breaker(bool state) { relay_states[0] = state; }
// 艏部低压配电箱断路器
void set_bow_low_voltage_box_breaker(bool state) { relay_states[1] = state; }
// UNIT4仪表DC48V断路器
void set_unit4_meter_dc48v_breaker(bool state) { relay_states[2] = state; }
// DC - C1直流配电板断路器
void set_dc_c1_dc_distribution_board_breaker(bool state) { relay_states[3] = state; }
// 预留断路器
void set_reserved_breaker_1(bool state) { relay_states[4] = state; }
// 预留断路器
void set_reserved_breaker_2(bool state) { relay_states[5] = state; }
// 应急锂电池组2断路器
void set_emergency_lithium_battery_group_2_breaker(bool state) { relay_states[6] = state; }
// 初始化后 7 - 15 位为 0
state_of_bus_lv() {
for (int i = 7; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_lv;
struct state_of_bus_lv_a
{
// 使用 std::bitset 存储 16 位继电器状态
std::bitset<16> relay_states;
// UNIT1断路器
void set_unit1_breaker(bool state) { relay_states[0] = state; }
// UNIT2断路器
void set_unit2_breaker(bool state) { relay_states[1] = state; }
// UNIT3断路器
void set_unit3_breaker(bool state) { relay_states[2] = state; }
// UNIT5断路器
void set_unit5_breaker(bool state) { relay_states[3] = state; }
// 艏部PZ装置断路器
void set_bow_pz_device_breaker(bool state) { relay_states[4] = state; }
// 预留断路器
void set_reserved_breaker_1(bool state) { relay_states[5] = state; }
// 预留断路器
void set_reserved_breaker_2(bool state) { relay_states[6] = state; }
// 应急锂电池组1断路器
void set_emergency_lithium_battery_group_1_breaker(bool state) { relay_states[7] = state; }
// 初始化后 8 - 15 位为 0
state_of_bus_lv_a() {
for (int i = 8; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_lv_a;
std::string buildMsg(SystemData data,disSysBreakerList currentDisBreakerState)
{
//构建配电系统状态报告
Json::Value dis;
disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker;
disBus2Breaker dis2 = currentDisBreakerState.bus2Breaker;
disBus3Breaker dis3 = currentDisBreakerState.bus3Breaker;
disBus4Breaker dis4 = currentDisBreakerState.bus4Breaker;
// disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker;
m_state_of_bus_hv.set_fuel_cell_breaker((data.power_bus_status.fuelCellCircuitBreaker == 1));
m_state_of_bus_hv.set_power_lithium_battery_breaker((data.power_bus_status.powerLithiumBatteryCircuitBreaker == 1));
m_state_of_bus_hv.set_propulsion_motor_breaker((data.power_bus_status.propulsionMotorCircuitBreaker == 1));
m_state_of_bus_hv.set_lithium_battery_meter_breaker((data.power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker == 1));
m_state_of_bus_hv.set_dc_dc5_module_breaker((data.power_bus_status.dcDc5ModuleCircuitBreaker == 1));
m_state_of_bus_hv.set_bow_high_voltage_box_breaker((data.power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker == 1));
m_state_of_bus_hv.set_stern_ft_device_breaker((data.power_bus_status.sternFTDevice45CircuitBreaker == 1));
m_state_of_bus_hv.set_stern_rudder_switch1_breaker((data.power_bus_status.sternRudderSwitch1CircuitBreaker == 1));
m_state_of_bus_hv.set_stern_rudder_switch2_breaker((data.power_bus_status.sternRudderSwitch2CircuitBreaker == 1));
m_state_of_bus_hv.set_fb_reserved_breaker((data.power_bus_status.fbReservedCircuitBreaker == 1));
m_state_of_bus_hv.set_tyz_reserved_breaker((data.power_bus_status.tyzReservedCircuitBreaker == 1));
m_state_of_bus_hv.set_reserved_breaker((data.power_bus_status.reservedCircuitBreaker == 1));
dis["HVolABusBreaker_uint16"] = m_state_of_bus_hv.relay_states.to_ulong();
dis["HVolBusBreaker_uint16"] = *(unsigned short*)&dis1;
dis["HVolABusBreaker_unit16"] = *(unsigned short*)&dis2;
dis["HVolBBusBreaker_unit16"] = *(unsigned short*)&dis3;
dis["LVolBusBreaker_uint16"] = *(unsigned short*)&dis4;
m_state_of_bus_hv_a.set_bow_ft_device_1_3_breaker((data.power_a_bus_status.bowFTDevice123CircuitBreaker == 1));
m_state_of_bus_hv_a.set_opening_closing_mechanism_breaker((data.power_a_bus_status.actuatorCircuitBreaker == 1));
m_state_of_bus_hv_a.set_mast_servo_control_box_breaker((data.power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker == 1));
m_state_of_bus_hv_a.set_xcz_breaker((data.power_a_bus_status.xczCircuitBreaker == 1));
m_state_of_bus_hv_a.set_bow_rudder_control_box_breaker((data.power_a_bus_status.bowRudderControlBoxCircuitBreaker == 1));
m_state_of_bus_hv_a.set_open_water_cover_actuator_breaker((data.power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker == 1));
dis["HVolBBusBreaker_uint16"] = m_state_of_bus_hv_a.relay_states.to_ulong();
m_state_of_bus_lv.set_bow_low_voltage_box_breaker((data.instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker == 1));
m_state_of_bus_lv.set_dc_c1_dc_distribution_board_breaker((data.instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker == 1));
m_state_of_bus_lv.set_unit4_meter_dc48v_breaker((data.instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker == 1));
m_state_of_bus_lv.set_lithium_battery_group_meter_breaker((data.instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker == 1));
m_state_of_bus_lv.set_emergency_lithium_battery_group_2_breaker((data.instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker == 1));
m_state_of_bus_lv.set_reserved_breaker_1((data.instrument_main_bus_status.reservedCircuitBreaker1 == 1));
m_state_of_bus_lv.set_reserved_breaker_2((data.instrument_main_bus_status.reservedCircuitBreaker2 == 1));
dis["HVolBusBreaker_uint16"] = m_state_of_bus_lv.relay_states.to_ulong();
m_state_of_bus_lv_a.set_unit1_breaker((data.instrument_bus_status.unit1CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit2_breaker((data.instrument_bus_status.unit2CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit3_breaker((data.instrument_bus_status.unit3CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit5_breaker((data.instrument_bus_status.unit5CircuitBreaker == 1));
m_state_of_bus_lv_a.set_bow_pz_device_breaker((data.instrument_bus_status.bowPZDeviceCircuitBreaker == 1));
m_state_of_bus_lv_a.set_reserved_breaker_1((data.instrument_bus_status.reservedCircuitBreaker1 == 1));
m_state_of_bus_lv_a.set_reserved_breaker_2((data.instrument_bus_status.reservedCircuitBreaker2 == 1));
m_state_of_bus_lv_a.set_emergency_lithium_battery_group_1_breaker((data.instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker == 1));
dis["LVolBusBreaker_uint16"] = m_state_of_bus_lv.relay_states.to_ulong();
//TODO: 构建配电系统故障码
Json::Value faultCodeDis_array = Json::Value(Json::arrayValue);
for(auto val : data.distributeFaultCode)
for(auto val : data.disSysFaultCode)
{
faultCodeDis_array.append(val);
}