diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index 16359d0..c7b35df 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -169,8 +169,9 @@ bool LowerCommManager::updatePoweSystemStates(){ m_pm->m_db->insertData(m_pm->m_pmCurrentState.ccustate); //写入数据库 //DEBUG //写入文件 - std::ofstream outFile("ccuState.txt", std::ios::app); - coutMsg(m_CcuCurrentState, outFile); + // std::ofstream outFile("ccuState.txt", std::ios::app); + // coutMsg(m_CcuCurrentState, outFile); + coutMsg(m_CcuCurrentState,std::cout); msg_CcuStateFbMsg_Update_time = time; } if(!m_udpComm->m_qReceiveDisHighVolBusBuffer.empty()) @@ -442,7 +443,7 @@ void LowerCommManager::coutMsg(const msg_CcuStateFbMsg& p, std::ostream& os){ os << std::dec; os << "仪表LINK电压: " << p.data.ins_voltage_link * 0.01 << " V\n"; os << "仪表PACK电压: " << p.data.ins_voltage_pack * 0.01 << " V\n"; - os << "仪表电流: " << static_cast (p.data.ins_current) * 0.01 << " A\n"; + os << "仪表电流: " << static_cast (p.data.ins_current) * 0.05 << " A\n"; os << "仪表正端绝缘电阻: " << p.data.ins_resistance_pos << " kΩ\n"; os << "仪表负端绝缘电阻: " << p.data.ins_resistance_neg << " kΩ\n"; os << "动力LINK电压: " << p.data.dyn_voltage_link * 0.01 << " V\n"; diff --git a/src/pPowerManger/httpserver/data.h b/src/pPowerManger/httpserver/data.h index ed7cf43..41c4196 100644 --- a/src/pPowerManger/httpserver/data.h +++ b/src/pPowerManger/httpserver/data.h @@ -232,6 +232,14 @@ const std::string DATA_HTML = R"( 动力电池输入功率: 正在加载... +
+ 仪表电池最大放电功率: + 正在加载... +
+
+ 动力电池最大放电功率: + 正在加载... +
@@ -308,20 +316,20 @@ const std::string DATA_HTML = R"( 仪表报警标志6: 正在加载... +
+ 仪表紧急状态: + 正在加载... +
+
+ 动力紧急状态: + 正在加载... +
-
- 设备在线标志1: - 正在加载... -
-
- 设备在线标志2: - 正在加载... -
仪表锂电在线状态: 正在加载... @@ -971,6 +979,14 @@ function updateSystemData(data) { if (data.dyn_power_input !== undefined) { document.getElementById('dyn-power-input').textContent = data.dyn_power_input + ' W'; } + if (data.ins_max_discharge_power !== undefined) { + document.getElementById('ins-max-discharge-power').textContent = + (data.ins_max_discharge_power * 0.05).toFixed(2) + ' kW'; + } + if (data.dyn_max_discharge_power !== undefined) { + document.getElementById('dyn-max-discharge-power').textContent = + (data.dyn_max_discharge_power * 0.05).toFixed(2) + ' kW'; + } // 继电器状态 if (data.ins_relay_status1 !== undefined) { @@ -987,6 +1003,12 @@ function updateSystemData(data) { } // 报警标志 + if (data.ins_emergency_status !== undefined) { + document.getElementById('ins-emergency-status').textContent = getEmergencyStatusText(data.ins_emergency_status); + } + if (data.dyn_emergency_status !== undefined) { + document.getElementById('dyn-emergency-status').textContent = getEmergencyStatusText(data.dyn_emergency_status); + } if (data.dyn_alarm_flag1 !== undefined) { document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1; } @@ -1520,6 +1542,18 @@ if (data.power_a_bus_status) { } } +// 紧急状态文本转换 +function getEmergencyStatusText(status) { + const statuses = { + 0: '正常', + 58: '一级紧急', + 59: '二级紧急', + 60: '三级紧急', + 61: '四级紧急', + }; + return statuses[status] || '未知状态'; +} + // 在线状态文本转换 function getOnlineStateText(state) { const states = { diff --git a/src/pPowerManger/httpserver/httpserver.cpp b/src/pPowerManger/httpserver/httpserver.cpp index 0d386a0..ca343e8 100644 --- a/src/pPowerManger/httpserver/httpserver.cpp +++ b/src/pPowerManger/httpserver/httpserver.cpp @@ -131,6 +131,7 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_ m_powerManger->m_CcuColCmd.fcuCmd = fuelCellCommand; m_powerManger->m_CcuColCmd.fcuPowerEfficiency = fuelCellPower; m_powerManger->m_CcuColCmd.insBatCmd = instrumentBattery; + cout << "powerBatteryPower:" << (int)instrumentBattery << endl; m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery; m_powerManger->m_CcuColCmd.powerBatEfficiency = powerBatteryPower; @@ -453,8 +454,8 @@ void HttpServer::pushSystemData() { //紧急状态 - j["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态:00H-无紧急, 01H-紧急 - j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态:00H-无紧急, 01H-紧急 + j["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态 + j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态 j["ins_soc_threshold1"] = Json::Value(m_systemData->ins_soc_threshold1); // 仪表电池1 SOC门限 j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限 diff --git a/src/pPowerManger/systemData.h b/src/pPowerManger/systemData.h index fe68a03..0c15936 100644 --- a/src/pPowerManger/systemData.h +++ b/src/pPowerManger/systemData.h @@ -83,8 +83,8 @@ public: float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW //电池SOC - float ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100 - float dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100 + int ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100 + int dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100 //电池能量 float ins_total_energy; // 仪表电池总能量,单位:0.1kWh @@ -506,7 +506,7 @@ public: //电池电压电流 ins_voltage_link = data.ins_voltage_link * 0.01; ins_voltage_pack = data.ins_voltage_pack * 0.01; - ins_current = static_cast(data.ins_current) * 0.01; + 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.01; diff --git a/src/pPowerManger/udpcomm/udpComm.cpp b/src/pPowerManger/udpcomm/udpComm.cpp index aeb079b..3421efc 100644 --- a/src/pPowerManger/udpcomm/udpComm.cpp +++ b/src/pPowerManger/udpcomm/udpComm.cpp @@ -93,6 +93,7 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s) sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighVolBusFbMsg), sizeof(cChecksum)) & 0xFF; if (sum != p->checkCode) { sError.push_back("DisSys HVBus Msg Check error"); + LOG_F(ERROR, "DisSys HVBus Msg Check error sum: %d, source checkCode: %d", sum, p->checkCode); return false; } s = *p; @@ -108,6 +109,7 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s) sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighAVolBusFbMsg), sizeof(cChecksum)) & 0xFF; if (sum!= p->checkCode) { sError.push_back("DisSys HVABus Msg Check error"); + LOG_F(ERROR, "DisSys HVABus Msg Check error sum: %d, source checkCode: %d", sum, p->checkCode); return false; } s = *p; @@ -121,6 +123,7 @@ bool udpComm::getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s) sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowMainBusFbMsg), sizeof(cChecksum)) & 0xFF; if (sum!= p->checkCode) { sError.push_back("DisSys HVBBus Msg Check error"); + LOG_F(ERROR, "DisSys HVBBus Msg Check error sum: %d, source checkCode: %d", sum, p->checkCode); return false; } s = *p; @@ -135,6 +138,7 @@ bool udpComm::getMsgFromBuff(char *m, msg_disLowBusFbMsg &s) sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowBusFbMsg), sizeof(cChecksum)) & 0xFF; if (sum!= p->checkCode) { sError.push_back("DisSys LVBus Msg Check error"); + LOG_F(ERROR, "DisSys LVBus Msg Check error sum: %d, source checkCode: %d", sum, p->checkCode); return false; } s = *p; @@ -503,12 +507,22 @@ bool udpComm::sendCcuColCmd(const ccuColCmd cmd) { unsigned char* msgBuf; Checksum cc; - msg_CcuColCmdMsg* msg = new msg_CcuColCmdMsg; + msg_CcuColCmdMsg* msg = new msg_CcuColCmdMsg(); + memset(msg, 0, sizeof(msg_CcuColCmdMsg)); // 初始化所有字段为0 + msg->header.id = CCU_CMD_ID; msg->header.start1 = CCU_UDPMSG_START1; msg->header.start2 = CCU_UDPMSG_START2; msg->header.length = sizeof(ccuColCmd); - getDate(msg->date.year,msg->date.month,msg->date.day,msg->date.hour,msg->date.minute,msg->date.second,msg->date.milliseconds); + + // 确保日期获取成功 + if(!getDate(msg->date.year,msg->date.month,msg->date.day, + msg->date.hour,msg->date.minute,msg->date.second,msg->date.milliseconds)) { + LOG_F(ERROR, "Failed to get current date/time"); + delete msg; + return false; + } + msg->cmd = cmd; msgBuf = reinterpret_cast(msg); cc = calculateChecksum(msgBuf,sizeof(msg_CcuColCmdMsg));