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 { +