0702调试

This commit is contained in:
zjk
2025-07-02 16:20:36 +08:00
parent 16d4c25c77
commit ba8cd0383a
13 changed files with 1761 additions and 156 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
//SERVERHOST = 192.168.0.100
//SERVERHOST = 192.168.0.223
//SERVERPORT = 9000
ProcessConfig = pPowerManger
{
+139
View File
@@ -0,0 +1,139 @@
#ifndef CCUUDPMSG__H
#define CCUUDPMSG__H
#include "pmSysvariable.h"
#define CCU_UDPMSG_START1 0x20
#define CCU_UDPMSG_START2 0x20
#define DIS_MSG_HEAD1 0x40
#define DIS_MSG_HEAD2 0x40
#define CCU_CMD_ID 0x0040
#define CCU_SET_PARM_ID 0x0041
#define CCU_STATE_FB_ID 0x0051
#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
#define DIS_LVBUS_FB_ID 0x0008
#define DIS_HVBUS_CMD_ID 0x0001
#define DIS_HVBUSA_CMD_ID 0x0002
#define DIS_HVBUSB_CMD_ID 0x0003
#define DIS_LVBUS_CMD_ID 0x0004
#define DIS_BREAKER_ON 0x55
#define DIS_BREAKER_OFF 0xAA
#define DIS_FAULTOFF 0x5A
typedef unsigned int Checksum;
typedef unsigned char cChecksum;
#pragma pack (1)
typedef struct {
unsigned char start1;
unsigned char start2;
unsigned short id;
unsigned short length;
} m_header;
typedef struct {
unsigned short year;
unsigned char month;
unsigned char day;
unsigned char hour;
unsigned char minute;
unsigned char second;
unsigned char milliseconds; //每10毫秒
} m_date;
// 复合管控器操作指令
typedef struct {
m_header header;
m_date date;
ccuColCmd cmd;
Checksum checkCode;
} msg_CcuColCmdMsg;
// 复合管控器参数设定指令
typedef struct {
m_header header;
ccuSetParmCmd cmd;
Checksum checkCode;
} msg_CcuSetParmMsg;
// 配电指令
typedef struct
{
m_header header;
disHighVolBusCmd data;
cChecksum checkCode;
}msg_disHVBCmd;
typedef struct
{
m_header header;
disHighAVolBusCmd data;
cChecksum checkCode;
}msg_disHVBACmd;
typedef struct msg_disHVBBCmd
{
m_header header;
disHighBVolBusCmd data;
cChecksum checkCode;
}msg_disLVMBCmd;
typedef struct
{
m_header header;
disLowBusCmd data;
cChecksum checkCode;
}msg_disLVBCmd;
// 复合管控参数设定反馈指令
typedef struct {
m_header header;
unsigned char flag;
unsigned char failureCode;
Checksum checkCode;
} msg_CcuSetParmFbMsg;
// 复合管控状态反馈
typedef struct {
m_header header;
ccuState data;
Checksum checkCode;
} msg_CcuStateFbMsg;
//高压母线配电反馈
typedef struct {
m_header header;
disHighVolBusState data;
cChecksum checkCode;
} msg_disHighVolBusFbMsg;
// 高压母线A配电反馈
typedef struct {
m_header header;
disHighAVolBusState data;
cChecksum checkCode;
} msg_disHighAVolBusFbMsg;
// 仪表母线配电反馈
typedef struct {
m_header header;
disLowMainBusState data;
cChecksum checkCode;
} msg_disLowMainBusFbMsg;
//仪表汇流排配电反馈
typedef struct {
m_header header;
disLowBusState data;
cChecksum checkCode;
} msg_disLowBusFbMsg;
#pragma pack ()
#endif
+947
View File
@@ -0,0 +1,947 @@
#ifndef PMSYSVARIABLE_H
#define PMSYSVARIABLE_H
//宏定义
#include<string>
#include <map>
#include <unordered_set>
#define BREAK_OFF 0xAA
#define BREAK_ON 0x55
#define BREAK_FALSE 0x5A
//消息结构体变量定义
#pragma pack (1)
typedef struct ccuState
{
uint8_t fc_mode; // 燃料电池系统运行模式:00H-无效, 01H-调试, 02H-自动, 03H-补给
uint8_t fc_status; // 燃料电池状态:00H-无效, 01H-初始化, ..., 0DH-维护完成(详见协议)
uint8_t fc_fault_level; // 燃料电池故障等级:00H-无故障, 10H-一级, 20H-二级, 30H-三级, 40H-四级
uint16_t output_power_limit; // 系统输出功率限制值,单位:W,范围:0~30000W
uint16_t total_generation_time; // 系统累计发电时间,单位:0.1小时,最大值6553.5小时
uint16_t total_generation_power; // 系统累计发电总功率,单位:W
uint16_t fault_level_1; // 一级故障位,按位表示不同的故障项
uint16_t fault_level_2; // 二级故障位
uint16_t fault_level_3; // 三级故障位
uint16_t fault_level_4; // 四级故障位
uint8_t hydrogen_capacity; // 储氢罐剩余容量百分比,单位:%,范围:0~100
uint8_t liquid_oxygen_capacity; // 液氧罐剩余容量百分比,单位:%,范围:0~100
uint16_t palladium_temp; // 钯膜最高温度,单位:℃
uint16_t main_pipe_pressure; // 主水路压力,单位:0.01kPa
uint16_t aux_pipe_pressure; // 辅水路压力,单位:0.01kPa
uint16_t cabin_pressure1; // 舱室1压力,单位:0.01kPa
uint16_t cabin_pressure2; // 舱室2压力,单位:0.01kPa
uint16_t cabin_temp1; // 舱室1温度,单位:0.01℃
uint16_t cabin_temp2; // 舱室2温度,单位:0.01℃
uint16_t cabin_humidity1; // 舱室1湿度,单位:0.01%RH
uint16_t cabin_humidity2; // 舱室2湿度,单位:0.01%RH
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_concentration2; // 舱室H2浓度2,单位:0.01% LEL
uint16_t h2_concentration3; // 舱室H2浓度3,单位:0.01% LEL
uint16_t o2_concentration1; // 舱室O2浓度1,单位:0.01% LEL
uint16_t o2_concentration2; // 舱室O2浓度2,单位:0.01% LEL
uint16_t ch3oh_concentration1; // 舱室甲醇气体浓度1,单位:0.01% LEL
uint16_t ch3oh_concentration2; // 舱室甲醇气体浓度2,单位:0.01% LEL
uint16_t reserved1[10]; // 保留字段,地址范围35~52,共18个uint16_t,协议预留
uint16_t cabin_ox_concentration; // 仪表舱内氧气浓度 [%]
uint16_t cabin_temperature; // 仪表舱内温度 [°C]
uint16_t cabin_humidity; // 仪表舱内湿度 [%RH]
uint16_t cabin_pressure; // 仪表舱内大气压 [kPa]
uint16_t power_cabin_ox_concentration; // 动力舱内氧气浓度 [%]
uint16_t power_cabin_temperature; // 动力舱内温度 [°C]
uint16_t power_cabin_humidity; // 动力舱内湿度 [%RH]
uint16_t power_cabin_pressure; // 动力舱内大气压 [kPa]
uint8_t reserved2[1]; // 保留字段,地址范围54~55,共2个uint8_t,协议预留
uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志字数组,共6字节,按位表示各类报警
uint8_t ins_alarm_flag[6]; // 仪表锂电池报警标志字数组,共6字节,按位表示各类报警
uint8_t ins_relay_status1; // 仪表电池继电器状态,高4位表示正极继电器,低4位表示充电继电器
uint8_t ins_relay_status2; // 仪表电池预充继电器和负极继电器状态
uint8_t dyn_relay_status1; // 动力电池正极与充电继电器状态
uint8_t dyn_relay_status2; // 动力电池预充与负极继电器状态
uint16_t ins_max_discharge_power; // 仪表电池最大允许放电功率,单位:kW,精度0.05kW
uint16_t dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:kW,精度0.05kW
uint8_t ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100
uint8_t dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100
uint16_t ins_total_energy; // 仪表电池总能量,单位:kWh
uint16_t dyn_total_energy; // 动力电池总能量,单位:kWh
uint16_t ins_power_input; // 仪表电池输入功率,单位:kW
uint16_t dyn_power_input; // 动力电池输入功率,单位:kW
uint8_t ins_charge_status; // 仪表电池充放电状态:00H-无效,10H-充电,20H-放电
uint8_t dyn_charge_status; // 动力电池充放电状态:00H-无效,10H-充电,20H-放电
uint16_t ins_voltage_link; // 仪表电池LINK端电压,单位:0.01V
uint16_t ins_voltage_pack; // 仪表电池PACK端电压,单位:0.01V
uint16_t ins_current; // 仪表电池电流,单位:0.01A(正值放电)
uint16_t ins_resistance_pos; // 仪表电池正极绝缘电阻,单位:kΩ
uint16_t ins_resistance_neg; // 仪表电池负极绝缘电阻,单位:kΩ
uint16_t dyn_voltage_link; // 动力电池LINK端电压,单位:0.01V
uint16_t dyn_voltage_pack; // 动力电池PACK端电压,单位:0.01V
uint16_t dyn_current; // 动力电池电流,单位:0.01A(正值放电)
uint16_t dyn_resistance_pos; // 动力电池正极绝缘电阻,单位:kΩ
uint16_t dyn_resistance_neg; // 动力电池负极绝缘电阻,单位:kΩ
uint8_t ins_emergency_status; // 仪表电池紧急状态字,按位表示异常或告警状态
uint8_t dyn_emergency_status; // 动力电池紧急状态字,按位表示异常或告警状态
uint8_t reserved3[2]; // 保留字节,协议预留
uint8_t ins_soc_threshold1; // 仪表电池1 SOC门限,范围:0~100
uint8_t ins_soc_threshold2; // 仪表电池2 SOC门限,范围:0~100
uint8_t ins_soc_threshold3; // 仪表电池3 SOC门限,范围:0~100
uint8_t dyn_soc_threshold1; // 动力电池1 SOC门限,范围:0~100
uint8_t dyn_soc_threshold2; // 动力电池2 SOC门限,范围:0~100
uint8_t dyn_soc_threshold3; // 动力电池3 SOC门限,范围:0~100
uint8_t ins_power_limit1; // 仪表电池1功率限制值,单位:%
uint8_t ins_power_limit2; // 仪表电池2功率限制值,单位:%
uint8_t dyn_power_limit1; // 动力电池1功率限制值,单位:%
uint8_t dyn_power_limit2; // 动力电池2功率限制值,单位:%
uint32_t device_online_flag1; // 设备在线状态标志1,byte0:低压配电板在线标志位 byte1:复合管控主机在线标志位 byte2:复合管控备机在线标志位
uint32_t device_online_flag2; // 设备在线状态标志2,byte0:仪表锂电在线标志位 byte1:动力锂电在线标志位 byte2:燃电锂电在线标志位 byte3:高压配电板在线标志位
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;
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 fcmode;
unsigned char fcuCmd;
unsigned char fcuPowerEfficiency;
unsigned char insChargeEnable;
unsigned char insBatCmd;
unsigned char powerBatCmd;
unsigned short powerBatEfficiency;
unsigned char heartbeat;
unsigned char masterState;
unsigned int paceholder1;
unsigned int paceholder2;
}ccuColCmd;
typedef struct disHighVolBusState
{
//断路器状态
// 5: 燃料电池断路器
unsigned char fuelCellCircuitBreaker;
// 6: 动力锂电池断路器
unsigned char powerLithiumBatteryCircuitBreaker;
// 7: 推进电机断路器
unsigned char propulsionMotorCircuitBreaker;
// 8: 锂电池组仪表断路器
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
// 9: DC/DC5模块断路器
unsigned char dcDc5ModuleCircuitBreaker;
// 10: 艏部高压配电箱断路器
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
// 11: 艉部FT装置4/5断路器
unsigned char sternFTDevice45CircuitBreaker;
// 14: FB预留断路器
unsigned char fbReservedCircuitBreaker;
// 12: 艉舵开关1断路器
unsigned char sternRudderSwitch1CircuitBreaker;
// 13: 艉舵开关2断路器
unsigned char sternRudderSwitch2CircuitBreaker;
// 15: TYZ预留断路器
unsigned char tyzReservedCircuitBreaker;
// 16: 预留断路器
unsigned char reservedCircuitBreaker;
// unsigned char busInsulationLow;
// unsigned char busAInsulationHigh;
// 17: DC/DC5故障字低
// 0x00: 正常状态
// Bit0: DC/DC模块过温关机
// Bit1: 输出过流
// Bit2: 输出过压
// Bit3: 输出欠压
// Bit4: 输入过压
// Bit5: 输入欠压
// Bit6: 输出短路保护
// Bit7: 内部故障
// 18: DC/DC5故障字高
unsigned char dcDcFaultWord1;
// 0x00: 正常状态
// Bit0: 通讯故障报警
// Bit1: 工作状态 1:启动,0:关闭
// Bit2: 冷却泵1故障 冷却泵1故障 : 1故障, 0 正常
// Bit3: 冷却泵2故障 冷却泵2故障 :1故障,0 正常
// Bit4: 冷却水泄露
// Bit5:冷却泵1运行状态 :1 运行,0 停止
// Bit6:冷却泵2运行状态 :1 运行,0 停止
unsigned char dcDcFaultWord2;
// 19: 动力母排绝缘状态(0x55 正常,0xAA 绝缘低)
unsigned char powerBusInsulationStatus;
// 20: A汇流排绝缘状态(0x55 正常,0xAA 绝缘低)
unsigned char aBusInsulationStatus;
// 21: 仪表电源状态 (0x55 正常,0xAA 故障)
unsigned char meterPowerLossSignal;
// 22: 应急电源状态 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerLossSignal;
// 22: dc/dc温度
unsigned char dcDcTemperature;
// 23: 动力汇流排电压
unsigned short powerBusVoltage;
// 24: DC/DC5模块电流
unsigned short dcDc5ModuleCurrent;
// 25: 动力汇流排电流
unsigned short powerBusCurrent;
// 26: A汇流排电压
unsigned short busbarAVoltage;
// 27: 推进电机控制箱电流
unsigned short propulsionMotorControlBoxCurrent;
// 28: A汇流排电流
unsigned short busbarACurrent;
// 29: 锂电池组(仪表)电流
unsigned short lithiumBatteryGroupMeterCurrent;
// 30: 艏部高压配电箱电流
unsigned short bowHighVoltageDistributionBoxCurrent;
// 31: 艉部FT装置4/5电流
unsigned short sternFTDevice45Current;
// 32: TYZ预留开关电流
unsigned short tyzReservedSwitchCurrent;
// 33: 艉舵开关1电流
unsigned short sternRudderSwitch1Current;
// 34: 预留电流
unsigned short reservedCurrent1; // 改为 reservedCurrent1 以避免重名
// 35: 艉舵开关2电流
unsigned short sternRudderSwitch2Current;
// 36: 预留电流2
unsigned short reservedCurrent2; // 改为 reservedCurrent2 以避免重名
// 37: FB预留电流
unsigned short fbReservedSwitchCurrent;
// 38: 预留电流3
unsigned short reservedCurrent3; // 改为 reservedCurrent3 以避免重名
// 39: 冷却水压力
unsigned short coolWaterPressure;
}disHighVolBusState;
typedef struct disHighAVolBusState
{
//5. 艏部FT装置1/2/3断路器
unsigned char bowFTDevice123CircuitBreaker;
//6. 启闭机构断路器
unsigned char actuatorCircuitBreaker;
//7. 桅杆舵机控制箱断路器
unsigned char mastSteeringGearControlBoxCircuitBreaker;
//8. XCZ断路器
unsigned char xczCircuitBreaker;
//9. 艏舵控制箱断路器
unsigned char bowRudderControlBoxCircuitBreaker;
//10. 敞水盖启动电缸断路器
unsigned char openWaterCoverStartCylinderCircuitBreaker;
//11. 仪表电源失电信号 (0x55 正常,0xAA 故障)
unsigned char instrumentPowerFailureSignal;
//12. 应急电源失电信号 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerFailureSignal;
//13. 浸水报警
// unsigned char busbarBInsulationStatus;
unsigned char waterIngressionAlarm;
//14. 汇流排B电压
unsigned short busbarBVoltage;
//15. 汇流排B电流
unsigned short busbarBCurrent;
//16. 艏部FT装置1/2/3电流
unsigned short bowFTDevice123Current;
//17. 启闭机构电流
unsigned short actuatorCurrent;
//18. 桅杆舵机控制箱电流
unsigned short mastSteeringGearControlBoxCurrent;
//19. XCZ电流
unsigned short xczCurrent;
//20. 艏舵控制箱电流
unsigned short bowRudderControlBoxCurrent;
//21. 敞水盖启动电缸电流
unsigned short openWaterCoverStartCylinderCurrent;
}disHighAVolBusState;
typedef struct disHighBVolBusState
{
//5. 锂电池组(仪表)断路器
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
//6. 艏部低压配电箱断路器
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
//7. UNIT4仪表DC48V断路器
unsigned char unit4InstrumentDC48VCircuitBreaker;
//8. DC-C1直流配电板断路器
unsigned char dcC1DCDistributionPanelCircuitBreaker;
//9. 预留断路器1
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
//10. 预留断路器2
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
//11. 应急锂电池组2断路器
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
//12. 仪表电源失电信号 (0x55 正常,0xAA 故障)
unsigned char instrumentPowerFailureSignal;
//13. 应急电源失电信号 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerFailureSignal;
//14. 仪表汇流排绝缘低 (0x55 正常,0xAA 绝缘低)
unsigned char instrumentBusbarInsulationLow;
//15. 仪表母排电压
unsigned short instrumentBusbarVoltage;
//16. 艏部低压配电箱电流
unsigned short bowLowVoltageDistributionBoxCurrent;
//17. DC-C1(直流配电板1)仪表DC48V电流
unsigned short dcC1InstrumentDC48VCurrent;
//18. 预留电流
unsigned short reservedCurrent1; // 为了区分,添加了数字后缀
//19. 应急锂电池组2电流
unsigned short emergencyLithiumBatteryGroup2Current;
//20. 锂电池组(仪表)电流
unsigned short lithiumBatteryGroupInstrumentCurrent;
//21. UNIT4仪表DC48V电流
unsigned short unit4InstrumentDC48VCurrent;
//22. Ushort 预留电流
unsigned short reservedCurrent2; // 为了区分,添加了数字后缀
//23. 应急2汇流排电压
unsigned short emergency2BusbarVoltage;
//24. 复合能源管控系统应急DC48V电流
unsigned short compositeEnergyManagementSystemEmergencyDC48VCurrent;
//25. 燃料电池安全系统应急DC48V电流
unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
//26. PLC控制电源电流
unsigned short plcControlPowerCurrent;
} disLowMainBusState;
typedef struct disLowBusState
{
//5. UNIT1断路器
unsigned char unit1CircuitBreaker;
//6. UNIT2断路器
unsigned char unit2CircuitBreaker;
//7. UNIT3断路器
unsigned char unit3CircuitBreaker;
//8. UNIT5断路器
unsigned char unit5CircuitBreaker;
//9. 艏部PZ装置断路器
unsigned char bowPZDeviceCircuitBreaker;
//10. 预留断路器1
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
//11. 预留断路器2
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
//12. 应急锂电池组1断路器
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
//13. 仪表电源失电信号 (0x55 正常,0xAA 故障)
unsigned char powerFailureSignal;
//14. 应急电源失电信号 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerFailureSignal;
//15. 浸水报警 (0x55 正常,0xAA 故障)
unsigned char waterIngressionAlarm;
//16. 仪表母排电压
unsigned short instrumentBusbarVoltage;
//17. 仪表母排电流
unsigned short instrumentBusbarCurrent;
//18. UNIT1电流
unsigned short unit1Current;
//19. UNIT2电流
unsigned short unit2Current;
//20. UNIT3电流
unsigned short unit3Current;
//21. UNIT5电流
unsigned short unit5Current;
//22. 艏部PZ装置电流
unsigned short bowPZDeviceCurrent;
//23. 应急锂电池组1电流
unsigned short emergencyLithiumBatteryGroup1Current;
//24. 应急1汇流排电压
unsigned short emergency1BusbarVoltage;
}disLowBusState;
typedef struct disHighVolBusCmd
{
// 5: 燃料电池断路器
unsigned char fuelCellCircuitBreaker;
// 6: 动力锂电池断路器
unsigned char powerLithiumBatteryCircuitBreaker;
// 7: 推进电机断路器
unsigned char propulsionMotorCircuitBreaker;
// 8: 锂电池组仪表断路器
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
// 9: DC/DC5模块断路器
unsigned char dcDc5ModuleCircuitBreaker;
// 10: 艏部高压配电箱断路器
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
// 11: 艉部FT装置4/5断路器
unsigned char sternFTDevice45CircuitBreaker;
// // 12: 艉舵开关1断路器
// unsigned char sternRudderSwitch1CircuitBreaker;
// // 13: 艉舵开关2断路器
// unsigned char sternRudderSwitch2CircuitBreaker;
// // 14: FB预留断路器
// unsigned char fbReservedCircuitBreaker;
// 12: FB预留断路器
unsigned char fbReservedCircuitBreaker;
// 13: 艉舵开关1断路器
unsigned char sternRudderSwitch1CircuitBreaker;
// 14: 艉舵开关2断路器
unsigned char sternRudderSwitch2CircuitBreaker;
// 15: TYZ预留断路器
unsigned char tyzReservedCircuitBreaker;
// 16: 预留断路器
unsigned char reservedCircuitBreaker;
// 17: DC/DC5模块启动
unsigned char dcdc5Module;
// 18: 冷却系统启动
unsigned char coolingSystem;
// unsigned char inputWater;
// unsigned char outputWater;
}disHighVolBusCmd;
typedef struct disHighAVolBusCmd
{
//5. 艏部FT装置1/2/3断路器
unsigned char bowFTDevice123CircuitBreaker;
//6. 启闭机构断路器
unsigned char actuatorCircuitBreaker;
//7. 桅杆舵机控制箱断路器
unsigned char mastSteeringGearControlBoxCircuitBreaker;
//8. XCZ断路器
unsigned char xczCircuitBreaker;
//9. 艏舵控制箱断路器
unsigned char bowRudderControlBoxCircuitBreaker;
//10. 敞水盖启动电缸断路器
unsigned char openWaterCoverStartCylinderCircuitBreaker;
}disHighAVolBusCmd;
typedef struct disHighBVolBusCmd
{
//5. 锂电池组(仪表)断路器
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
//6. 艏部低压配电箱断路器
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
//7. UNIT4仪表DC48V断路器
unsigned char unit4InstrumentDC48VCircuitBreaker;
//8. DC-C1直流配电板断路器
unsigned char dcC1DCDistributionPanelCircuitBreaker;
//9. 预留断路器1
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
//10. 预留断路器2
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
//11. 应急锂电池组2断路器
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
}disLowMainBusCmd;
typedef struct disLowBusCmd
{
unsigned char unit1CircuitBreaker;
unsigned char unit2CircuitBreaker;
unsigned char unit3CircuitBreaker;
unsigned char unit5CircuitBreaker;
unsigned char bowPZDeviceCircuitBreaker;
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
}disLowBusCmd;
#pragma pack (0)
//状态结构体定义
typedef struct pmState
{
ccuState ccustate;
disHighVolBusState bus1State;
disHighAVolBusState bus2State;
disLowMainBusState bus3State;
disLowBusState bus4State;
} PmState;
typedef struct disBus1Breaker
{
unsigned char fuelCellCircuitBreaker : 1;
unsigned char powerLithiumBatteryCircuitBreaker : 1;
unsigned char propulsionMotorCircuitBreaker : 1;
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker : 1;
unsigned char dcDc5ModuleCircuitBreaker : 1;
unsigned char bowHighVoltageDistributionBoxCircuitBreaker : 1;
unsigned char sternFTDevice45CircuitBreaker : 1;
unsigned char sternRudderSwitch1CircuitBreaker : 1;
unsigned char sternRudderSwitch2CircuitBreaker : 1;
unsigned char fbReservedCircuitBreaker : 1;
unsigned char tyzReservedCircuitBreaker : 1;
unsigned char reservedCircuitBreaker : 1;
unsigned char dcdcmodel : 1;
unsigned char coolingSystem : 1;
unsigned short paceholder : 4;
} disBus1Breaker;
typedef struct disBus2Breaker
{
unsigned char bowFTDevice123CircuitBreaker : 1;
unsigned char actuatorCircuitBreaker : 1;
unsigned char mastSteeringGearControlBoxCircuitBreaker : 1;
unsigned char xczCircuitBreaker : 1;
unsigned char bowRudderControlBoxCircuitBreaker : 1;
unsigned char openWaterCoverStartCylinderCircuitBreaker : 1;
unsigned short paceholder : 10;
/* data */
} disBus2Breaker;
typedef struct disBus3Breaker
{
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker : 1;
unsigned char bowLowVoltageDistributionBoxCircuitBreaker : 1;
unsigned char unit4InstrumentDC48VCircuitBreaker : 1;
unsigned char dcC1DCDistributionPanelCircuitBreaker : 1;
unsigned char reservedCircuitBreaker1 : 1;
unsigned char reservedCircuitBreaker2 : 1;
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker : 1;
unsigned short paceholder : 9;
/* data */
} disBus3Breaker;
typedef struct disBus4Breaker
{
unsigned char unit1CircuitBreaker : 1;
unsigned char unit2CircuitBreaker : 1;
unsigned char unit3CircuitBreaker : 1;
unsigned char unit5CircuitBreaker : 1;
unsigned char bowPZDeviceCircuitBreaker : 1;
unsigned char reservedCircuitBreaker1 : 1; // 为了区分,添加了数字后缀
unsigned char reservedCircuitBreaker2 : 1; // 为了区分,添加了数字后缀
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker : 1;
unsigned short paceholder : 8;
/* data */
} disBus4Breaker;
typedef struct disSysBreakerList
{
disBus1Breaker bus1Breaker;
disBus2Breaker bus2Breaker;
disBus3Breaker bus3Breaker;
disBus4Breaker bus4Breaker;
} disSysBreaker;
typedef struct MSControlCmd
{
unsigned int powerCMD;
unsigned int modCMD;
unsigned int workCMD;
}MSControlCmd;
namespace FcuCommand {
enum Type : unsigned char {
SelfCheck = 0x01,
Start = 0x02,
Stop = 0x03,
Reset = 0x04,
EmergencyStop = 0x05,
Supply = 0x06,
WarmUp = 0x07,
Maintenance = 0x08
};
}
enum class FcuState : unsigned char {
//初始化
Init = 0x01,
//待机
Standby = 0x02,
//自检异常
SelfCheckError = 0x03,
//就绪
Ready = 0x04,
//启动
Start = 0x05,
//运行
Running = 0x06,
//停机
Stop = 0x07,
//故障
Fault = 0x08,
//补给
Supply = 0x09,
//预热
WarmUp = 0x0A,
//预热完成
WarmUpComplete = 0x0B,
//维护
Maintenance = 0x0C,
//维护完成
MaintenanceComplete = 0x0D
};
namespace BatteryCommand {
enum Type : unsigned char {
Start = 0x10,
Stop = 0x20,
Hold = 0x00
};
};
namespace PMMode {
enum Type : unsigned char {
Normal = 0,
Test = 1,
Debug = 2
};
};
//工况定义
namespace WorkCondition {
enum Type : unsigned char {
CHANING = 0, // 工况切换中
STANDBY = 1, // 待机工况
SHORE_BASED_READY = 2, // 岸基备航
WATER_BASED_READY = 3, // 水中备航
REMOTE_CONTROL = 4, // 遥控工况
CRUISE_MODE = 5, // 巡航模式
HIGH_SPEED_MODE = 6, // 高速模式
ASCEND_DESCEND = 7, // 上浮下潜
BUOYANCY_ADJUST = 8, // 浮调模式
UNDERWATER_RECON = 9, // 水下侦查
SURFACE_RECON = 10, // 水面侦查
DJ_MODE = 11, // DJ模式
DEBUG_MODE = 12 // 调试模式
};
};
namespace RunMode {
enum Type : unsigned char {
//正常模式
Normal = 0,
//测试模式
Test = 1,
//调试模式
Debug = 2
};
};
namespace TaskType {
enum Type : unsigned char {
THROW_LOAD = 1, // 抛载
FLOAT_UP = 2, // 运动上浮
RECYCLE = 3, // 回收
HOVER = 4, // 悬停
SAT_COMM = 5, // 上浮通信
SAT_CALIBRATE = 6, // 上浮校准
TOUR = 7, // 游曳
SAIL = 8 // 航行
};
inline const std::string toString(Type type) {
static const std::map<Type, std::string> names = {
{THROW_LOAD, "throwLoad"},
{FLOAT_UP, "floatUp"},
{RECYCLE, "recycle"},
{HOVER, "hover"},
{SAT_COMM, "satComm"},
{SAT_CALIBRATE, "satCalibrate"},
{TOUR, "tour"},
{SAIL, "sail"}
};
auto it = names.find(type);
return it != names.end() ? it->second : "unknown";
}
inline Type fromString(const std::string& str) {
static const std::map<std::string, Type> stringToEnum = {
{"throwLoad", THROW_LOAD},
{"floatUp", FLOAT_UP},
{"recycle", RECYCLE},
{"hover", HOVER},
{"satComm", SAT_COMM},
{"satCalibrate", SAT_CALIBRATE},
{"tour", TOUR},
{"sail", SAIL}
};
auto it = stringToEnum.find(str);
return it != stringToEnum.end() ? it->second : static_cast<Type>(0); // 返回0表示无效类型
}
}
namespace EquipmentCommand {
enum Type : unsigned char {
OFF = 0, //断电
ON = 1, //上电
//仪表电上电
METER_ON = 2,
//动力电上电
POWER_ON = 3,
//仪表电断电
METER_OFF = 4,
//动力电断电
POWER_OFF = 5,
};
};
struct MissionState
{
int type;
bool enableBowRudder;
bool enableBuoyancyAdjustment;
};
struct DeviceSwitchCmd
{
int id;
int cmd;
};
namespace DeviceId {
enum Type : unsigned char {
singleBeamSonar1 = 0,
singleBeamSonar2 = 1,
singleBeamSonar3 = 2,
singleBeamSonar4 = 3,
singleBeamSonar5 = 4,
singleBeamSonar6 = 5,
singleBeamSonar7 = 6,
singleBeamSonar8 = 7,
forwardSonar = 8,
bowCover1 = 9,
bowCover2 = 10,
bowCover3 = 11,
bowCover4 = 12,
bowCover5 = 13,
bowCover6 = 14,
bowRudderDeploy = 15,
bowRudderServo1 = 16,
bowRudderServo2 = 17,
depth1 = 18,
depth2 = 19,
depth3 = 20,
overDeep1 = 21,
overDeep2 = 22,
ctd1 = 23,
ctd2 = 24,
soundVeloc = 25,
waterInject = 26,
bowWaterInet1 = 27,
bowWaterInet2 = 28,
bowWaterInet3 = 29,
bowWaterInet4 = 30,
bowWaterInet5 = 31,
bowWaterInet6 = 32,
bowWaterInet7 = 33,
bowWaterInet8 = 34,
sideSonar = 35,
lowFreqSonar = 36,
launchControler = 37,
photoSensor = 38,
electSensor = 39,
commMast = 40,
mastLiftingServo = 41,
USBL = 42,
DVL = 43,
buoyancyAdjust1 = 44,
buoyancyAdjust2 = 45,
buoyancyAdjust3 = 46,
buoyancyAdjust4 = 47,
buoyancyAdjust5 = 48,
sternRudderServo1 = 49,
sternRudderServo2 = 50,
sternRudderServo3 = 51,
sternRudderServo4 = 52,
thruster = 53,
bowThrow = 54,
sternThrow = 55,
buoyage = 56,
ins = 57,
ntp = 58,
inputWaterSensor1 = 59,
inputWaterSensor2 = 60,
inputWaterSensor3 = 61,
};
inline const std::string toString(Type type) {
static const std::map<Type, std::string> names = {
{singleBeamSonar1, "singleBeamSonar1"},
{singleBeamSonar2, "singleBeamSonar2"},
{singleBeamSonar3, "singleBeamSonar3"},
{singleBeamSonar4, "singleBeamSonar4"},
{singleBeamSonar5, "singleBeamSonar5"},
{singleBeamSonar6, "singleBeamSonar6"},
{singleBeamSonar7, "singleBeamSonar7"},
{singleBeamSonar8, "singleBeamSonar8"},
{forwardSonar, "forwardSonar"},
{bowCover1, "bowCover1"},
{bowCover2, "bowCover2"},
{bowCover3, "bowCover3"},
{bowCover4, "bowCover4"},
{bowCover5, "bowCover5"},
{bowCover6, "bowCover6"},
{bowRudderDeploy, "bowRudderDeploy"},
{bowRudderServo1, "bowRudderServo1"},
{bowRudderServo2, "bowRudderServo2"},
{depth1, "depth1"},
{depth2, "depth2"},
{depth3, "depth3"},
{overDeep1, "overDeep1"},
{overDeep2, "overDeep2"},
{ctd1, "ctd1"},
{ctd2, "ctd2"},
{soundVeloc, "soundVeloc"},
{waterInject, "waterInject"},
{bowWaterInet1, "bowWaterInet1"},
{bowWaterInet2, "bowWaterInet2"},
{bowWaterInet3, "bowWaterInet3"},
{bowWaterInet4, "bowWaterInet4"},
{bowWaterInet5, "bowWaterInet5"},
{bowWaterInet6, "bowWaterInet6"},
{bowWaterInet7, "bowWaterInet7"},
{bowWaterInet8, "bowWaterInet8"},
{sideSonar, "sideSonar"},
{lowFreqSonar, "lowFreqSonar"},
{launchControler, "launchControler"},
{photoSensor, "photoSensor"},
{electSensor, "electSensor"},
{commMast, "commMast"},
{mastLiftingServo, "mastLiftingServo"},
{USBL, "USBL"},
{DVL, "DVL"},
{buoyancyAdjust1, "buoyancyAdjust1"},
{buoyancyAdjust2, "buoyancyAdjust2"},
{buoyancyAdjust3, "buoyancyAdjust3"},
{buoyancyAdjust4, "buoyancyAdjust4"},
{buoyancyAdjust5, "buoyancyAdjust5"},
{sternRudderServo1, "sternRudderServo1"},
{sternRudderServo2, "sternRudderServo2"},
{sternRudderServo3, "sternRudderServo3"},
{sternRudderServo4, "sternRudderServo4"},
{thruster, "thruster"},
{bowThrow, "bowThrow"},
{sternThrow, "sternThrow"},
{buoyage, "buoyage"},
{ins, "ins"},
{ntp, "ntp"},
{inputWaterSensor1, "inputWaterSensor1"},
{inputWaterSensor2, "inputWaterSensor2"},
{inputWaterSensor3, "inputWaterSensor3"}
};
auto it = names.find(type);
return it != names.end() ? it->second : "unknown";
}
}
// 设备类id存储
static const std::unordered_set<int> underWterDevices = {
DeviceId::singleBeamSonar1,
DeviceId::singleBeamSonar2,
DeviceId::singleBeamSonar3,
DeviceId::singleBeamSonar4,
DeviceId::singleBeamSonar5,
DeviceId::singleBeamSonar6,
DeviceId::singleBeamSonar7,
DeviceId::singleBeamSonar8,
DeviceId::forwardSonar,
DeviceId::USBL,
DeviceId::DVL,
DeviceId::lowFreqSonar
};
static const std::unordered_set<int> noPowerDevices = {
DeviceId::depth1,
DeviceId::depth2,
DeviceId::depth3,
DeviceId::overDeep1,
DeviceId::overDeep2,
DeviceId::ctd1,
DeviceId::ctd2,
DeviceId::soundVeloc,
DeviceId::waterInject,
DeviceId::launchControler,
DeviceId::photoSensor,
DeviceId::electSensor,
DeviceId::commMast,
DeviceId::ntp,
DeviceId::bowThrow,
DeviceId::sternThrow,
DeviceId::ins,
DeviceId::inputWaterSensor1,
DeviceId::inputWaterSensor2,
DeviceId::inputWaterSensor3
};
namespace FaultEnable {
enum Type : bool {
BasicNavigationFault_1 = false, // 使能故障
BasicNavigationFault_2 = false,
BasicNavigationFault_3 = false,
BasicNavigationFault_4 = false,
BasicNavigationFault_5 = false,
BasicNavigationFault_6 = false,
BasicNavigationFault_7 = false,
BasicNavigationFault_8 = false,
BasicNavigationFault_9 = false,
BasicNavigationFault_10 = false,
ExtendedNavigationFault_1 = false, // 使能故障
ExtendedNavigationFault_2 = false,
ExtendedNavigationFault_3 = false,
ExtendedNavigationFault_4 = false,
ObstacleAvoidanceFault_1 = false, // 使能故障
ObstacleAvoidanceFault_2 = false,
ObstacleAvoidanceFault_3 = false,
BuoyancyControlFault_1 = false, // 使能故障
BuoyancyControlFault_2 = false,
BuoyancyControlFault_3 = false,
BuoyancyControlFault_4 = false,
CommunicationSystemFault_1 = false, // 使能故障
CommunicationSystemFault_2 = false,
CommunicationSystemFault_3 = false,
PayloadSystemFault_1 = false, // 使能故障
PayloadSystemFault_2 = false,
PayloadSystemFault_3 = false,
PayloadSystemFault_4 = false,
PayloadSystemFault_5 = false,
PayloadSystemFault_6 = false,
PayloadSystemFault_7 = false,
EmergencySystemFault_1 = false, // 使能故障
EmergencySystemFault_2 = false,
EmergencySystemFault_3 = false,
EmergencySystemFault_4 = false,
EmergencySystemFault_5 = false,
EmergencySystemFault_6 = false,
SensorSystemFault_1 = false, // 使能故障
SensorSystemFault_2 = false,
SensorSystemFault_3 = false,
};
}
#endif
+6 -4
View File
@@ -600,11 +600,12 @@ bool LowerCommManager::operate_HV_dcDc5_Breaker(char opt)
m_udpComm->sendDisSysCmd(cmd);
ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02);
// ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02);
ok = m_pm->m_systemData->m_dcdcStatus.workingStatus;
MOOSPause(100);
while ( !ok ) {
if( m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1&(0x02) == 1 )
if( m_pm->m_systemData->m_dcdcStatus.workingStatus )
{
ok = true;
break;
@@ -651,11 +652,12 @@ bool LowerCommManager::operate_HV_coolingSystem_Breaker(char opt)
m_udpComm->sendDisSysCmd(cmd);
ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60;
// ok = m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60;
ok = m_pm->m_systemData->m_dcdcStatus.coolingPump1Running || m_pm->m_systemData->m_dcdcStatus.coolingPump2Running;
MOOSPause(100);
while ( !ok ) {
if( m_pm->m_pmCurrentState.bus1State.dcDcFaultWord1 & 0x60 )
if( (m_pm->m_systemData->m_dcdcStatus.coolingPump1Running || m_pm->m_systemData->m_dcdcStatus.coolingPump2Running) )
{
ok = true;
break;
+55 -54
View File
@@ -6,7 +6,7 @@
#include "../faultCode.h"
// #define DEBUG
#define DEBUG_1
// #define DEBUG_1
// 定义静态成员
PowerManger* PowerManagerFsm::pm = nullptr;
void PowerManagerFsm::react(TaskStopEvent const &e) {
@@ -15,7 +15,7 @@ void PowerManagerFsm::react(TaskStopEvent const &e) {
};
void PowerManagerFsm::react(CycleTriggeredEvent const &){
// 更新当前设备状态
// 检测和更新状态
#ifdef DEBUG_1
pm->m_currentDriverState = pm->m_subDisSysState;
#else
@@ -33,10 +33,11 @@ void PowerManagerFsm::react(CycleTriggeredEvent const &){
//非调试模式下,对水声设备进行保护
if(pm->currentMod != PMMode::Debug)
{
if(pm->m_depth < 10)
if(pm->m_depth > 10)
{
if(pm->m_systemData->power_a_bus_status.xczCircuitBreaker == 1)
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
//舷侧阵自动下电
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
MOOSPause(3);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, 0);
//所有水声设备下电
@@ -82,7 +83,7 @@ void PowerManagerFsm::handleBowRudderSystemCmd(int id, int cmd){
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderDeploy, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderServo1, (unsigned char)cmd);
@@ -95,7 +96,7 @@ void PowerManagerFsm::handleBowRudderSystemCmd(int id, int cmd){
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowRudderServo2, (unsigned char)cmd);
pm->m_upperCommManager->processPeriodicTasks();
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(1);
}
}
}
@@ -112,7 +113,7 @@ void PowerManagerFsm::handleActuatorCmd(int id, int cmd){
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover2, (unsigned char)cmd);
@@ -129,7 +130,7 @@ void PowerManagerFsm::handleActuatorCmd(int id, int cmd){
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover5, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowCover6, (unsigned char)cmd);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(1);
}
}
}
@@ -149,7 +150,7 @@ void PowerManagerFsm::handleOpenWaterCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet2, (unsigned char)cmd);
@@ -170,7 +171,7 @@ void PowerManagerFsm::handleOpenWaterCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet7, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::bowWaterInet8, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(1);
}
}
}
@@ -186,8 +187,8 @@ void PowerManagerFsm::handleSternRudderCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo2, (unsigned char)cmd);
@@ -201,8 +202,8 @@ void PowerManagerFsm::handleSternRudderCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo3, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sternRudderServo4, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(1);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(1);
}
}
}
@@ -216,14 +217,14 @@ void PowerManagerFsm::handlePropulsionMotorCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::thruster, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::thruster, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(1);
}
}
}
@@ -239,7 +240,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust1, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust2, (unsigned char)cmd);
@@ -250,7 +251,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust2, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust3, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(1);
}
}
}
@@ -262,7 +263,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust5, (unsigned char)cmd);
@@ -271,7 +272,7 @@ void PowerManagerFsm::handleBuoyancyAdjustmentCmd(int id, int cmd)
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust4, (unsigned char)cmd);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyancyAdjust5, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(1);
}
}
}
@@ -285,14 +286,14 @@ void PowerManagerFsm::handleFBSystemCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyage, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::buoyage, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(1);
}
}
}
@@ -314,14 +315,14 @@ void PowerManagerFsm::handleSideSonarCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::sideSonar, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(1);
}
}
}
@@ -336,14 +337,14 @@ void PowerManagerFsm::handleMastFoldingSystemCmd(int id, int cmd)
{
if(cmd == EquipmentCommand::OFF)
{
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(0);
MOOSPause(10);
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::mastLiftingServo, (unsigned char)cmd);
} else if(cmd == EquipmentCommand::ON)
{
pm->m_driver.setDeviceState(pm->m_subDisSysCmd, DeviceId::mastLiftingServo, (unsigned char)cmd);
MOOSPause(10);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(1);
}
}
}
@@ -3100,34 +3101,34 @@ void PowerManagerFsm::handelPowerCmd(){
LOG_F(INFO, "动力锂电池已下电");
//2. 断掉所有动力电断路器
//2.1 断开所有艏部高压断路器
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HVA_actuatorCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_bowFTDevice123Circuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_bowRudderControlBoxCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(0);
pm->m_lowerCommManager->operate_HVA_xczCircuit_Breaker(0);
//2.2 断开所有艉部高压设备断路器
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_tyzReserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_reserved_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_dcDc5_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_coolingSystem_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_HV_propulsionMotor_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternFt45_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder1_Breaker(0);
pm->m_lowerCommManager->operate_HV_sternRudder2_Breaker(0);
pm->m_lowerCommManager->operate_HV_fbReserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_tyzReserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_reserved_Breaker(0);
pm->m_lowerCommManager->operate_HV_dcDc5_Breaker(0);
pm->m_lowerCommManager->operate_HV_coolingSystem_Breaker(0);
//2.3 断开仪表预留断路器
pm->m_lowerCommManager->operate_LV_reservedCircuit1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_reservedCircuit2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_reservedCircuit1_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_reservedCircuit2_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_bowPZDeviceCircuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_reservedCircuit1_Breaker(0);
pm->m_lowerCommManager->operate_LV_reservedCircuit2_Breaker(0);
pm->m_lowerCommManager->operate_LVA_reservedCircuit1_Breaker(0);
pm->m_lowerCommManager->operate_LVA_reservedCircuit2_Breaker(0);
pm->m_lowerCommManager->operate_LVA_bowPZDeviceCircuit_Breaker(0);
//2.4 断开应急电池断路器
pm->m_lowerCommManager->operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(BREAK_OFF);
pm->m_lowerCommManager->operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(0);
pm->m_lowerCommManager->operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(0);
//3. 次级配电系统恢复待机
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
@@ -3140,7 +3141,7 @@ void PowerManagerFsm::handelPowerCmd(){
{
LOG_F(INFO, "收到上位机控制指令:动力电上电");
//闭合动力电断路器
if(pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON))
if(pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(1))
LOG_F(INFO,"动力锂电池断路器闭合成功");
else
LOG_F(INFO,"动力锂电池断路器闭合操作失败");
@@ -3153,7 +3154,7 @@ void PowerManagerFsm::handelPowerCmd(){
{
LOG_F(INFO, "收到上位机控制指令:锂动力电上电");
//1. 闭合动力电断路器
pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(BREAK_ON);
pm->m_lowerCommManager->operate_HV_powerLithiumBattery_Breaker(1);
//2. 动力锂电池上电
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
break;
@@ -3299,7 +3300,7 @@ void PowerManagerFsm::react(TestEvent const &e)
pm->m_systemData->fc_fault_level_3 = 0;
pm->m_systemData->fc_fault_level_2 = 0;
pm->m_systemData->fc_fault_level_1 = 0;
pm->m_systemData->distributeFaultCode.clear();
pm->m_systemData->disSysFaultCode.clear();
cout << "清空故障代码" << endl;
};
// if(e.eventId == 0) return ;
@@ -3346,10 +3347,10 @@ void PowerManagerFsm::react(TestEvent const &e)
pm->m_leakage = 0x20; //艉应急
break;
case 3:
pm->m_leakage = 0x40;
pm->m_leakage = 0x40; //燃料电池舱漏水
break;
case 4:
pm->m_leakage = 0x80;
pm->m_leakage = 0x80; //艏部应急漏水
break;
case 5:
pm->m_leakage = 0x01; //艏部应急漏水
@@ -3406,7 +3407,7 @@ void PowerManagerFsm::react(TestEvent const &e)
{
LOG_F(INFO,"配电系统故障测试");
// pm->m_systemData->distributeFaultCode.push_back(disfaultMap[e.eventId].code);
pm->m_systemData->distributeFaultCode.insert(disfaultMap[e.eventId].code);
pm->m_systemData->disSysFaultCode.insert(disfaultMap[e.eventId].code);
}
default:
LOG_F(INFO, "测试消息类型错误");
@@ -579,6 +579,9 @@ void HttpServer::pushSystemData() {
j["power_bus_status"]["reservedCurrent3"] = Json::Value(m_systemData->power_bus_status.reservedCurrent3); // 预留电流3
j["power_bus_status"]["coolWaterPressure"] = Json::Value(m_systemData->power_bus_status.coolWaterPressure); // 冷却水压力
j["power_bus_status"]["dcdcStatus1"] = Json::Value(m_systemData->m_dcdcStatus.lowFaultWord);
j["power_bus_status"]["dcdcStatus2"] = Json::Value(m_systemData->m_dcdcStatus.highFaultWord);
//动力母线A状态
j["power_a_bus_status"]["bowFTDevice123CircuitBreaker"] = Json::Value(m_systemData->power_a_bus_status.bowFTDevice123CircuitBreaker); // 艏部FT装置1/2/3断路器状态: 0-断开 1-闭合 2-故障
j["power_a_bus_status"]["actuatorCircuitBreaker"] = Json::Value(m_systemData->power_a_bus_status.actuatorCircuitBreaker); // 启闭机构断路器状态: 0-断开 1-闭合 2-故障
+7
View File
@@ -0,0 +1,7 @@
//SERVERHOST = 192.168.0.223
//SERVERPORT = 9000
ProcessConfig = pPowerManger
{
AppTick = 4
CommsTick = 4
}
+128 -76
View File
@@ -3,6 +3,7 @@
#include "pmSysvariable.h"
#include "sqlit3/SQLite.h"
#include <set>
#include <mutex>
#define DEBUFG
class SystemData
{
@@ -162,11 +163,47 @@ public:
unsigned char powfaultCode;
unsigned char insfaultCode;
//配电系统故障码
std::set<unsigned int> distributeFaultCode;
std::set<unsigned int> disSysFaultCode;
// MOOSD 状态
bool moosd_status;
//配电系统状态
//DC/DC状态字
struct DcdcStatus
{
// DC/DC5故障字低
union {
unsigned char lowFaultWord;
struct {
bool overTemperatureShutdown : 1; // Bit0: DC/DC模块过温关机
bool outputOverCurrent : 1; // Bit1: 输出过流
bool outputOverVoltage : 1; // Bit2: 输出过压
bool outputUnderVoltage : 1; // Bit3: 输出欠压
bool inputOverVoltage : 1; // Bit4: 输入过压
bool inputUnderVoltage : 1; // Bit5: 输入欠压
bool outputShortCircuit : 1; // Bit6: 输出短路保护
bool internalFault : 1; // Bit7: 内部故障
};
};
// DC/DC5故障字高
union {
unsigned char highFaultWord;
struct {
bool communicationFault : 1; // Bit0: 通讯故障报警
bool workingStatus : 1; // Bit1: 工作状态(1:启动, 0:关闭)
bool coolingPump1Fault : 1; // Bit2: 冷却泵1故障
bool coolingPump2Fault : 1; // Bit3: 冷却泵2故障
bool coolingWaterLeak : 1; // Bit4: 冷却水泄露
bool coolingPump1Running : 1; // Bit5: 冷却泵1运行状态
bool coolingPump2Running : 1; // Bit6: 冷却泵2运行状态
bool reserved : 1; // Bit7: 保留位
};
};
// 构造函数,初始化所有状态为正常
DcdcStatus() : lowFaultWord(0x00), highFaultWord(0x00) {}
} m_dcdcStatus;
//动力母线状态
struct POWER_BUS_STATUS
@@ -410,6 +447,32 @@ public:
uint8_t composite_backup_online_state; //复合管控备机在线标志位
} device_online_status;
enum LeakageStatus {
LEAKAGE_BOW_EMERGENCY = 0, // 艏部应急漏水 (0x01)
LEAKAGE_BOW_HIGH_VOLTAGE, // 艏高压漏水 (0x02)
LEAKAGE_BOW_LOW_VOLTAGE, // 艏低压漏水 (0x04)
LEAKAGE_FUEL_CELL, // 燃电舱漏水 (0x08)
LEAKAGE_LI_BATTERY, // 锂电池舱漏水 (0x10)
LEAKAGE_STERN_EMERGENCY, // 艉应急漏水 (0x20)
LEAKAGE_FUEL_CELL_CABIN, // 燃料电池舱漏水 (0x40)
LEAKAGE_BOW_EMERGENCY2 // 艏部应急漏水2 (0x80)
};
unsigned char leakageCode = 0;
bool leakStatus[8] = {false};
unsigned char generateLeakageCode() {
unsigned char code = 0;
if(leakStatus[LEAKAGE_BOW_EMERGENCY]) code |= 0x01;
if(leakStatus[LEAKAGE_BOW_HIGH_VOLTAGE]) code |= 0x02;
if(leakStatus[LEAKAGE_BOW_LOW_VOLTAGE]) code |= 0x04;
if(leakStatus[LEAKAGE_FUEL_CELL]) code |= 0x08;
if(leakStatus[LEAKAGE_LI_BATTERY]) code |= 0x10;
if(leakStatus[LEAKAGE_STERN_EMERGENCY]) code |= 0x20;
if(leakStatus[LEAKAGE_FUEL_CELL_CABIN]) code |= 0x40;
if(leakStatus[LEAKAGE_BOW_EMERGENCY2]) code |= 0x80;
return code;
}
public:
SystemData(){
//初始化变量全部为0
@@ -581,7 +644,6 @@ public:
device_online_status.composite_online_state = (data.device_online_flag2 >> 8) & 0xFF; // byte1:复合管控主机在线标志位
device_online_status.composite_backup_online_state = (data.device_online_flag2 >> 16) & 0xFF; // byte2:复合管控备机在线标志位
// 更新锂电池其他状态
dyn_water_leak_status = data.dyn_water_leak_status;
ins_water_leak_dcdc_status = data.ins_water_leak_dcdc_status;
@@ -591,53 +653,53 @@ public:
water_leak_status_from_dynbat = (data.dyn_water_leak_status >> 4) & 0x0F; // 00 正常,01 异常漏水
dcdc_status_from_insbat = (data.ins_water_leak_dcdc_status) & 0x0F; // 00 正常,01 故障
// std::cout << "dyn_charge_level: " << std::hex << static_cast<int>(dyn_charge_level) << std::endl;
// std::cout << "ins_water_leak_dcdc_status: " << std::hex << static_cast<int>(ins_water_leak_dcdc_status) << std::endl;
// std::cout << "dcdc_status_from_insbat: " << std::hex << static_cast<int>(dcdc_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_insbat: " << std::hex << static_cast<int>(water_leak_status_from_insbat) << std::endl;
// std::cout << "water_leak_status_from_dynbat: " << std::hex << static_cast<int>(water_leak_status_from_dynbat) << std::endl;
//心跳计数器
heartbeat = data.heartbeat;
}
// std::mutex faultCodeMutex; // 添加互斥锁
void updateBreakerFault(unsigned char& breakerStatus, unsigned char rawStatus, unsigned int faultCode)
{
// std::lock_guard<std::mutex> lock(faultCodeMutex);
breakerStatus = rawStatus == 0x55 ? 1 : (rawStatus == 0xAA ? 0 : 2);
// if(breakerStatus == 2) {
// disSysFaultCode.insert(faultCode);
// } else {
// disSysFaultCode.erase(faultCode);
// }
}
void updateSystemData(disHighVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_bus_status.fuelCellCircuitBreaker = data.fuelCellCircuitBreaker == 0x55 ? 1 :
(data.fuelCellCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.powerLithiumBatteryCircuitBreaker = data.powerLithiumBatteryCircuitBreaker == 0x55 ? 1 :
(data.powerLithiumBatteryCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.propulsionMotorCircuitBreaker = data.propulsionMotorCircuitBreaker == 0x55 ? 1 :
(data.propulsionMotorCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.dcDc5ModuleCircuitBreaker = data.dcDc5ModuleCircuitBreaker == 0x55 ? 1 :
(data.dcDc5ModuleCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker = data.bowHighVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowHighVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternFTDevice45CircuitBreaker = data.sternFTDevice45CircuitBreaker == 0x55 ? 1 :
(data.sternFTDevice45CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch1CircuitBreaker = data.sternRudderSwitch1CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch1CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch2CircuitBreaker = data.sternRudderSwitch2CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch2CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.fbReservedCircuitBreaker = data.fbReservedCircuitBreaker == 0x55 ? 1 :
(data.fbReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.tyzReservedCircuitBreaker = data.tyzReservedCircuitBreaker == 0x55 ? 1 :
(data.tyzReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.reservedCircuitBreaker = data.reservedCircuitBreaker == 0x55 ? 1 :
(data.reservedCircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(power_bus_status.fuelCellCircuitBreaker, data.fuelCellCircuitBreaker, 1);
updateBreakerFault(power_bus_status.powerLithiumBatteryCircuitBreaker, data.powerLithiumBatteryCircuitBreaker, 2);
updateBreakerFault(power_bus_status.propulsionMotorCircuitBreaker, data.propulsionMotorCircuitBreaker, 3);
updateBreakerFault(power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker, data.lithiumBatteryGroupInstrumentCircuitBreaker, 4);
updateBreakerFault(power_bus_status.dcDc5ModuleCircuitBreaker, data.dcDc5ModuleCircuitBreaker, 5);
updateBreakerFault(power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker, data.bowHighVoltageDistributionBoxCircuitBreaker, 6);
updateBreakerFault(power_bus_status.sternFTDevice45CircuitBreaker, data.sternFTDevice45CircuitBreaker, 7);
updateBreakerFault(power_bus_status.sternRudderSwitch1CircuitBreaker, data.sternRudderSwitch1CircuitBreaker, 8);
updateBreakerFault(power_bus_status.sternRudderSwitch2CircuitBreaker, data.sternRudderSwitch2CircuitBreaker, 9);
updateBreakerFault(power_bus_status.fbReservedCircuitBreaker, data.fbReservedCircuitBreaker, 10);
updateBreakerFault(power_bus_status.tyzReservedCircuitBreaker, data.tyzReservedCircuitBreaker, 11);
updateBreakerFault(power_bus_status.reservedCircuitBreaker, data.reservedCircuitBreaker, 12);
//模块状态
power_bus_status.dcDcModuleStatus = data.dcDcFaultWord1;
power_bus_status.coolingSystemStatus = data.dcDcFaultWord2;
m_dcdcStatus.lowFaultWord = data.dcDcFaultWord1;
m_dcdcStatus.highFaultWord = data.dcDcFaultWord2;
//绝缘状态
power_bus_status.powerBusInsulationStatus = data.powerBusInsulationStatus == 0x55 ? 0 : 1;
// if(power_bus_status.powerBusInsulationStatus == 1) disSysFaultCode.insert(34); else disSysFaultCode.erase(34);
power_bus_status.aBusInsulationStatus = data.aBusInsulationStatus == 0x55 ? 0 : 1;
// if(power_bus_status.aBusInsulationStatus == 1) disSysFaultCode.insert(35); else disSysFaultCode.erase(35);
//电源状态
power_bus_status.meterPowerLossSignal = data.meterPowerLossSignal == 0x55 ? 0 : 1;
// if(power_bus_status.meterPowerLossSignal == 1) disSysFaultCode.insert(36); else disSysFaultCode.erase(36);
power_bus_status.emergencyPowerLossSignal = data.emergencyPowerLossSignal == 0x55 ? 0 : 1;
// if(power_bus_status.emergencyPowerLossSignal == 1) disSysFaultCode.insert(37); else disSysFaultCode.erase(37);
//温度
power_bus_status.dcDcTemperature = data.dcDcTemperature-40;
@@ -665,26 +727,24 @@ public:
};
void updateSystemData(disHighAVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_a_bus_status.bowFTDevice123CircuitBreaker = data.bowFTDevice123CircuitBreaker == 0x55 ? 1 :
(data.bowFTDevice123CircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.actuatorCircuitBreaker = data.actuatorCircuitBreaker == 0x55 ? 1 :
(data.actuatorCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker = data.mastSteeringGearControlBoxCircuitBreaker == 0x55 ? 1 :
(data.mastSteeringGearControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.xczCircuitBreaker = data.xczCircuitBreaker == 0x55 ? 1 :
(data.xczCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.bowRudderControlBoxCircuitBreaker = data.bowRudderControlBoxCircuitBreaker == 0x55 ? 1 :
(data.bowRudderControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker = data.openWaterCoverStartCylinderCircuitBreaker == 0x55 ? 1 :
(data.openWaterCoverStartCylinderCircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(power_a_bus_status.bowFTDevice123CircuitBreaker, data.bowFTDevice123CircuitBreaker, 13);
updateBreakerFault(power_a_bus_status.actuatorCircuitBreaker, data.actuatorCircuitBreaker, 14);
updateBreakerFault(power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker, data.mastSteeringGearControlBoxCircuitBreaker, 15);
updateBreakerFault(power_a_bus_status.xczCircuitBreaker, data.xczCircuitBreaker, 16);
updateBreakerFault(power_a_bus_status.bowRudderControlBoxCircuitBreaker, data.bowRudderControlBoxCircuitBreaker, 17);
updateBreakerFault(power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker, data.openWaterCoverStartCylinderCircuitBreaker, 18);
//电源状态
power_a_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
// if(power_a_bus_status.instrumentPowerFailureSignal == 1) disSysFaultCode.insert(38); else disSysFaultCode.erase(38);
power_a_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(power_a_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(39); else disSysFaultCode.erase(39);
//浸水报警
power_a_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
//电压电流参数
power_a_bus_status.busbarBVoltage = data.busbarBVoltage * 0.1;
power_a_bus_status.busbarBCurrent = data.busbarBCurrent * 0.1;
@@ -697,27 +757,24 @@ public:
};
void updateSystemData(disLowMainBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker = data.bowLowVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowLowVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker = data.unit4InstrumentDC48VCircuitBreaker == 0x55 ? 1 :
(data.unit4InstrumentDC48VCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker = data.dcC1DCDistributionPanelCircuitBreaker == 0x55 ? 1 :
(data.dcC1DCDistributionPanelCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker = data.emergencyLithiumBatteryGroup2CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup2CircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker, data.lithiumBatteryGroupInstrumentCircuitBreaker, 19);
updateBreakerFault(instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker,data.bowLowVoltageDistributionBoxCircuitBreaker, 20);
updateBreakerFault(instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker,data.unit4InstrumentDC48VCircuitBreaker, 21);
updateBreakerFault(instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker, data.dcC1DCDistributionPanelCircuitBreaker, 22);
updateBreakerFault(instrument_main_bus_status.reservedCircuitBreaker1, data.reservedCircuitBreaker1, 23);
updateBreakerFault(instrument_main_bus_status.reservedCircuitBreaker2, data.reservedCircuitBreaker2, 24);
updateBreakerFault(instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker, data.emergencyLithiumBatteryGroup2CircuitBreaker, 25);
//电源状态
instrument_main_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.instrumentPowerFailureSignal == 1) disSysFaultCode.insert(40); else disSysFaultCode.erase(41);
instrument_main_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(41); else disSysFaultCode.erase(42);
//绝缘状态
instrument_main_bus_status.instrumentBusbarInsulationLow = data.instrumentBusbarInsulationLow == 0x55 ? 0 : 1;
// if(instrument_main_bus_status.instrumentBusbarInsulationLow == 1) disSysFaultCode.insert(42); else disSysFaultCode.erase(43);
//电压电流参数
instrument_main_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage * 0.1;
@@ -735,26 +792,21 @@ public:
}
void updateSystemData(disLowBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_bus_status.unit1CircuitBreaker = data.unit1CircuitBreaker == 0x55 ? 1 :
(data.unit1CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit2CircuitBreaker = data.unit2CircuitBreaker == 0x55 ? 1 :
(data.unit2CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit3CircuitBreaker = data.unit3CircuitBreaker == 0x55 ? 1 :
(data.unit3CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit5CircuitBreaker = data.unit5CircuitBreaker == 0x55 ? 1 :
(data.unit5CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.bowPZDeviceCircuitBreaker = data.bowPZDeviceCircuitBreaker == 0x55 ? 1 :
(data.bowPZDeviceCircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker = data.emergencyLithiumBatteryGroup1CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup1CircuitBreaker == 0xAA ? 0 : 2);
updateBreakerFault(instrument_bus_status.unit1CircuitBreaker, data.unit1CircuitBreaker, 26);
updateBreakerFault(instrument_bus_status.unit2CircuitBreaker, data.unit2CircuitBreaker, 27);
updateBreakerFault(instrument_bus_status.unit3CircuitBreaker, data.unit3CircuitBreaker, 28);
updateBreakerFault(instrument_bus_status.unit5CircuitBreaker, data.unit5CircuitBreaker, 29);
updateBreakerFault(instrument_bus_status.bowPZDeviceCircuitBreaker, data.bowPZDeviceCircuitBreaker, 30);
updateBreakerFault(instrument_bus_status.reservedCircuitBreaker1, data.reservedCircuitBreaker1, 31);
updateBreakerFault(instrument_bus_status.reservedCircuitBreaker2, data.reservedCircuitBreaker2, 32);
updateBreakerFault(instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker, data.emergencyLithiumBatteryGroup1CircuitBreaker, 33);
//电源状态
instrument_bus_status.powerFailureSignal = data.powerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_bus_status.powerFailureSignal == 1) disSysFaultCode.insert(44); else disSysFaultCode.erase(44);
instrument_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
// if(instrument_bus_status.emergencyPowerFailureSignal == 1) disSysFaultCode.insert(45); else disSysFaultCode.erase(45);
//浸水报警
instrument_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
+160 -9
View File
@@ -12,28 +12,179 @@ private:
/* data */
public:
uPower_disSysStateMsg() {
// state_of_bus_hv = {};
// state_of_bus_hv_a = {};
// state_of_bus_lv = {};
// state_of_bus_lv_a = {};
};
~uPower_disSysStateMsg() {};
std::string key = "uPower_disSysState_st";
struct state_of_bus_hv
{
// 使用 std::bitset 存储 16 位继电器状态
std::bitset<16> relay_states;
// 燃料电池断路器
void set_fuel_cell_breaker(bool state) { relay_states[0] = state; }
// 动力锂电池断路器
void set_power_lithium_battery_breaker(bool state) { relay_states[1] = state; }
// 推进电机断路器
void set_propulsion_motor_breaker(bool state) { relay_states[2] = state; }
// 锂电池组仪表断路器
void set_lithium_battery_meter_breaker(bool state) { relay_states[3] = state; }
// DC/DC5模块断路器
void set_dc_dc5_module_breaker(bool state) { relay_states[4] = state; }
// 艏部高压配电箱断路器
void set_bow_high_voltage_box_breaker(bool state) { relay_states[5] = state; }
// 艉部FT装置4/5断路器
void set_stern_ft_device_breaker(bool state) { relay_states[6] = state; }
// 艉舵开关1断路器
void set_stern_rudder_switch1_breaker(bool state) { relay_states[7] = state; }
// 艉舵开关2断路器
void set_stern_rudder_switch2_breaker(bool state) { relay_states[8] = state; }
// FB预留断路器
void set_fb_reserved_breaker(bool state) { relay_states[9] = state; }
// TYZ预留断路器
void set_tyz_reserved_breaker(bool state) { relay_states[10] = state; }
// 预留断路器
void set_reserved_breaker(bool state) { relay_states[11] = state; }
// 初始化后 16 - 12 位为 0
state_of_bus_hv() {
relay_states.reset(12);
relay_states.reset(13);
relay_states.reset(14);
relay_states.reset(15);
}
} m_state_of_bus_hv;
struct state_of_bus_hv_a
{
std::bitset<16> relay_states;
// 艏部FT装置1 - 3 断路器
void set_bow_ft_device_1_3_breaker(bool state) { relay_states[0] = state; }
// 启闭机构断路器
void set_opening_closing_mechanism_breaker(bool state) { relay_states[1] = state; }
// 桅杆舵机控制箱断路器
void set_mast_servo_control_box_breaker(bool state) { relay_states[2] = state; }
// XCZ 断路器
void set_xcz_breaker(bool state) { relay_states[3] = state; }
// 艏舵控制箱断路器
void set_bow_rudder_control_box_breaker(bool state) { relay_states[4] = state; }
// 敞水盖启动电缸断路器
void set_open_water_cover_actuator_breaker(bool state) { relay_states[5] = state; }
// 初始化后 6 - 15 位为 0
state_of_bus_hv_a() {
for (int i = 6; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_hv_a;
struct state_of_bus_lv
{
std::bitset<16> relay_states;
// 锂电池组(仪表)断路器
void set_lithium_battery_group_meter_breaker(bool state) { relay_states[0] = state; }
// 艏部低压配电箱断路器
void set_bow_low_voltage_box_breaker(bool state) { relay_states[1] = state; }
// UNIT4仪表DC48V断路器
void set_unit4_meter_dc48v_breaker(bool state) { relay_states[2] = state; }
// DC - C1直流配电板断路器
void set_dc_c1_dc_distribution_board_breaker(bool state) { relay_states[3] = state; }
// 预留断路器
void set_reserved_breaker_1(bool state) { relay_states[4] = state; }
// 预留断路器
void set_reserved_breaker_2(bool state) { relay_states[5] = state; }
// 应急锂电池组2断路器
void set_emergency_lithium_battery_group_2_breaker(bool state) { relay_states[6] = state; }
// 初始化后 7 - 15 位为 0
state_of_bus_lv() {
for (int i = 7; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_lv;
struct state_of_bus_lv_a
{
// 使用 std::bitset 存储 16 位继电器状态
std::bitset<16> relay_states;
// UNIT1断路器
void set_unit1_breaker(bool state) { relay_states[0] = state; }
// UNIT2断路器
void set_unit2_breaker(bool state) { relay_states[1] = state; }
// UNIT3断路器
void set_unit3_breaker(bool state) { relay_states[2] = state; }
// UNIT5断路器
void set_unit5_breaker(bool state) { relay_states[3] = state; }
// 艏部PZ装置断路器
void set_bow_pz_device_breaker(bool state) { relay_states[4] = state; }
// 预留断路器
void set_reserved_breaker_1(bool state) { relay_states[5] = state; }
// 预留断路器
void set_reserved_breaker_2(bool state) { relay_states[6] = state; }
// 应急锂电池组1断路器
void set_emergency_lithium_battery_group_1_breaker(bool state) { relay_states[7] = state; }
// 初始化后 8 - 15 位为 0
state_of_bus_lv_a() {
for (int i = 8; i < 16; ++i) {
relay_states.reset(i);
}
}
}m_state_of_bus_lv_a;
std::string buildMsg(SystemData data,disSysBreakerList currentDisBreakerState)
{
//构建配电系统状态报告
Json::Value dis;
disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker;
disBus2Breaker dis2 = currentDisBreakerState.bus2Breaker;
disBus3Breaker dis3 = currentDisBreakerState.bus3Breaker;
disBus4Breaker dis4 = currentDisBreakerState.bus4Breaker;
// disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker;
m_state_of_bus_hv.set_fuel_cell_breaker((data.power_bus_status.fuelCellCircuitBreaker == 1));
m_state_of_bus_hv.set_power_lithium_battery_breaker((data.power_bus_status.powerLithiumBatteryCircuitBreaker == 1));
m_state_of_bus_hv.set_propulsion_motor_breaker((data.power_bus_status.propulsionMotorCircuitBreaker == 1));
m_state_of_bus_hv.set_lithium_battery_meter_breaker((data.power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker == 1));
m_state_of_bus_hv.set_dc_dc5_module_breaker((data.power_bus_status.dcDc5ModuleCircuitBreaker == 1));
m_state_of_bus_hv.set_bow_high_voltage_box_breaker((data.power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker == 1));
m_state_of_bus_hv.set_stern_ft_device_breaker((data.power_bus_status.sternFTDevice45CircuitBreaker == 1));
m_state_of_bus_hv.set_stern_rudder_switch1_breaker((data.power_bus_status.sternRudderSwitch1CircuitBreaker == 1));
m_state_of_bus_hv.set_stern_rudder_switch2_breaker((data.power_bus_status.sternRudderSwitch2CircuitBreaker == 1));
m_state_of_bus_hv.set_fb_reserved_breaker((data.power_bus_status.fbReservedCircuitBreaker == 1));
m_state_of_bus_hv.set_tyz_reserved_breaker((data.power_bus_status.tyzReservedCircuitBreaker == 1));
m_state_of_bus_hv.set_reserved_breaker((data.power_bus_status.reservedCircuitBreaker == 1));
dis["HVolABusBreaker_uint16"] = m_state_of_bus_hv.relay_states.to_ulong();
dis["HVolBusBreaker_uint16"] = *(unsigned short*)&dis1;
dis["HVolABusBreaker_unit16"] = *(unsigned short*)&dis2;
dis["HVolBBusBreaker_unit16"] = *(unsigned short*)&dis3;
dis["LVolBusBreaker_uint16"] = *(unsigned short*)&dis4;
m_state_of_bus_hv_a.set_bow_ft_device_1_3_breaker((data.power_a_bus_status.bowFTDevice123CircuitBreaker == 1));
m_state_of_bus_hv_a.set_opening_closing_mechanism_breaker((data.power_a_bus_status.actuatorCircuitBreaker == 1));
m_state_of_bus_hv_a.set_mast_servo_control_box_breaker((data.power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker == 1));
m_state_of_bus_hv_a.set_xcz_breaker((data.power_a_bus_status.xczCircuitBreaker == 1));
m_state_of_bus_hv_a.set_bow_rudder_control_box_breaker((data.power_a_bus_status.bowRudderControlBoxCircuitBreaker == 1));
m_state_of_bus_hv_a.set_open_water_cover_actuator_breaker((data.power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker == 1));
dis["HVolBBusBreaker_uint16"] = m_state_of_bus_hv_a.relay_states.to_ulong();
m_state_of_bus_lv.set_bow_low_voltage_box_breaker((data.instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker == 1));
m_state_of_bus_lv.set_dc_c1_dc_distribution_board_breaker((data.instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker == 1));
m_state_of_bus_lv.set_unit4_meter_dc48v_breaker((data.instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker == 1));
m_state_of_bus_lv.set_lithium_battery_group_meter_breaker((data.instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker == 1));
m_state_of_bus_lv.set_emergency_lithium_battery_group_2_breaker((data.instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker == 1));
m_state_of_bus_lv.set_reserved_breaker_1((data.instrument_main_bus_status.reservedCircuitBreaker1 == 1));
m_state_of_bus_lv.set_reserved_breaker_2((data.instrument_main_bus_status.reservedCircuitBreaker2 == 1));
dis["HVolBusBreaker_uint16"] = m_state_of_bus_lv.relay_states.to_ulong();
m_state_of_bus_lv_a.set_unit1_breaker((data.instrument_bus_status.unit1CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit2_breaker((data.instrument_bus_status.unit2CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit3_breaker((data.instrument_bus_status.unit3CircuitBreaker == 1));
m_state_of_bus_lv_a.set_unit5_breaker((data.instrument_bus_status.unit5CircuitBreaker == 1));
m_state_of_bus_lv_a.set_bow_pz_device_breaker((data.instrument_bus_status.bowPZDeviceCircuitBreaker == 1));
m_state_of_bus_lv_a.set_reserved_breaker_1((data.instrument_bus_status.reservedCircuitBreaker1 == 1));
m_state_of_bus_lv_a.set_reserved_breaker_2((data.instrument_bus_status.reservedCircuitBreaker2 == 1));
m_state_of_bus_lv_a.set_emergency_lithium_battery_group_1_breaker((data.instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker == 1));
dis["LVolBusBreaker_uint16"] = m_state_of_bus_lv.relay_states.to_ulong();
//TODO: 构建配电系统故障码
Json::Value faultCodeDis_array = Json::Value(Json::arrayValue);
for(auto val : data.distributeFaultCode)
for(auto val : data.disSysFaultCode)
{
faultCodeDis_array.append(val);
}
+214 -4
View File
@@ -24,12 +24,39 @@ class PowerManagerApp:
style = ttk.Style()
style.configure('.', font=('Microsoft YaHei', 10))
self.simulation_HighVolBusFbMsg = msg_disHighVolBusFbMsg()
self.simulation_HighAVolBusFbMsg = msg_disHighAVolBusFbMsg()
self.simulation_LowMainBusFbMsg = msg_disLowMainBusFbMsg()
self.simulation_LowBusFbMsg = msg_disLowBusFbMsg()
self.simulation_HVBCmdMsg = msg_disHVBCmdMsg()
self.simulation_HVBACmdMsg = msg_disHVBACmdMsg()
self.simulation_LVMBCmdMsg = msg_disLVMBCmdMsg()
self.simulation_LVBCmdMsg = msg_disLVBCmdMsg()
# 菜单栏复选框状态变量
self.menu_checkbox_vars = {
'Forward_Feedback': tk.BooleanVar(value=False),
'Transparent_Command': tk.BooleanVar(value=False),
'Simulation_Mode': tk.BooleanVar(value=False)
}
self.Forward_Feedback = self.menu_checkbox_vars['Forward_Feedback']
self.Transparent_Command = self.menu_checkbox_vars['Transparent_Command']
self.Simulation_Mode = self.menu_checkbox_vars['Simulation_Mode']
# 添加模拟模式回调
self.Simulation_Mode.trace_add('write', self.on_simulation_mode_changed)
self.simulation_thread = None
self.simulation_running = False
self.root.title("电源管理系统")
self.root.tk.call('tk', 'scaling', 1.5) # 适配高DPI显示
# 移除固定窗口大小设置,实现自适应
self.root.minsize(800, 600) # 设置最小窗口大小
# UDP通信配置
# 上位机端口
self.udp_control_port = 5001
self.udp_control_host = "192.168.0.223"
# 下位机端口
# self.udp_ip = "127.0.0.1"
self.udp_ip = "192.168.0.140"
self.udp_port = 7000
@@ -211,6 +238,19 @@ class PowerManagerApp:
def setup_ui(self):
"""初始化用户界面"""
# 创建菜单栏
menubar = tk.Menu(self.root)
# 添加选项菜单
options_menu = tk.Menu(menubar, tearoff=0)
options_menu.add_checkbutton(label="转发反馈", variable=self.menu_checkbox_vars['Forward_Feedback'])
options_menu.add_checkbutton(label="透传指令", variable=self.menu_checkbox_vars['Transparent_Command'])
options_menu.add_checkbutton(label="模拟模式", variable=self.menu_checkbox_vars['Simulation_Mode'])
menubar.add_cascade(label="选项", menu=options_menu)
# 配置菜单栏
self.root.config(menu=menubar)
# 主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.pack(fill=tk.BOTH, expand=True)
@@ -448,7 +488,36 @@ class PowerManagerApp:
elif breaker_name == "冷却系统启动":
cmd.coolingSystem = state
# self.send_udp_command(cmd.pack())
if(self.Simulation_Mode):
if breaker_name == "燃料电池断路器":
self.simulation_HVBCmdMsg.fuelCellCircuitBreaker = state
elif breaker_name == "动力锂电池断路器":
self.simulation_HVBCmdMsg.powerLithiumBatteryCircuitBreaker = state
elif breaker_name == "推进电机断路器":
self.simulation_HVBCmdMsg.propulsionMotorCircuitBreaker = state
elif breaker_name == "锂电池组仪表断路器":
self.simulation_HVBCmdMsg.lithiumBatteryGroupInstrumentCircuitBreaker = state
elif breaker_name == "DC/DC模块断路器":
self.simulation_HVBCmdMsg.dcDc5ModuleCircuitBreaker = state
elif breaker_name == "艏高压配电盒断路器":
self.simulation_HVBCmdMsg.bowHighVoltageDistributionBoxCircuitBreaker = state
elif breaker_name == "艉FT设备45断路器":
self.simulation_HVBCmdMsg.sternFTDevice45CircuitBreaker = state
elif breaker_name == "艉舵机开关1断路器":
self.simulation_HVBCmdMsg.sternRudderSwitch1CircuitBreaker = state
elif breaker_name == "艉舵机开关2断路器":
self.simulation_HVBCmdMsg.sternRudderSwitch2CircuitBreaker = state
elif breaker_name == "FB备用断路器":
self.simulation_HVBCmdMsg.fbReservedCircuitBreaker = state
elif breaker_name == "TYZ备用断路器":
self.simulation_HVBCmdMsg.tyzReservedCircuitBreaker = state
elif breaker_name == "备用断路器":
self.simulation_HVBCmdMsg.reservedCircuitBreaker = state
elif breaker_name == "DC/DC模块启动":
self.simulation_HVBCmdMsg.dcdc5Module = state
elif breaker_name == "冷却系统启动":
self.simulation_HVBCmdMsg.coolingSystem = state
self.send_udp_command(cmd.pack(), self.disSysHostC1, self.disSysPortC1)
self.db.insertHighVolBusCmd(cmd)
if state==0x55:
@@ -473,10 +542,26 @@ class PowerManagerApp:
cmd.bowRudderControlBoxCircuitBreaker = state
elif breaker_name == "开盖启动气缸断路器":
cmd.openWaterCoverStartCylinderCircuitBreaker = state
if state==0x55:
buntu=True
else:
buntu=False
if(self.Simulation_Mode):
if breaker_name == "艏FT设备123断路器":
self.simulation_HVBACmdMsg.bowFTDevice123CircuitBreaker = state
elif breaker_name == "执行机构断路器":
self.simulation_HVBACmdMsg.actuatorCircuitBreaker = state
elif breaker_name == "桅舵机控制箱断路器":
self.simulation_HVBACmdMsg.mastSteeringGearControlBoxCircuitBreaker = state
elif breaker_name == "XCZ断路器":
self.simulation_HVBACmdMsg.xczCircuitBreaker = state
elif breaker_name == "艏舵控制箱断路器":
self.simulation_HVBACmdMsg.bowRudderControlBoxCircuitBreaker = state
elif breaker_name == "开盖启动气缸断路器":
self.simulation_HVBACmdMsg.openWaterCoverStartCylinderCircuitBreaker = state
self.log_message(f"发送动力汇流排A配电指令: {breaker_name} {'合' if buntu else '分'}")
# self.send_udp_command(cmd.pack())
self.send_udp_command(cmd.pack(), self.disSysHostC1, self.disSysPortC1)
@@ -501,6 +586,20 @@ class PowerManagerApp:
elif breaker_name == "应急锂电池组2断路器":
cmd.emergencyLithiumBatteryGroup2CircuitBreaker = state
if(self.Simulation_Mode):
if breaker_name == "锂电池组仪表断路器":
self.simulation_LVMBCmdMsg.lithiumBatteryGroupInstrumentCircuitBreaker = state
elif breaker_name == "艏低压配电盒断路器":
self.simulation_LVMBCmdMsg.bowLowVoltageDistributionBoxCircuitBreaker = state
elif breaker_name == "单元4仪表48V断路器":
self.simulation_LVMBCmdMsg.unit4InstrumentDC48VCircuitBreaker = state
elif breaker_name == "DC/C1直流配电板断路器":
self.simulation_LVMBCmdMsg.dcC1DCDistributionPanelCircuitBreaker = state
elif breaker_name == "备用断路器1":
self.simulation_LVMBCmdMsg.reservedCircuitBreaker1 = state
elif breaker_name == "备用断路器2":
self.simulation_LVMBCmdMsg.reservedCircuitBreaker2 = state
# self.send_udp_command(cmd.pack())
print(breaker_name,state)
print(cmd)
@@ -533,6 +632,24 @@ class PowerManagerApp:
elif breaker_name == "应急锂电池组1断路器":
cmd.emergencyLithiumBatteryGroup1CircuitBreaker = state
if(self.Simulation_Mode):
if breaker_name == "单元1断路器":
self.simulation_LVBCmdMsg.unit1CircuitBreaker = state
elif breaker_name == "单元2断路器":
self.simulation_LVBCmdMsg.unit2CircuitBreaker = state
elif breaker_name == "单元3断路器":
self.simulation_LVBCmdMsg.unit3CircuitBreaker = state
elif breaker_name == "单元5断路器":
self.simulation_LVBCmdMsg.unit5CircuitBreaker = state
elif breaker_name == "艏PZ设备断路器":
self.simulation_LVBCmdMsg.bowPZDeviceCircuitBreaker = state
elif breaker_name == "备用断路器1":
self.simulation_LVBCmdMsg.reservedCircuitBreaker1 = state
elif breaker_name == "备用断路器2":
self.simulation_LVBCmdMsg.reservedCircuitBreaker2 = state
elif breaker_name == "应急锂电池组1断路器":
self.simulation_LVBCmdMsg.emergencyLithiumBatteryGroup1CircuitBreaker = state
# self.send_udp_command(cmd.pack())
self.send_udp_command(cmd.pack(), self.disSysHostC2, self.disSysPortC2)
self.db.insertLowBusCmd(cmd)
@@ -548,8 +665,26 @@ class PowerManagerApp:
# print('接收中')
try:
data, addr = self.sock.recvfrom(1024)
# 转发消息到上位机
if(self.Forward_Feedback.get()):
self.send_udp_command(data, self.udp_control_host, self.udp_control_port)
self.process_udp_message(data)
# print('接收成功')
if(self.Transparent_Command):
msg_id = int.from_bytes(data[2:4], byteorder='little')
if msg_id == 0x0001:
self.send_udp_command(data, self.disSysHostC1, self.disSysPortC1)
self.simulation_HVBCmdMsg.unpack(data)
elif msg_id == 0x0002:
self.send_udp_command(data, self.disSysHostC1, self.disSysPortC1)
self.simulation_HVBACmdMsg.unpack(data)
elif msg_id == 0x0003:
self.send_udp_command(data, self.disSysHostC2, self.disSysPortC2)
self.simulation_LVMBCmdMsg.unpack(data)
elif msg_id == 0x0004:
self.send_udp_command(data, self.disSysHostC2, self.disSysPortC2)
self.simulation_LVBCmdMsg.unpack(data)
except Exception as e:
self.log_message(f"接收错误: {str(e)}")
@@ -1391,9 +1526,84 @@ class PowerManagerApp:
self.log_text.config(state=tk.DISABLED)
self.log_text.see(tk.END)
def on_simulation_mode_changed(self, *args):
"""模拟模式复选框回调"""
if self.Simulation_Mode.get():
self.start_simulation()
else:
self.stop_simulation()
def start_simulation(self):
"""启动模拟线程"""
if not self.simulation_running:
self.simulation_running = True
self.simulation_thread = threading.Thread(target=self.simulation_loop)
self.simulation_thread.daemon = True
self.simulation_thread.start()
self.log_message("模拟模式已启动")
def stop_simulation(self):
"""停止模拟线程"""
if self.simulation_running:
self.simulation_running = False
if self.simulation_thread:
self.simulation_thread.join()
self.log_message("模拟模式已停止")
def simulation_loop(self):
"""模拟线程主循环"""
while self.simulation_running:
# 发送模拟数据
self.simulation_HighVolBusFbMsg.fuelCellCircuitBreaker = self.simulation_HVBCmdMsg.fuelCellCircuitBreaker
self.simulation_HighVolBusFbMsg.powerLithiumBatteryCircuitBreaker = self.simulation_HVBCmdMsg.powerLithiumBatteryCircuitBreaker
self.simulation_HighVolBusFbMsg.propulsionMotorCircuitBreaker = self.simulation_HVBCmdMsg.propulsionMotorCircuitBreaker
self.simulation_HighVolBusFbMsg.lithiumBatteryGroupInstrumentCircuitBreaker = self.simulation_HVBCmdMsg.lithiumBatteryGroupInstrumentCircuitBreaker
self.simulation_HighVolBusFbMsg.dcDc5ModuleCircuitBreaker = self.simulation_HVBCmdMsg.dcDc5ModuleCircuitBreaker
self.simulation_HighVolBusFbMsg.bowHighVoltageDistributionBoxCircuitBreaker = self.simulation_HVBCmdMsg.bowHighVoltageDistributionBoxCircuitBreaker
self.simulation_HighVolBusFbMsg.sternFTDevice45CircuitBreaker = self.simulation_HVBCmdMsg.sternFTDevice45CircuitBreaker
self.simulation_HighVolBusFbMsg.sternRudderSwitch1CircuitBreaker = self.simulation_HVBCmdMsg.sternRudderSwitch1CircuitBreaker
self.simulation_HighVolBusFbMsg.sternRudderSwitch2CircuitBreaker = self.simulation_HVBCmdMsg.sternRudderSwitch2CircuitBreaker
self.simulation_HighVolBusFbMsg.fbReservedCircuitBreaker = self.simulation_HVBCmdMsg.fbReservedCircuitBreaker
self.simulation_HighVolBusFbMsg.tyzReservedCircuitBreaker = self.simulation_HVBCmdMsg.tyzReservedCircuitBreaker
self.simulation_HighVolBusFbMsg.reservedCircuitBreaker = self.simulation_HVBCmdMsg.reservedCircuitBreaker
self.simulation_HighAVolBusFbMsg.actuatorCircuitBreaker = self.simulation_HVBACmdMsg.actuatorCircuitBreaker
self.simulation_HighAVolBusFbMsg.bowFTDevice123CircuitBreaker = self.simulation_HVBACmdMsg.bowFTDevice123CircuitBreaker
self.simulation_HighAVolBusFbMsg.mastSteeringGearControlBoxCircuitBreaker = self.simulation_HVBACmdMsg.mastSteeringGearControlBoxCircuitBreaker
self.simulation_HighAVolBusFbMsg.xczCircuitBreaker = self.simulation_HVBACmdMsg.xczCircuitBreaker
self.simulation_HighAVolBusFbMsg.bowRudderControlBoxCircuitBreaker = self.simulation_HVBACmdMsg.bowRudderControlBoxCircuitBreaker
self.simulation_HighAVolBusFbMsg.openWaterCoverStartCylinderCircuitBreaker = self.simulation_HVBACmdMsg.openWaterCoverStartCylinderCircuitBreaker
self.simulation_LowMainBusFbMsg.lithiumBatteryGroupInstrumentCircuitBreaker = self.simulation_LVMBCmdMsg.lithiumBatteryGroupInstrumentCircuitBreaker
self.simulation_LowMainBusFbMsg.bowLowVoltageDistributionBoxCircuitBreaker = self.simulation_LVMBCmdMsg.bowLowVoltageDistributionBoxCircuitBreaker
self.simulation_LowMainBusFbMsg.unit4InstrumentDC48VCircuitBreaker = self.simulation_LVMBCmdMsg.unit4InstrumentDC48VCircuitBreaker
self.simulation_LowMainBusFbMsg.dcC1DCDistributionPanelCircuitBreaker = self.simulation_LVMBCmdMsg.dcC1DCDistributionPanelCircuitBreaker
self.simulation_LowMainBusFbMsg.reservedCircuitBreaker1 = self.simulation_LVMBCmdMsg.reservedCircuitBreaker1
self.simulation_LowMainBusFbMsg.reservedCircuitBreaker2 = self.simulation_LVMBCmdMsg.reservedCircuitBreaker2
self.simulation_LowMainBusFbMsg.emergencyLithiumBatteryGroup2CircuitBreaker = self.simulation_LVMBCmdMsg.emergencyLithiumBatteryGroup2CircuitBreaker
self.simulation_LowBusFbMsg.unit1CircuitBreaker = self.simulation_LVBCmdMsg.unit1CircuitBreaker
self.simulation_LowBusFbMsg.unit2CircuitBreaker = self.simulation_LVBCmdMsg.unit2CircuitBreaker
self.simulation_LowBusFbMsg.unit3CircuitBreaker = self.simulation_LVBCmdMsg.unit3CircuitBreaker
self.simulation_LowBusFbMsg.unit5CircuitBreaker = self.simulation_LVBCmdMsg.unit5CircuitBreaker
self.simulation_LowBusFbMsg.bowPZDeviceCircuitBreaker = self.simulation_LVBCmdMsg.bowPZDeviceCircuitBreaker
self.simulation_LowBusFbMsg.reservedCircuitBreaker1 = self.simulation_LVBCmdMsg.reservedCircuitBreaker1
self.simulation_LowBusFbMsg.reservedCircuitBreaker2 = self.simulation_LVBCmdMsg.reservedCircuitBreaker2
self.simulation_LowBusFbMsg.emergencyLithiumBatteryGroup1CircuitBreaker = self.simulation_LVBCmdMsg.emergencyLithiumBatteryGroup1CircuitBreaker
self.send_udp_command(self.simulation_HighVolBusFbMsg.pack(), self.udp_ip, self.udp_port)
time.sleep(0.01)
self.send_udp_command(self.simulation_HighAVolBusFbMsg.pack(), self.udp_ip, self.udp_port)
time.sleep(0.01)
self.send_udp_command(self.simulation_LowBusFbMsg.pack(), self.udp_ip, self.udp_port)
time.sleep(0.01)
self.send_udp_command(self.simulation_LowMainBusFbMsg.pack(), self.udp_ip, self.udp_port)
time.sleep(1) # 1秒间隔
def on_closing(self):
"""窗口关闭事件处理"""
self.running = False
self.stop_simulation()
self.sock.close()
self.root.destroy()
if __name__ == "__main__":
+55
View File
@@ -0,0 +1,55 @@
import tkinter as tk
from PowerManagerApp import PowerManagerApp
import tkinter as tk
from tkinter import ttk
import socket
import threading
import time
from db import DB
import os
from udpMsg import (
msg_disHighVolBusFbMsg,
msg_disHighAVolBusFbMsg,
msg_disLowMainBusFbMsg,
msg_disLowBusFbMsg,
msg_disHVBCmdMsg,
msg_disHVBACmdMsg,
msg_disLVMBCmdMsg,
msg_disLVBCmdMsg
)
class CcuApp:
def __init__(self, root):
self.root = root
self.root.title("CCU")
self.root.tk.call('tk', 'scaling', 1.5) # 适配高DPI显示
# 移除固定窗口大小设置,实现自适应
self.root.minsize(800, 600) # 设置最小窗口大小
self.root.geometry("800x600")
# 上位机端口
self.udp_control_port = 6000
self.udp_control_host = "127.0.0.0"
self.msg_disHighVolBusFbMsg = msg_disHighVolBusFbMsg()
self.msg_disHighAVolBusFbMsg = msg_disHighAVolBusFbMsg()
self.msg_disLowMainBusFbMsg = msg_disLowMainBusFbMsg()
self.msg_disLowBusFbMsg = msg_disLowBusFbMsg()
self.msg_disHVBCmdMsg = msg_disHVBCmdMsg()
self.msg_disHVBACmdMsg = msg_disHVBACmdMsg()
self.msg_disLVMBCmdMsg = msg_disLVMBCmdMsg()
self.msg_disLVBCmdMsg = msg_disLVBCmdMsg()
if __name__ == "__main__":
# 创建Tkinter根窗口
root = tk.Tk()
# 创建CCUApp实例
app = CcuApp(root)
# 启动主循环
root.mainloop()
+37
View File
@@ -0,0 +1,37 @@
def bit_viewer(input_data):
try:
# 定义 ANSI 转义序列颜色代码
RED = '\033[91m'
GREEN = '\033[92m'
RESET = '\033[0m'
# 尝试将输入转换为十进制整数
if input_data.startswith('0x'):
num = int(input_data, 16)
else:
num = int(input_data)
# 将整数转换为二进制字符串,去除前缀 '0b',并补全到 32 位
binary_str = format(num, '032b')
result = []
for i in range(32):
bit = binary_str[i]
# 根据位的值选择不同颜色
if bit == '1':
colored_bit = RED + bit + RESET
else:
colored_bit = GREEN + bit + RESET
result.append(f"Bit {31 - i}: {colored_bit}")
return "\n".join(result)
except ValueError:
return "输入无效,请输入有效的十进制或十六进制数。"
if __name__ == "__main__":
while True:
user_input = input("请输入十进制或十六进制数据(十六进制以 0x 开头),输入 'q' 退出:")
if user_input.lower() == 'q':
break
result = bit_viewer(user_input)
print(result)
Executable
+1
View File
@@ -0,0 +1 @@
rsync -avz --delete /home/zjk/project/H100/H100PowerManger/src/pPowerManger/ root@192.168.0.223:/root/work/moos_ws/moos-ivp-extend/src/pPowerManger/