This commit is contained in:
zjk
2025-05-25 08:41:58 +08:00
parent ee050bb58b
commit 2be7ce203e
5 changed files with 68 additions and 18 deletions
+4 -3
View File
@@ -169,8 +169,9 @@ bool LowerCommManager::updatePoweSystemStates(){
m_pm->m_db->insertData(m_pm->m_pmCurrentState.ccustate); //写入数据库 m_pm->m_db->insertData(m_pm->m_pmCurrentState.ccustate); //写入数据库
//DEBUG //DEBUG
//写入文件 //写入文件
std::ofstream outFile("ccuState.txt", std::ios::app); // std::ofstream outFile("ccuState.txt", std::ios::app);
coutMsg(m_CcuCurrentState, outFile); // coutMsg(m_CcuCurrentState, outFile);
coutMsg(m_CcuCurrentState,std::cout);
msg_CcuStateFbMsg_Update_time = time; msg_CcuStateFbMsg_Update_time = time;
} }
if(!m_udpComm->m_qReceiveDisHighVolBusBuffer.empty()) if(!m_udpComm->m_qReceiveDisHighVolBusBuffer.empty())
@@ -442,7 +443,7 @@ void LowerCommManager::coutMsg(const msg_CcuStateFbMsg& p, std::ostream& os){
os << std::dec; os << std::dec;
os << "仪表LINK电压: " << p.data.ins_voltage_link * 0.01 << " V\n"; os << "仪表LINK电压: " << p.data.ins_voltage_link * 0.01 << " V\n";
os << "仪表PACK电压: " << p.data.ins_voltage_pack * 0.01 << " V\n"; os << "仪表PACK电压: " << p.data.ins_voltage_pack * 0.01 << " V\n";
os << "仪表电流: " << static_cast<int16_t> (p.data.ins_current) * 0.01 << " A\n"; os << "仪表电流: " << static_cast<int16_t> (p.data.ins_current) * 0.05 << " A\n";
os << "仪表正端绝缘电阻: " << p.data.ins_resistance_pos << " kΩ\n"; os << "仪表正端绝缘电阻: " << p.data.ins_resistance_pos << " kΩ\n";
os << "仪表负端绝缘电阻: " << p.data.ins_resistance_neg << " kΩ\n"; os << "仪表负端绝缘电阻: " << p.data.ins_resistance_neg << " kΩ\n";
os << "动力LINK电压: " << p.data.dyn_voltage_link * 0.01 << " V\n"; os << "动力LINK电压: " << p.data.dyn_voltage_link * 0.01 << " V\n";
+42 -8
View File
@@ -232,6 +232,14 @@ const std::string DATA_HTML = R"(
<span class="data-label">动力电池输入功率:</span> <span class="data-label">动力电池输入功率:</span>
<span class="data-value" id="dyn-power-input">正在加载...</span> <span class="data-value" id="dyn-power-input">正在加载...</span>
</div> </div>
<div class="data-item">
<span class="data-label">仪表电池最大放电功率:</span>
<span class="data-value" id="ins-max-discharge-power">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池最大放电功率:</span>
<span class="data-value" id="dyn-max-discharge-power">正在加载...</span>
</div>
</div> </div>
</div> </div>
@@ -308,20 +316,20 @@ const std::string DATA_HTML = R"(
<span class="data-label">仪表报警标志6:</span> <span class="data-label">仪表报警标志6:</span>
<span class="data-value" id="ins-alarm-flag6">正在加载...</span> <span class="data-value" id="ins-alarm-flag6">正在加载...</span>
</div> </div>
<div class="data-item">
<span class="data-label">仪表紧急状态:</span>
<span class="data-value" id="ins-emergency-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力紧急状态:</span>
<span class="data-value" id="dyn-emergency-status">正在加载...</span>
</div>
</div> </div>
</div> </div>
<button class="collapsible">设备在线状态</button> <button class="collapsible">设备在线状态</button>
<div class="content"> <div class="content">
<div class="system-data-grid"> <div class="system-data-grid">
<div class="data-item">
<span class="data-label">设备在线标志1:</span>
<span class="data-value" id="device-online-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">设备在线标志2:</span>
<span class="data-value" id="device-online-flag2">正在加载...</span>
</div>
<div class="data-item"> <div class="data-item">
<span class="data-label">仪表锂电在线状态:</span> <span class="data-label">仪表锂电在线状态:</span>
<span class="data-value" id="ins-online-state">正在加载...</span> <span class="data-value" id="ins-online-state">正在加载...</span>
@@ -971,6 +979,14 @@ function updateSystemData(data) {
if (data.dyn_power_input !== undefined) { if (data.dyn_power_input !== undefined) {
document.getElementById('dyn-power-input').textContent = data.dyn_power_input + ' W'; 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) { 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) { if (data.dyn_alarm_flag1 !== undefined) {
document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1; 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) { function getOnlineStateText(state) {
const states = { const states = {
+3 -2
View File
@@ -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.fcuCmd = fuelCellCommand;
m_powerManger->m_CcuColCmd.fcuPowerEfficiency = fuelCellPower; m_powerManger->m_CcuColCmd.fcuPowerEfficiency = fuelCellPower;
m_powerManger->m_CcuColCmd.insBatCmd = instrumentBattery; m_powerManger->m_CcuColCmd.insBatCmd = instrumentBattery;
cout << "powerBatteryPower:" << (int)instrumentBattery << endl;
m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery; m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery;
m_powerManger->m_CcuColCmd.powerBatEfficiency = powerBatteryPower; 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["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态
j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态:00H-无紧急, 01H-紧急 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_threshold1"] = Json::Value(m_systemData->ins_soc_threshold1); // 仪表电池1 SOC门限
j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限 j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限
+3 -3
View File
@@ -83,8 +83,8 @@ public:
float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW
//电池SOC //电池SOC
float ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100 int ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100
float dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100 int dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100
//电池能量 //电池能量
float ins_total_energy; // 仪表电池总能量,单位:0.1kWh float ins_total_energy; // 仪表电池总能量,单位:0.1kWh
@@ -506,7 +506,7 @@ public:
//电池电压电流 //电池电压电流
ins_voltage_link = data.ins_voltage_link * 0.01; ins_voltage_link = data.ins_voltage_link * 0.01;
ins_voltage_pack = data.ins_voltage_pack * 0.01; ins_voltage_pack = data.ins_voltage_pack * 0.01;
ins_current = static_cast<int16_t>(data.ins_current) * 0.01; ins_current = static_cast<int16_t>(data.ins_current) * 0.05;
ins_resistance_pos = data.ins_resistance_pos; ins_resistance_pos = data.ins_resistance_pos;
ins_resistance_neg = data.ins_resistance_neg; ins_resistance_neg = data.ins_resistance_neg;
dyn_voltage_link = data.dyn_voltage_link * 0.01; dyn_voltage_link = data.dyn_voltage_link * 0.01;
+16 -2
View File
@@ -93,6 +93,7 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s)
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighVolBusFbMsg), sizeof(cChecksum)) & 0xFF; sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighVolBusFbMsg), sizeof(cChecksum)) & 0xFF;
if (sum != p->checkCode) { if (sum != p->checkCode) {
sError.push_back("DisSys HVBus Msg Check error"); 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; return false;
} }
s = *p; 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; sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighAVolBusFbMsg), sizeof(cChecksum)) & 0xFF;
if (sum!= p->checkCode) { if (sum!= p->checkCode) {
sError.push_back("DisSys HVABus Msg Check error"); 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; return false;
} }
s = *p; 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; sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowMainBusFbMsg), sizeof(cChecksum)) & 0xFF;
if (sum!= p->checkCode) { if (sum!= p->checkCode) {
sError.push_back("DisSys HVBBus Msg Check error"); 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; return false;
} }
s = *p; 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; sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowBusFbMsg), sizeof(cChecksum)) & 0xFF;
if (sum!= p->checkCode) { if (sum!= p->checkCode) {
sError.push_back("DisSys LVBus Msg Check error"); 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; return false;
} }
s = *p; s = *p;
@@ -503,12 +507,22 @@ bool udpComm::sendCcuColCmd(const ccuColCmd cmd)
{ {
unsigned char* msgBuf; unsigned char* msgBuf;
Checksum cc; 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.id = CCU_CMD_ID;
msg->header.start1 = CCU_UDPMSG_START1; msg->header.start1 = CCU_UDPMSG_START1;
msg->header.start2 = CCU_UDPMSG_START2; msg->header.start2 = CCU_UDPMSG_START2;
msg->header.length = sizeof(ccuColCmd); 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; msg->cmd = cmd;
msgBuf = reinterpret_cast<unsigned char *>(msg); msgBuf = reinterpret_cast<unsigned char *>(msg);
cc = calculateChecksum(msgBuf,sizeof(msg_CcuColCmdMsg)); cc = calculateChecksum(msgBuf,sizeof(msg_CcuColCmdMsg));