#ifndef SYSTEMDATA_H #define SYSTEMDATA_H #include "pmSysvariable.h" #include "sqlit3/SQLite.h" #include #define DEBUFG class SystemData { private: SQLite* m_db; public: //燃料电池系统参数 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-四级 //功率和时间参数 float output_power_limit; // 系统输出功率限制值,单位:W float total_generation_time; // 系统累计发电时间,单位:0.1小时 float total_generation_power; // 系统累计发电总功率,单位:W //故障信息 uint16_t fc_fault_level_1; // 一级故障位 uint16_t fc_fault_level_2; // 二级故障位 uint16_t fc_fault_level_3; // 三级故障位 uint16_t fc_fault_level_4; // 四级故障位 //燃料容量 float hydrogen_capacity; // 储氢罐剩余容量百分比,单位:% float liquid_oxygen_capacity; // 液氧罐剩余容量百分比,单位:% //温度压力参数 float palladium_temp; // 钯膜最高温度,单位:℃ float main_pipe_pressure; // 主水路压力,单位:0.01kPa float aux_pipe_pressure; // 辅水路压力,单位:0.01kPa //舱室环境参数 float cabin_pressure1; // 舱室1压力,单位:0.01kPa float cabin_pressure2; // 舱室2压力,单位:0.01kPa float cabin_temp1; // 舱室1温度,单位:0.01℃ float cabin_temp2; // 舱室2温度,单位:0.01℃ float cabin_humidity1; // 舱室1湿度,单位:0.01%RH float cabin_humidity2; // 舱室2湿度,单位:0.01%RH //火焰探测器 uint8_t flame_detector1; // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障 uint8_t flame_detector2; // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障 //气体浓度 float h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL float h2_concentration2; // 舱室H2浓度2,单位:0.01% LEL float h2_concentration3; // 舱室H2浓度3,单位:0.01% LEL float o2_concentration1; // 舱室O2浓度1,单位:0.01% LEL float o2_concentration2; // 舱室O2浓度2,单位:0.01% LEL float ch3oh_concentration1; // 舱室甲醇气体浓度1,单位:0.01% LEL float ch3oh_concentration2; // 舱室甲醇气体浓度2,单位:0.01% LEL //保留字段 float reserved1[10]; // 保留字段 float cabin_ox_concentration; // 仪表舱内氧气浓度,单位:0.1% float cabin_temperature; // 仪表舱内温度,单位:0.1℃ float cabin_humidity; // 仪表舱内湿度,单位:0.1%RH float cabin_pressure; // 仪表舱内大气压,单位:0.2kPa //动力舱参数 float power_cabin_ox_concentration; // 动力舱内氧气浓度,单位:0.1% float power_cabin_temperature; // 动力舱内温度,单位:0.1℃ float power_cabin_humidity; // 动力舱内湿度,单位:0.1%RH float power_cabin_pressure; // 动力舱内大气压,单位:0.2kPa uint8_t reserved2[2]; // 保留字段 //电池报警标志 uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志 uint8_t ins_alarm_flag[6]; // 仪表锂电池报警标志 //继电器状态 uint8_t ins_relay_status1; // 仪表电池继电器状态 uint8_t ins_relay_status2; // 仪表电池预充继电器和负极继电器状态 uint8_t dyn_relay_status1; // 动力电池正极与充电继电器状态 uint8_t dyn_relay_status2; // 动力电池预充与负极继电器状态 //仪表电池继电器状态 uint8_t ins_pos_relay_status; // 仪表电池正极继电器状态 (X0H:无效 X1H:接通 X2H:断开) uint8_t ins_charge_relay_status; // 仪表电池充电继电器状态 (0XH:无效 1XH:接通 2XH:断开) uint8_t ins_precharge_relay_status; // 仪表电池预充继电器状态 (X0H:无效 X1H:接通 X2H:断开) uint8_t ins_neg_relay_status; // 仪表电池负极继电器状态 (0XH:无效 1XH:接通 2XH:断开) //动力电池继电器状态 uint8_t dyn_pos_relay_status; // 动力电池正极继电器状态 (X0H:无效 X1H:接通 X2H:断开) uint8_t dyn_charge_relay_status; // 动力电池充电继电器状态 (0XH:无效 1XH:接通 2XH:断开) uint8_t dyn_precharge_relay_status; // 动力电池预充继电器状态 (X0H:无效 X1H:接通 X2H:断开) uint8_t dyn_neg_relay_status; // 动力电池负极继电器状态 (0XH:无效 1XH:接通 2XH:断开) //电池功率参数 float ins_max_discharge_power; // 仪表电池最大允许放电功率,单位:0.05kW float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW //电池SOC int ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100 int dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100 //电池能量 float ins_total_energy; // 仪表电池总能量,单位:0.1kWh float dyn_total_energy; // 动力电池总能量,单位:0.1kWh //电池输入功率 float ins_power_input; // 仪表电池输入功率,单位:0.1kW float dyn_power_input; // 动力电池输入功率,单位:0.1kW //电池充放电状态 uint8_t ins_charge_status; // 仪表电池充放电状态:00H-无效,10H-充电,20H-放电 uint8_t dyn_charge_status; // 动力电池充放电状态:00H-无效,10H-充电,20H-放电 //电池电压电流 float ins_voltage_link; // 仪表电池LINK端电压,单位:0.01V float ins_voltage_pack; // 仪表电池PACK端电压,单位:0.01V float ins_current; // 仪表电池电流,单位:0.01A float ins_resistance_pos; // 仪表电池正极绝缘电阻,单位:kΩ float ins_resistance_neg; // 仪表电池负极绝缘电阻,单位:kΩ float dyn_voltage_link; // 动力电池LINK端电压,单位:0.01V float dyn_voltage_pack; // 动力电池PACK端电压,单位:0.01V float dyn_current; // 动力电池电流,单位:0.05A float dyn_resistance_pos; // 动力电池正极绝缘电阻,单位:kΩ float dyn_resistance_neg; // 动力电池负极绝缘电阻,单位:kΩ //紧急状态 uint8_t ins_emergency_status; // 仪表电池紧急状态 uint8_t dyn_emergency_status; // 动力电池紧急状态 //保留字段 uint8_t reserved3[2]; // 保留字段 float ins_soc_threshold1; // 仪表电池1 SOC门限 float ins_soc_threshold2; // 仪表电池2 SOC门限 float ins_soc_threshold3; // 仪表电池3 SOC门限 float dyn_soc_threshold1; // 动力电池1 SOC门限 float dyn_soc_threshold2; // 动力电池2 SOC门限 float dyn_soc_threshold3; // 动力电池3 SOC门限 float ins_power_limit1; // 仪表电池1功率限制值 float ins_power_limit2; // 仪表电池2功率限制值 float dyn_power_limit1; // 动力电池1功率限制值 float dyn_power_limit2; // 动力电池2功率限制值 //设备在线状态 uint32_t device_online_flag1; // 设备在线状态标志1 uint32_t device_online_flag2; // 设备在线状态标志2 //其他锂电池状态 uint8_t dyn_charge_level; // 动力电池充电状态:01H-1级(不限), 02H-2级(限功率), 03H-3级(关闭) uint8_t dyn_water_leak_status; // 动力漏水状态:0XH-正常, 1XH-异常漏水 uint8_t ins_water_leak_dcdc_status; // 仪表漏水状态与DCDC状态:低4位-漏水状态(0XH正常,1XH异常),高4位-DCDC状态(X0H正常,X1H故障) uint8_t reserved4; unsigned char water_leak_status_from_insbat; // 仪表漏水状态 unsigned char water_leak_status_from_dynbat; // 动力漏水状态 unsigned char dcdc_status_from_insbat; // 仪表DCDC状态 //保留字段 // uint32_t reserved4; // 保留字段 uint32_t heartbeat; // 主机心跳计数器 //锂电池故障字段 unsigned char powfaultCode; unsigned char insfaultCode; //配电系统故障码 std::set distributeFaultCode; // MOOSD 状态 bool moosd_status; //配电系统状态 //动力母线状态 struct POWER_BUS_STATUS { // 5: 燃料电池断路器 0 断开 1 闭合 2 故障 unsigned char fuelCellCircuitBreaker; // 6: 动力锂电池断路器 0 断开 1 闭合 2 故障 unsigned char powerLithiumBatteryCircuitBreaker; // 7: 推进电机断路器 0 断开 1 闭合 2 故障 unsigned char propulsionMotorCircuitBreaker; // 8: 锂电池组仪表断路器 0 断开 1 闭合 2 故障 unsigned char lithiumBatteryGroupInstrumentCircuitBreaker; // 9: DC/DC5模块断路器 0 断开 1 闭合 2 故障 unsigned char dcDc5ModuleCircuitBreaker; // 10: 艏部高压配电箱断路器 0 断开 1 闭合 2 故障 unsigned char bowHighVoltageDistributionBoxCircuitBreaker; // 11: 艉部FT装置4/5断路器 0 断开 1 闭合 2 故障 unsigned char sternFTDevice45CircuitBreaker; // 12: 艉舵开关1断路器 0 断开 1 闭合 2 故障 unsigned char sternRudderSwitch1CircuitBreaker; // 13: 艉舵开关2断路器 0 断开 1 闭合 2 故障 unsigned char sternRudderSwitch2CircuitBreaker; // 14: FB预留断路器 0 断开 1 闭合 2 故障 unsigned char fbReservedCircuitBreaker; // 15: TYZ预留断路器 0 断开 1 闭合 2 故障 unsigned char tyzReservedCircuitBreaker; // 16: 预留断路器 0 断开 1 闭合 2 故障 unsigned char reservedCircuitBreaker; // 17: DC/DC5模块状态 0 未运行;1 运行;2 DC/DC模块过温关机;3 输出过流;4 输出过压;5 输出欠压;6 输入过压;7 输入欠压;8 输出短路保护;9 内部故障 unsigned char dcDcModuleStatus; // 18:冷却系统状态 0 未运行 1 运行 2 冷却泵1故障 3 冷却泵2故障 4 冷却水泄露 unsigned char coolingSystemStatus; // 19: 动力母排绝缘状态 0 正常 1 绝缘低 unsigned char powerBusInsulationStatus; // 20: A汇流排绝缘状态 0 正常 1 绝缘低 unsigned char aBusInsulationStatus; // 21: 仪表电源状态 0 正常 1 故障 unsigned char meterPowerLossSignal; // 22: 应急电源状态 0 正常 1 故障 unsigned char emergencyPowerLossSignal; // 22: dc/dc温度 float dcDcTemperature; // 23: 动力汇流排电压 float powerBusVoltage; // 24: DC/DC5模块电流 float dcDc5ModuleCurrent; // 25: 动力汇流排电流 float powerBusCurrent; // 26: A汇流排电压 float busbarAVoltage; // 27: 推进电机控制箱电流 float propulsionMotorControlBoxCurrent; // 28: A汇流排电流 float busbarACurrent; // 29: 锂电池组(仪表)电流 float lithiumBatteryGroupMeterCurrent; // 30: 艏部高压配电箱电流 float bowHighVoltageDistributionBoxCurrent; // 31: 艉部FT装置4/5电流 float sternFTDevice45Current; // 32: TYZ预留开关电流 float tyzReservedSwitchCurrent; // 33: 艉舵开关1电流 float sternRudderSwitch1Current; // 34: 预留电流 float reservedCurrent1; // 改为 reservedCurrent1 以避免重名 // 35: 艉舵开关2电流 float sternRudderSwitch2Current; // 36: 预留电流2 float reservedCurrent2; // 改为 reservedCurrent2 以避免重名 // 37: FB预留电流 float fbReservedSwitchCurrent; // 38: 预留电流3 float reservedCurrent3; // 改为 reservedCurrent3 以避免重名 // 39: 冷却水压力 float coolWaterPressure; }power_bus_status; struct POWER_A_BUS_STATUS { //动力汇流排状态 //5. 艏部FT装置1/2/3断路器 0 断开 1 闭合 2 故障 unsigned char bowFTDevice123CircuitBreaker; //6. 启闭机构断路器 0 断开 1 闭合 2 故障 unsigned char actuatorCircuitBreaker; //7. 桅杆舵机控制箱断路器 0 断开 1 闭合 2 故障 unsigned char mastSteeringGearControlBoxCircuitBreaker; //8. XCZ断路器 0 断开 1 闭合 2 故障 unsigned char xczCircuitBreaker; //9. 艏舵控制箱断路器 0 断开 1 闭合 2 故障 unsigned char bowRudderControlBoxCircuitBreaker; //10. 敞水盖启动电缸断路器 0 断开 1 闭合 2 故障 unsigned char openWaterCoverStartCylinderCircuitBreaker; //11. 仪表电源失电信号 0 正常 1 故障 unsigned char instrumentPowerFailureSignal; //12. 应急电源失电信号 0 正常 1 故障 unsigned char emergencyPowerFailureSignal; //13. 浸水报警 0 无 1 有 unsigned char waterIngressionAlarm; //14. 汇流排B电压 float busbarBVoltage; //15. 汇流排B电流 float busbarBCurrent; //16. 艏部FT装置1/2/3电流 float bowFTDevice123Current; //17. 启闭机构电流 float actuatorCurrent; //18. 桅杆舵机控制箱电流 float mastSteeringGearControlBoxCurrent; //19. XCZ电流 float xczCurrent; //20. 艏舵控制箱电流 float bowRudderControlBoxCurrent; //21. 敞水盖启动电缸电流 float openWaterCoverStartCylinderCurrent; } power_a_bus_status; //仪表主母线状态 struct INSTRUMENT_MAIN_BUS_STATUS { //5. 锂电池组(仪表)断路器 0 断开 1 闭合 2 故障 unsigned char lithiumBatteryGroupInstrumentCircuitBreaker; //6. 艏部低压配电箱断路器 0 断开 1 闭合 2 故障 unsigned char bowLowVoltageDistributionBoxCircuitBreaker; //7. UNIT4仪表DC48V断路器 0 断开 1 闭合 2 故障 unsigned char unit4InstrumentDC48VCircuitBreaker; //8. DC-C1直流配电板断路器 0 断开 1 闭合 2 故障 unsigned char dcC1DCDistributionPanelCircuitBreaker; //9. 预留断路器1 0 断开 1 闭合 2 故障 unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀 //10. 预留断路器2 0 断开 1 闭合 2 故障 unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀 //11. 应急锂电池组2断路器 0 断开 1 闭合 2 故障 unsigned char emergencyLithiumBatteryGroup2CircuitBreaker; //12. 仪表电源失电信号 0 正常 1 故障 unsigned char instrumentPowerFailureSignal; //13. 应急电源失电信号 0 正常 1 故障 unsigned char emergencyPowerFailureSignal; //14. 仪表汇流排绝缘低 0 正常 1 绝缘低 unsigned char instrumentBusbarInsulationLow; //15. 仪表母排电压 float instrumentBusbarVoltage; //16. 艏部低压配电箱电流 float bowLowVoltageDistributionBoxCurrent; //17. DC-C1(直流配电板1)仪表DC48V电流 float dcC1InstrumentDC48VCurrent; //18. 预留电流 float reservedCurrent1; // 为了区分,添加了数字后缀 //19. 应急锂电池组2电流 float emergencyLithiumBatteryGroup2Current; //20. 锂电池组(仪表)电流 float lithiumBatteryGroupInstrumentCurrent; //21. UNIT4仪表DC48V电流 float unit4InstrumentDC48VCurrent; //22. Ushort 预留电流 float reservedCurrent2; // 为了区分,添加了数字后缀 //23. 应急2汇流排电压 float emergency2BusbarVoltage; //24. 复合能源管控系统应急DC48V电流 float compositeEnergyManagementSystemEmergencyDC48VCurrent; //25. 燃料电池安全系统应急DC48V电流 float fuelCellSecuritySystemEmergencyDC48VCurrent; //26. PLC控制电源电流 float plcControlPowerCurrent; } instrument_main_bus_status; //仪表汇流排状态 struct INSTRUMENT_BUS_STATUS { //5. UNIT1断路器 0 断开 1 闭合 2 故障 unsigned char unit1CircuitBreaker; //6. UNIT2断路器 0 断开 1 闭合 2 故障 unsigned char unit2CircuitBreaker; //7. UNIT3断路器 0 断开 1 闭合 2 故障 unsigned char unit3CircuitBreaker; //8. UNIT5断路器 0 断开 1 闭合 2 故障 unsigned char unit5CircuitBreaker; //9. 艏部PZ装置断路器 0 断开 1 闭合 2 故障 unsigned char bowPZDeviceCircuitBreaker; //10. 预留断路器1 0 断开 1 闭合 2 故障 unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀 //11. 预留断路器2 0 断开 1 闭合 2 故障 unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀 //12. 应急锂电池组1断路器 0 断开 1 闭合 2 故障 unsigned char emergencyLithiumBatteryGroup1CircuitBreaker; //13. 仪表电源失电信号 0 正常 1 故障 unsigned char powerFailureSignal; //14. 应急电源失电信号 0 正常 1 故障 unsigned char emergencyPowerFailureSignal; //15. 浸水报警 0 无 1 有 unsigned char waterIngressionAlarm; //16. 仪表母排电压 float instrumentBusbarVoltage; //17. 仪表母排电流 float instrumentBusbarCurrent; //18. UNIT1电流 float unit1Current; //19. UNIT2电流 float unit2Current; //20. UNIT3电流 float unit3Current; //21. UNIT5电流 float unit5Current; //22. 艏部PZ装置电流 float bowPZDeviceCurrent; //23. 应急锂电池组1电流 float emergencyLithiumBatteryGroup1Current; //24. 应急1汇流排电压 float emergency1BusbarVoltage; } instrument_bus_status; struct COMMON_STATUS { //超时状态 bool isTimeout; //最后更新时间 double lastUpdateTime; }; struct DeviceCommonStatus { COMMON_STATUS ccu_status; COMMON_STATUS dis_hv_c1; COMMON_STATUS dis_hv_c2; COMMON_STATUS dis_lv_c1; COMMON_STATUS dis_lv_c2; } device_common_status; struct DeviceOnlineStatus { //在线状态 //0x00: 未上线 //0x01: 在线 //0x02: 上线后掉线 uint8_t ins_online_state; //仪表锂电在线标志位 uint8_t dyn_online_state; //动力锂电在线标志位 uint8_t fuel_online_state; //燃电锂电在线标志位 uint8_t high_voltage_online_state; //高压配电板在线标志位 uint8_t low_voltage_online_state; //低压配电板在线标志位 uint8_t composite_online_state; //复合管控主机在线标志位 uint8_t composite_backup_online_state; //复合管控备机在线标志位 } device_online_status; public: SystemData(){ //初始化变量全部为0 memset(this, 0, sizeof(SystemData)); }; ~SystemData(){}; void updateCommonStatus(double time_out=3){ //更新时间 double currentTime = MOOSTime(); //判断是否超时 device_common_status.ccu_status.isTimeout = (currentTime - device_common_status.ccu_status.lastUpdateTime) > time_out; device_common_status.dis_hv_c1.isTimeout = (currentTime - device_common_status.dis_hv_c1.lastUpdateTime) > time_out; device_common_status.dis_hv_c2.isTimeout = (currentTime - device_common_status.dis_hv_c2.lastUpdateTime) > time_out; device_common_status.dis_lv_c1.isTimeout = (currentTime - device_common_status.dis_lv_c1.lastUpdateTime) > time_out; device_common_status.dis_lv_c2.isTimeout = (currentTime - device_common_status.dis_lv_c2.lastUpdateTime) > time_out; }; void updateSystemData(ccuState data){ fc_mode = data.fc_mode; fc_status = data.fc_status; fc_fault_level = data.fc_fault_level; //功率和时间参数 output_power_limit = data.output_power_limit; total_generation_time = data.total_generation_time * 0.1; total_generation_power = data.total_generation_power; //故障信息 #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; #endif //燃料容量 hydrogen_capacity = static_cast(data.hydrogen_capacity); liquid_oxygen_capacity = static_cast(data.liquid_oxygen_capacity); //温度压力参数 palladium_temp = data.palladium_temp; main_pipe_pressure = data.main_pipe_pressure * 0.01; aux_pipe_pressure = data.aux_pipe_pressure * 0.01; //舱室环境参数 cabin_pressure1 = data.cabin_pressure1 * 0.01; cabin_pressure2 = data.cabin_pressure2 * 0.01; cabin_temp1 = data.cabin_temp1 * 0.01; cabin_temp2 = data.cabin_temp2 * 0.01; cabin_humidity1 = data.cabin_humidity1 * 0.01; cabin_humidity2 = data.cabin_humidity2 * 0.01; //火焰探测器 flame_detector1 = data.flame_detector1; flame_detector2 = data.flame_detector2; //气体浓度 h2_concentration1 = data.h2_concentration1 * 0.01; h2_concentration2 = data.h2_concentration2 * 0.01; h2_concentration3 = data.h2_concentration3 * 0.01; o2_concentration1 = data.o2_concentration1 * 0.01; o2_concentration2 = data.o2_concentration2 * 0.01; ch3oh_concentration1 = data.ch3oh_concentration1 * 0.01; ch3oh_concentration2 = data.ch3oh_concentration2 * 0.01; //保留字段 for(int i=0; i<10; i++) { reserved1[i] = data.reserved1[i]; } //仪表舱参数 cabin_ox_concentration = data.cabin_ox_concentration * 0.1; cabin_temperature = static_cast(data.cabin_temperature) * 0.1; cabin_humidity = data.cabin_humidity * 0.1; cabin_pressure = data.cabin_pressure * 0.2; //动力舱参数 power_cabin_ox_concentration = data.power_cabin_ox_concentration * 0.1; power_cabin_temperature = static_cast(data.power_cabin_temperature) * 0.1; power_cabin_humidity = data.power_cabin_humidity * 0.1; power_cabin_pressure = data.power_cabin_pressure * 0.2; //电池报警标志 for(int i=0; i<6; i++) { dyn_alarm_flag[i] = data.dyn_alarm_flag[i]; ins_alarm_flag[i] = data.ins_alarm_flag[i]; } //继电器状态 ins_relay_status1 = data.ins_relay_status1; ins_relay_status2 = data.ins_relay_status2; dyn_relay_status1 = data.dyn_relay_status1; dyn_relay_status2 = data.dyn_relay_status2; //继电器状态 ins_pos_relay_status = (data.ins_relay_status1 ) & 0x0F; // 取高4位作为正极继电器状态 ins_charge_relay_status = ( data.ins_relay_status1 >> 4)& 0x0F; // 取低4位作为充电继电器状态 ins_precharge_relay_status = (data.ins_relay_status2 ) & 0x0F; // 取高4位作为预充继电器状态 ins_neg_relay_status = (data.ins_relay_status2 >> 4) & 0x0F; // 取低4位作为负极继电器状态 dyn_pos_relay_status = (data.dyn_relay_status1 ) & 0x0F; // 取高4位作为正极继电器状态 dyn_charge_relay_status = (data.dyn_relay_status1 >> 4) & 0x0F; // 取低4位作为充电继电器状态 dyn_precharge_relay_status = (data.dyn_relay_status2) & 0x0F; // 取高4位作为预充继电器状态 dyn_neg_relay_status = (data.dyn_relay_status2 >> 4) & 0x0F; // 取低4位作为负极继电器状态 //电池功率参数 ins_max_discharge_power = data.ins_max_discharge_power * 0.05; dyn_max_discharge_power = data.dyn_max_discharge_power * 0.05; //电池SOC ins_soc = static_cast(data.ins_soc); dyn_soc = static_cast(data.dyn_soc); //电池能量 ins_total_energy = data.ins_total_energy * 0.1; dyn_total_energy = data.dyn_total_energy * 0.1; //电池输入功率 ins_power_input = data.ins_power_input ; dyn_power_input = data.dyn_power_input ; //电池充放电状态 ins_charge_status = data.ins_charge_status; dyn_charge_status = data.dyn_charge_status; //电池电压电流 ins_voltage_link = data.ins_voltage_link * 0.1; ins_voltage_pack = data.ins_voltage_pack * 0.1; ins_current = static_cast(data.ins_current) * 0.05; ins_resistance_pos = data.ins_resistance_pos; ins_resistance_neg = data.ins_resistance_neg; dyn_voltage_link = data.dyn_voltage_link * 0.1; dyn_voltage_pack = data.dyn_voltage_pack * 0.1; dyn_current = static_cast(data.dyn_current) * 0.05; dyn_resistance_pos = data.dyn_resistance_pos; dyn_resistance_neg = data.dyn_resistance_neg; //紧急状态 ins_emergency_status = data.ins_emergency_status; dyn_emergency_status = data.dyn_emergency_status; //保留字段 for(int i=0; i<2; i++) { reserved2[i] = data.reserved2[i]; } //SOC门限值 ins_soc_threshold1 = data.ins_soc_threshold1; ins_soc_threshold2 = data.ins_soc_threshold2; ins_soc_threshold3 = data.ins_soc_threshold3; //功率限制值 ins_power_limit1 = data.ins_power_limit1; ins_power_limit2 = data.ins_power_limit2; //设备在线状态 device_online_flag1 = data.device_online_flag1; device_online_flag2 = data.device_online_flag2; //更新设备在线状态 device_online_status.ins_online_state = (data.device_online_flag1 >> 0) & 0xFF; // byte0:仪表锂电在线标志位 device_online_status.dyn_online_state = (data.device_online_flag1 >> 8) & 0xFF; // byte1:动力锂电在线标志位 device_online_status.fuel_online_state = (data.device_online_flag1 >> 16) & 0xFF; // byte2:燃电锂电在线标志位 device_online_status.high_voltage_online_state = (data.device_online_flag1 >> 24) & 0xFF; // byte3:高压配电板在线标志位 device_online_status.low_voltage_online_state = (data.device_online_flag2 >> 0) & 0xFF; // byte0:低压配电板在线标志位 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; dyn_charge_level = data.dyn_charge_level; //01H:1级(不限)02H:2级(限功率)03H:3级(关闭) water_leak_status_from_insbat = ( data.ins_water_leak_dcdc_status >> 4) & 0x0F; // 00 正常,01 异常漏水 water_leak_status_from_dynbat = (data.dyn_water_leak_status >> 4) & 0x0F; // 00 正常,01 异常漏水 dcdc_status_from_insbat = (data.ins_water_leak_dcdc_status) & 0x0F; // 00 正常,01 故障 // std::cout << "dyn_charge_level: " << std::hex << static_cast(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; } 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); //模块状态 power_bus_status.dcDcModuleStatus = data.dcDcFaultWord1; power_bus_status.coolingSystemStatus = data.dcDcFaultWord2; //绝缘状态 power_bus_status.powerBusInsulationStatus = data.powerBusInsulationStatus == 0x55 ? 0 : 1; power_bus_status.aBusInsulationStatus = data.aBusInsulationStatus == 0x55 ? 0 : 1; //电源状态 power_bus_status.meterPowerLossSignal = data.meterPowerLossSignal == 0x55 ? 0 : 1; power_bus_status.emergencyPowerLossSignal = data.emergencyPowerLossSignal == 0x55 ? 0 : 1; //温度 power_bus_status.dcDcTemperature = data.dcDcTemperature-40; //电压电流参数 power_bus_status.powerBusVoltage = data.powerBusVoltage * 0.1; power_bus_status.dcDc5ModuleCurrent = data.dcDc5ModuleCurrent * 0.1; power_bus_status.powerBusCurrent = data.powerBusCurrent * 0.1; power_bus_status.busbarAVoltage = data.busbarAVoltage * 0.1; power_bus_status.propulsionMotorControlBoxCurrent = data.propulsionMotorControlBoxCurrent * 0.1; power_bus_status.busbarACurrent = data.busbarACurrent * 0.1; power_bus_status.lithiumBatteryGroupMeterCurrent = data.lithiumBatteryGroupMeterCurrent * 0.1; power_bus_status.bowHighVoltageDistributionBoxCurrent = data.bowHighVoltageDistributionBoxCurrent * 0.1; power_bus_status.sternFTDevice45Current = data.sternFTDevice45Current * 0.1; power_bus_status.tyzReservedSwitchCurrent = data.tyzReservedSwitchCurrent * 0.1; power_bus_status.sternRudderSwitch1Current = data.sternRudderSwitch1Current * 0.1; power_bus_status.reservedCurrent1 = data.reservedCurrent1 * 0.1; power_bus_status.sternRudderSwitch2Current = data.sternRudderSwitch2Current * 0.1; power_bus_status.reservedCurrent2 = data.reservedCurrent2 * 0.1; power_bus_status.fbReservedSwitchCurrent = data.fbReservedSwitchCurrent * 0.1; power_bus_status.reservedCurrent3 = data.reservedCurrent3 * 0.1; //冷却水压力 power_bus_status.coolWaterPressure = data.coolWaterPressure * 0.1; }; 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); //电源状态 power_a_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1; power_a_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1; //浸水报警 power_a_bus_status.waterIngressionAlarm = data.waterIngressionAlarm; //电压电流参数 power_a_bus_status.busbarBVoltage = data.busbarBVoltage * 0.1; power_a_bus_status.busbarBCurrent = data.busbarBCurrent * 0.1; power_a_bus_status.bowFTDevice123Current = data.bowFTDevice123Current * 0.1; power_a_bus_status.actuatorCurrent = data.actuatorCurrent * 0.1; power_a_bus_status.mastSteeringGearControlBoxCurrent = data.mastSteeringGearControlBoxCurrent * 0.1; power_a_bus_status.xczCurrent = data.xczCurrent * 0.1; power_a_bus_status.bowRudderControlBoxCurrent = data.bowRudderControlBoxCurrent * 0.1; power_a_bus_status.openWaterCoverStartCylinderCurrent = data.openWaterCoverStartCylinderCurrent * 0.1; }; 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); //电源状态 instrument_main_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1; instrument_main_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1; //绝缘状态 instrument_main_bus_status.instrumentBusbarInsulationLow = data.instrumentBusbarInsulationLow == 0x55 ? 0 : 1; //电压电流参数 instrument_main_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage * 0.1; instrument_main_bus_status.bowLowVoltageDistributionBoxCurrent = data.bowLowVoltageDistributionBoxCurrent * 0.1; instrument_main_bus_status.dcC1InstrumentDC48VCurrent = data.dcC1InstrumentDC48VCurrent * 0.1; instrument_main_bus_status.reservedCurrent1 = data.reservedCurrent1 * 0.1; instrument_main_bus_status.emergencyLithiumBatteryGroup2Current = data.emergencyLithiumBatteryGroup2Current * 0.1; instrument_main_bus_status.lithiumBatteryGroupInstrumentCurrent = data.lithiumBatteryGroupInstrumentCurrent * 0.1; instrument_main_bus_status.unit4InstrumentDC48VCurrent = data.unit4InstrumentDC48VCurrent * 0.1; instrument_main_bus_status.reservedCurrent2 = data.reservedCurrent2 * 0.1; instrument_main_bus_status.emergency2BusbarVoltage = data.emergency2BusbarVoltage * 0.1; instrument_main_bus_status.compositeEnergyManagementSystemEmergencyDC48VCurrent = data.compositeEnergyManagementSystemEmergencyDC48VCurrent * 0.1; instrument_main_bus_status.fuelCellSecuritySystemEmergencyDC48VCurrent = data.fuelCellSecuritySystemEmergencyDC48VCurrent * 0.1; instrument_main_bus_status.plcControlPowerCurrent = data.plcControlPowerCurrent * 0.1; } 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); //电源状态 instrument_bus_status.powerFailureSignal = data.powerFailureSignal == 0x55 ? 0 : 1; instrument_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1; //浸水报警 instrument_bus_status.waterIngressionAlarm = data.waterIngressionAlarm; //电压电流参数 instrument_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage * 0.1; instrument_bus_status.instrumentBusbarCurrent = data.instrumentBusbarCurrent * 0.1; instrument_bus_status.unit1Current = data.unit1Current * 0.1; instrument_bus_status.unit2Current = data.unit2Current * 0.1; instrument_bus_status.unit3Current = data.unit3Current * 0.1; instrument_bus_status.unit5Current = data.unit5Current * 0.1; instrument_bus_status.bowPZDeviceCurrent = data.bowPZDeviceCurrent * 0.1; instrument_bus_status.emergencyLithiumBatteryGroup1Current = data.emergencyLithiumBatteryGroup1Current * 0.1; instrument_bus_status.emergency1BusbarVoltage = data.emergency1BusbarVoltage * 0.1; } }; #endif