diff --git a/generated.dbc b/generated.dbc index 4ecad1f..e128cf8 100644 --- a/generated.dbc +++ b/generated.dbc @@ -36,24 +36,25 @@ BS_: BU_: -BO_ 256 EngineData: 8 Vector__XXX - SG_ Temp : 32|8@1- (1,0) [0|0] "" Vector__XXX - SG_ Speed : 16|16@1+ (1,0) [0|0] "" Vector__XXX - SG_ RPM : 0|16@1+ (1,0) [0|0] "" Vector__XXX +BO_ 2432696577 HostToCompositeControl: 8 Vector__XXX + SG_ Reserved1 : 56|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ HostStatus : 48|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ HostHeartbeat : 40|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PowerBatteryStartStop : 32|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ MeterBatteryStartStop : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ MeterBatteryChargeFlag : 16|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FuelCellCommand : 8|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FuelCellModeSet : 0|8@1+ (1,0) [0|0] "" Vector__XXX -BO_ 512 VehicleStatus: 4 Vector__XXX - SG_ LightStatus : 4|4@1+ (1,0) [0|0] "" Vector__XXX - SG_ DoorStatus : 0|4@1+ (1,0) [0|0] "" Vector__XXX - -BO_ 2483135745 CircuitBreakerStatus: 8 Vector__XXX - SG_ SternRudder1Breaker : 56|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ SternFT45Breaker : 48|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ BowDistBoxBreaker : 40|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ DCDC5Breaker : 32|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ BatteryMeterBreaker : 24|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ MotorBreaker : 16|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ BatteryBreaker : 8|8@1+ (1,0) [0|0] "" Vector__XXX - SG_ FuelCellBreaker : 0|8@1+ (1,0) [0|0] "" Vector__XXX +BO_ 2432696833 CompositeControlToHost: 8 Vector__XXX + SG_ Reserved2 : 56|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PowerBatteryTotalEnergy : 48|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ MeterBatteryTotalEnergy : 40|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ PowerBatteryEmergency : 32|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ MeterBatteryEmergency : 24|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FuelCellFaultLevel : 16|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FuelCellStatus : 8|8@1+ (1,0) [0|0] "" Vector__XXX + SG_ FuelCellSystemMode : 0|8@1+ (1,0) [0|0] "" Vector__XXX diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index 2e6015f..e991eca 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -77,6 +77,7 @@ bool LowerCommManager::initUdpComm(){ } void LowerCommManager::processPeriodicTasks() { sendCcuCommand(m_pm->m_CcuColCmd); + // cout << "send ccu command" << endl; //延时5ms usleep(5000); // sendDisSysCommand(m_pm->m_targetDisBreakerState); @@ -259,6 +260,16 @@ bool LowerCommManager::updatePoweSystemStates(){ m_pm->m_currentDisBreakerState.bus4Breaker = *pdis4; delete pdis4; } + m_pm->m_systemData->updateSystemData(m_pm->m_pmCurrentState.ccustate); + m_pm->m_systemData->updateSystemData(m_pm->m_pmCurrentState.bus1State); + m_pm->m_systemData->updateSystemData(m_pm->m_pmCurrentState.bus2State); + m_pm->m_systemData->updateSystemData(m_pm->m_pmCurrentState.bus3State); + m_pm->m_systemData->updateSystemData(m_pm->m_pmCurrentState.bus4State); + m_pm->m_systemData->device_common_status.ccu_status.lastUpdateTime = m_pm->m_lowerCommManager->msg_CcuStateFbMsg_Update_time; + m_pm->m_systemData->device_common_status.dis_hv_c1.lastUpdateTime = m_pm->m_lowerCommManager->msg_disHighVolBusFbMsg_Update_time; + m_pm->m_systemData->device_common_status.dis_hv_c2.lastUpdateTime = m_pm->m_lowerCommManager->msg_disHighAVolBusFbMsg_Update_time; + m_pm->m_systemData->device_common_status.dis_lv_c1.lastUpdateTime = m_pm->m_lowerCommManager->msg_disHighBVolBusFbMsg_Update_time; + m_pm->m_systemData->device_common_status.dis_lv_c2.lastUpdateTime = m_pm->m_lowerCommManager->msg_disLowBusFbMsg_Update_time; return true; } diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 10f893b..a3c6734 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -151,16 +151,16 @@ bool PowerManger::Iterate() PowerManagerFsm::dispatch(cycleEvent); faultLevel = getFaultLevel(); // 更新系统数据 - m_systemData->updateSystemData(m_pmCurrentState.ccustate); - m_systemData->updateSystemData(m_pmCurrentState.bus1State); - m_systemData->updateSystemData(m_pmCurrentState.bus2State); - m_systemData->updateSystemData(m_pmCurrentState.bus3State); - m_systemData->updateSystemData(m_pmCurrentState.bus4State); - m_systemData->device_common_status.ccu_status.lastUpdateTime = m_lowerCommManager->msg_CcuStateFbMsg_Update_time; - m_systemData->device_common_status.dis_hv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighVolBusFbMsg_Update_time; - m_systemData->device_common_status.dis_hv_c2.lastUpdateTime = m_lowerCommManager->msg_disHighAVolBusFbMsg_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->updateSystemData(m_pmCurrentState.ccustate); + // m_systemData->updateSystemData(m_pmCurrentState.bus1State); + // m_systemData->updateSystemData(m_pmCurrentState.bus2State); + // m_systemData->updateSystemData(m_pmCurrentState.bus3State); + // m_systemData->updateSystemData(m_pmCurrentState.bus4State); + // m_systemData->device_common_status.ccu_status.lastUpdateTime = m_lowerCommManager->msg_CcuStateFbMsg_Update_time; + // m_systemData->device_common_status.dis_hv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighVolBusFbMsg_Update_time; + // m_systemData->device_common_status.dis_hv_c2.lastUpdateTime = m_lowerCommManager->msg_disHighAVolBusFbMsg_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->updateCommonStatus(); // m_CcuColCmd.heartbeat if (m_ticker++ % 5 == 0) @@ -342,7 +342,7 @@ void PowerManger::initControlCmd() m_CcuColCmd.fcmode = 0x00; //默认无效 m_CcuColCmd.fcuCmd = 0x00; //无效指令 m_CcuColCmd.fcuPowerEfficiency = 15; //默认为15kw - m_CcuColCmd.insChargeEnable = 00; //不允许充电 + m_CcuColCmd.insChargeEnable = 0x30; //不允许充电 m_CcuColCmd.insBatCmd = 0x00; //无效指令 m_CcuColCmd.powerBatCmd = 0x00; //无效指令 m_CcuColCmd.powerBatEfficiency = 230; //默认为最大 diff --git a/src/pPowerManger/driver.h b/src/pPowerManger/driver.h index f3633c8..e11dcac 100644 --- a/src/pPowerManger/driver.h +++ b/src/pPowerManger/driver.h @@ -102,6 +102,7 @@ public: //操作函数,操作指定设备 //TODO: 增加设备操作函数 + void operateSubDriver(int id, int cmd, DriverTable* driverTable); // void setDriverTable(DriverTable* driverTable, ,DriverCmd::Type cmd); diff --git a/src/pPowerManger/fsm/PowerManagerFsm.cpp b/src/pPowerManger/fsm/PowerManagerFsm.cpp index e12acf0..b464417 100644 --- a/src/pPowerManger/fsm/PowerManagerFsm.cpp +++ b/src/pPowerManger/fsm/PowerManagerFsm.cpp @@ -38,12 +38,48 @@ bool PowerManagerFsm::handPowerProtection(DevCmdExt const &e){ e.id == DeviceId::forwardSonar || e.id == DeviceId::lowFreqSonar || e.id == DeviceId::DVL || - e.id == DeviceId::USBL){ - if(e.cmd == 1){ - LOG_F(INFO, "水声设备操作上电保护 %d 已关闭", e.id); - return false; + e.id == DeviceId::USBL) + { + if(e.cmd == 1) + { + if(pm->m_depth < 10) + { + LOG_F(INFO, "水下设备操作上电保护 %d ", e.id); + return false; + } + else + return true; } } + +} + +void PowerManagerFsm::handleNoPowerDeviceCmd(int id , int cmd){ + if(id == DeviceId::depth1 || + id == DeviceId::depth2 || + id == DeviceId::depth3 || + id == DeviceId::overDeep1 || + id == DeviceId::overDeep2 || + id == DeviceId::ctd1 || + id == DeviceId::ctd2 || + id == DeviceId::soundVeloc || + id == DeviceId::waterInject || + id == DeviceId::launchControler || + id == DeviceId::photoSensor || + id == DeviceId::electSensor || + id == DeviceId::commMast || + id == DeviceId::ntp || + id == DeviceId::bowThrow || + id == DeviceId::sternThrow || + id == DeviceId::ins || + id == DeviceId::ntp || + id == DeviceId::inputWaterSensor1 || + id == DeviceId::inputWaterSensor2 || + id == DeviceId::inputWaterSensor3 + ) + { + LOG_F(INFO, "无动力电设备操作"); + } } void PowerManagerFsm::react(DeviceCmd const &){ @@ -237,13 +273,17 @@ void PowerManagerFsm::react(DevCmdExt const &e) { #endif if (e.cmd == 0) { + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); + MOOSPause(10); pm->m_subDisSysCmd.bowCover1 = 0; //TODO :动力电断电 } else if (e.cmd == 1) { - pm->m_subDisSysCmd.bowCover1 = 1; //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); + MOOSPause(1); + pm->m_subDisSysCmd.bowCover1 = 1; } else if (e.cmd == 2) { @@ -252,6 +292,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -260,6 +301,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -276,13 +318,17 @@ void PowerManagerFsm::react(DevCmdExt const &e) { #endif if (e.cmd == 0) { - pm->m_subDisSysCmd.bowCover2 = 0; //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); + MOOSPause(1); + pm->m_subDisSysCmd.bowCover2 = 0; } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowCover2 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -299,6 +345,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -316,11 +363,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowCover3 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowCover3 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -329,6 +380,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -337,6 +389,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -354,11 +407,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowCover4 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowCover4 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -367,6 +424,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -375,6 +433,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -392,11 +451,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowCover5 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowCover5 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -405,6 +468,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -413,6 +477,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -430,11 +495,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowCover6 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowCover6 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -443,6 +512,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -451,6 +521,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF); } else { @@ -468,11 +539,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowRudderDeploy = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowRudderDeploy = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -481,6 +556,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -489,6 +565,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); } else { @@ -506,11 +583,16 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowRudderServo1 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); + } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowRudderServo1 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -519,6 +601,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -527,6 +610,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); } else { @@ -544,11 +628,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowRudderServo2 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowRudderServo2 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -557,6 +645,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -565,6 +654,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF); } else { @@ -745,11 +835,15 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowWaterInet1 = 0; //TODO :动力电断电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowWaterInet1 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -758,6 +852,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -766,6 +861,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); } else { @@ -781,12 +877,17 @@ void PowerManagerFsm::react(DevCmdExt const &e) { #endif if (e.cmd == 0) { + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); + MOOSPause(1); pm->m_subDisSysCmd.bowWaterInet2 = 0; //TODO :动力电断电 + } else if (e.cmd == 1) { pm->m_subDisSysCmd.bowWaterInet2 = 1; + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); //TODO :动力电上电 } else if (e.cmd == 2) @@ -796,6 +897,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -804,6 +906,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); } else { @@ -819,6 +922,8 @@ void PowerManagerFsm::react(DevCmdExt const &e) { #endif if (e.cmd == 0) { + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); + MOOSPause(1); pm->m_subDisSysCmd.bowWaterInet3 = 0; //TODO :动力电断电 } @@ -826,6 +931,8 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowWaterInet3 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -834,6 +941,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -842,6 +950,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); } else { @@ -857,6 +966,8 @@ void PowerManagerFsm::react(DevCmdExt const &e) { #endif if (e.cmd == 0) { + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); + MOOSPause(1); pm->m_subDisSysCmd.bowWaterInet4 = 0; //TODO :动力电断电 } @@ -864,6 +975,8 @@ void PowerManagerFsm::react(DevCmdExt const &e) { { pm->m_subDisSysCmd.bowWaterInet4 = 1; //TODO :动力电上电 + MOOSPause(1); + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 2) { @@ -872,6 +985,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 3) { //TODO :动力电上电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON); } else if (e.cmd == 4) { @@ -880,6 +994,7 @@ void PowerManagerFsm::react(DevCmdExt const &e) { else if (e.cmd == 5) { //TODO :动力电断电 + pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF); } else { @@ -2030,40 +2145,112 @@ void PowerManagerFsm::handelPowerCmd(){ switch (pm->m_msCmd.powerCMD) { case 0: - LOG_F(INFO, "收到上位机控制指令:关机"); + LOG_F(INFO, "收到上位机控制指令:关机"); + //1. 关闭动力电池 + pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop; + MOOSPause(3); + while (!(pm->m_systemData->dyn_pos_relay_status == 0x02 && pm->m_systemData->dyn_neg_relay_status == 0x02)) + { + LOG_F(INFO,"动力锂电池下电中..."); + MOOSPause(3); + } + 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); + + //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); + + //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); + + //2.4 断开应急电池断路器 + pm->m_lowerCommManager->operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(BREAK_OFF); + pm->m_lowerCommManager->operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(BREAK_OFF); + + //3. 次级配电系统恢复待机 + pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd); + MOOSPause(30); + //4. 执行锂电池关机指令 + pm->m_CcuColCmd.insBatCmd = BatteryCommand::Stop; break; case 1: LOG_F(INFO, "收到上位机控制指令:动力电上电"); + //闭合动力电断路器 + if(pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON)) + LOG_F(INFO,"动力锂电池断路器闭合成功"); + else + LOG_F(INFO,"动力锂电池断路器闭合操作失败"); + //1. 动力锂电池上电 + pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; + //2. 燃料电池上电 break; case 2: - LOG_F(INFO, "收到上位机控制指令:锂电池启动"); + LOG_F(INFO, "收到上位机控制指令:锂动力电上电"); + //1. 闭合动力电断路器 + pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON); + //2. 动力锂电池上电 + pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; break; case 3: - LOG_F(INFO, "收到上位机控制指令:燃料电池"); + LOG_F(INFO, "收到上位机控制指令:燃料电池上电"); + //备用 break; case 4: - LOG_F(INFO, "收到上位机控制指令:锂动力电关闭"); + LOG_F(INFO, "收到上位机控制指令:锂动力电下电"); + //1. 动力锂电池下电 + MOOSPause(3); + while (!(pm->m_systemData->dyn_pos_relay_status == 0x02 && pm->m_systemData->dyn_neg_relay_status == 0x02)) + { + LOG_F(INFO,"动力锂电池下电中..."); + MOOSPause(3); + } + LOG_F(INFO, "动力锂电池已下电"); break; case 5: - LOG_F(INFO, "收到上位机控制指令:燃料电池停机"); + LOG_F(INFO, "收到上位机控制指令:燃料电池下电"); break; case 6: LOG_F(INFO, "收到上位机控制指令:燃料电池预热指令"); + //备用 break; case 7: LOG_F(INFO, "收到上位机控制指令:燃料电池自检指令"); + //备用 break; case 8: LOG_F(INFO, "收到上位机控制指令:燃料电池紧急停机"); + //备用 break; case 9: LOG_F(INFO, "收到上位机控制指令:燃料电池复位指令"); + //备用 break; case 10: LOG_F(INFO, "收到上位机控制指令:燃料电池补给指令"); + //备用 break; case 11: LOG_F(INFO, "收到上位机控制指令:燃料电池停机维护"); + //备用 break; default: break; diff --git a/src/pPowerManger/fsm/PowerManagerFsm.hpp b/src/pPowerManger/fsm/PowerManagerFsm.hpp index e506d6b..7381eea 100644 --- a/src/pPowerManger/fsm/PowerManagerFsm.hpp +++ b/src/pPowerManger/fsm/PowerManagerFsm.hpp @@ -100,6 +100,16 @@ public: void handleWorkCmd(); void handleDeviceCmd(); + void handleNoPowerDeviceCmd(int id , int cmd); + void handleBowRudderSystemCmd(int id, int cmd); + void handleActuatorCmd(int id, int cmd); + void handleSternRudderCmd(int id, int cmd); + void handlePropulsionMotorCmd(int id, int cmd); + void handleBuoyancyAdjustmentCmd(int id, int cmd); + void handleFBSystemCmd(int id, int cmd); + void handleSideSonarCmd(int id, int cmd); + void handleMastFoldingSystemCmd(int id, int cmd); + bool handPowerProtection(DevCmdExt const &e); //故障处理 void basicNavigationFault(FaultEvent const &e); diff --git a/src/pPowerManger/fsm/RemoteControl.cpp b/src/pPowerManger/fsm/RemoteControl.cpp index 6b77fe9..ba2e292 100644 --- a/src/pPowerManger/fsm/RemoteControl.cpp +++ b/src/pPowerManger/fsm/RemoteControl.cpp @@ -1,7 +1,7 @@ #include "PowerManagerFsm.hpp" // RemoteControl实现 -void RemoteControl::react(MasterCommandEvent const &) { +void RemoteControl::react(MasterCommandEvent const &){ PowerManagerFsm::handelPowerCmd(); PowerManagerFsm::handleModCmd(); PowerManagerFsm::handleWorkCmd(); diff --git a/src/pPowerManger/fsm/ShoreBasedReady.cpp b/src/pPowerManger/fsm/ShoreBasedReady.cpp index 429b5bf..0aebea6 100644 --- a/src/pPowerManger/fsm/ShoreBasedReady.cpp +++ b/src/pPowerManger/fsm/ShoreBasedReady.cpp @@ -12,7 +12,7 @@ void ShoreBasedReady::react(MasterCommandEvent const &) { void ShoreBasedReady::entry() { PowerManagerFsm::entry(); pm->m_driver.getSHORE_BASED_READYable(&pm->m_subDisSysCmd); - pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; + // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; pm->workCondition = WorkCondition::CHANING; //依次接入执行机构动力电设备 //TODO:接入执行机构动力电设备 diff --git a/src/pPowerManger/fsm/WaterBasedReady.cpp b/src/pPowerManger/fsm/WaterBasedReady.cpp index ff61816..08e5865 100644 --- a/src/pPowerManger/fsm/WaterBasedReady.cpp +++ b/src/pPowerManger/fsm/WaterBasedReady.cpp @@ -5,7 +5,7 @@ void WaterBasedReady::entry() { PowerManagerFsm::entry(); pm->workCondition = WorkCondition::CHANING; pm->m_driver.getWATER_BASED_READYable(&pm->m_subDisSysCmd); - pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; + // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; //依次接入执行机构动力电设备 //TODO:接入执行机构动力电设备 pm->workCondition = WorkCondition::WATER_BASED_READY; diff --git a/src/pPowerManger/httpserver/batteryoperation.h b/src/pPowerManger/httpserver/batteryoperation.h index 1f5fadc..a983ed5 100644 --- a/src/pPowerManger/httpserver/batteryoperation.h +++ b/src/pPowerManger/httpserver/batteryoperation.h @@ -338,6 +338,15 @@ body { +
+ +
+ + +
+ +
+
diff --git a/src/pPowerManger/httpserver/data.h b/src/pPowerManger/httpserver/data.h index 5d1b9e9..c657739 100644 --- a/src/pPowerManger/httpserver/data.h +++ b/src/pPowerManger/httpserver/data.h @@ -249,11 +249,11 @@ const std::string DATA_HTML = R"( 正在加载...
- 仪表电池输入功率: + 仪表电池接入功率: 正在加载...
- 动力电池输入功率: + 动力电池接入功率: 正在加载...
@@ -264,6 +264,14 @@ const std::string DATA_HTML = R"( 动力电池最大放电功率: 正在加载...
+
+ 仪表电池充放电状态: + 正在加载... +
+
+ 动力电池充放电状态: + 正在加载... +
@@ -380,6 +388,22 @@ const std::string DATA_HTML = R"( 动力紧急状态: 正在加载... +
+ 充电等级: + 正在加载... +
+
+ 仪表电池漏水状态: + 正在加载... +
+
+ 动力电池漏水状态: + 正在加载... +
+
+ DCDC状态: + 正在加载... +
@@ -1061,6 +1085,14 @@ function updateSystemData(data) { document.getElementById('dyn-max-discharge-power').textContent = (data.dyn_max_discharge_power).toFixed(2) + ' kW'; } + if (data.ins_charge_status !== undefined) { + document.getElementById('ins-charge-status').textContent = + getChargeStatusText(data.ins_charge_status); + } + if (data.dyn_charge_status !== undefined) { + document.getElementById('dyn-charge-status').textContent = + getChargeStatusText(data.dyn_charge_status); + } // 继电器状态 if (data.ins_relay_status1 !== undefined) { @@ -1107,6 +1139,18 @@ function updateSystemData(data) { if (data.dyn_emergency_status !== undefined) { document.getElementById('dyn-emergency-status').textContent = getEmergencyStatusText(data.dyn_emergency_status); } + if (data.dyn_charge_level !== undefined) { + document.getElementById('dyn-charge-level').textContent = getChargeLevelText(data.dyn_charge_level); + } + if (data.water_leak_status_from_insbat !== undefined) { + document.getElementById('water-leak-status-from-insbat').textContent = getWaterLeakStatusText(data.water_leak_status_from_insbat); + } + if (data.water_leak_status_from_dynbat !== undefined) { + document.getElementById('water-leak-status-from-dynbat').textContent = getWaterLeakStatusText(data.water_leak_status_from_dynbat); + } + if (data.dcdc_status_from_insbat !== undefined) { + document.getElementById('dcdc-status-from-insbat').textContent = getDCDCStatusText(data.dcdc_status_from_insbat); + } if (data.dyn_alarm_flag1 !== undefined) { document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1; } @@ -1640,6 +1684,16 @@ if (data.power_a_bus_status) { } } +// 充放电状态文本转换 +function getChargeStatusText(status) { + const statuses = { + 0: '无效', + 16: '充电', + 32: '放电' + }; + return statuses[status] || '未知状态'; +} + // 继电器状态文本转换 function getRelayStatusText(status) { const statuses = { @@ -1649,6 +1703,26 @@ function getRelayStatusText(status) { return statuses[status] || '无效'; } +// 充电等级文本转换 +function getChargeLevelText(level) { + const levels = { + 1: '1级(不限)', + 2: '2级(限功率)', + 3: '3级(关闭)' + }; + return levels[level] || '未知等级'; +} + +// 漏水状态文本转换 +function getWaterLeakStatusText(status) { + return status === 0 ? '正常' : '异常漏水'; +} + +// DCDC状态文本转换 +function getDCDCStatusText(status) { + return status === 0 ? '正常' : '故障'; +} + // 紧急状态文本转换 function getEmergencyStatusText(status) { const statuses = { diff --git a/src/pPowerManger/httpserver/httpserver.cpp b/src/pPowerManger/httpserver/httpserver.cpp index c912b33..95092c9 100644 --- a/src/pPowerManger/httpserver/httpserver.cpp +++ b/src/pPowerManger/httpserver/httpserver.cpp @@ -116,6 +116,8 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_ fuelCellPower = (unsigned short)atoi(tmp); mg_http_get_var(&body, "instrumentBattery", tmp, sizeof(tmp)); instrumentBattery = (unsigned char)strtoul(tmp, NULL, 16); + mg_http_get_var(&body, "instrumentBatteryCharge", tmp, sizeof(tmp)); + unsigned char instrumentBatteryCharge = (unsigned char)atoi(tmp); mg_http_get_var(&body, "powerBattery", tmp, sizeof(tmp)); powerBattery = (unsigned char)strtoul(tmp, NULL, 16); mg_http_get_var(&body, "powerBatteryPower", tmp, sizeof(tmp)); @@ -126,10 +128,10 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_ // 记录接收到的配置 LOG_F(INFO, "Received battery control config: " "fuelCellMode=%02XH, fuelCellCommand=%02XH, fuelCellPower=%d, " - "instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d, " + "instrumentBattery=%02XH, instrumentBatteryCharge=%d, powerBattery=%02XH, powerBatteryPower=%d, " "hostStatus=%02XH", fuelCellMode, fuelCellCommand, fuelCellPower, - instrumentBattery, powerBattery, powerBatteryPower, hostStatus); + instrumentBattery, instrumentBatteryCharge, powerBattery, powerBatteryPower, hostStatus); m_powerManger->m_CcuColCmd.fcmode = fuelCellMode; m_powerManger->m_CcuColCmd.fcuCmd = fuelCellCommand; @@ -139,6 +141,7 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_ m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery; m_powerManger->m_CcuColCmd.powerBatEfficiency = powerBatteryPower; m_powerManger->m_CcuColCmd.masterState = hostStatus; + m_powerManger->m_CcuColCmd.insChargeEnable = instrumentBatteryCharge; cout << "m_powerManger->m_CcuColCmd.masterState:" << (int)m_powerManger->m_CcuColCmd.masterState << endl; mg_http_reply(c, 200, "Content-Type: application/json\r\n", @@ -476,6 +479,12 @@ void HttpServer::pushSystemData() { //紧急状态 j["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态 j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态 + + // 电池充电等级和漏水状态 + j["dyn_charge_level"] = Json::Value(m_systemData->dyn_charge_level); //01H:1级(不限)02H:2级(限功率)03H:3级(关闭) + j["water_leak_status_from_insbat"] = Json::Value(m_systemData->water_leak_status_from_insbat ); // 00 正常,01 异常漏水 + j["water_leak_status_from_dynbat"] = Json::Value((m_systemData->water_leak_status_from_dynbat) ); // 00 正常,01 异常漏水 + j["dcdc_status_from_insbat"] = Json::Value((m_systemData->dcdc_status_from_insbat ) ); // 00 正常,01 故障 j["ins_soc_threshold1"] = Json::Value(m_systemData->ins_soc_threshold1); // 仪表电池1 SOC门限 j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限 @@ -488,6 +497,11 @@ void HttpServer::pushSystemData() { j["dyn_power_limit1"] = Json::Value(m_systemData->dyn_power_limit1); // 动力电池1功率限制值 j["dyn_power_limit2"] = Json::Value(m_systemData->dyn_power_limit2); // 动力电池2功率限制值 +// uint8_t ins_charge_status; // 仪表电池充放电状态:00H-无效,10H-充电,20H-放电 +// uint8_t dyn_charge_status; // 动力电池充放电状态:00H-无效,10H-充电,20H-放电 + j["ins_charge_status"] = Json::Value(m_systemData->ins_charge_status); + j["dyn_charge_status"] = Json::Value(m_systemData->dyn_charge_status); + //设备在线状态 j["device_online"]["device_online_flag1"] = Json::Value(m_systemData->device_online_flag1); j["device_online"]["device_online_flag2"] = Json::Value(m_systemData->device_online_flag2); @@ -516,6 +530,12 @@ void HttpServer::pushSystemData() { j["comm_state"]["dis_lv_c1"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.lastUpdateTime); j["comm_state"]["dis_lv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.isTimeout); j["comm_state"]["dis_lv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.lastUpdateTime); + + // 低压配电状态 + j["comm_state"]["dis_lv_c1"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.isTimeout); + j["comm_state"]["dis_lv_c1"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.lastUpdateTime); + j["comm_state"]["dis_lv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.isTimeout); + j["comm_state"]["dis_lv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.lastUpdateTime); //复合管控器心跳计算器 j["heartbeat"] = Json::Value(m_systemData->heartbeat); diff --git a/src/pPowerManger/httpserver/logpage.h b/src/pPowerManger/httpserver/logpage.h index fac2874..5f8414a 100644 --- a/src/pPowerManger/httpserver/logpage.h +++ b/src/pPowerManger/httpserver/logpage.h @@ -343,7 +343,7 @@ const std::string LOG_PAGE_HTML = R"( 每页显示: @@ -368,7 +368,7 @@ let autoScroll = true; let logContent = document.getElementById('logContent'); let currentPage = 1; let totalPages = 1; -let pageSize = 100; +let pageSize = 200; let allLogs = []; let filteredLogs = []; let searchTimer = null; diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h index e4fa432..6209f75 100644 --- a/src/pPowerManger/pmSysvariable.h +++ b/src/pPowerManger/pmSysvariable.h @@ -43,7 +43,7 @@ typedef struct ccuState uint8_t flame_detector1; // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障 uint8_t flame_detector2; // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障 - uint16_t h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL(爆炸下限) + uint16_t h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL uint16_t h2_concentration2; // 舱室H2浓度2,单位:0.01% LEL uint16_t h2_concentration3; // 舱室H2浓度3,单位:0.01% LEL uint16_t o2_concentration1; // 舱室O2浓度1,单位:0.01% LEL @@ -117,8 +117,12 @@ typedef struct ccuState uint32_t device_online_flag1; // 设备在线状态标志1,byte0:低压配电板在线标志位 byte1:复合管控主机在线标志位 byte2:复合管控备机在线标志位 uint32_t device_online_flag2; // 设备在线状态标志2,byte0:仪表锂电在线标志位 byte1:动力锂电在线标志位 byte2:燃电锂电在线标志位 byte3:高压配电板在线标志位 - - uint32_t reserved4; // 保留字段,协议预留 + + uint8_t dyn_charge_level; // 动力电池充电状态:01H-1级(不限), 02H-2级(限功率), 03H-3级(关闭) + uint8_t dyn_water_leak_status; // 动力漏水状态:0XH-正常, 1XH-异常漏水 + uint8_t ins_water_leak_dcdc_status; // 仪表漏水状态与DCDC状态:低4位-漏水状态(0XH正常,1XH异常),高4位-DCDC状态(X0H正常,X1H故障) + uint8_t reserved4; + // uint32_t reserved4; // 保留字段,协议预留 uint32_t heartbeat; // 主机心跳计数器或标志值 } ccuState; @@ -139,7 +143,7 @@ typedef struct { unsigned char fcmode; unsigned char fcuCmd; unsigned char fcuPowerEfficiency; - unsigned char insChargeEnable; //0 不允许充电 1 允许充电 + unsigned char insChargeEnable; unsigned char insBatCmd; unsigned char powerBatCmd; unsigned short powerBatEfficiency; @@ -193,7 +197,7 @@ typedef struct disHighVolBusState // 0x00: 正常状态 // Bit0: 通讯故障报警 // Bit1: 工作状态 1:启动,0:关闭 - // Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0正常 + // Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0 正常 // Bit3: 冷却泵2故障 冷却泵2故障 :1故障,0 正常 // Bit4: 冷却水泄露 // Bit5:冷却泵1运行状态 :1 运行,0 停止 @@ -823,4 +827,6 @@ namespace FaultEnable { }; } -#endif \ No newline at end of file +#endif + + diff --git a/src/pPowerManger/sqlit3/SQLite.cpp b/src/pPowerManger/sqlit3/SQLite.cpp index fece0fe..71f60c8 100644 --- a/src/pPowerManger/sqlit3/SQLite.cpp +++ b/src/pPowerManger/sqlit3/SQLite.cpp @@ -627,6 +627,7 @@ bool SQLite::insertData(const ccuColCmd cmd) { std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl; } + sqlite3_finalize(stmt); return success; } diff --git a/src/pPowerManger/systemData.h b/src/pPowerManger/systemData.h index 1a82cf6..5b254d6 100644 --- a/src/pPowerManger/systemData.h +++ b/src/pPowerManger/systemData.h @@ -143,8 +143,18 @@ public: uint32_t device_online_flag1; // 设备在线状态标志1 uint32_t device_online_flag2; // 设备在线状态标志2 + //其他锂电池状态 + uint8_t dyn_charge_level; // 动力电池充电状态:01H-1级(不限), 02H-2级(限功率), 03H-3级(关闭) + uint8_t dyn_water_leak_status; // 动力漏水状态:0XH-正常, 1XH-异常漏水 + uint8_t ins_water_leak_dcdc_status; // 仪表漏水状态与DCDC状态:低4位-漏水状态(0XH正常,1XH异常),高4位-DCDC状态(X0H正常,X1H故障) + uint8_t reserved4; + + unsigned char water_leak_status_from_insbat; // 仪表漏水状态 + unsigned char water_leak_status_from_dynbat; // 动力漏水状态 + unsigned char dcdc_status_from_insbat; // 仪表DCDC状态 + //保留字段 - uint32_t reserved4; // 保留字段 + // uint32_t reserved4; // 保留字段 uint32_t heartbeat; // 主机心跳计数器 //锂电池故障字段 @@ -570,15 +580,22 @@ 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:复合管控备机在线标志位 - // std::cout << "device_online_status.ins_online_state: " << (int)device_online_status.ins_online_state << std::endl; - // std::cout << "device_online_status.dyn_online_state: " << (int)device_online_status.dyn_online_state << std::endl; - // std::cout << "device_online_status.fuel_online_state: " << (int)device_online_status.fuel_online_state << std::endl; - // std::cout << "device_online_status.high_voltage_online_state: " << (int)device_online_status.high_voltage_online_state << std::endl; - // std::cout << "device_online_status.low_voltage_online_state: " << (int)device_online_status.low_voltage_online_state << std::endl; - // std::cout << "device_online_status.composite_online_state: " << (int)device_online_status.composite_online_state << std::endl; - // std::cout << "device_online_status.composite_backup_online_state: " << (int)device_online_status.composite_backup_online_state << std::endl; + // 更新锂电池其他状态 + dyn_water_leak_status = data.dyn_water_leak_status; + ins_water_leak_dcdc_status = data.ins_water_leak_dcdc_status; + dyn_charge_level = data.dyn_charge_level; //01H:1级(不限)02H:2级(限功率)03H:3级(关闭) + water_leak_status_from_insbat = ( data.ins_water_leak_dcdc_status >> 4) & 0x0F; // 00 正常,01 异常漏水 + 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(dyn_charge_level) << std::endl; + // std::cout << "ins_water_leak_dcdc_status: " << std::hex << static_cast(ins_water_leak_dcdc_status) << std::endl; + // std::cout << "dcdc_status_from_insbat: " << std::hex << static_cast(dcdc_status_from_insbat) << std::endl; + // std::cout << "water_leak_status_from_insbat: " << std::hex << static_cast(water_leak_status_from_insbat) << std::endl; + // std::cout << "water_leak_status_from_dynbat: " << std::hex << static_cast(water_leak_status_from_dynbat) << std::endl; + //心跳计数器 heartbeat = data.heartbeat; } diff --git a/test/cantools/generate_dbc.py b/test/cantools/generate_dbc.py index ee7c81b..364d76d 100644 --- a/test/cantools/generate_dbc.py +++ b/test/cantools/generate_dbc.py @@ -12,47 +12,43 @@ def create_sample_dbc(): """创建一个示例DBC文件""" db = Database() - # 添加消息 + # 主机->复合管控 (ID:0x11000101) msg1 = Message( - name="EngineData", - frame_id=0x100, - length=8, - signals=[ - Signal(name="RPM", start=0, length=16, is_signed=False), - Signal(name="Speed", start=16, length=16, is_signed=False), - Signal(name="Temp", start=32, length=8, is_signed=True) - ] - ) - - msg2 = Message( - name="VehicleStatus", - frame_id=0x200, - length=4, - signals=[ - Signal(name="DoorStatus", start=0, length=4, is_multiplexer=False), - Signal(name="LightStatus", start=4, length=4, is_multiplexer=False) - ] - ) - - # 添加断路器状态消息 - msg3 = Message( - name="CircuitBreakerStatus", - frame_id=0x1401A501, + name="HostToCompositeControl", + frame_id=0x11000101, is_extended_frame=True, length=8, signals=[ - Signal(name="FuelCellBreaker", start=0, length=8, is_signed=False), - Signal(name="BatteryBreaker", start=8, length=8, is_signed=False), - Signal(name="MotorBreaker", start=16, length=8, is_signed=False), - Signal(name="BatteryMeterBreaker", start=24, length=8, is_signed=False), - Signal(name="DCDC5Breaker", start=32, length=8, is_signed=False), - Signal(name="BowDistBoxBreaker", start=40, length=8, is_signed=False), - Signal(name="SternFT45Breaker", start=48, length=8, is_signed=False), - Signal(name="SternRudder1Breaker", start=56, length=8, is_signed=False) + Signal(name="FuelCellModeSet", start=0, length=8, is_signed=False), + Signal(name="FuelCellCommand", start=8, length=8, is_signed=False), + Signal(name="MeterBatteryChargeFlag", start=16, length=8, is_signed=False), + Signal(name="MeterBatteryStartStop", start=24, length=8, is_signed=False), + Signal(name="PowerBatteryStartStop", start=32, length=8, is_signed=False), + Signal(name="HostHeartbeat", start=40, length=8, is_signed=False), + Signal(name="HostStatus", start=48, length=8, is_signed=False), + Signal(name="Reserved1", start=56, length=8, is_signed=False) ] ) - db.messages.extend([msg1, msg2, msg3]) + # 复合管控->主机 (ID:0x11000201) + msg2 = Message( + name="CompositeControlToHost", + frame_id=0x11000201, + is_extended_frame=True, + length=8, + signals=[ + Signal(name="FuelCellSystemMode", start=0, length=8, is_signed=False), + Signal(name="FuelCellStatus", start=8, length=8, is_signed=False), + Signal(name="FuelCellFaultLevel", start=16, length=8, is_signed=False), + Signal(name="MeterBatteryEmergency", start=24, length=8, is_signed=False), + Signal(name="PowerBatteryEmergency", start=32, length=8, is_signed=False), + Signal(name="MeterBatteryTotalEnergy", start=40, length=8, is_signed=False), + Signal(name="PowerBatteryTotalEnergy", start=48, length=8, is_signed=False), + Signal(name="Reserved2", start=56, length=8, is_signed=False) + ] + ) + + db.messages.extend([msg1, msg2]) return db def save_dbc_file(db, filename):