diff --git a/bin/pPowerManger.moos b/bin/pPowerManger.moos index 48318b3..dbdbca8 100644 --- a/bin/pPowerManger.moos +++ b/bin/pPowerManger.moos @@ -1,4 +1,4 @@ -//SERVERHOST = 192.168.0.100 +//SERVERHOST = 192.168.0.223 //SERVERPORT = 9000 ProcessConfig = pPowerManger { diff --git a/src/pPMtest/ccuUdpMsg.h b/src/pPMtest/ccuUdpMsg.h new file mode 100644 index 0000000..d7e736a --- /dev/null +++ b/src/pPMtest/ccuUdpMsg.h @@ -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 diff --git a/src/pPMtest/pmSysvariable.h b/src/pPMtest/pmSysvariable.h new file mode 100644 index 0000000..c1bfb35 --- /dev/null +++ b/src/pPMtest/pmSysvariable.h @@ -0,0 +1,947 @@ +#ifndef PMSYSVARIABLE_H +#define PMSYSVARIABLE_H + +//宏定义 +#include +#include +#include + +#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 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 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(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 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 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 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 + + diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index 205dcd5..1cad642 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -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; diff --git a/src/pPowerManger/fsm/PowerManagerFsm.cpp b/src/pPowerManger/fsm/PowerManagerFsm.cpp index 2b82e1c..8c55bb1 100644 --- a/src/pPowerManger/fsm/PowerManagerFsm.cpp +++ b/src/pPowerManger/fsm/PowerManagerFsm.cpp @@ -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, "测试消息类型错误"); diff --git a/src/pPowerManger/httpserver/httpserver.cpp b/src/pPowerManger/httpserver/httpserver.cpp index a33c242..93935ed 100644 --- a/src/pPowerManger/httpserver/httpserver.cpp +++ b/src/pPowerManger/httpserver/httpserver.cpp @@ -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-故障 diff --git a/src/pPowerManger/pPowerManger.moos b/src/pPowerManger/pPowerManger.moos new file mode 100644 index 0000000..dbdbca8 --- /dev/null +++ b/src/pPowerManger/pPowerManger.moos @@ -0,0 +1,7 @@ +//SERVERHOST = 192.168.0.223 +//SERVERPORT = 9000 +ProcessConfig = pPowerManger +{ + AppTick = 4 + CommsTick = 4 +} \ No newline at end of file diff --git a/src/pPowerManger/systemData.h b/src/pPowerManger/systemData.h index 9a6a83c..e1916b9 100644 --- a/src/pPowerManger/systemData.h +++ b/src/pPowerManger/systemData.h @@ -3,6 +3,7 @@ #include "pmSysvariable.h" #include "sqlit3/SQLite.h" #include +#include #define DEBUFG class SystemData { @@ -162,11 +163,47 @@ public: unsigned char powfaultCode; unsigned char insfaultCode; //配电系统故障码 - std::set distributeFaultCode; + std::set 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(dyn_charge_level) << std::endl; - // std::cout << "ins_water_leak_dcdc_status: " << std::hex << static_cast(ins_water_leak_dcdc_status) << std::endl; - // std::cout << "dcdc_status_from_insbat: " << std::hex << static_cast(dcdc_status_from_insbat) << std::endl; - // std::cout << "water_leak_status_from_insbat: " << std::hex << static_cast(water_leak_status_from_insbat) << std::endl; - // std::cout << "water_leak_status_from_dynbat: " << std::hex << static_cast(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 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; diff --git a/src/pPowerManger/upmsg/uPower_disSysState.h b/src/pPowerManger/upmsg/uPower_disSysState.h index 78a33f7..589f5a9 100644 --- a/src/pPowerManger/upmsg/uPower_disSysState.h +++ b/src/pPowerManger/upmsg/uPower_disSysState.h @@ -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); } diff --git a/test/disSysTest/PowerManagerApp.py b/test/disSysTest/PowerManagerApp.py index b892bd1..8a5b968 100644 --- a/test/disSysTest/PowerManagerApp.py +++ b/test/disSysTest/PowerManagerApp.py @@ -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__": diff --git a/test/disSysTest/ccu.py b/test/disSysTest/ccu.py new file mode 100644 index 0000000..40621f6 --- /dev/null +++ b/test/disSysTest/ccu.py @@ -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() + + + diff --git a/test/tools/bitShow.py b/test/tools/bitShow.py new file mode 100644 index 0000000..01b39d7 --- /dev/null +++ b/test/tools/bitShow.py @@ -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) \ No newline at end of file diff --git a/upload.sh b/upload.sh new file mode 100755 index 0000000..56a2812 --- /dev/null +++ b/upload.sh @@ -0,0 +1 @@ +rsync -avz --delete /home/zjk/project/H100/H100PowerManger/src/pPowerManger/ root@192.168.0.223:/root/work/moos_ws/moos-ivp-extend/src/pPowerManger/ \ No newline at end of file