This commit is contained in:
zjk
2025-06-06 13:28:05 +08:00
parent 8fab3bdf06
commit 035205101b
17 changed files with 429 additions and 96 deletions
+18 -17
View File
@@ -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
+11
View File
@@ -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;
}
+11 -11
View File
@@ -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; //默认为最大
+1
View File
@@ -102,6 +102,7 @@ public:
//操作函数,操作指定设备
//TODO: 增加设备操作函数
void operateSubDriver(int id, int cmd, DriverTable* driverTable);
// void setDriverTable(DriverTable* driverTable, ,DriverCmd::Type cmd);
+196 -9
View File
@@ -38,11 +38,47 @@ 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);
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, "无动力电设备操作");
}
}
@@ -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
{
@@ -2031,39 +2146,111 @@ void PowerManagerFsm::handelPowerCmd(){
{
case 0:
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;
+10
View File
@@ -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);
+1 -1
View File
@@ -1,7 +1,7 @@
#include "PowerManagerFsm.hpp"
// RemoteControl实现
void RemoteControl::react(MasterCommandEvent const &) {
void RemoteControl::react(MasterCommandEvent const &){
PowerManagerFsm::handelPowerCmd();
PowerManagerFsm::handleModCmd();
PowerManagerFsm::handleWorkCmd();
+1 -1
View File
@@ -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:接入执行机构动力电设备
+1 -1
View File
@@ -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;
@@ -338,6 +338,15 @@ body {
<input type="hidden" name="instrumentBattery" value="00H">
</div>
<div class="control-group">
<label class="control-label">仪表锂电池允许充电</label>
<div class="button-group">
<button type="button" class="button button-secondary" data-command="instrumentBatteryCharge" data-value="0">允许</button>
<button type="button" class="button button-active" data-command="instrumentBatteryCharge" data-value="48">禁止</button>
</div>
<input type="hidden" name="instrumentBatteryCharge" value="1">
</div>
<div class="control-group">
<label class="control-label">动力锂电池启停指令</label>
<div class="button-group">
+76 -2
View File
@@ -249,11 +249,11 @@ const std::string DATA_HTML = R"(
<span class="data-value" id="dyn-total-energy">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池输入功率:</span>
<span class="data-label">仪表电池接入功率:</span>
<span class="data-value" id="ins-power-input">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池输入功率:</span>
<span class="data-label">动力电池接入功率:</span>
<span class="data-value" id="dyn-power-input">正在加载...</span>
</div>
<div class="data-item">
@@ -264,6 +264,14 @@ const std::string DATA_HTML = R"(
<span class="data-label">动力电池最大放电功率:</span>
<span class="data-value" id="dyn-max-discharge-power">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池充放电状态:</span>
<span class="data-value" id="ins-charge-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池充放电状态:</span>
<span class="data-value" id="dyn-charge-status">正在加载...</span>
</div>
</div>
</div>
@@ -380,6 +388,22 @@ const std::string DATA_HTML = R"(
<span class="data-label">动力紧急状态:</span>
<span class="data-value" id="dyn-emergency-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">充电等级:</span>
<span class="data-value" id="dyn-charge-level">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池漏水状态:</span>
<span class="data-value" id="water-leak-status-from-insbat">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池漏水状态:</span>
<span class="data-value" id="water-leak-status-from-dynbat">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">DCDC状态:</span>
<span class="data-value" id="dcdc-status-from-insbat">正在加载...</span>
</div>
</div>
</div>
@@ -1061,6 +1085,14 @@ function updateSystemData(data) {
document.getElementById('dyn-max-discharge-power').textContent =
(data.dyn_max_discharge_power).toFixed(2) + ' kW';
}
if (data.ins_charge_status !== undefined) {
document.getElementById('ins-charge-status').textContent =
getChargeStatusText(data.ins_charge_status);
}
if (data.dyn_charge_status !== undefined) {
document.getElementById('dyn-charge-status').textContent =
getChargeStatusText(data.dyn_charge_status);
}
// 继电器状态
if (data.ins_relay_status1 !== undefined) {
@@ -1107,6 +1139,18 @@ function updateSystemData(data) {
if (data.dyn_emergency_status !== undefined) {
document.getElementById('dyn-emergency-status').textContent = getEmergencyStatusText(data.dyn_emergency_status);
}
if (data.dyn_charge_level !== undefined) {
document.getElementById('dyn-charge-level').textContent = getChargeLevelText(data.dyn_charge_level);
}
if (data.water_leak_status_from_insbat !== undefined) {
document.getElementById('water-leak-status-from-insbat').textContent = getWaterLeakStatusText(data.water_leak_status_from_insbat);
}
if (data.water_leak_status_from_dynbat !== undefined) {
document.getElementById('water-leak-status-from-dynbat').textContent = getWaterLeakStatusText(data.water_leak_status_from_dynbat);
}
if (data.dcdc_status_from_insbat !== undefined) {
document.getElementById('dcdc-status-from-insbat').textContent = getDCDCStatusText(data.dcdc_status_from_insbat);
}
if (data.dyn_alarm_flag1 !== undefined) {
document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1;
}
@@ -1640,6 +1684,16 @@ if (data.power_a_bus_status) {
}
}
// 充放电状态文本转换
function getChargeStatusText(status) {
const statuses = {
0: '无效',
16: '充电',
32: '放电'
};
return statuses[status] || '未知状态';
}
// 继电器状态文本转换
function getRelayStatusText(status) {
const statuses = {
@@ -1649,6 +1703,26 @@ function getRelayStatusText(status) {
return statuses[status] || '无效';
}
// 充电等级文本转换
function getChargeLevelText(level) {
const levels = {
1: '1级(不限)',
2: '2级(限功率)',
3: '3级(关闭)'
};
return levels[level] || '未知等级';
}
// 漏水状态文本转换
function getWaterLeakStatusText(status) {
return status === 0 ? '正常' : '异常漏水';
}
// DCDC状态文本转换
function getDCDCStatusText(status) {
return status === 0 ? '正常' : '故障';
}
// 紧急状态文本转换
function getEmergencyStatusText(status) {
const statuses = {
+22 -2
View File
@@ -116,6 +116,8 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
fuelCellPower = (unsigned short)atoi(tmp);
mg_http_get_var(&body, "instrumentBattery", tmp, sizeof(tmp));
instrumentBattery = (unsigned char)strtoul(tmp, NULL, 16);
mg_http_get_var(&body, "instrumentBatteryCharge", tmp, sizeof(tmp));
unsigned char instrumentBatteryCharge = (unsigned char)atoi(tmp);
mg_http_get_var(&body, "powerBattery", tmp, sizeof(tmp));
powerBattery = (unsigned char)strtoul(tmp, NULL, 16);
mg_http_get_var(&body, "powerBatteryPower", tmp, sizeof(tmp));
@@ -126,10 +128,10 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
// 记录接收到的配置
LOG_F(INFO, "Received battery control config: "
"fuelCellMode=%02XH, fuelCellCommand=%02XH, fuelCellPower=%d, "
"instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d, "
"instrumentBattery=%02XH, instrumentBatteryCharge=%d, powerBattery=%02XH, powerBatteryPower=%d, "
"hostStatus=%02XH",
fuelCellMode, fuelCellCommand, fuelCellPower,
instrumentBattery, powerBattery, powerBatteryPower, hostStatus);
instrumentBattery, instrumentBatteryCharge, powerBattery, powerBatteryPower, hostStatus);
m_powerManger->m_CcuColCmd.fcmode = fuelCellMode;
m_powerManger->m_CcuColCmd.fcuCmd = fuelCellCommand;
@@ -139,6 +141,7 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery;
m_powerManger->m_CcuColCmd.powerBatEfficiency = powerBatteryPower;
m_powerManger->m_CcuColCmd.masterState = hostStatus;
m_powerManger->m_CcuColCmd.insChargeEnable = instrumentBatteryCharge;
cout << "m_powerManger->m_CcuColCmd.masterState:" << (int)m_powerManger->m_CcuColCmd.masterState << endl;
mg_http_reply(c, 200, "Content-Type: application/json\r\n",
@@ -477,6 +480,12 @@ void HttpServer::pushSystemData() {
j["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态
j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态
// 电池充电等级和漏水状态
j["dyn_charge_level"] = Json::Value(m_systemData->dyn_charge_level); //01H:1级(不限)02H:2级(限功率)03H:3级(关闭)
j["water_leak_status_from_insbat"] = Json::Value(m_systemData->water_leak_status_from_insbat ); // 00 正常,01 异常漏水
j["water_leak_status_from_dynbat"] = Json::Value((m_systemData->water_leak_status_from_dynbat) ); // 00 正常,01 异常漏水
j["dcdc_status_from_insbat"] = Json::Value((m_systemData->dcdc_status_from_insbat ) ); // 00 正常,01 故障
j["ins_soc_threshold1"] = Json::Value(m_systemData->ins_soc_threshold1); // 仪表电池1 SOC门限
j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限
j["ins_soc_threshold3"] = Json::Value(m_systemData->ins_soc_threshold3); // 仪表电池3 SOC门限
@@ -488,6 +497,11 @@ void HttpServer::pushSystemData() {
j["dyn_power_limit1"] = Json::Value(m_systemData->dyn_power_limit1); // 动力电池1功率限制值
j["dyn_power_limit2"] = Json::Value(m_systemData->dyn_power_limit2); // 动力电池2功率限制值
// uint8_t ins_charge_status; // 仪表电池充放电状态:00H-无效,10H-充电,20H-放电
// uint8_t dyn_charge_status; // 动力电池充放电状态:00H-无效,10H-充电,20H-放电
j["ins_charge_status"] = Json::Value(m_systemData->ins_charge_status);
j["dyn_charge_status"] = Json::Value(m_systemData->dyn_charge_status);
//设备在线状态
j["device_online"]["device_online_flag1"] = Json::Value(m_systemData->device_online_flag1);
j["device_online"]["device_online_flag2"] = Json::Value(m_systemData->device_online_flag2);
@@ -517,6 +531,12 @@ void HttpServer::pushSystemData() {
j["comm_state"]["dis_lv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.isTimeout);
j["comm_state"]["dis_lv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.lastUpdateTime);
// 低压配电状态
j["comm_state"]["dis_lv_c1"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.isTimeout);
j["comm_state"]["dis_lv_c1"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.lastUpdateTime);
j["comm_state"]["dis_lv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.isTimeout);
j["comm_state"]["dis_lv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.lastUpdateTime);
//复合管控器心跳计算器
j["heartbeat"] = Json::Value(m_systemData->heartbeat);
//=============================================================================================================
+2 -2
View File
@@ -343,7 +343,7 @@ const std::string LOG_PAGE_HTML = R"(
每页显示:
<select id="pageSize">
<option value="100">100</option>
<option value="200">200</option>
<option value="200" selected>200</option>
<option value="500">500</option>
<option value="1000">1000</option>
</select>
@@ -368,7 +368,7 @@ let autoScroll = true;
let logContent = document.getElementById('logContent');
let currentPage = 1;
let totalPages = 1;
let pageSize = 100;
let pageSize = 200;
let allLogs = [];
let filteredLogs = [];
let searchTimer = null;
+10 -4
View File
@@ -43,7 +43,7 @@ typedef struct ccuState
uint8_t flame_detector1; // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障
uint8_t flame_detector2; // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障
uint16_t h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL(爆炸下限)
uint16_t h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL
uint16_t h2_concentration2; // 舱室H2浓度2,单位:0.01% LEL
uint16_t h2_concentration3; // 舱室H2浓度3,单位:0.01% LEL
uint16_t o2_concentration1; // 舱室O2浓度1,单位:0.01% LEL
@@ -118,7 +118,11 @@ typedef struct ccuState
uint32_t device_online_flag1; // 设备在线状态标志1,byte0:低压配电板在线标志位 byte1:复合管控主机在线标志位 byte2:复合管控备机在线标志位
uint32_t device_online_flag2; // 设备在线状态标志2,byte0:仪表锂电在线标志位 byte1:动力锂电在线标志位 byte2:燃电锂电在线标志位 byte3:高压配电板在线标志位
uint32_t reserved4; // 保留字段,协议预留
uint8_t dyn_charge_level; // 动力电池充电状态:01H-1级(不限), 02H-2级(限功率), 03H-3级(关闭)
uint8_t dyn_water_leak_status; // 动力漏水状态:0XH-正常, 1XH-异常漏水
uint8_t ins_water_leak_dcdc_status; // 仪表漏水状态与DCDC状态:低4位-漏水状态(0XH正常,1XH异常),高4位-DCDC状态(X0H正常,X1H故障)
uint8_t reserved4;
// uint32_t reserved4; // 保留字段,协议预留
uint32_t heartbeat; // 主机心跳计数器或标志值
} ccuState;
@@ -139,7 +143,7 @@ typedef struct {
unsigned char fcmode;
unsigned char fcuCmd;
unsigned char fcuPowerEfficiency;
unsigned char insChargeEnable; //0 不允许充电 1 允许充电
unsigned char insChargeEnable;
unsigned char insBatCmd;
unsigned char powerBatCmd;
unsigned short powerBatEfficiency;
@@ -193,7 +197,7 @@ typedef struct disHighVolBusState
// 0x00: 正常状态
// Bit0: 通讯故障报警
// Bit1: 工作状态 1:启动,0:关闭
// Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0正常
// Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0 正常
// Bit3: 冷却泵2故障 冷却泵2故障 :1故障,0 正常
// Bit4: 冷却水泄露
// Bit5:冷却泵1运行状态 :1 运行,0 停止
@@ -824,3 +828,5 @@ namespace FaultEnable {
}
#endif
+1
View File
@@ -627,6 +627,7 @@ bool SQLite::insertData(const ccuColCmd cmd) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
+25 -8
View File
@@ -143,8 +143,18 @@ public:
uint32_t device_online_flag1; // 设备在线状态标志1
uint32_t device_online_flag2; // 设备在线状态标志2
//其他锂电池状态
uint8_t dyn_charge_level; // 动力电池充电状态:01H-1级(不限), 02H-2级(限功率), 03H-3级(关闭)
uint8_t dyn_water_leak_status; // 动力漏水状态:0XH-正常, 1XH-异常漏水
uint8_t ins_water_leak_dcdc_status; // 仪表漏水状态与DCDC状态:低4位-漏水状态(0XH正常,1XH异常),高4位-DCDC状态(X0H正常,X1H故障)
uint8_t reserved4;
unsigned char water_leak_status_from_insbat; // 仪表漏水状态
unsigned char water_leak_status_from_dynbat; // 动力漏水状态
unsigned char dcdc_status_from_insbat; // 仪表DCDC状态
//保留字段
uint32_t reserved4; // 保留字段
// uint32_t reserved4; // 保留字段
uint32_t heartbeat; // 主机心跳计数器
//锂电池故障字段
@@ -570,14 +580,21 @@ public:
device_online_status.composite_online_state = (data.device_online_flag2 >> 8) & 0xFF; // byte1:复合管控主机在线标志位
device_online_status.composite_backup_online_state = (data.device_online_flag2 >> 16) & 0xFF; // byte2:复合管控备机在线标志位
// std::cout << "device_online_status.ins_online_state: " << (int)device_online_status.ins_online_state << std::endl;
// std::cout << "device_online_status.dyn_online_state: " << (int)device_online_status.dyn_online_state << std::endl;
// std::cout << "device_online_status.fuel_online_state: " << (int)device_online_status.fuel_online_state << std::endl;
// std::cout << "device_online_status.high_voltage_online_state: " << (int)device_online_status.high_voltage_online_state << std::endl;
// std::cout << "device_online_status.low_voltage_online_state: " << (int)device_online_status.low_voltage_online_state << std::endl;
// std::cout << "device_online_status.composite_online_state: " << (int)device_online_status.composite_online_state << std::endl;
// std::cout << "device_online_status.composite_backup_online_state: " << (int)device_online_status.composite_backup_online_state << std::endl;
// 更新锂电池其他状态
dyn_water_leak_status = data.dyn_water_leak_status;
ins_water_leak_dcdc_status = data.ins_water_leak_dcdc_status;
dyn_charge_level = data.dyn_charge_level; //01H:1级(不限)02H:2级(限功率)03H:3级(关闭)
water_leak_status_from_insbat = ( data.ins_water_leak_dcdc_status >> 4) & 0x0F; // 00 正常,01 异常漏水
water_leak_status_from_dynbat = (data.dyn_water_leak_status >> 4) & 0x0F; // 00 正常,01 异常漏水
dcdc_status_from_insbat = (data.ins_water_leak_dcdc_status) & 0x0F; // 00 正常,01 故障
// std::cout << "dyn_charge_level: " << std::hex << static_cast<int>(dyn_charge_level) << std::endl;
// std::cout << "ins_water_leak_dcdc_status: " << std::hex << static_cast<int>(ins_water_leak_dcdc_status) << std::endl;
// std::cout << "dcdc_status_from_insbat: " << std::hex << static_cast<int>(dcdc_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_insbat: " << std::hex << static_cast<int>(water_leak_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_dynbat: " << std::hex << static_cast<int>(water_leak_status_from_dynbat) << std::endl;
//心跳计数器
heartbeat = data.heartbeat;
+30 -34
View File
@@ -12,47 +12,43 @@ def create_sample_dbc():
"""创建一个示例DBC文件"""
db = Database()
# 添加消息
# 主机->复合管控 (ID:0x11000101)
msg1 = Message(
name="EngineData",
frame_id=0x100,
length=8,
signals=[
Signal(name="RPM", start=0, length=16, is_signed=False),
Signal(name="Speed", start=16, length=16, is_signed=False),
Signal(name="Temp", start=32, length=8, is_signed=True)
]
)
msg2 = Message(
name="VehicleStatus",
frame_id=0x200,
length=4,
signals=[
Signal(name="DoorStatus", start=0, length=4, is_multiplexer=False),
Signal(name="LightStatus", start=4, length=4, is_multiplexer=False)
]
)
# 添加断路器状态消息
msg3 = Message(
name="CircuitBreakerStatus",
frame_id=0x1401A501,
name="HostToCompositeControl",
frame_id=0x11000101,
is_extended_frame=True,
length=8,
signals=[
Signal(name="FuelCellBreaker", start=0, length=8, is_signed=False),
Signal(name="BatteryBreaker", start=8, length=8, is_signed=False),
Signal(name="MotorBreaker", start=16, length=8, is_signed=False),
Signal(name="BatteryMeterBreaker", start=24, length=8, is_signed=False),
Signal(name="DCDC5Breaker", start=32, length=8, is_signed=False),
Signal(name="BowDistBoxBreaker", start=40, length=8, is_signed=False),
Signal(name="SternFT45Breaker", start=48, length=8, is_signed=False),
Signal(name="SternRudder1Breaker", start=56, length=8, is_signed=False)
Signal(name="FuelCellModeSet", start=0, length=8, is_signed=False),
Signal(name="FuelCellCommand", start=8, length=8, is_signed=False),
Signal(name="MeterBatteryChargeFlag", start=16, length=8, is_signed=False),
Signal(name="MeterBatteryStartStop", start=24, length=8, is_signed=False),
Signal(name="PowerBatteryStartStop", start=32, length=8, is_signed=False),
Signal(name="HostHeartbeat", start=40, length=8, is_signed=False),
Signal(name="HostStatus", start=48, length=8, is_signed=False),
Signal(name="Reserved1", start=56, length=8, is_signed=False)
]
)
db.messages.extend([msg1, msg2, msg3])
# 复合管控->主机 (ID:0x11000201)
msg2 = Message(
name="CompositeControlToHost",
frame_id=0x11000201,
is_extended_frame=True,
length=8,
signals=[
Signal(name="FuelCellSystemMode", start=0, length=8, is_signed=False),
Signal(name="FuelCellStatus", start=8, length=8, is_signed=False),
Signal(name="FuelCellFaultLevel", start=16, length=8, is_signed=False),
Signal(name="MeterBatteryEmergency", start=24, length=8, is_signed=False),
Signal(name="PowerBatteryEmergency", start=32, length=8, is_signed=False),
Signal(name="MeterBatteryTotalEnergy", start=40, length=8, is_signed=False),
Signal(name="PowerBatteryTotalEnergy", start=48, length=8, is_signed=False),
Signal(name="Reserved2", start=56, length=8, is_signed=False)
]
)
db.messages.extend([msg1, msg2])
return db
def save_dbc_file(db, filename):