diff --git a/data/msg/uPower_currentState_st.json b/data/msg/uPower_currentState_st.json index 1e33b07..a8a0701 100644 --- a/data/msg/uPower_currentState_st.json +++ b/data/msg/uPower_currentState_st.json @@ -1,47 +1,47 @@ { - "HVABFTDev123Cur_uint16": 12373, + "HVABFTDev123Cur_uint16": 0, "HVABactCur_uint16": 0, - "HVABbowRudCur_uint16": 48628, - "HVABbusBCur_uint16": 58368, - "HVABbusBVol_uint16": 127, + "HVABbowRudCur_uint16": 0, + "HVABbusBCur_uint16": 0, + "HVABbusBVol_uint16": 0, "HVABmastSteGeaCur_uint16": 0, - "HVABopenWaterCur_uint16": 15788, - "HVABxczCur_uint16": 62464, + "HVABopenWaterCur_uint16": 0, + "HVABxczCur_uint16": 1, "HVBBCCUCur_uint16": 0, "HVBBFCSSecurSysCur_uint16": 0, - "HVBBbatInsCur_uint16": 48768, - "HVBBbowLowVolDisBoxCur_uint16": 62844, - "HVBBdcC1InsCur_uint16": 64539, - "HVBBemer2BusVol_uint16": 9472, - "HVBBemerBatCur_uint16": 51712, - "HVBBinsBusVol_uint16": 29696, + "HVBBbatInsCur_uint16": 0, + "HVBBbowLowVolDisBoxCur_uint16": 0, + "HVBBdcC1InsCur_uint16": 0, + "HVBBemer2BusVol_uint16": 0, + "HVBBemerBatCur_uint16": 0, + "HVBBinsBusVol_uint16": 0, "HVBBplcCur_uint16": 0, - "HVBBreservedCur1_uint16": 127, - "HVBBreservedCur2_uint16": 127, - "HVBBunit4Cur_uint16": 15788, - "HVBFTDev45Cur_uint16": 32573, - "HVBbatGroupCur_uint16": 32970, - "HVBbowHVolDisBoxCur_uint16": 44222, + "HVBBreservedCur1_uint16": 0, + "HVBBreservedCur2_uint16": 0, + "HVBBunit4Cur_uint16": 0, + "HVBFTDev45Cur_uint16": 0, + "HVBbatGroupCur_uint16": 0, + "HVBbowHVolDisBoxCur_uint16": 0, "HVBbusACur_uint16": 0, - "HVBbusAVol_uint16": 7157, + "HVBbusAVol_uint16": 0, "HVBdcDc5Cur_uint16": 0, - "HVBfbCur_uint16": 31908, - "HVBmotorCur_uint16": 32764, - "HVBpowerBusCur_uint16": 31796, - "HVBpowerBusVol_uint16": 32573, + "HVBfbCur_uint16": 0, + "HVBmotorCur_uint16": 0, + "HVBpowerBusCur_uint16": 0, + "HVBpowerBusVol_uint16": 0, "HVBreservedCur1_uint16": 0, "HVBreservedCur2_uint16": 0, - "HVBreservedCur3_uint16": 44222, - "HVBsternRud1Cur_uint16": 3590, + "HVBreservedCur3_uint16": 0, + "HVBsternRud1Cur_uint16": 0, "HVBsternRud2Cur_uint16": 0, "HVBtyzCur_uint16": 0, - "LVBBbowPZDevCur_uint16": 127, - "LVBBemerBatCur_uint16": 29696, - "LVBBemerBusVol_uint16": 62844, - "LVBBinsBusCur_uint16": 15788, - "LVBBunit1Cur_uint16": 127, - "LVBBunit2Cur_uint16": 30720, - "LVBBunit3Cur_uint16": 62844, - "LVBBunit5Cur_uint16": 64539, - "LVBinsBusVol_uint16": 49434 + "LVBBbowPZDevCur_uint16": 0, + "LVBBemerBatCur_uint16": 0, + "LVBBemerBusVol_uint16": 0, + "LVBBinsBusCur_uint16": 0, + "LVBBunit1Cur_uint16": 0, + "LVBBunit2Cur_uint16": 0, + "LVBBunit3Cur_uint16": 0, + "LVBBunit5Cur_uint16": 0, + "LVBinsBusVol_uint16": 0 } \ No newline at end of file diff --git a/data/msg/uPower_disSysState_st.json b/data/msg/uPower_disSysState_st.json index ed8e1bf..cc2199c 100644 --- a/data/msg/uPower_disSysState_st.json +++ b/data/msg/uPower_disSysState_st.json @@ -1,8 +1,8 @@ { "HVolABusBreaker_unit16": 0, - "HVolBBusBreaker_unit16": 0, - "HVolBusBreaker_uint16": 0, - "LVolBusBreaker_uint16": 0, + "HVolBBusBreaker_unit16": 79, + "HVolBusBreaker_uint16": 32, + "LVolBusBreaker_uint16": 159, "faultCode_array": [ 0 diff --git a/data/msg/uPower_fcsState_st.json b/data/msg/uPower_fcsState_st.json index 7b16a61..659e8c6 100644 --- a/data/msg/uPower_fcsState_st.json +++ b/data/msg/uPower_fcsState_st.json @@ -1,30 +1,30 @@ { - "backpressure1_fp32": -0.2467193603515625, - "backpressure2_fp32": 1.1685231712219644e-38, - "ch4oConcent1_fp32": 1.8108811898653892e-39, - "ch4oConcent2_fp32": 0.0, - "ch4o_fp32": 1.1685231712219644e-38, - "excTemp_fp32": 1.1685231712219644e-38, - "faultCode1_uint16": 59856, - "faultCode2_uint16": 44221, - "faultCode3_uint16": 32573, - "fcuCurIns_fp32": 8.3046377128711946e+19, - "fcuCurPower_fp32": 1.1685231712219644e-38, - "fcuCur_fp32": -0.2467193603515625, - "fcuFaultLeve_uint8": 245, - "fcuOutIns_fp32": 6.7262326287591219e-44, - "fcuOutPower_fp32": -1.1348810210013775e-34, - "fcuState_uint8": 123, - "fcuVolIns_fp32": 7.3381652328374862e+19, - "fcuVolPower_fp32": 1.1685231712219644e-38, - "fcuVol_fp32": 1.1685231712219644e-38, - "flameDet_uint8": 0, - "h2Concent1_fp32": -3.1907161748557105e+32, - "h2Concent2_fp32": 1.1753546413653943e-38, - "o2Concent1_fp32": -0.2515411376953125, - "o2Concent2_fp32": 1.1685231712219644e-38, - "o2Level_fp32": 1.1685231712219644e-38, - "o2_fp32": -0.1107940673828125, - "powLimit_fp32": 1.1753546413653943e-38, - "powerGen_fp32": 2.1756349367871582e+21 + "backpressure1_fp32": 2.0723892223585928e-36, + "backpressure2_fp32": 4.5823861081885843e-41, + "ch4oConcent1_fp32": 2.0653300860562609e-36, + "ch4oConcent2_fp32": 4.5823861081885843e-41, + "ch4o_fp32": 4.5823861081885843e-41, + "excTemp_fp32": 4.5823861081885843e-41, + "faultCode1_uint16": 12207, + "faultCode2_uint16": 48388, + "faultCode3_uint16": 127, + "fcuCurIns_fp32": 0.0, + "fcuCurPower_fp32": 0.0, + "fcuCur_fp32": 1.3331306974422932e-36, + "fcuFaultLeve_uint8": 0, + "fcuOutIns_fp32": 4.5916346780531281e-41, + "fcuOutPower_fp32": 1.0758022868002197e+20, + "fcuState_uint8": 0, + "fcuVolIns_fp32": 1.0758019349564988e+20, + "fcuVolPower_fp32": 0.0, + "fcuVol_fp32": 0.0, + "flameDet_uint8": 96, + "h2Concent1_fp32": 0.0, + "h2Concent2_fp32": 0.0, + "o2Concent1_fp32": 1.3337242202094549e-36, + "o2Concent2_fp32": 4.5823861081885843e-41, + "o2Level_fp32": 4.5823861081885843e-41, + "o2_fp32": 2.6989008422895977e-42, + "powLimit_fp32": 4.5916346780531281e-41, + "powerGen_fp32": 2.0725797092666392e-36 } \ No newline at end of file diff --git a/data/msg/uPower_liBatState_st.json b/data/msg/uPower_liBatState_st.json index 9482f72..e8f22e5 100644 --- a/data/msg/uPower_liBatState_st.json +++ b/data/msg/uPower_liBatState_st.json @@ -1,38 +1,38 @@ { "fcuCurToInsLimit1_uint8": 0, "fcuCurToinsLimit2_uint8": 0, - "insBatCurElect_uint16": 32573, - "insBatLimit_uint16": 62950, + "insBatCurElect_uint16": 127, + "insBatLimit_uint16": 48, "insBatSoc_uint8": 0, - "insBatTotalElect_uint16": 28728, - "insChargeState_uint8": 80, + "insBatTotalElect_uint16": 57470, + "insChargeState_uint8": 144, "insCurSocHold1_uint8": 0, "insCurSocHold2_uint8": 0, "insCurSocHold3_uint8": 0, - "insCurrent_uint16": 0, - "insLinkVol_uint16": 44098, - "insNegRelayState_uint8": 0, - "insNegRes_uint16": 7157, - "insPackVol_uint16": 32573, + "insCurrent_uint16": 46080, + "insLinkVol_uint16": 48387, + "insNegRelayState_uint8": 218, + "insNegRes_uint16": 65376, + "insPackVol_uint16": 127, "insPosRelayState_uint8": 0, - "insPosRes_uint16": 31732, - "insfaultCode_uint8": 94, - "powBatCurElect_uint16": 0, - "powBatSoc_uint8": 0, - "powBatTotalElect_uint16": 44098, - "powChargeState_uint8": 122, - "powCurSocHold1_uint8": 0, - "powCurSocHold2_uint8": 164, - "powCurSocHold3_uint8": 124, - "powCurToInsLimit1_uint8": 190, - "powCurToinsLimit2_uint8": 172, - "powCur_uint16": 32970, - "powLinkVol_uint16": 32764, - "powNegRelayState_uint8": 22, - "powNegRes_uint16": 32573, - "powPosRelayState_uint8": 243, - "powPosRes_uint16": 44222, + "insPosRes_uint16": 47775, + "insfaultCode_uint8": 19, + "powBatCurElect_uint16": 4096, + "powBatSoc_uint8": 152, + "powBatTotalElect_uint16": 48387, + "powChargeState_uint8": 224, + "powCurSocHold1_uint8": 164, + "powCurSocHold2_uint8": 76, + "powCurSocHold3_uint8": 48, + "powCurToInsLimit1_uint8": 4, + "powCurToinsLimit2_uint8": 189, + "powCur_uint16": 12368, + "powLinkVol_uint16": 127, + "powNegRelayState_uint8": 135, + "powNegRes_uint16": 127, + "powPosRelayState_uint8": 22, + "powPosRes_uint16": 48388, "powerBatLimit_uint16": 0, - "powerPackVol_uint16": 0, - "powfaultCode_uint8": 9 + "powerPackVol_uint16": 51712, + "powfaultCode_uint8": 0 } \ No newline at end of file diff --git a/src/pPowerManger/CMakeLists.txt b/src/pPowerManger/CMakeLists.txt index f025f84..31fee1c 100644 --- a/src/pPowerManger/CMakeLists.txt +++ b/src/pPowerManger/CMakeLists.txt @@ -56,7 +56,17 @@ SET(FSMLIB_SRC SET(DRIVER_SRC driver.cpp) +SET(POWERMANGE_SRC + PowerManger.cpp + PowerManger_Info.cpp + udpComm.cpp + fsm.cpp + SQLiteDB.cpp + driver.cpp) + ADD_LIBRARY(SQLiteDB STATIC ${SQLITEDB_SRC}) ADD_LIBRARY(UDPComm STATIC ${UDPCOMM_SRC}) ADD_LIBRARY(FSMLib STATIC ${FSMLIB_SRC}) ADD_LIBRARY(Driver STATIC ${DRIVER_SRC}) +ADD_LIBRARY(PowerMange STATIC ${POWERMANGE_SRC}) + diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index d2e6511..630fd49 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -41,6 +41,9 @@ PowerManger::PowerManger() m_faultNum = 0; faultCode.push_back(0); + //初始化断路器状态 + initTargetDisBreakerState(); + //初始化数据库 string dbPath = "/home/zjk/project/H100/H100PowerManger/data/power_data.db"; m_db = new SQLiteDB(dbPath); @@ -49,9 +52,11 @@ PowerManger::PowerManger() //注册状态机 m_fsm.RegisterState("Init", 1, m_Inite_s1); + m_fsm.RegisterState("Stady", 2, m_Standby_s2); m_fsm.RegisterState("Fault", 99, m_Fault_s99); m_fsm.RegisterHandleFunction(&m_Inite_s1, handleInite_s1); + m_fsm.RegisterHandleFunction(&m_Standby_s2, handleStandby_s2); m_fsm.RegisterHandleFunction(&m_Fault_s99, handleFault_s99); // 初始化状态机 @@ -117,11 +122,12 @@ bool PowerManger::Iterate() updatePmState(); updateTime(); //2. 运行状态机 - // m_fsm.run(m_pmState,this); if (FSM_RUN_IS_OK) m_FsmThread.Start(); else m_FsmThread.Stop(); + //进行配电系统操作 + disSysOption(); //3. 输出报告 buildPowerSysReport(); //4. 打印错误信息 @@ -175,7 +181,7 @@ bool PowerManger::OnStartUp() } registerVariables(); - //绑定UDP端口 + //启动UDP监听线程 if(m_pCcuUdpComm = setUdpScoket(IPORT)) { cout< SKEW_TOLERANCE) ? true : false; } + +void PowerManger::disSysOption() +{ + //1.更新断路器的状态 + disBus1Breaker* pdis1=new disBus1Breaker; + (m_pmCurrentState.bus1State.fuelCellCircuitBreaker == BREAK_ON) ? pdis1 -> fuelCellCircuitBreaker = 1 : pdis1 -> fuelCellCircuitBreaker = 0; + (m_pmCurrentState.bus1State.powerLithiumBatteryCircuitBreaker == BREAK_ON) ? pdis1 -> powerLithiumBatteryCircuitBreaker = 1 : pdis1 -> powerLithiumBatteryCircuitBreaker = 0; + (m_pmCurrentState.bus1State.propulsionMotorCircuitBreaker == BREAK_ON) ? pdis1 -> propulsionMotorCircuitBreaker = 1 : pdis1 -> propulsionMotorCircuitBreaker = 0; + (m_pmCurrentState.bus1State.lithiumBatteryGroupInstrumentCircuitBreaker == BREAK_ON) ? pdis1 -> lithiumBatteryGroupInstrumentCircuitBreaker = 1 : pdis1 -> lithiumBatteryGroupInstrumentCircuitBreaker = 0; + (m_pmCurrentState.bus1State.dcDc5ModuleCircuitBreaker == BREAK_ON) ? pdis1 -> dcDc5ModuleCircuitBreaker = 1 : pdis1 -> dcDc5ModuleCircuitBreaker = 0; + (m_pmCurrentState.bus1State.bowHighVoltageDistributionBoxCircuitBreaker == BREAK_ON) ? pdis1 -> bowHighVoltageDistributionBoxCircuitBreaker = 1 : pdis1 -> bowHighVoltageDistributionBoxCircuitBreaker = 0; + (m_pmCurrentState.bus1State.sternFTDevice45CircuitBreaker == BREAK_ON) ? pdis1 -> sternFTDevice45CircuitBreaker = 1 : pdis1 -> sternFTDevice45CircuitBreaker = 0; + (m_pmCurrentState.bus1State.sternRudderSwitch1CircuitBreaker == BREAK_ON) ? pdis1 -> sternRudderSwitch1CircuitBreaker = 1 : pdis1 -> sternRudderSwitch1CircuitBreaker = 0; + (m_pmCurrentState.bus1State.sternRudderSwitch2CircuitBreaker == BREAK_ON) ? pdis1 -> sternRudderSwitch2CircuitBreaker = 1 : pdis1 -> sternRudderSwitch2CircuitBreaker = 0; + (m_pmCurrentState.bus1State.fbReservedCircuitBreaker == BREAK_ON) ? pdis1 -> fbReservedCircuitBreaker = 1 : pdis1 -> fbReservedCircuitBreaker = 0; + (m_pmCurrentState.bus1State.tyzReservedCircuitBreaker == BREAK_ON) ? pdis1 -> tyzReservedCircuitBreaker = 1 : pdis1 -> tyzReservedCircuitBreaker = 0; + (m_pmCurrentState.bus1State.reservedCircuitBreaker == BREAK_ON) ? pdis1 -> reservedCircuitBreaker = 1 : pdis1 -> reservedCircuitBreaker = 0; + pdis1 -> paceholder = 0; + + disBus2Breaker* pdis2=new disBus2Breaker; + (m_pmCurrentState.bus2State.bowFTDevice123CircuitBreaker == BREAK_ON)? pdis2 -> bowFTDevice123CircuitBreaker = 1 : pdis2 -> bowFTDevice123CircuitBreaker = 0; + (m_pmCurrentState.bus2State.actuatorCircuitBreaker == BREAK_ON)? pdis2 -> actuatorCircuitBreaker = 1 : pdis2 -> actuatorCircuitBreaker = 0; + (m_pmCurrentState.bus2State.mastSteeringGearControlBoxCircuitBreaker == BREAK_ON)? pdis2 -> mastSteeringGearControlBoxCircuitBreaker = 1 : pdis2 -> mastSteeringGearControlBoxCircuitBreaker = 0; + (m_pmCurrentState.bus2State.xczCircuitBreaker == BREAK_ON)? pdis2 -> xczCircuitBreaker = 1 : pdis2 -> xczCircuitBreaker = 0; + (m_pmCurrentState.bus2State.bowRudderControlBoxCircuitBreaker == BREAK_ON)? pdis2 -> bowRudderControlBoxCircuitBreaker = 1 : pdis2 -> bowRudderControlBoxCircuitBreaker = 0; + (m_pmCurrentState.bus2State.openWaterCoverStartCylinderCircuitBreaker == BREAK_ON)? pdis2 -> openWaterCoverStartCylinderCircuitBreaker = 1 : pdis2 -> openWaterCoverStartCylinderCircuitBreaker = 0; + pdis2 -> paceholder = 0; + + disBus3Breaker* pdis3=new disBus3Breaker; + (m_pmCurrentState.bus3State.lithiumBatteryGroupInstrumentCircuitBreaker == BREAK_ON)? pdis3 -> lithiumBatteryGroupInstrumentCircuitBreaker = 1 : pdis3 -> lithiumBatteryGroupInstrumentCircuitBreaker = 0; + (m_pmCurrentState.bus3State.bowLowVoltageDistributionBoxCircuitBreaker == BREAK_ON)? pdis3 -> bowLowVoltageDistributionBoxCircuitBreaker = 1 : pdis3 -> bowLowVoltageDistributionBoxCircuitBreaker = 0; + (m_pmCurrentState.bus3State.unit4InstrumentDC48VCircuitBreaker == BREAK_ON)? pdis3 -> unit4InstrumentDC48VCircuitBreaker = 1 : pdis3 -> unit4InstrumentDC48VCircuitBreaker = 0; + (m_pmCurrentState.bus3State.dcC1DCDistributionPanelCircuitBreaker == BREAK_ON)? pdis3 -> dcC1DCDistributionPanelCircuitBreaker = 1 : pdis3 -> dcC1DCDistributionPanelCircuitBreaker = 0; + (m_pmCurrentState.bus3State.reservedCircuitBreaker1 == BREAK_ON)? pdis3 -> reservedCircuitBreaker1 = 1 : pdis3 -> reservedCircuitBreaker1 = 0; + (m_pmCurrentState.bus3State.reservedCircuitBreaker2 == BREAK_ON)? pdis3 -> reservedCircuitBreaker2 = 1 : pdis3 -> reservedCircuitBreaker2 = 0; + (m_pmCurrentState.bus3State.emergencyLithiumBatteryGroup2CircuitBreaker == BREAK_ON)? pdis3 -> emergencyLithiumBatteryGroup2CircuitBreaker = 1 : pdis3 -> emergencyLithiumBatteryGroup2CircuitBreaker = 0; + pdis3->paceholder = 0; + + disBus4Breaker* pdis4=new disBus4Breaker; + (m_pmCurrentState.bus4State.unit1CircuitBreaker == BREAK_ON)? pdis4 -> unit1CircuitBreaker = 1 : pdis4 -> unit1CircuitBreaker = 0; + (m_pmCurrentState.bus4State.unit2CircuitBreaker == BREAK_ON)? pdis4 -> unit2CircuitBreaker = 1 : pdis4 -> unit2CircuitBreaker = 0; + (m_pmCurrentState.bus4State.unit3CircuitBreaker == BREAK_ON)? pdis4 -> unit3CircuitBreaker = 1 : pdis4 -> unit3CircuitBreaker = 0; + (m_pmCurrentState.bus4State.unit5CircuitBreaker == BREAK_ON)? pdis4 -> unit5CircuitBreaker = 1 : pdis4 -> unit5CircuitBreaker = 0; + (m_pmCurrentState.bus4State.bowPZDeviceCircuitBreaker == BREAK_ON)? pdis4 -> bowPZDeviceCircuitBreaker = 1 : pdis4 -> bowPZDeviceCircuitBreaker = 0; + (m_pmCurrentState.bus4State.reservedCircuitBreaker1 == BREAK_ON)? pdis4 -> reservedCircuitBreaker1 = 1 : pdis4 -> reservedCircuitBreaker1 = 0; + (m_pmCurrentState.bus4State.reservedCircuitBreaker2 == BREAK_ON)? pdis4 -> reservedCircuitBreaker2 = 1 : pdis4 -> reservedCircuitBreaker2 = 0; + (m_pmCurrentState.bus4State.emergencyLithiumBatteryGroup1CircuitBreaker == BREAK_ON)? pdis4 -> emergencyLithiumBatteryGroup1CircuitBreaker = 1 : pdis4 -> emergencyLithiumBatteryGroup1CircuitBreaker = 0; + pdis4 -> paceholder = 0; + + m_currentDisBreakerState.bus1Breaker = *pdis1; + m_currentDisBreakerState.bus2Breaker = *pdis2; + m_currentDisBreakerState.bus3Breaker = *pdis3; + m_currentDisBreakerState.bus4Breaker = *pdis4; + + delete pdis1; + delete pdis2; + delete pdis3; + delete pdis4; + + //2.根据目标状态进行断路器操作 + //a. 高压母线的断路器 + disHighVolBusCmd a; + a.fuelCellCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.fuelCellCircuitBreaker); + a.propulsionMotorCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.propulsionMotorCircuitBreaker); + a.bowHighVoltageDistributionBoxCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.bowHighVoltageDistributionBoxCircuitBreaker); + a.tyzReservedCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.tyzReservedCircuitBreaker); + a.sternFTDevice45CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.sternFTDevice45CircuitBreaker); + a.sternRudderSwitch1CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.sternRudderSwitch1CircuitBreaker); + a.sternRudderSwitch2CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.sternRudderSwitch2CircuitBreaker); + a.reservedCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.reservedCircuitBreaker); + a.fbReservedCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus1Breaker.fbReservedCircuitBreaker); + m_udpComm.sendDisSysCmd(a); +//b. 高压汇流排A断路器 + disHighAVolBusCmd b; + b.bowFTDevice123CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.bowFTDevice123CircuitBreaker); + b.actuatorCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.actuatorCircuitBreaker); + b.mastSteeringGearControlBoxCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.mastSteeringGearControlBoxCircuitBreaker); + b.xczCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.xczCircuitBreaker); + b.bowRudderControlBoxCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.bowRudderControlBoxCircuitBreaker); + b.openWaterCoverStartCylinderCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus2Breaker.openWaterCoverStartCylinderCircuitBreaker); + m_udpComm.sendDisSysCmd(b); +//c. 高压汇流排B断路器 + disHighBVolBusCmd c; + c.lithiumBatteryGroupInstrumentCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus3Breaker.lithiumBatteryGroupInstrumentCircuitBreaker); + c.bowLowVoltageDistributionBoxCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus3Breaker.bowLowVoltageDistributionBoxCircuitBreaker); + c.unit4InstrumentDC48VCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker); + c.dcC1DCDistributionPanelCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus3Breaker.dcC1DCDistributionPanelCircuitBreaker); + c.reservedCircuitBreaker1 = getBreakerOption(m_targetDisBreakerState.bus3Breaker.reservedCircuitBreaker1); + c.reservedCircuitBreaker2 = getBreakerOption(m_targetDisBreakerState.bus3Breaker.reservedCircuitBreaker2); + c.emergencyLithiumBatteryGroup2CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus3Breaker.emergencyLithiumBatteryGroup2CircuitBreaker); + m_udpComm.sendDisSysCmd(c); +//d. 闭合低压汇流排断路器 + disLowBusCmd d; + d.unit1CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.unit1CircuitBreaker); + d.unit2CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.unit2CircuitBreaker); + d.unit3CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.unit3CircuitBreaker); + d.unit5CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.unit5CircuitBreaker); + d.bowPZDeviceCircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.bowPZDeviceCircuitBreaker); + d.reservedCircuitBreaker1 = getBreakerOption(m_targetDisBreakerState.bus4Breaker.reservedCircuitBreaker1); + d.reservedCircuitBreaker2 = getBreakerOption(m_targetDisBreakerState.bus4Breaker.reservedCircuitBreaker2); + d.emergencyLithiumBatteryGroup1CircuitBreaker = getBreakerOption(m_targetDisBreakerState.bus4Breaker.emergencyLithiumBatteryGroup1CircuitBreaker); + m_udpComm.sendDisSysCmd(d); +} + + +bool PowerManger::saveStringToJsonFile(const string &strJson, const string &filePath) +{ + std::ofstream file(filePath, std::ios::trunc); + if (file.is_open()) { + file << strJson; + file.close(); + // std::cout << "字符串已成功保存到文件中。" << std::endl; + return true; + } else { + std::cerr << "无法打开文件!" << std::endl; + return false; + } +} + +bool PowerManger::writeDataToDB() +{ + m_stateData.state_id = m_pmState.id; + m_stateData.state_name = m_pmState.name; + m_stateData.event = m_pmEvent; + m_stateData.event_id = 1; + m_stateData.fault_code = m_faultNum; + m_stateData.note = "No fault"; + if(!m_db->insertStateData(m_stateData)) + return false; + + return true; + +} + + + +void PowerManger::printState(FSM_State st, string desp){ + cout << MOOS::ConsoleColours::Yellow() << "STATE " << st.id << " [" << st.name << "] " << MOOS::ConsoleColours::reset(); + cout << MOOS::ConsoleColours::Blue() << " -> " << MOOS::ConsoleColours::reset(); + // 检查desp是否有“故障” + if (desp.find("故障") != string::npos) { + cout << MOOS::ConsoleColours::Red() << desp << MOOS::ConsoleColours::reset() << endl; + return; + } + cout << MOOS::ConsoleColours::Green() << desp << MOOS::ConsoleColours::reset() << endl; +} + +int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) +{ + cout << fsm.name << endl; + PowerManger* pm = (PowerManger*)pData; + //1. 检查复合管控器连接 如果10S则进入故障状态 + double StartTime = pm->GetAppStartTime(); + while (!pm->m_connected) + { + MOOSPause(1000); + pm->updateTime(); + double dft = abs(pm->m_current_time - StartTime); + if(dft > 10) + { + pm->m_pmState = pm->m_Fault_s99; + pm->m_faultNum = 1; // 通信超时 + break; + } + string desp = "等待复合管控消息 : " + to_string(10-dft); + pm->printState(fsm,desp); + } + //2. 检查复合管控器是否上报故障 如果故障则进入故障状态 + bool ok = true; + if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 || + pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 || + pm->m_pmCurrentState.ccustate.fcuGZ_2H != 0 || + pm->m_pmCurrentState.ccustate.fcuGZ_2L != 0 || + pm->m_pmCurrentState.ccustate.fcuGZ_3H != 0 || + pm->m_pmCurrentState.ccustate.fcuGZ_3L != 0 || + pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0) + { + ok = false; + } + if(!ok) + { + pm->m_pmState = pm->m_Fault_s99; + } + //3. 初始化配电系统为待机状态 + pm->initTargetDisBreakerState(); + pm->m_pmState = pm->m_Standby_s2; + return 0; +} + +int PowerManger::handleStandby_s2(FSM_State &fsm, void* pData) +{ + PowerManger* pm = (PowerManger*)pData; + while (true) + { + string desp = "待机状态"; + pm->printState(fsm,desp); + MOOSPause(1000); + } + +} + + +int PowerManger::handleFault_s99(FSM_State &fsm, void* pData) +{ + // cout << fsm.name << endl; + PowerManger* pm = (PowerManger*)pData; + switch (pm->m_faultNum) + { + case 1: + pm->printState(fsm,"通信故障"); + pm->m_pmEvent = "复合管控连接超时"; + break; + + default: + break; + } + pm->printState(fsm,"故障"); + return 0; +} + + +// int PowerManger::handleState1(FSM_State &fsm,void* pData) +// { +// cout << fsm.name << endl; +// PowerManger* pm = (PowerManger*)pData; +// fsm = pm->m_fsm.getState("PM_STATE2"); +// // pm->m_pmEvent = "a"; +// return 0; +// } +// int PowerManger::handleState2(FSM_State &fsm,void* pData) +// { +// cout << fsm.name << endl; +// PowerManger* pm = (PowerManger*)pData; +// fsm = pm->m_fsm.getState("PM_STATE3"); +// // pm->m_pmEvent = "b"; +// return 0; +// } +// int PowerManger::handleState3(FSM_State &fsm,void* pData) +// { +// cout << fsm.name << endl; +// PowerManger* pm = (PowerManger*)pData; +// fsm = pm->m_fsm.getState("PM_STATE"); +// // pm->m_pmEvent = "c"; +// return 0; +// } + +void PowerManger::initTargetDisBreakerState() +{ + m_targetDisBreakerState.bus1Breaker.fuelCellCircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.powerLithiumBatteryCircuitBreaker = 1; //动力锂电池默认接入 + m_targetDisBreakerState.bus1Breaker.propulsionMotorCircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.lithiumBatteryGroupInstrumentCircuitBreaker = 0; //仪表锂电池默认接入 + m_targetDisBreakerState.bus1Breaker.dcDc5ModuleCircuitBreaker = 1; //DC-DC模块默认接入 + m_targetDisBreakerState.bus1Breaker.bowHighVoltageDistributionBoxCircuitBreaker = 1; //艏部高压母线断路器默认接入 + m_targetDisBreakerState.bus1Breaker.sternFTDevice45CircuitBreaker = 0; // sternFTDevice45CircuitBreaker默认接入 + m_targetDisBreakerState.bus1Breaker.sternRudderSwitch1CircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.sternRudderSwitch2CircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.fbReservedCircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.tyzReservedCircuitBreaker = 0; + m_targetDisBreakerState.bus1Breaker.reservedCircuitBreaker = 0; + + m_targetDisBreakerState.bus2Breaker.bowFTDevice123CircuitBreaker = 0; + m_targetDisBreakerState.bus2Breaker.actuatorCircuitBreaker = 0; + m_targetDisBreakerState.bus2Breaker.mastSteeringGearControlBoxCircuitBreaker = 0; + m_targetDisBreakerState.bus2Breaker.xczCircuitBreaker = 0; + m_targetDisBreakerState.bus2Breaker.bowRudderControlBoxCircuitBreaker = 0; + m_targetDisBreakerState.bus2Breaker.openWaterCoverStartCylinderCircuitBreaker = 0; + //锂电池默认接入 + m_targetDisBreakerState.bus3Breaker.lithiumBatteryGroupInstrumentCircuitBreaker = 1; + m_targetDisBreakerState.bus3Breaker.bowLowVoltageDistributionBoxCircuitBreaker = 1; + m_targetDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker = 1; + m_targetDisBreakerState.bus3Breaker.dcC1DCDistributionPanelCircuitBreaker = 1; + m_targetDisBreakerState.bus3Breaker.reservedCircuitBreaker1 = 0; + m_targetDisBreakerState.bus3Breaker.reservedCircuitBreaker2 = 0; + m_targetDisBreakerState.bus3Breaker.emergencyLithiumBatteryGroup2CircuitBreaker = 1; + + m_targetDisBreakerState.bus4Breaker.unit1CircuitBreaker = 1; + m_targetDisBreakerState.bus4Breaker.unit2CircuitBreaker = 1; + m_targetDisBreakerState.bus4Breaker.unit3CircuitBreaker = 1; + m_targetDisBreakerState.bus4Breaker.unit5CircuitBreaker = 1; + m_targetDisBreakerState.bus4Breaker.bowPZDeviceCircuitBreaker = 1; + m_targetDisBreakerState.bus4Breaker.reservedCircuitBreaker1 = 0; + m_targetDisBreakerState.bus4Breaker.reservedCircuitBreaker2 = 0; + m_targetDisBreakerState.bus4Breaker.emergencyLithiumBatteryGroup1CircuitBreaker = 1; //紧急锂电池默认接入 + +} + +char PowerManger::getBreakerOption(char cmd) +{ + if(cmd ==1) + return 0x55; + else if(cmd ==0) + return 0xAA; + else + return 0x00; +} + string PowerManger::getTypeName(const string typeName) { // 映射类型名称到指定的字符串 @@ -357,6 +660,7 @@ string PowerManger::getTypeName(const string typeName) } } + bool PowerManger::buildPowerSysReport() { //TODO: 构建能源系统报告 @@ -591,62 +895,21 @@ bool PowerManger::buildPowerSysReport() lbs[VAR_TO_STR(powfaultCode)+suffix] = m_pmCurrentState.ccustate.powerAlarmIdentificationWord; //5.构建配电系统状态报告 - disBus1Breaker* pdis1=new disBus1Breaker; - (m_pmCurrentState.bus1State.fuelCellCircuitBreaker == BREAK_ON) ? pdis1 -> fuelCellCircuitBreaker = 1 : pdis1 -> fuelCellCircuitBreaker = 0; - (m_pmCurrentState.bus1State.powerLithiumBatteryCircuitBreaker == BREAK_ON) ? pdis1 -> powerLithiumBatteryCircuitBreaker = 1 : pdis1 -> powerLithiumBatteryCircuitBreaker = 0; - (m_pmCurrentState.bus1State.propulsionMotorCircuitBreaker == BREAK_ON) ? pdis1 -> propulsionMotorCircuitBreaker = 1 : pdis1 -> propulsionMotorCircuitBreaker = 0; - (m_pmCurrentState.bus1State.lithiumBatteryGroupInstrumentCircuitBreaker == BREAK_ON) ? pdis1 -> lithiumBatteryGroupInstrumentCircuitBreaker = 1 : pdis1 -> lithiumBatteryGroupInstrumentCircuitBreaker = 0; - (m_pmCurrentState.bus1State.dcDc5ModuleCircuitBreaker == BREAK_ON) ? pdis1 -> dcDc5ModuleCircuitBreaker = 1 : pdis1 -> dcDc5ModuleCircuitBreaker = 0; - (m_pmCurrentState.bus1State.bowHighVoltageDistributionBoxCircuitBreaker == BREAK_ON) ? pdis1 -> bowHighVoltageDistributionBoxCircuitBreaker = 1 : pdis1 -> bowHighVoltageDistributionBoxCircuitBreaker = 0; - (m_pmCurrentState.bus1State.sternFTDevice45CircuitBreaker == BREAK_ON) ? pdis1 -> sternFTDevice45CircuitBreaker = 1 : pdis1 -> sternFTDevice45CircuitBreaker = 0; - (m_pmCurrentState.bus1State.sternRudderSwitch1CircuitBreaker == BREAK_ON) ? pdis1 -> sternRudderSwitch1CircuitBreaker = 1 : pdis1 -> sternRudderSwitch1CircuitBreaker = 0; - (m_pmCurrentState.bus1State.sternRudderSwitch2CircuitBreaker == BREAK_ON) ? pdis1 -> sternRudderSwitch2CircuitBreaker = 1 : pdis1 -> sternRudderSwitch2CircuitBreaker = 0; - (m_pmCurrentState.bus1State.fbReservedCircuitBreaker == BREAK_ON) ? pdis1 -> fbReservedCircuitBreaker = 1 : pdis1 -> fbReservedCircuitBreaker = 0; - (m_pmCurrentState.bus1State.tyzReservedCircuitBreaker == BREAK_ON) ? pdis1 -> tyzReservedCircuitBreaker = 1 : pdis1 -> tyzReservedCircuitBreaker = 0; - (m_pmCurrentState.bus1State.reservedCircuitBreaker == BREAK_ON) ? pdis1 -> reservedCircuitBreaker = 1 : pdis1 -> reservedCircuitBreaker = 0; - pdis1 -> paceholder = 0; - disBus2Breaker* pdis2=new disBus2Breaker; - (m_pmCurrentState.bus2State.bowFTDevice123CircuitBreaker == BREAK_ON)? pdis2 -> bowFTDevice123CircuitBreaker = 1 : pdis2 -> bowFTDevice123CircuitBreaker = 0; - (m_pmCurrentState.bus2State.actuatorCircuitBreaker == BREAK_ON)? pdis2 -> actuatorCircuitBreaker = 1 : pdis2 -> actuatorCircuitBreaker = 0; - (m_pmCurrentState.bus2State.mastSteeringGearControlBoxCircuitBreaker == BREAK_ON)? pdis2 -> mastSteeringGearControlBoxCircuitBreaker = 1 : pdis2 -> mastSteeringGearControlBoxCircuitBreaker = 0; - (m_pmCurrentState.bus2State.xczCircuitBreaker == BREAK_ON)? pdis2 -> xczCircuitBreaker = 1 : pdis2 -> xczCircuitBreaker = 0; - (m_pmCurrentState.bus2State.bowRudderControlBoxCircuitBreaker == BREAK_ON)? pdis2 -> bowRudderControlBoxCircuitBreaker = 1 : pdis2 -> bowRudderControlBoxCircuitBreaker = 0; - (m_pmCurrentState.bus2State.openWaterCoverStartCylinderCircuitBreaker == BREAK_ON)? pdis2 -> openWaterCoverStartCylinderCircuitBreaker = 1 : pdis2 -> openWaterCoverStartCylinderCircuitBreaker = 0; - pdis2 -> paceholder = 0; - disBus3Breaker* pdis3=new disBus3Breaker; - (m_pmCurrentState.bus3State.lithiumBatteryGroupInstrumentCircuitBreaker == BREAK_ON)? pdis3 -> lithiumBatteryGroupInstrumentCircuitBreaker = 1 : pdis3 -> lithiumBatteryGroupInstrumentCircuitBreaker = 0; - (m_pmCurrentState.bus3State.bowLowVoltageDistributionBoxCircuitBreaker == BREAK_ON)? pdis3 -> bowLowVoltageDistributionBoxCircuitBreaker = 1 : pdis3 -> bowLowVoltageDistributionBoxCircuitBreaker = 0; - (m_pmCurrentState.bus3State.unit4InstrumentDC48VCircuitBreaker == BREAK_ON)? pdis3 -> unit4InstrumentDC48VCircuitBreaker = 1 : pdis3 -> unit4InstrumentDC48VCircuitBreaker = 0; - (m_pmCurrentState.bus3State.dcC1DCDistributionPanelCircuitBreaker == BREAK_ON)? pdis3 -> dcC1DCDistributionPanelCircuitBreaker = 1 : pdis3 -> dcC1DCDistributionPanelCircuitBreaker = 0; - (m_pmCurrentState.bus3State.reservedCircuitBreaker1 == BREAK_ON)? pdis3 -> reservedCircuitBreaker1 = 1 : pdis3 -> reservedCircuitBreaker1 = 0; - (m_pmCurrentState.bus3State.reservedCircuitBreaker2 == BREAK_ON)? pdis3 -> reservedCircuitBreaker2 = 1 : pdis3 -> reservedCircuitBreaker2 = 0; - (m_pmCurrentState.bus3State.emergencyLithiumBatteryGroup2CircuitBreaker == BREAK_ON)? pdis3 -> emergencyLithiumBatteryGroup2CircuitBreaker = 1 : pdis3 -> emergencyLithiumBatteryGroup2CircuitBreaker = 0; - pdis3->paceholder = 0; - disBus4Breaker* pdis4=new disBus4Breaker; - (m_pmCurrentState.bus4State.unit1CircuitBreaker == BREAK_ON)? pdis4 -> unit1CircuitBreaker = 1 : pdis4 -> unit1CircuitBreaker = 0; - (m_pmCurrentState.bus4State.unit2CircuitBreaker == BREAK_ON)? pdis4 -> unit2CircuitBreaker = 1 : pdis4 -> unit2CircuitBreaker = 0; - (m_pmCurrentState.bus4State.unit3CircuitBreaker == BREAK_ON)? pdis4 -> unit3CircuitBreaker = 1 : pdis4 -> unit3CircuitBreaker = 0; - (m_pmCurrentState.bus4State.unit5CircuitBreaker == BREAK_ON)? pdis4 -> unit5CircuitBreaker = 1 : pdis4 -> unit5CircuitBreaker = 0; - (m_pmCurrentState.bus4State.bowPZDeviceCircuitBreaker == BREAK_ON)? pdis4 -> bowPZDeviceCircuitBreaker = 1 : pdis4 -> bowPZDeviceCircuitBreaker = 0; - (m_pmCurrentState.bus4State.reservedCircuitBreaker1 == BREAK_ON)? pdis4 -> reservedCircuitBreaker1 = 1 : pdis4 -> reservedCircuitBreaker1 = 0; - (m_pmCurrentState.bus4State.reservedCircuitBreaker2 == BREAK_ON)? pdis4 -> reservedCircuitBreaker2 = 1 : pdis4 -> reservedCircuitBreaker2 = 0; - (m_pmCurrentState.bus4State.emergencyLithiumBatteryGroup1CircuitBreaker == BREAK_ON)? pdis4 -> emergencyLithiumBatteryGroup1CircuitBreaker = 1 : pdis4 -> emergencyLithiumBatteryGroup1CircuitBreaker = 0; - pdis4 -> paceholder = 0; - dis["HVolBusBreaker_uint16"] = *(unsigned short*) pdis1; - dis["HVolABusBreaker_unit16"] = *(unsigned short*) pdis2; - dis["HVolBBusBreaker_unit16"] = *(unsigned short*) pdis3; - dis["LVolBusBreaker_uint16"] = *(unsigned short*) pdis3; + *pdis1 = m_currentDisBreakerState.bus1Breaker; + *pdis2 = m_currentDisBreakerState.bus2Breaker; + *pdis3 = m_currentDisBreakerState.bus3Breaker; + *pdis4 = m_currentDisBreakerState.bus4Breaker; + + dis["HVolBusBreaker_uint16"] = *(unsigned short*)pdis1; + dis["HVolABusBreaker_unit16"] = *(unsigned short*)pdis2; + dis["HVolBBusBreaker_unit16"] = *(unsigned short*)pdis3; + dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4; - delete pdis1; - delete pdis2; - delete pdis3; - delete pdis4; - //TODO: 构建配电系统故障码 Json::Value faultCodeDis_array; for(auto val : faultCode) @@ -788,180 +1051,3 @@ bool PowerManger::buildPowerSysReport() return true; } - -bool PowerManger::saveStringToJsonFile(const string &strJson, const string &filePath) -{ - std::ofstream file(filePath, std::ios::trunc); - if (file.is_open()) { - file << strJson; - file.close(); - // std::cout << "字符串已成功保存到文件中。" << std::endl; - return true; - } else { - std::cerr << "无法打开文件!" << std::endl; - return false; - } -} - -bool PowerManger::writeDataToDB() -{ - m_stateData.state_id = m_pmState.id; - m_stateData.state_name = m_pmState.name; - m_stateData.event = m_pmEvent; - m_stateData.event_id = 1; - m_stateData.fault_code = m_faultNum; - m_stateData.note = "No fault"; - if(!m_db->insertStateData(m_stateData)) - return false; - - return true; - -} - - -//TODO:配电系统操作函数 -bool PowerManger::disSystemOperation(disBreaker optBreaker, disBreakerOpt) -{ - - return true; -} -void PowerManger::printState(FSM_State st, string desp){ - cout << MOOS::ConsoleColours::Yellow() << "STATE " << st.id << " [" << st.name << "] " << MOOS::ConsoleColours::reset(); - cout << MOOS::ConsoleColours::Blue() << " -> " << MOOS::ConsoleColours::reset(); - // 检查desp是否有“故障” - if (desp.find("故障") != string::npos) { - cout << MOOS::ConsoleColours::Red() << desp << MOOS::ConsoleColours::reset() << endl; - return; - } - cout << MOOS::ConsoleColours::Green() << desp << MOOS::ConsoleColours::reset() << endl; -} - -int PowerManger::handleInite_s1(FSM_State &fsm, void* pData) -{ - cout << fsm.name << endl; - PowerManger* pm = (PowerManger*)pData; - //1. 检查复合管控器连接 如果10S则进入故障状态 - double StartTime = pm->GetAppStartTime(); - while (!pm->m_connected) - { - MOOSPause(1000); - pm->updateTime(); - double dft = abs(pm->m_current_time - StartTime); - if(dft > 10) - { - pm->m_pmState = pm->m_Fault_s99; - pm->m_faultNum = 1; // 通信超时 - break; - } - string desp = "等待复合管控消息 : " + to_string(10-dft); - pm->printState(fsm,desp); - usleep(1000000); - } - //2. 检查复合管控器是否上报故障 如果故障则进入故障状态 - bool ok = true; - if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 || - pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 || - pm->m_pmCurrentState.ccustate.fcuGZ_2H != 0 || - pm->m_pmCurrentState.ccustate.fcuGZ_2L != 0 || - pm->m_pmCurrentState.ccustate.fcuGZ_3H != 0 || - pm->m_pmCurrentState.ccustate.fcuGZ_3L != 0 || - pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0) - { - ok = false; - } - if(!ok) - { - pm->m_pmState = pm->m_Fault_s99; - } - //3. 检查当前配电装置状态 - //a. 断开高压母线的主要断路器 - //TODO 配置当前配电装置状态 - disHighVolBusCmd a; - a.fuelCellCircuitBreaker = DIS_BREAKER_OFF; - a.propulsionMotorCircuitBreaker = DIS_BREAKER_OFF; - a.bowHighVoltageDistributionBoxCircuitBreaker = DIS_BREAKER_OFF; - a.tyzReservedCircuitBreaker = DIS_BREAKER_OFF; - a.sternFTDevice45CircuitBreaker = DIS_BREAKER_OFF; - a.sternRudderSwitch1CircuitBreaker = DIS_BREAKER_OFF; - a.sternRudderSwitch2CircuitBreaker = DIS_BREAKER_OFF; - a.reservedCircuitBreaker = DIS_BREAKER_OFF; - a.fbReservedCircuitBreaker = DIS_BREAKER_OFF; - pm->m_udpComm.sendDisSysCmd(a); - //b. 断开艏部高压设备的主要断路器 - disHighAVolBusCmd b; - b.bowFTDevice123CircuitBreaker = DIS_BREAKER_OFF; - b.actuatorCircuitBreaker = DIS_BREAKER_OFF; - b.mastSteeringGearControlBoxCircuitBreaker = DIS_BREAKER_OFF; - b.xczCircuitBreaker = DIS_BREAKER_OFF; - b.bowRudderControlBoxCircuitBreaker = DIS_BREAKER_OFF; - b.openWaterCoverStartCylinderCircuitBreaker = DIS_BREAKER_OFF; - pm->m_udpComm.sendDisSysCmd(b); - //c. 闭合低压母线的断路器 - disHighBVolBusCmd c; - c.lithiumBatteryGroupInstrumentCircuitBreaker = DIS_BREAKER_ON; - c.bowLowVoltageDistributionBoxCircuitBreaker = DIS_BREAKER_ON; - c.unit4InstrumentDC48VCircuitBreaker = DIS_BREAKER_ON; - c.dcC1DCDistributionPanelCircuitBreaker = DIS_BREAKER_ON; - c.reservedCircuitBreaker1 = DIS_BREAKER_ON; - c.reservedCircuitBreaker2 = DIS_BREAKER_ON; - c.emergencyLithiumBatteryGroup2CircuitBreaker = DIS_BREAKER_ON; - pm->m_udpComm.sendDisSysCmd(c); - //d. 闭合低压汇流排断路器 - disLowBusCmd d; - d.unit1CircuitBreaker = DIS_BREAKER_ON; - d.unit2CircuitBreaker = DIS_BREAKER_ON; - d.unit3CircuitBreaker = DIS_BREAKER_ON; - d.unit5CircuitBreaker = DIS_BREAKER_ON; - d.bowPZDeviceCircuitBreaker = DIS_BREAKER_ON; - d.reservedCircuitBreaker1 = DIS_BREAKER_ON; - d.reservedCircuitBreaker2 = DIS_BREAKER_ON; - d.emergencyLithiumBatteryGroup1CircuitBreaker = DIS_BREAKER_ON; - pm->m_udpComm.sendDisSysCmd(d); - MOOSPause(1000); - // pm->workCondition = ""; - return 0; -} - -int PowerManger::handleFault_s99(FSM_State &fsm, void* pData) -{ - // cout << fsm.name << endl; - PowerManger* pm = (PowerManger*)pData; - switch (pm->m_faultNum) - { - case 1: - pm->printState(fsm,"通信故障"); - pm->m_pmEvent = "复合管控连接超时"; - break; - - default: - break; - } - pm->printState(fsm,"故障"); - return 0; -} - - -// int PowerManger::handleState1(FSM_State &fsm,void* pData) -// { -// cout << fsm.name << endl; -// PowerManger* pm = (PowerManger*)pData; -// fsm = pm->m_fsm.getState("PM_STATE2"); -// // pm->m_pmEvent = "a"; -// return 0; -// } -// int PowerManger::handleState2(FSM_State &fsm,void* pData) -// { -// cout << fsm.name << endl; -// PowerManger* pm = (PowerManger*)pData; -// fsm = pm->m_fsm.getState("PM_STATE3"); -// // pm->m_pmEvent = "b"; -// return 0; -// } -// int PowerManger::handleState3(FSM_State &fsm,void* pData) -// { -// cout << fsm.name << endl; -// PowerManger* pm = (PowerManger*)pData; -// fsm = pm->m_fsm.getState("PM_STATE"); -// // pm->m_pmEvent = "c"; -// return 0; -// } \ No newline at end of file diff --git a/src/pPowerManger/PowerManger.h b/src/pPowerManger/PowerManger.h index 887a530..d5bf260 100644 --- a/src/pPowerManger/PowerManger.h +++ b/src/pPowerManger/PowerManger.h @@ -74,11 +74,10 @@ class PowerManger : public AppCastingMOOSApp //通信相关 XPCUdpSocket* setUdpScoket(long lPort); - bool disSystemOperation(disBreaker optBreaker, disBreakerOpt); bool buildPowerSysReport(); protected: // app variables - //系统状态 + //系统运行状态 unsigned char workCondition; unsigned char currentMod; unsigned char powerState; @@ -86,16 +85,25 @@ class PowerManger : public AppCastingMOOSApp vector faultCode; unsigned int soc; unsigned int sustainableTime; - pmState m_pmCurrentState; bool m_connected; - // 当前传输状态 + pmState m_pmCurrentState; //能源系统的当前状态 + //配电系统状态 + disSysBreakerList m_currentDisBreakerState; + disSysBreakerList m_targetDisBreakerState; + + // 配电和CCU的反馈状态 msg_CcuStateFbMsg m_CcuCurrentState; msg_disHighVolBusFbMsg m_disHighVolBusCurrentState; msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState; msg_disHighBVolBusFbMsg m_disHighBVolBusCurrentState; msg_disLowBusFbMsg m_disLowBusState; - - private: // Configuration variables + + //操作函数 + void disSysOption(); + char getBreakerOption(char cmd); + void initTargetDisBreakerState(); + + private: udpComm m_udpComm; XPCUdpSocket *m_pCcuUdpComm; CMOOSThread m_ListenThread; @@ -114,7 +122,6 @@ class PowerManger : public AppCastingMOOSApp private: // bool inline saveStringToJsonFile(const string &strJson, const string &strFileName); - public: //状态实现 void printState(FSM_State st, string desp); bool FSM_RUN_IS_OK = true; @@ -133,6 +140,10 @@ class PowerManger : public AppCastingMOOSApp FSM_State m_Inite_s1; static int handleInite_s1(FSM_State &fsm, void* pData); + //待机状态 + FSM_State m_Standby_s2; + static int handleStandby_s2(FSM_State &fsm, void* pData); + //故障处理 FSM_State m_Fault_s99; static int handleFault_s99(FSM_State &fsm, void* pData); diff --git a/src/pPowerManger/ccuUdpMsg.h b/src/pPowerManger/ccuUdpMsg.h index 4674d11..4d42fb5 100644 --- a/src/pPowerManger/ccuUdpMsg.h +++ b/src/pPowerManger/ccuUdpMsg.h @@ -8,8 +8,11 @@ #define DIS_MSG_HEAD1 0x40 #define DIS_MSG_HEAD2 0x40 -#define CCU_STATE_FB_ID 0x0051 +#define CCU_CMD_ID 0x0050 +#define CCU_SET_PARM_ID 0x0051 +#define CCU_STATE_FB_ID 0x0041 #define CCU_SET_PARM_FB_ID 0x0040 + #define DIS_HVBUS_FB_ID 0x0005 #define DIS_HVBUSA_FB_ID 0x0006 #define DIS_HVBUSB_FB_ID 0x0007 @@ -47,36 +50,18 @@ typedef struct { typedef struct { m_header header; m_date date; - unsigned char workCondition; - unsigned char fcuCmd; - unsigned char fcuPowerEfficiency; - unsigned char fcuInsEfficiency; - unsigned char insBatCmd; - unsigned char powerBatCmd; - unsigned char powerBatEfficiency; - unsigned char heartbeat; - unsigned char masterState; + ccuColCmd cmd; Checksum checkCode; } msg_CcuColCmdMsg; // 复合管控器参数设定指令 typedef struct { m_header header; - unsigned char insSocHold1; - unsigned char insSocHold2; - unsigned char insSocHold3; - unsigned char fcuToInsLimit1; - unsigned char fcuToinsLimit2; - unsigned char powerSocHold1; - unsigned char powerSocHold2; - unsigned char powerSocHold3; - unsigned char fcuToPowerLimit1; - unsigned char fcuToPowerLimit2; + ccuSetParmCmd cmd; Checksum checkCode; } msg_CcuSetParmMsg; // 配电指令 - typedef struct { m_header header; @@ -104,43 +89,7 @@ typedef struct disLowBusCmd data; cChecksum checkCode; }msg_disLVBCmd; -// typedef struct { -// m_header header; -// unsigned char dcb1; -// unsigned char dcb2; -// unsigned char dcb3; -// unsigned char dcb4; -// unsigned char dcb5; -// unsigned char sw1; -// unsigned char sw2; -// unsigned char qf1; -// unsigned char qf2; -// unsigned char qf3; -// unsigned char qf4; -// unsigned char qf5; -// unsigned char qf6; -// unsigned char qf7; -// unsigned char qf8; -// unsigned char qf9; -// unsigned char qf10; -// unsigned char qf11; -// unsigned char qf12; -// unsigned char qf13; -// unsigned char qf14; -// unsigned char qf15; -// unsigned char qf16; -// unsigned char qf17; -// unsigned char qf18; -// unsigned char qf19; -// unsigned char qf20; -// unsigned char qf21; -// unsigned char qf22; -// unsigned char qf23; -// unsigned char qf24; -// unsigned char qf25; -// unsigned char qf26; -// Checksum checkCode; -// } msg_disSysCmdMsg; + // 复合管控参数设定反馈指令 typedef struct { diff --git a/src/pPowerManger/driver.cpp b/src/pPowerManger/driver.cpp index ab30ec2..ba2e0d5 100644 --- a/src/pPowerManger/driver.cpp +++ b/src/pPowerManger/driver.cpp @@ -2,10 +2,720 @@ Driver::Driver() { + currentDriverTable = new DriverTable(); + nextDriverTable = new DriverTable(); + debug = false; } Driver::~Driver() { + delete currentDriverTable; + delete nextDriverTable; +} + +void Driver::setDebug(bool debug) +{ + this->debug = debug; +} +int Driver::getDriverTable(workCondition condition, DriverTable* driverTable) +{ + switch (condition) + { + case STANDBY: + + + break; + + case SHORE_BASED_READY: + /* code */ + break; + + case WATER_BASED_READY: + /* code */ + break; + + case CRUISE_MODE: + /* code */ + break; + + case HIGH_SPEED_MODE: + /* code */ + break; + + case ASCEND_DESCEND: + /* code */ + break; + + case BUOYANCY_ADJUST: + /* code */ + break; + default: + break; + } +} + + +void Driver::getSTANDBYTable(DriverTable* driverTable) +{ + //打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + //关闭所有负载 + driverTable->photoSensor = DRIVER_STANDBY; + driverTable->electSensor = DRIVER_STANDBY; + driverTable->zhfk = DRIVER_STANDBY; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + //关闭所有水声设备 + driverTable->singleBeamSonar1 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar2 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar3 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar4 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar5 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar6 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar7 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar8 = DRIVER_POWER_OFF; + driverTable->DVL = DRIVER_POWER_OFF; + driverTable->forwardSonar = DRIVER_POWER_OFF; + driverTable->zdp = DRIVER_POWER_OFF; + driverTable->usbl = DRIVER_POWER_OFF; + //关闭所有执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_POWER_OFF; + driverTable->bowRudderServo1 = DRIVER_POWER_OFF; + driverTable->bowRudderServo2 = DRIVER_POWER_OFF; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust2 = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust3 = DRIVER_POWER_OFF; + driverTable->sternRudderServo1 = DRIVER_POWER_OFF; + driverTable->sternRudderServo2 = DRIVER_POWER_OFF; + driverTable->sternRudderServo3 = DRIVER_POWER_OFF; + driverTable->sternRudderServo4 = DRIVER_POWER_OFF; + driverTable->thruster = DRIVER_POWER_OFF; + driverTable->bowThrow = DRIVER_POWER_OFF; + driverTable->sternThrow = DRIVER_POWER_OFF; +} + +void Driver::getSHORE_BASED_READYable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 允许启动负载 + // 关闭xcz + driverTable->photoSensor = DRIVER_STANDBY; + driverTable->electSensor = DRIVER_STANDBY; + driverTable->zhfk = DRIVER_STANDBY; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_STANDBY; + + // 关闭所有水声设备 + driverTable->singleBeamSonar1 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar2 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar3 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar4 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar5 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar6 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar7 = DRIVER_POWER_OFF; + driverTable->singleBeamSonar8 = DRIVER_POWER_OFF; + driverTable->DVL = DRIVER_POWER_OFF; + driverTable->forwardSonar = DRIVER_POWER_OFF; + driverTable->zdp = DRIVER_POWER_OFF; + driverTable->usbl = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + driverTable->bowOpen1 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen2 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen3 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen4 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen5 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen6 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_FULL_POWER_ON; + driverTable->bowCover2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover3 = DRIVER_FULL_POWER_ON; + driverTable->bowCover4 = DRIVER_FULL_POWER_ON; + driverTable->bowCover5 = DRIVER_FULL_POWER_ON; + driverTable->bowCover6 = DRIVER_FULL_POWER_ON; + driverTable->bowCover7 = DRIVER_FULL_POWER_ON; + driverTable->bowCover8 = DRIVER_FULL_POWER_ON; + driverTable->waterInject = DRIVER_FULL_POWER_ON; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +void Driver::getWATER_BASED_READYable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 允许启动负载 + driverTable->photoSensor = DRIVER_STANDBY; + driverTable->electSensor = DRIVER_STANDBY; + driverTable->zhfk = DRIVER_STANDBY; + driverTable->sideSonar = DRIVER_STANDBY; + driverTable->buoyage = DRIVER_STANDBY; + + // 所有水声设备待机 + // 打开DVL + driverTable->singleBeamSonar1 = DRIVER_STANDBY; + driverTable->singleBeamSonar2 = DRIVER_STANDBY; + driverTable->singleBeamSonar3 = DRIVER_STANDBY; + driverTable->singleBeamSonar4 = DRIVER_STANDBY; + driverTable->singleBeamSonar5 = DRIVER_STANDBY; + driverTable->singleBeamSonar6 = DRIVER_STANDBY; + driverTable->singleBeamSonar7 = DRIVER_STANDBY; + driverTable->singleBeamSonar8 = DRIVER_STANDBY; + driverTable->DVL = DRIVER_FULL_POWER_ON; + driverTable->forwardSonar = DRIVER_STANDBY; + driverTable->zdp = DRIVER_STANDBY; + driverTable->usbl = DRIVER_STANDBY; + + // 打开必要的执行机构 + driverTable->bowOpen1 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen2 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen3 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen4 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen5 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen6 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_FULL_POWER_ON; + driverTable->bowCover2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover3 = DRIVER_FULL_POWER_ON; + driverTable->bowCover4 = DRIVER_FULL_POWER_ON; + driverTable->bowCover5 = DRIVER_FULL_POWER_ON; + driverTable->bowCover6 = DRIVER_FULL_POWER_ON; + driverTable->bowCover7 = DRIVER_FULL_POWER_ON; + driverTable->bowCover8 = DRIVER_FULL_POWER_ON; + driverTable->waterInject = DRIVER_FULL_POWER_ON; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +void Driver::getCRUISE_MODEable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + + +void Driver::getHIGH_SPEED_MODEable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构,只打开操纵机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust2 = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust3 = DRIVER_POWER_OFF; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +// 上浮下潜与巡航模式一致 +void Driver::getASCEND_DESCENDable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +// 浮标调整与巡航模式一致 +void Driver::getBUOYANCY_ADJUSTable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +// 水下侦查 +void Driver::getUNDERWATER_RECONable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_STANDBY; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_POWER_OFF; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +// 水面探测 +void Driver::getSURFACE_RECONable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_STANDBY; + driverTable->electSensor = DRIVER_STANDBY; + driverTable->zhfk = DRIVER_POWER_OFF; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_POWER_OFF; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_POWER_OFF; + driverTable->bowOpen2 = DRIVER_POWER_OFF; + driverTable->bowOpen3 = DRIVER_POWER_OFF; + driverTable->bowOpen4 = DRIVER_POWER_OFF; + driverTable->bowOpen5 = DRIVER_POWER_OFF; + driverTable->bowOpen6 = DRIVER_POWER_OFF; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_POWER_OFF; + driverTable->bowCover2 = DRIVER_POWER_OFF; + driverTable->bowCover3 = DRIVER_POWER_OFF; + driverTable->bowCover4 = DRIVER_POWER_OFF; + driverTable->bowCover5 = DRIVER_POWER_OFF; + driverTable->bowCover6 = DRIVER_POWER_OFF; + driverTable->bowCover7 = DRIVER_POWER_OFF; + driverTable->bowCover8 = DRIVER_POWER_OFF; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +void Driver::getDJ_MODEable(DriverTable* driverTable) +{ + // 打开所有传感器 + driverTable->depth1 = DRIVER_FULL_POWER_ON; + driverTable->depth2 = DRIVER_FULL_POWER_ON; + driverTable->depth3 = DRIVER_FULL_POWER_ON; + driverTable->overDeep1 = DRIVER_FULL_POWER_ON; + driverTable->overDeep2 = DRIVER_FULL_POWER_ON; + driverTable->CTD1 = DRIVER_FULL_POWER_ON; + driverTable->CTD2 = DRIVER_FULL_POWER_ON; + driverTable->soundVeloc = DRIVER_FULL_POWER_ON; + driverTable->commMast = DRIVER_FULL_POWER_ON; + driverTable->ins = DRIVER_FULL_POWER_ON; + driverTable->ntp = DRIVER_FULL_POWER_ON; + + // 所有负载设备关机 + driverTable->photoSensor = DRIVER_POWER_OFF; + driverTable->electSensor = DRIVER_POWER_OFF; + driverTable->zhfk = DRIVER_FULL_POWER_ON; + driverTable->sideSonar = DRIVER_POWER_OFF; + driverTable->buoyage = DRIVER_STANDBY; + + // 打开必要的执行机构 + // 关闭非必要的执行机构 + driverTable->bowOpen1 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen2 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen3 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen4 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen5 = DRIVER_FULL_POWER_ON; + driverTable->bowOpen6 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderDeploy = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->bowRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover1 = DRIVER_FULL_POWER_ON; + driverTable->bowCover2 = DRIVER_FULL_POWER_ON; + driverTable->bowCover3 = DRIVER_FULL_POWER_ON; + driverTable->bowCover4 = DRIVER_FULL_POWER_ON; + driverTable->bowCover5 = DRIVER_FULL_POWER_ON; + driverTable->bowCover6 = DRIVER_FULL_POWER_ON; + driverTable->bowCover7 = DRIVER_FULL_POWER_ON; + driverTable->bowCover8 = DRIVER_FULL_POWER_ON; + driverTable->waterInject = DRIVER_POWER_OFF; + driverTable->wgDJ = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust1 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust2 = DRIVER_FULL_POWER_ON; + driverTable->buoyancyAdjust3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo1 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo2 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo3 = DRIVER_FULL_POWER_ON; + driverTable->sternRudderServo4 = DRIVER_FULL_POWER_ON; + driverTable->thruster = DRIVER_FULL_POWER_ON; + driverTable->bowThrow = DRIVER_FULL_POWER_ON; + driverTable->sternThrow = DRIVER_FULL_POWER_ON; +} + +std::string Driver::saveDriverTableToJson(const DriverTable* driverTable) +{ + Json::Value root; + + // 添加所有成员到json + root["depth1"] = driverTable->depth1; + root["depth2"] = driverTable->depth2; + root["depth3"] = driverTable->depth3; + root["overDeep1"] = driverTable->overDeep1; + root["overDeep2"] = driverTable->overDeep2; + root["CTD1"] = driverTable->CTD1; + root["CTD2"] = driverTable->CTD2; + root["soundVeloc"] = driverTable->soundVeloc; + root["commMast"] = driverTable->commMast; + root["ins"] = driverTable->ins; + root["ntp"] = driverTable->ntp; + root["singleBeamSonar1"] = driverTable->singleBeamSonar1; + root["singleBeamSonar2"] = driverTable->singleBeamSonar2; + root["singleBeamSonar3"] = driverTable->singleBeamSonar3; + root["singleBeamSonar4"] = driverTable->singleBeamSonar4; + root["singleBeamSonar5"] = driverTable->singleBeamSonar5; + root["singleBeamSonar6"] = driverTable->singleBeamSonar6; + root["singleBeamSonar7"] = driverTable->singleBeamSonar7; + root["singleBeamSonar8"] = driverTable->singleBeamSonar8; + root["forwardSonar"] = driverTable->forwardSonar; + root["DVL"] = driverTable->DVL; + root["zdp"] = driverTable->zdp; + root["usbl"] = driverTable->usbl; + root["bowOpen1"] = driverTable->bowOpen1; + root["bowOpen2"] = driverTable->bowOpen2; + root["bowOpen3"] = driverTable->bowOpen3; + root["bowOpen4"] = driverTable->bowOpen4; + root["bowOpen5"] = driverTable->bowOpen5; + root["bowOpen6"] = driverTable->bowOpen6; + root["bowRudderDeploy"] = driverTable->bowRudderDeploy; + root["bowRudderServo1"] = driverTable->bowRudderServo1; + root["bowRudderServo2"] = driverTable->bowRudderServo2; + root["bowCover1"] = driverTable->bowCover1; + root["bowCover2"] = driverTable->bowCover2; + root["bowCover3"] = driverTable->bowCover3; + root["bowCover4"] = driverTable->bowCover4; + root["bowCover5"] = driverTable->bowCover5; + root["bowCover6"] = driverTable->bowCover6; + root["bowCover7"] = driverTable->bowCover7; + root["bowCover8"] = driverTable->bowCover8; + root["waterInject"] = driverTable->waterInject; + root["wgDJ"] = driverTable->wgDJ; + root["buoyancyAdjust1"] = driverTable->buoyancyAdjust1; + root["buoyancyAdjust2"] = driverTable->buoyancyAdjust2; + root["buoyancyAdjust3"] = driverTable->buoyancyAdjust3; + root["sternRudderServo1"] = driverTable->sternRudderServo1; + root["sternRudderServo2"] = driverTable->sternRudderServo2; + root["sternRudderServo3"] = driverTable->sternRudderServo3; + root["sternRudderServo4"] = driverTable->sternRudderServo4; + root["thruster"] = driverTable->thruster; + root["bowThrow"] = driverTable->bowThrow; + root["sternThrow"] = driverTable->sternThrow; + root["photoSensor"] = driverTable->photoSensor; + root["electSensor"] = driverTable->electSensor; + root["zhfk"] = driverTable->zhfk; + root["sideSonar"] = driverTable->sideSonar; + root["buoyage"] = driverTable->buoyage; + + return root.toStyledString(); +} +std::string Driver::getDriverTableJson() +{ + return saveDriverTableToJson(currentDriverTable); } \ No newline at end of file diff --git a/src/pPowerManger/driver.h b/src/pPowerManger/driver.h index 577fc70..c1e4218 100644 --- a/src/pPowerManger/driver.h +++ b/src/pPowerManger/driver.h @@ -1,14 +1,132 @@ #ifndef DRIVER_H #define DRIVER_H +#include "json/json.h" +#include "iostream" +#define DRIVER_POWER_OFF 0x00 +#define DRIVER_FULL_POWER_ON 0x01 +#define DRIVER_INSTRUMENT_POWER_ON 0x02 +#define DRIVER_MOTIVE_POWER_ON 0x03 +#define DRIVER_STANDBY 0x04 + +struct DriverTable +{ + unsigned char depth1; + unsigned char depth2; + unsigned char depth3; + unsigned char overDeep1; + unsigned char overDeep2; + unsigned char CTD1; + unsigned char CTD2; + unsigned char soundVeloc; + unsigned char commMast; + unsigned char ins; + unsigned char ntp; + //水声设备 + unsigned char singleBeamSonar1; + unsigned char singleBeamSonar2; + unsigned char singleBeamSonar3; + unsigned char singleBeamSonar4; + unsigned char singleBeamSonar5; + unsigned char singleBeamSonar6; + unsigned char singleBeamSonar7; + unsigned char singleBeamSonar8; + unsigned char forwardSonar; + unsigned char DVL; + unsigned char zdp; + unsigned char usbl; + //执行机构 + unsigned char bowOpen1; + unsigned char bowOpen2; + unsigned char bowOpen3; + unsigned char bowOpen4; + unsigned char bowOpen5; + unsigned char bowOpen6; + unsigned char bowRudderDeploy; + unsigned char bowRudderServo1; + unsigned char bowRudderServo2; + unsigned char bowCover1; + unsigned char bowCover2; + unsigned char bowCover3; + unsigned char bowCover4; + unsigned char bowCover5; + unsigned char bowCover6; + unsigned char bowCover7; + unsigned char bowCover8; + unsigned char waterInject; + unsigned char wgDJ; + unsigned char buoyancyAdjust1; + unsigned char buoyancyAdjust2; + unsigned char buoyancyAdjust3; + unsigned char sternRudderServo1; + unsigned char sternRudderServo2; + unsigned char sternRudderServo3; + unsigned char sternRudderServo4; + unsigned char thruster; + unsigned char bowThrow; + unsigned char sternThrow; + //负载 + unsigned char photoSensor; + unsigned char electSensor; + unsigned char zhfk; + unsigned char sideSonar; + unsigned char buoyage; +}; + +enum DriverState +{ + POWER_OFF, // 断电 + FULL_POWER_ON, // 全电 + INSTRUMENT_POWER_ON, // 仪表电上电 + MOTIVE_POWER_ON, // 动力电上电 +}; + +enum workCondition +{ + STANDBY, // 待机工况 + SHORE_BASED_READY, // 岸基备航 + WATER_BASED_READY, // 水中备航 + CRUISE_MODE, // 巡航模式 + HIGH_SPEED_MODE, // 高速模式 + ASCEND_DESCEND, // 上浮下潜 + BUOYANCY_ADJUST, // 浮调模式 + UNDERWATER_RECON, // 水下侦查 + SURFACE_RECON, // 水面侦查 + DJ_MODE, // DJ模式 + DEBUG_MODE // 调试模式 +}; class Driver { public: Driver(); ~Driver(); + void setDebug(bool debug); + +public: + DriverTable* currentDriverTable; + DriverTable* nextDriverTable; + + int getDriverTable(workCondition condition, DriverTable* driverTable); + + void getSTANDBYTable(DriverTable* driverTable); + void getSHORE_BASED_READYable(DriverTable* driverTable); + void getWATER_BASED_READYable(DriverTable* driverTable); + void getCRUISE_MODEable(DriverTable* driverTable); + void getHIGH_SPEED_MODEable(DriverTable* driverTable); + void getASCEND_DESCENDable(DriverTable* driverTable); + void getBUOYANCY_ADJUSTable(DriverTable* driverTable); + void getUNDERWATER_RECONable(DriverTable* driverTable); + void getSURFACE_RECONable(DriverTable* driverTable); + void getDJ_MODEable(DriverTable* driverTable); + + std::string saveDriverTableToJson(const DriverTable* driverTable); + std::string getDriverTableJson(); + +private: + bool debug; }; -#endif // DRIVER_H \ No newline at end of file +#endif // DRIVER_H diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h index 3ff1017..77d600a 100644 --- a/src/pPowerManger/pmSysvariable.h +++ b/src/pPowerManger/pmSysvariable.h @@ -91,19 +91,30 @@ typedef struct ccuState float placeholder5; } ccuState; -//TODO:增加复合管控的控制指令 -// typedef struct ccuCmd -// { -// unsigned char currentWorkCondition; -// unsigned char fcuState; -// unsigned char fcuFaultLeve; -// } ccuCmd; -typedef struct ccuParamCmd -{ - unsigned char insBat1Hold; - unsigned char insBat2Hold; - unsigned char insBat3Hold; -}ccuParamCmd; +typedef struct { + unsigned char insSocHold1; + unsigned char insSocHold2; + unsigned char insSocHold3; + unsigned char fcuToInsLimit1; + unsigned char fcuToinsLimit2; + unsigned char powerSocHold1; + unsigned char powerSocHold2; + unsigned char powerSocHold3; + unsigned char fcuToPowerLimit1; + unsigned char fcuToPowerLimit2; +}ccuSetParmCmd; + +typedef struct { + unsigned char workCondition; + unsigned char fcuCmd; + unsigned char fcuPowerEfficiency; + unsigned char fcuInsEfficiency; + unsigned char insBatCmd; + unsigned char powerBatCmd; + unsigned char powerBatEfficiency; + unsigned char heartbeat; + unsigned char masterState; +}ccuColCmd; typedef struct disHighVolBusState { @@ -263,13 +274,9 @@ typedef struct disLowBusCmd unsigned char emergencyLithiumBatteryGroup1CircuitBreaker; }disLowBusCmd; - #pragma pack (0) - - //状态结构体定义 - typedef struct pmState { ccuState ccustate; @@ -338,52 +345,13 @@ typedef struct pmState /* data */ } disBus4Breaker; - -enum disBreaker{ - bus1_fuelCellCircuitBreaker, - bus1_powerLithiumBatteryCircuitBreaker, - bus1_propulsionMotorCircuitBreaker, - bus1_lithiumBatteryGroupInstrumentCircuitBreaker, - bus1_dcDc5ModuleCircuitBreaker, - bus1_bowHighVoltageDistributionBoxCircuitBreaker, - bus1_sternFTDevice45CircuitBreaker, - bus1_sternRudderSwitch1CircuitBreaker, - bus1_sternRudderSwitch2CircuitBreaker, - bus1_fbReservedCircuitBreaker, - bus1_tyzReservedCircuitBreaker, - bus1_reservedCircuitBreaker, - - bus2_bowFTDevice123CircuitBreaker, - bus2_actuatorCircuitBreaker, - bus2_mastSteeringGearControlBoxCircuitBreaker, - bus2_xczCircuitBreaker, - bus2_bowRudderControlBoxCircuitBreaker, - bus2_openWaterCoverStartCylinderCircuitBreaker, - - bus3_lithiumBatteryGroupInstrumentCircuitBreaker, - bus3_bowLowVoltageDistributionBoxCircuitBreaker, - bus3_unit4InstrumentDC48VCircuitBreaker, - bus3_dcC1DCDistributionPanelCircuitBreaker, - bus3_reservedCircuitBreaker1, - bus3_reservedCircuitBreaker2, - bus3_emergencyLithiumBatteryGroup2CircuitBreaker, - - bus4_unit1CircuitBreaker, - bus4_unit2CircuitBreaker, - bus4_unit3CircuitBreaker, - bus4_unit5CircuitBreaker, - bus4_bowPZDeviceCircuitBreaker, - bus4_reservedCircuitBreaker1, - bus4_reservedCircuitBreaker2 -}; - -enum disBreakerOpt{ - hold, - turn_off, - turn_on -}; - - + typedef struct disSysBreakerList + { + disBus1Breaker bus1Breaker; + disBus2Breaker bus2Breaker; + disBus3Breaker bus3Breaker; + disBus4Breaker bus4Breaker; + } disSysBreaker; #endif \ No newline at end of file diff --git a/src/pPowerManger/udpComm.cpp b/src/pPowerManger/udpComm.cpp index 6f34eed..1c0b715 100644 --- a/src/pPowerManger/udpComm.cpp +++ b/src/pPowerManger/udpComm.cpp @@ -469,4 +469,53 @@ bool udpComm::sendDisSysCmd(const disLowBusCmd cmd) } delete msg; return true; +} + +bool udpComm::sendCcuColCmd(const ccuColCmd cmd) +{ + unsigned char* msgBuf; + Checksum cc; + msg_CcuColCmdMsg* msg = new msg_CcuColCmdMsg; + msg->header.id = CCU_CMD_ID; + msg->header.start1 = CCU_UDPMSG_START1; + msg->header.start2 = CCU_UDPMSG_START2; + msg->header.length = sizeof(ccuColCmd); + msg->cmd = cmd; + msgBuf = reinterpret_cast(msg); + cc = calculateChecksum(msgBuf,sizeof(msg_CcuColCmdMsg)); + msg->checkCode = static_cast(cc & 0xFF); + try + { + sendMsg(msgBuf,sizeof(msg_CcuColCmdMsg)); + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + delete msg; + return true; +} +bool udpComm::sendCcuSetParmCmd(const ccuSetParmCmd cmd) +{ + unsigned char* msgBuf; + Checksum cc; + msg_CcuSetParmMsg* msg = new msg_CcuSetParmMsg; + msg->header.id = CCU_SET_PARM_ID; + msg->header.start1 = CCU_UDPMSG_START1; + msg->header.start2 = CCU_UDPMSG_START2; + msg->header.length = sizeof(ccuSetParmCmd); + msg->cmd = cmd; + msgBuf = reinterpret_cast(msg); + cc = calculateChecksum(msgBuf,sizeof(msg_CcuSetParmMsg)); + msg->checkCode = static_cast(cc & 0xFF); + try + { + sendMsg(msgBuf,sizeof(msg_CcuSetParmMsg)); + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + delete msg; + return true; } \ No newline at end of file diff --git a/src/pPowerManger/udpComm.h b/src/pPowerManger/udpComm.h index 11ca352..020c432 100644 --- a/src/pPowerManger/udpComm.h +++ b/src/pPowerManger/udpComm.h @@ -44,8 +44,8 @@ public: bool popMsgFormQueue(double &time,msg_disHighBVolBusFbMsg &m); bool popMsgFormQueue(double &time,msg_disLowBusFbMsg &m); - bool sendCcuColCmd(const msg_CcuColCmdMsg m); - bool sendCcuSetParmCmd(const msg_CcuSetParmMsg m); + bool sendCcuColCmd(const ccuColCmd cmd); + bool sendCcuSetParmCmd(const ccuSetParmCmd cmd); bool sendDisSysCmd(const disHighVolBusCmd cmd); bool sendDisSysCmd(const disHighAVolBusCmd cmd); diff --git a/test/SQLiteDBTest.cpp b/test/SQLiteDBTest.cpp index 6399016..80ef718 100644 --- a/test/SQLiteDBTest.cpp +++ b/test/SQLiteDBTest.cpp @@ -33,10 +33,9 @@ TEST_CASE("SQLiteDB Test", "[SQLiteDB]") { REQUIRE(stateDataForGet.event_id == 1); REQUIRE(stateDataForGet.fault_code == 1); REQUIRE(stateDataForGet.note == "test"); - + //REQUIRE(db.clearPowerData(stateDataForGet) == true); } - - + }