0702调试
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
//SERVERHOST = 192.168.0.100
|
||||
//SERVERHOST = 192.168.0.223
|
||||
//SERVERPORT = 9000
|
||||
ProcessConfig = pPowerManger
|
||||
{
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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-故障
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
//SERVERHOST = 192.168.0.223
|
||||
//SERVERPORT = 9000
|
||||
ProcessConfig = pPowerManger
|
||||
{
|
||||
AppTick = 4
|
||||
CommsTick = 4
|
||||
}
|
||||
+135
-83
@@ -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
|
||||
@@ -409,7 +446,33 @@ public:
|
||||
uint8_t composite_online_state; //复合管控主机在线标志位
|
||||
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
|
||||
@@ -441,10 +504,10 @@ public:
|
||||
|
||||
//故障信息
|
||||
#ifdef DEBUG
|
||||
fc_fault_level_1 = data.fault_level_1;
|
||||
fc_fault_level_2 = data.fault_level_2;
|
||||
fc_fault_level_3 = data.fault_level_3;
|
||||
fc_fault_level_4 = data.fault_level_4;
|
||||
fc_fault_level_1 = data.fault_level_1;
|
||||
fc_fault_level_2 = data.fault_level_2;
|
||||
fc_fault_level_3 = data.fault_level_3;
|
||||
fc_fault_level_4 = data.fault_level_4;
|
||||
#endif
|
||||
|
||||
//燃料容量
|
||||
@@ -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,25 +727,23 @@ 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -23,13 +23,40 @@ 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,11 +665,29 @@ 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)}")
|
||||
|
||||
|
||||
def setup_high_vol_ui(self, parent):
|
||||
"""设置高压母线状态界面"""
|
||||
# 初始化故障位列表
|
||||
@@ -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__":
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user