完善了显示,修改了复合管控的通信协议

This commit is contained in:
zjk
2025-06-03 20:05:08 +08:00
parent 2be7ce203e
commit 8fab3bdf06
21 changed files with 543 additions and 116 deletions
+113
View File
@@ -0,0 +1,113 @@
src/pPowerManger/main.cpp:0:0: information: Too many #ifdef configurations - cppcheck only checks 12 of 78 configurations. Use --force to check all configurations. [toomanyconfigs]
^
src/pPowerManger/systemData.h:524:22: error: Array 'reserved2[1]' accessed at index 1, which is out of bounds. [arrayIndexOutOfBounds]
reserved2[i] = data.reserved2[i];
^
src/pPowerManger/systemData.h:523:23: note: Assuming that condition 'i<2' is not redundant
for(int i=0; i<2; i++) {
^
src/pPowerManger/systemData.h:524:22: note: Array index out of bounds
reserved2[i] = data.reserved2[i];
^
src/pPowerManger/systemData.h:524:42: error: Array 'data.reserved2[1]' accessed at index 1, which is out of bounds. [arrayIndexOutOfBounds]
reserved2[i] = data.reserved2[i];
^
src/pPowerManger/systemData.h:523:23: note: Assuming that condition 'i<2' is not redundant
for(int i=0; i<2; i++) {
^
src/pPowerManger/systemData.h:524:42: note: Array index out of bounds
reserved2[i] = data.reserved2[i];
^
src/pPowerManger/upmsg/uPower_pmState.h:14:9: error: Using 'memset' on struct that contains a 'std::vector'. [memsetClass]
memset(&state, 0, sizeof(state));
^
src/pPowerManger/logc/loguru.hpp:666:3: warning: Member variable 'LogScopeRAII::_verbosity' is not initialized in the constructor. [uninitMemberVar]
LogScopeRAII() : _file(nullptr) {} // No logging
^
src/pPowerManger/logc/loguru.hpp:666:3: warning: Member variable 'LogScopeRAII::_line' is not initialized in the constructor. [uninitMemberVar]
LogScopeRAII() : _file(nullptr) {} // No logging
^
src/pPowerManger/logc/loguru.hpp:666:3: warning: Member variable 'LogScopeRAII::_indent_stderr' is not initialized in the constructor. [uninitMemberVar]
LogScopeRAII() : _file(nullptr) {} // No logging
^
src/pPowerManger/logc/loguru.hpp:666:3: warning: Member variable 'LogScopeRAII::_start_time_ns' is not initialized in the constructor. [uninitMemberVar]
LogScopeRAII() : _file(nullptr) {} // No logging
^
src/pPowerManger/logc/loguru.hpp:666:3: warning: Member variable 'LogScopeRAII::_name' is not initialized in the constructor. [uninitMemberVar]
LogScopeRAII() : _file(nullptr) {} // No logging
^
src/pPowerManger/sqlit3/SQLite.h:13:5: style: Class 'SQLite' has a constructor with 1 argument that is not explicit. [noExplicitConstructor]
SQLite(const std::string& dbName);
^
src/pPowerManger/UpperCommManager.h:52:5: style: Class 'UpperCommManager' has a constructor with 1 argument that is not explicit. [noExplicitConstructor]
UpperCommManager(PowerManger* powerManager);
^
src/pPowerManger/httpserver/httpserver.h:20:5: style: Class 'HttpServer' has a constructor with 1 argument that is not explicit. [noExplicitConstructor]
HttpServer(int port = 8000);
^
src/pPowerManger/fsm/PowerManagerFsm.hpp:275:10: style: The function 'react' overrides a function in a base class but is not marked with a 'override' specifier. [missingOverride]
void react(FaultEvent const &);
^
src/pPowerManger/fsm/PowerManagerFsm.hpp:90:18: note: Virtual function in base class
virtual void react(FaultEvent const &e);
^
src/pPowerManger/fsm/PowerManagerFsm.hpp:275:10: note: Function in derived class
void react(FaultEvent const &);
^
src/pPowerManger/udpcomm/udpComm.h:54:31: style: C-style pointer casting [cstyleCast]
udpScoket->iSendMessageTo((void*) msg, size, ccuPort, ccuHost);
^
src/pPowerManger/upmsg/uPower_disSysState.h:34:42: style: C-style pointer casting [cstyleCast]
dis["HVolBusBreaker_uint16"] = *(unsigned short*)pdis1;
^
src/pPowerManger/upmsg/uPower_disSysState.h:35:42: style: C-style pointer casting [cstyleCast]
dis["HVolABusBreaker_unit16"] = *(unsigned short*)pdis2;
^
src/pPowerManger/upmsg/uPower_disSysState.h:36:42: style: C-style pointer casting [cstyleCast]
dis["HVolBBusBreaker_unit16"] = *(unsigned short*)pdis3;
^
src/pPowerManger/upmsg/uPower_disSysState.h:37:42: style: C-style pointer casting [cstyleCast]
dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4;
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:29:20: style: Variable 'cmd.id' is reassigned a value before the old one has been used. [redundantAssignment]
cmd.id = root["id_uint8"].asUInt();
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:24:20: note: cmd.id is assigned
cmd.id = -1;
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:29:20: note: cmd.id is overwritten
cmd.id = root["id_uint8"].asUInt();
^
src/pPowerManger/upmsg/uExternComm_setOpCondition.h:34:13: style: Statements following 'return' will never be executed. [unreachableCode]
LOG_F(INFO, "上位机指令:opCondition: %d", root["state_uint8"].asUInt());
^
src/pPowerManger/udpcomm/udpComm.h:45:38: performance: Function parameter 'cmd' should be passed by const reference. [passedByValue]
bool sendCcuColCmd(const ccuColCmd cmd);
^
src/pPowerManger/fsm/PowerManagerFsm.hpp:49:27: performance: Function parameter 'eventName' should be passed by const reference. [passedByValue]
TestEvent(std::string eventName, unsigned int type,unsigned int eventId) : eventName(eventName), eventId(eventId),type(type) {};
^
src/pPowerManger/LowerCommManager.h:85:41: performance: Function parameter 'cmd' should be passed by const reference. [passedByValue]
bool sendCcuCommand(const ccuColCmd cmd);
^
src/pPowerManger/upmsg/uDevice_secdistState.h:195:61: style: Parameter 'state' can be declared as reference to const [constParameter]
std::string buildSecdistStateToJson(DeviceSecdistState &state){
^
src/pPowerManger/upmsg/uDevice_secdistState.h:435:39: style: Parameter 'driver' can be declared as reference to const [constParameter]
std::string buildMsg(DriverTable &driver){
^
src/pPowerManger/upmsg/uPlan_taskStart.h:29:20: error: Uninitialized variable: mission [uninitvar]
return mission;
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:39:16: warning: Uninitialized variable: cmd.cmd [uninitvar]
return cmd;
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:34:40: note: Assuming condition is false
if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
^
src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:39:16: note: Uninitialized variable: cmd.cmd
return cmd;
^
nofile:0:0: information: Cppcheck cannot find all the include files (use --check-config for details) [missingInclude]
+68
View File
@@ -0,0 +1,68 @@
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_:
BO_ 256 EngineData: 8 Vector__XXX
SG_ Temp : 32|8@1- (1,0) [0|0] "" Vector__XXX
SG_ Speed : 16|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ RPM : 0|16@1+ (1,0) [0|0] "" Vector__XXX
BO_ 512 VehicleStatus: 4 Vector__XXX
SG_ LightStatus : 4|4@1+ (1,0) [0|0] "" Vector__XXX
SG_ DoorStatus : 0|4@1+ (1,0) [0|0] "" Vector__XXX
BO_ 2483135745 CircuitBreakerStatus: 8 Vector__XXX
SG_ SternRudder1Breaker : 56|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ SternFT45Breaker : 48|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ BowDistBoxBreaker : 40|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ DCDC5Breaker : 32|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ BatteryMeterBreaker : 24|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ MotorBreaker : 16|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ BatteryBreaker : 8|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ FuelCellBreaker : 0|8@1+ (1,0) [0|0] "" Vector__XXX
+1 -1
View File
@@ -171,7 +171,7 @@ bool LowerCommManager::updatePoweSystemStates(){
//写入文件 //写入文件
// 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); // 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())
+5 -5
View File
@@ -79,6 +79,9 @@ PowerManger::~PowerManger()
{ {
delete m_db; delete m_db;
delete m_lowerCommManager; delete m_lowerCommManager;
delete m_upperCommManager;
delete m_systemData;
delete m_httpServer;
} }
//--------------------------------------------------------- //---------------------------------------------------------
@@ -159,8 +162,7 @@ bool PowerManger::Iterate()
m_systemData->device_common_status.dis_lv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighBVolBusFbMsg_Update_time; m_systemData->device_common_status.dis_lv_c1.lastUpdateTime = m_lowerCommManager->msg_disHighBVolBusFbMsg_Update_time;
m_systemData->device_common_status.dis_lv_c2.lastUpdateTime = m_lowerCommManager->msg_disLowBusFbMsg_Update_time; m_systemData->device_common_status.dis_lv_c2.lastUpdateTime = m_lowerCommManager->msg_disLowBusFbMsg_Update_time;
m_systemData->updateCommonStatus(); m_systemData->updateCommonStatus();
// 运行状态 // m_CcuColCmd.heartbeat
if (m_ticker++ % 5 == 0) if (m_ticker++ % 5 == 0)
{ {
m_CcuColCmd.heartbeat++; m_CcuColCmd.heartbeat++;
@@ -205,7 +207,6 @@ bool PowerManger::OnStartUp()
registerVariables(); registerVariables();
// 初始化状态机 // 初始化状态机
PowerManagerFsm::init(this); PowerManagerFsm::init(this);
PowerManagerFsm::start(); PowerManagerFsm::start();
@@ -341,7 +342,7 @@ void PowerManger::initControlCmd()
m_CcuColCmd.fcmode = 0x00; //默认无效 m_CcuColCmd.fcmode = 0x00; //默认无效
m_CcuColCmd.fcuCmd = 0x00; //无效指令 m_CcuColCmd.fcuCmd = 0x00; //无效指令
m_CcuColCmd.fcuPowerEfficiency = 15; //默认为15kw m_CcuColCmd.fcuPowerEfficiency = 15; //默认为15kw
m_CcuColCmd.fcuInsEfficiency = 00; //预留指令,无效 m_CcuColCmd.insChargeEnable = 00; //不允许充电
m_CcuColCmd.insBatCmd = 0x00; //无效指令 m_CcuColCmd.insBatCmd = 0x00; //无效指令
m_CcuColCmd.powerBatCmd = 0x00; //无效指令 m_CcuColCmd.powerBatCmd = 0x00; //无效指令
m_CcuColCmd.powerBatEfficiency = 230; //默认为最大 m_CcuColCmd.powerBatEfficiency = 230; //默认为最大
@@ -368,7 +369,6 @@ unsigned char PowerManger::getFaultLevel()
return maxLevel; return maxLevel;
} }
void PowerManger::injectFault(unsigned type,unsigned int faultCode){ void PowerManger::injectFault(unsigned type,unsigned int faultCode){
LOG_F(INFO, "注入故障: %d %d", type, faultCode); LOG_F(INFO, "注入故障: %d %d", type, faultCode);
TestEvent testEvent("故障注入测试",type,faultCode); TestEvent testEvent("故障注入测试",type,faultCode);
+21 -10
View File
@@ -3,16 +3,27 @@
#include "driver.h" #include "driver.h"
#include "fsm/PowerManagerFsm.hpp" #include "fsm/PowerManagerFsm.hpp"
UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) { UpperCommManager::UpperCommManager(PowerManger* pm) :
// 初始化消息对象 m_pm(pm),
m_secdistStateMsg = uDevice_secdistStateMsg(); m_secdistStateMsg(),
m_setOpConditionMsg = uExternComm_setOpConditionMsg(); m_setOpConditionMsg(),
m_depthMsg = uDevice_depthMsg(); m_depthMsg(),
m_taskStartMsg = uPlan_taskStartMsg(); m_taskStartMsg(),
m_equInsStateMsg = uPower_equInsStateMsg(); m_equInsStateMsg(),
m_equStateMsg = uPower_equStateMsg(); m_equStateMsg(),
m_setPMSysMsg = uExternComm_setPowerSystemMsg(); m_setPMSysMsg(),
}; m_disSysStateMsg(),
m_currentStateMsg(),
m_pmStateMsg(),
m_fcsStateMsg(),
m_liBatStateMsg(),
m_setOpModeMsg(),
m_taskStopMsg(),
m_setDevSwitchMsg(),
m_sysStateMsg(),
m_msCmd(),
m_driver() {
}
bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) { bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) {
if (key == m_sysStateMsg.key) if (key == m_sysStateMsg.key)
+1 -1
View File
@@ -50,7 +50,7 @@ class PowerManger; // 前向声明
class UpperCommManager { class UpperCommManager {
public: public:
UpperCommManager(PowerManger* powerManager); UpperCommManager(PowerManger* powerManager);
~UpperCommManager(); ~UpperCommManager(){};
// 周期调用 // 周期调用
void processPeriodicTasks(); void processPeriodicTasks();
+6 -11
View File
@@ -2,17 +2,12 @@
Driver::Driver() Driver::Driver()
{ {
currentDriverTable = new DriverTable(); currentDriverTable.reset(new DriverTable());
nextDriverTable = new DriverTable(); nextDriverTable.reset(new DriverTable());
debug = false; debug = false;
} }
Driver::~Driver() Driver::~Driver() = default;
{
delete currentDriverTable;
delete nextDriverTable;
}
void Driver::setDebug(bool debug) void Driver::setDebug(bool debug)
{ {
@@ -734,17 +729,17 @@ std::string Driver::saveDriverTableToJson(const DriverTable* driverTable)
} }
std::string Driver::getDriverTableJson() std::string Driver::getDriverTableJson()
{ {
return saveDriverTableToJson(currentDriverTable); return saveDriverTableToJson(currentDriverTable.get());
} }
std::string Driver::getSubDisCmdJson(const DriverTable* driverTable) std::string Driver::getSubDisCmdJson(const DriverTable* driverTable)
{ {
return saveDriverTableToJson(currentDriverTable); return saveDriverTableToJson(currentDriverTable.get());
} }
std::string Driver::getDriveStateJson(const DriverTable* driverTable) std::string Driver::getDriveStateJson(const DriverTable* driverTable)
{ {
return saveDriverTableToJson(currentDriverTable); return saveDriverTableToJson(currentDriverTable.get());
} }
+3 -2
View File
@@ -1,5 +1,6 @@
#ifndef DRIVER_H #ifndef DRIVER_H
#define DRIVER_H #define DRIVER_H
#include <memory>
#include "json/json.h" #include "json/json.h"
#include "iostream" #include "iostream"
#include <sstream> #include <sstream>
@@ -96,8 +97,8 @@ public:
void setDebug(bool debug); void setDebug(bool debug);
public: public:
DriverTable* currentDriverTable; std::unique_ptr<DriverTable> currentDriverTable;
DriverTable* nextDriverTable; std::unique_ptr<DriverTable> nextDriverTable;
//操作函数,操作指定设备 //操作函数,操作指定设备
//TODO: 增加设备操作函数 //TODO: 增加设备操作函数
+1 -3
View File
@@ -6,13 +6,11 @@ void StandbyState::entry() {
// pm->m_CcuColCmd.fcuCmd = FcuCommand::Stop; // pm->m_CcuColCmd.fcuCmd = FcuCommand::Stop;
// pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop; // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop;
// 启动流程 仪表电一直设置为启动 // 启动流程 仪表电一直设置为启动
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
// 启动设备 // 启动设备
pm->workCondition = WorkCondition::STANDBY; pm->workCondition = WorkCondition::STANDBY;
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd); pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
//
LOG_F(INFO, "WorkCondition %d", pm->workCondition); LOG_F(INFO, "WorkCondition %d", pm->workCondition);
} }
void StandbyState::react(StandbyEvent const &) { void StandbyState::react(StandbyEvent const &) {
@@ -356,6 +356,26 @@ body {
</div> </div>
</div> </div>
<div class="panel-title">主机状态</div>
<div class="control-group">
<label class="control-label">主机状态指令</label>
<div class="radio-group">
<label class="radio-option">
<input type="radio" name="hostStatus" value="AAH" checked>
<span>运行</span>
</label>
<label class="radio-option">
<input type="radio" name="hostStatus" value="FFH">
<span>关机</span>
</label>
<label class="radio-option">
<input type="radio" name="hostStatus" value="55H">
<span>故障</span>
</label>
</div>
</div>
<button type="submit" class="button form-submit">提交配置</button> <button type="submit" class="button form-submit">提交配置</button>
<div id="statusMessage" class="status-message"></div> <div id="statusMessage" class="status-message"></div>
+116 -9
View File
@@ -189,7 +189,7 @@ const std::string DATA_HTML = R"(
</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"> <div class="data-item">
@@ -201,13 +201,37 @@ const std::string DATA_HTML = R"(
<span class="data-value" id="dyn-soc">正在加载...</span> <span class="data-value" id="dyn-soc">正在加载...</span>
</div> </div>
<div class="data-item"> <div class="data-item">
<span class="data-label">仪表电池电压:</span> <span class="data-label">仪表电池LINK电压:</span>
<span class="data-value" id="ins-voltage-link">正在加载...</span> <span class="data-value" id="ins-voltage-link">正在加载...</span>
</div> </div>
<div class="data-item"> <div class="data-item">
<span class="data-label">动力电池电压:</span> <span class="data-label">仪表电池PACK电压:</span>
<span class="data-value" id="ins-voltage-pack">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池正极绝缘电阻:</span>
<span class="data-value" id="ins-resistance-pos">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池负极绝缘电阻:</span>
<span class="data-value" id="ins-resistance-neg">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池LINK电压:</span>
<span class="data-value" id="dyn-voltage-link">正在加载...</span> <span class="data-value" id="dyn-voltage-link">正在加载...</span>
</div> </div>
<div class="data-item">
<span class="data-label">动力电池PACK电压:</span>
<span class="data-value" id="dyn-voltage-pack">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池正极绝缘电阻:</span>
<span class="data-value" id="dyn-resistance-pos">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池负极绝缘电阻:</span>
<span class="data-value" id="dyn-resistance-neg">正在加载...</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-current">正在加载...</span> <span class="data-value" id="ins-current">正在加载...</span>
@@ -262,6 +286,38 @@ const std::string DATA_HTML = R"(
<span class="data-label">动力继电器2:</span> <span class="data-label">动力继电器2:</span>
<span class="data-value" id="dyn-relay-status2">正在加载...</span> <span class="data-value" id="dyn-relay-status2">正在加载...</span>
</div> </div>
<div class="data-item">
<span class="data-label">仪表正极继电器:</span>
<span class="data-value" id="ins-pos-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表充电继电器:</span>
<span class="data-value" id="ins-charge-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表预充继电器:</span>
<span class="data-value" id="ins-precharge-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表负极继电器:</span>
<span class="data-value" id="ins-neg-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力正极继电器:</span>
<span class="data-value" id="dyn-pos-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力充电继电器:</span>
<span class="data-value" id="dyn-charge-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力预充继电器:</span>
<span class="data-value" id="dyn-precharge-relay-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力负极继电器:</span>
<span class="data-value" id="dyn-neg-relay-status">正在加载...</span>
</div>
</div> </div>
</div> </div>
@@ -956,10 +1012,28 @@ function updateSystemData(data) {
document.getElementById('dyn-soc').textContent = (data.dyn_soc).toFixed(1) + '%'; document.getElementById('dyn-soc').textContent = (data.dyn_soc).toFixed(1) + '%';
} }
if (data.ins_voltage_link !== undefined) { if (data.ins_voltage_link !== undefined) {
document.getElementById('ins-voltage-link').textContent = (data.ins_voltage_link ).toFixed(2) + ' V'; document.getElementById('ins-voltage-link').textContent = (data.ins_voltage_link).toFixed(2) + ' V';
}
if (data.ins_voltage_pack !== undefined) {
document.getElementById('ins-voltage-pack').textContent = (data.ins_voltage_pack).toFixed(2) + ' V';
}
if (data.ins_resistance_pos !== undefined) {
document.getElementById('ins-resistance-pos').textContent = (data.ins_resistance_pos).toFixed(2) + ' kΩ';
}
if (data.ins_resistance_neg !== undefined) {
document.getElementById('ins-resistance-neg').textContent = (data.ins_resistance_neg).toFixed(2) + ' kΩ';
} }
if (data.dyn_voltage_link !== undefined) { if (data.dyn_voltage_link !== undefined) {
document.getElementById('dyn-voltage-link').textContent = (data.dyn_voltage_link ).toFixed(2) + ' V'; document.getElementById('dyn-voltage-link').textContent = (data.dyn_voltage_link).toFixed(2) + ' V';
}
if (data.dyn_voltage_pack !== undefined) {
document.getElementById('dyn-voltage-pack').textContent = (data.dyn_voltage_pack).toFixed(2) + ' V';
}
if (data.dyn_resistance_pos !== undefined) {
document.getElementById('dyn-resistance-pos').textContent = (data.dyn_resistance_pos).toFixed(2) + ' kΩ';
}
if (data.dyn_resistance_neg !== undefined) {
document.getElementById('dyn-resistance-neg').textContent = (data.dyn_resistance_neg).toFixed(2) + ' kΩ';
} }
if (data.ins_current !== undefined) { if (data.ins_current !== undefined) {
document.getElementById('ins-current').textContent = (data.ins_current).toFixed(2) + ' A'; document.getElementById('ins-current').textContent = (data.ins_current).toFixed(2) + ' A';
@@ -974,18 +1048,18 @@ function updateSystemData(data) {
document.getElementById('dyn-total-energy').textContent = data.dyn_total_energy + ' Wh'; document.getElementById('dyn-total-energy').textContent = data.dyn_total_energy + ' Wh';
} }
if (data.ins_power_input !== undefined) { if (data.ins_power_input !== undefined) {
document.getElementById('ins-power-input').textContent = data.ins_power_input + ' W'; document.getElementById('ins-power-input').textContent = data.ins_power_input + ' KW';
} }
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 + ' KW';
} }
if (data.ins_max_discharge_power !== undefined) { if (data.ins_max_discharge_power !== undefined) {
document.getElementById('ins-max-discharge-power').textContent = document.getElementById('ins-max-discharge-power').textContent =
(data.ins_max_discharge_power * 0.05).toFixed(2) + ' kW'; (data.ins_max_discharge_power).toFixed(2) + ' kW';
} }
if (data.dyn_max_discharge_power !== undefined) { if (data.dyn_max_discharge_power !== undefined) {
document.getElementById('dyn-max-discharge-power').textContent = document.getElementById('dyn-max-discharge-power').textContent =
(data.dyn_max_discharge_power * 0.05).toFixed(2) + ' kW'; (data.dyn_max_discharge_power).toFixed(2) + ' kW';
} }
// 继电器状态 // 继电器状态
@@ -1001,6 +1075,30 @@ function updateSystemData(data) {
if (data.dyn_relay_status2 !== undefined) { if (data.dyn_relay_status2 !== undefined) {
document.getElementById('dyn-relay-status2').textContent = (data.dyn_relay_status2); document.getElementById('dyn-relay-status2').textContent = (data.dyn_relay_status2);
} }
if (data.ins_pos_relay_status !== undefined) {
document.getElementById('ins-pos-relay-status').textContent = getRelayStatusText(data.ins_pos_relay_status);
}
if (data.ins_charge_relay_status !== undefined) {
document.getElementById('ins-charge-relay-status').textContent = getRelayStatusText(data.ins_charge_relay_status);
}
if (data.ins_precharge_relay_status !== undefined) {
document.getElementById('ins-precharge-relay-status').textContent = getRelayStatusText(data.ins_precharge_relay_status);
}
if (data.ins_neg_relay_status !== undefined) {
document.getElementById('ins-neg-relay-status').textContent = getRelayStatusText(data.ins_neg_relay_status);
}
if (data.dyn_pos_relay_status !== undefined) {
document.getElementById('dyn-pos-relay-status').textContent = getRelayStatusText(data.dyn_pos_relay_status);
}
if (data.dyn_charge_relay_status !== undefined) {
document.getElementById('dyn-charge-relay-status').textContent = getRelayStatusText(data.dyn_charge_relay_status);
}
if (data.dyn_precharge_relay_status !== undefined) {
document.getElementById('dyn-precharge-relay-status').textContent = getRelayStatusText(data.dyn_precharge_relay_status);
}
if (data.dyn_neg_relay_status !== undefined) {
document.getElementById('dyn-neg-relay-status').textContent = getRelayStatusText(data.dyn_neg_relay_status);
}
// 报警标志 // 报警标志
if (data.ins_emergency_status !== undefined) { if (data.ins_emergency_status !== undefined) {
@@ -1542,6 +1640,15 @@ if (data.power_a_bus_status) {
} }
} }
// 继电器状态文本转换
function getRelayStatusText(status) {
const statuses = {
1: '接通',
2: '断开'
};
return statuses[status] || '无效';
}
// 紧急状态文本转换 // 紧急状态文本转换
function getEmergencyStatusText(status) { function getEmergencyStatusText(status) {
const statuses = { const statuses = {
+61 -41
View File
@@ -105,6 +105,7 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
unsigned char instrumentBattery = 0; unsigned char instrumentBattery = 0;
unsigned char powerBattery = 0; unsigned char powerBattery = 0;
unsigned short powerBatteryPower = 0; unsigned short powerBatteryPower = 0;
unsigned char hostStatus = 0;
char tmp[16] = {0}; char tmp[16] = {0};
mg_http_get_var(&body, "fuelCellMode", tmp, sizeof(tmp)); mg_http_get_var(&body, "fuelCellMode", tmp, sizeof(tmp));
@@ -119,13 +120,16 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
powerBattery = (unsigned char)strtoul(tmp, NULL, 16); powerBattery = (unsigned char)strtoul(tmp, NULL, 16);
mg_http_get_var(&body, "powerBatteryPower", tmp, sizeof(tmp)); mg_http_get_var(&body, "powerBatteryPower", tmp, sizeof(tmp));
powerBatteryPower = (unsigned short)atoi(tmp); powerBatteryPower = (unsigned short)atoi(tmp);
mg_http_get_var(&body, "hostStatus", tmp, sizeof(tmp));
hostStatus = (unsigned char)strtoul(tmp, NULL, 16);
// 记录接收到的配置 // 记录接收到的配置
LOG_F(INFO, "Received battery control config: " LOG_F(INFO, "Received battery control config: "
"fuelCellMode=%02XH, fuelCellCommand=%02XH, fuelCellPower=%d, " "fuelCellMode=%02XH, fuelCellCommand=%02XH, fuelCellPower=%d, "
"instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d", "instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d, "
"hostStatus=%02XH",
fuelCellMode, fuelCellCommand, fuelCellPower, fuelCellMode, fuelCellCommand, fuelCellPower,
instrumentBattery, powerBattery, powerBatteryPower); instrumentBattery, powerBattery, powerBatteryPower, hostStatus);
m_powerManger->m_CcuColCmd.fcmode = fuelCellMode; m_powerManger->m_CcuColCmd.fcmode = fuelCellMode;
m_powerManger->m_CcuColCmd.fcuCmd = fuelCellCommand; m_powerManger->m_CcuColCmd.fcuCmd = fuelCellCommand;
@@ -134,7 +138,8 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
cout << "powerBatteryPower:" << (int)instrumentBattery << endl; 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;
m_powerManger->m_CcuColCmd.masterState = hostStatus;
cout << "m_powerManger->m_CcuColCmd.masterState:" << (int)m_powerManger->m_CcuColCmd.masterState << endl;
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{\"success\": true, \"message\": \"电池配置提交成功\"}"); "{\"success\": true, \"message\": \"电池配置提交成功\"}");
@@ -340,13 +345,18 @@ bool HttpServer::serverThreadFunc() {
} }
void HttpServer::pushSystemData() { void HttpServer::pushSystemData() {
if (!m_systemData) return; if (!m_systemData) {
LOG_F(ERROR, "System data pointer is null");
return;
}
// 序列化系统数据为JSON // 序列化系统数据为JSON
json j; json j;
//燃料电池系统参数
j["fc_mode"] = Json::Value(m_systemData->fc_mode); // 燃料电池系统运行模式:00H-无效, 01H-调试, 02H-自动, 03H-补给 // 初始化所有字段为默认值
j["fc_status"] = Json::Value(m_systemData->fc_status); // 燃料电池状态:00H-无效, 01H-初始化, ..., 0DH-维护完成 j["fc_mode"] = m_systemData->fc_mode ? Json::Value(m_systemData->fc_mode) : Json::Value(0);
j["fc_fault_level"] = Json::Value(m_systemData->fc_fault_level); j["fc_status"] = m_systemData->fc_status ? Json::Value(m_systemData->fc_status) : Json::Value(0);
j["fc_fault_level"] = m_systemData->fc_fault_level ? Json::Value(m_systemData->fc_fault_level) : Json::Value(0);
//功率和时间参数 //功率和时间参数
j["output_power_limit"] = Json::Value(m_systemData->output_power_limit); // 系统输出功率限制值,单位:W j["output_power_limit"] = Json::Value(m_systemData->output_power_limit); // 系统输出功率限制值,单位:W
@@ -369,37 +379,37 @@ void HttpServer::pushSystemData() {
j["aux_pipe_pressure"] = Json::Value(m_systemData->aux_pipe_pressure); // 辅水路压力,单位:0.01kPa j["aux_pipe_pressure"] = Json::Value(m_systemData->aux_pipe_pressure); // 辅水路压力,单位:0.01kPa
//舱室环境参数 //舱室环境参数
j["cabin_pressure1"] = Json::Value(m_systemData->cabin_pressure1); // 舱室1压力,单位:0.01kPa j["cabin_pressure1"] = Json::Value(m_systemData->cabin_pressure1); // 舱室1压力,单位:kPa
j["cabin_pressure2"] = Json::Value(m_systemData->cabin_pressure2); // 舱室2压力,单位:0.01kPa j["cabin_pressure2"] = Json::Value(m_systemData->cabin_pressure2); // 舱室2压力,单位:kPa
j["cabin_temp1"] = Json::Value(m_systemData->cabin_temp1); // 舱室1温度,单位:0.01℃ j["cabin_temp1"] = Json::Value(m_systemData->cabin_temp1); // 舱室1温度,单位:℃
j["cabin_temp2"] = Json::Value(m_systemData->cabin_temp2); // 舱室2温度,单位:0.01℃ j["cabin_temp2"] = Json::Value(m_systemData->cabin_temp2); // 舱室2温度,单位:℃
j["cabin_humidity1"] = Json::Value(m_systemData->cabin_humidity1); // 舱室1湿度,单位:0.01%RH j["cabin_humidity1"] = Json::Value(m_systemData->cabin_humidity1); // 舱室1湿度,单位:%RH
j["cabin_humidity2"] = Json::Value(m_systemData->cabin_humidity2); // 舱室2湿度,单位:0.01%RH j["cabin_humidity2"] = Json::Value(m_systemData->cabin_humidity2); // 舱室2湿度,单位:%RH
//火焰探测器 //火焰探测器
j["flame_detector1"] = Json::Value(m_systemData->flame_detector1); // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障 j["flame_detector1"] = Json::Value(m_systemData->flame_detector1); // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障
j["flame_detector2"] = Json::Value(m_systemData->flame_detector2); // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障 j["flame_detector2"] = Json::Value(m_systemData->flame_detector2); // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障
//气体浓度 //气体浓度
j["h2_concentration1"] = Json::Value(m_systemData->h2_concentration1); // 舱室H2浓度1,单位:0.01% LEL j["h2_concentration1"] = Json::Value(m_systemData->h2_concentration1); // 舱室H2浓度1,单位:% LEL
j["h2_concentration2"] = Json::Value(m_systemData->h2_concentration2); // 舱室H2浓度2,单位:0.01% LEL j["h2_concentration2"] = Json::Value(m_systemData->h2_concentration2); // 舱室H2浓度2,单位:% LEL
j["h2_concentration3"] = Json::Value(m_systemData->h2_concentration3); // 舱室H2浓度3,单位:0.01% LEL j["h2_concentration3"] = Json::Value(m_systemData->h2_concentration3); // 舱室H2浓度3,单位:% LEL
j["o2_concentration1"] = Json::Value(m_systemData->o2_concentration1); // 舱室O2浓度1,单位:0.01% LEL j["o2_concentration1"] = Json::Value(m_systemData->o2_concentration1); // 舱室O2浓度1,单位:% LEL
j["o2_concentration2"] = Json::Value(m_systemData->o2_concentration2); // 舱室O2浓度2,单位:0.01% LEL j["o2_concentration2"] = Json::Value(m_systemData->o2_concentration2); // 舱室O2浓度2,单位:% LEL
j["ch3oh_concentration1"] = Json::Value(m_systemData->ch3oh_concentration1); // 舱室甲醇气体浓度1,单位:0.01% LEL j["ch3oh_concentration1"] = Json::Value(m_systemData->ch3oh_concentration1); // 舱室甲醇气体浓度1,单位:% LEL
j["ch3oh_concentration2"] = Json::Value(m_systemData->ch3oh_concentration2); // 舱室甲醇气体浓度2,单位:0.01% LEL j["ch3oh_concentration2"] = Json::Value(m_systemData->ch3oh_concentration2); // 舱室甲醇气体浓度2,单位:% LEL
//保留字段 //保留字段
j["cabin_ox_concentration"] = Json::Value(m_systemData->cabin_ox_concentration); // 仪表舱内氧气浓度,单位:0.1% j["cabin_ox_concentration"] = Json::Value(m_systemData->cabin_ox_concentration); // 仪表舱内氧气浓度,单位:%
j["cabin_temperature"] = Json::Value(m_systemData->cabin_temperature); // 仪表舱内温度,单位:0.1℃ j["cabin_temperature"] = Json::Value(m_systemData->cabin_temperature); // 仪表舱内温度,单位:℃
j["cabin_humidity"] = Json::Value(m_systemData->cabin_humidity); // 仪表舱内湿度,单位:0.1%RH j["cabin_humidity"] = Json::Value(m_systemData->cabin_humidity); // 仪表舱内湿度,单位:%RH
j["cabin_pressure"] = Json::Value(m_systemData->cabin_pressure); // 仪表舱内大气压,单位:0.2kPa j["cabin_pressure"] = Json::Value(m_systemData->cabin_pressure); // 仪表舱内大气压,单位:kPa
//动力舱参数 //动力舱参数
j["power_cabin_ox_concentration"] = Json::Value(m_systemData->power_cabin_ox_concentration); // 动力舱内氧气浓度,单位:0.1% j["power_cabin_ox_concentration"] = Json::Value(m_systemData->power_cabin_ox_concentration); // 动力舱内氧气浓度,单位:%
j["power_cabin_temperature"] = Json::Value(m_systemData->power_cabin_temperature); // 动力舱内温度,单位:0.1℃ j["power_cabin_temperature"] = Json::Value(m_systemData->power_cabin_temperature); // 动力舱内温度,单位:℃
j["power_cabin_humidity"] = Json::Value(m_systemData->power_cabin_humidity); // 动力舱内湿度,单位:0.1%RH j["power_cabin_humidity"] = Json::Value(m_systemData->power_cabin_humidity); // 动力舱内湿度,单位:%RH
j["power_cabin_pressure"] = Json::Value(m_systemData->power_cabin_pressure); // 动力舱内大气压,单位:0.2kPa j["power_cabin_pressure"] = Json::Value(m_systemData->power_cabin_pressure); // 动力舱内大气压,单位:kPa
//电池报警标志 //电池报警标志
// uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志 // uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志
@@ -424,31 +434,41 @@ void HttpServer::pushSystemData() {
j["dyn_relay_status1"] = Json::Value(m_systemData->dyn_relay_status1); // 动力电池正极与充电继电器状态 j["dyn_relay_status1"] = Json::Value(m_systemData->dyn_relay_status1); // 动力电池正极与充电继电器状态
j["dyn_relay_status2"] = Json::Value(m_systemData->dyn_relay_status2); // 动力电池预充与负极继电器状态 j["dyn_relay_status2"] = Json::Value(m_systemData->dyn_relay_status2); // 动力电池预充与负极继电器状态
j["ins_pos_relay_status"] = Json::Value(m_systemData->ins_pos_relay_status); // 仪表电池正极继电器状态 1:接通 2:断开 其他:无效
j["ins_charge_relay_status"] = Json::Value(m_systemData->ins_charge_relay_status); // 仪表电池充电继电器状态 1:接通 2:断开 其他:无效
j["ins_precharge_relay_status"] = Json::Value(m_systemData->ins_precharge_relay_status); // 仪表电池预充继电器状态 1:接通 2:断开 其他:无效
j["ins_neg_relay_status"] = Json::Value(m_systemData->ins_neg_relay_status); // 仪表电池负极继电器状态 1:接通 2:断开 其他:无效
j["dyn_pos_relay_status"] = Json::Value(m_systemData->dyn_pos_relay_status); // 动力电池正极继电器状态 1:接通 2:断开 其他:无效
j["dyn_charge_relay_status"] = Json::Value(m_systemData->dyn_charge_relay_status); // 动力电池充电继电器状态 1:接通 2:断开 其他:无效
j["dyn_precharge_relay_status"] = Json::Value(m_systemData->dyn_precharge_relay_status); // 动力电池预充继电器状态 1:接通 2:断开 其他:无效
j["dyn_neg_relay_status"] = Json::Value(m_systemData->dyn_neg_relay_status); // 动力电池负极继电器状态 1:接通 2:断开 其他:无效
//电池功率参数 //电池功率参数
j["ins_max_discharge_power"] = Json::Value(m_systemData->ins_max_discharge_power); // 仪表电池最大允许放电功率,单位:0.05kW j["ins_max_discharge_power"] = Json::Value(m_systemData->ins_max_discharge_power); // 仪表电池最大允许放电功率,单位:kW
j["dyn_max_discharge_power"] = Json::Value(m_systemData->dyn_max_discharge_power); // 动力电池最大允许放电功率,单位:0.05kW j["dyn_max_discharge_power"] = Json::Value(m_systemData->dyn_max_discharge_power); // 动力电池最大允许放电功率,单位:kW
//电池SOC //电池SOC
j["ins_soc"] = Json::Value(m_systemData->ins_soc); // 仪表电池SOC,单位:0.1% j["ins_soc"] = Json::Value(m_systemData->ins_soc); // 仪表电池SOC,单位:%
j["dyn_soc"] = Json::Value(m_systemData->dyn_soc); // 动力电池SOC,单位:0.1% j["dyn_soc"] = Json::Value(m_systemData->dyn_soc); // 动力电池SOC,单位:%
//电池能量 //电池能量
j["ins_total_energy"] = Json::Value(m_systemData->ins_total_energy); // 仪表电池能量,单位:0.01kWh j["ins_total_energy"] = Json::Value(m_systemData->ins_total_energy); // 仪表电池能量,单位:kWh
j["dyn_total_energy"] = Json::Value(m_systemData->dyn_total_energy); // 动力电池能量,单位:0.01kWh j["dyn_total_energy"] = Json::Value(m_systemData->dyn_total_energy); // 动力电池能量,单位:kWh
//电池输入功率 //电池输入功率
j["ins_power_input"] = Json::Value(m_systemData->ins_power_input); j["ins_power_input"] = Json::Value(m_systemData->ins_power_input);
j["dyn_power_input"] = Json::Value(m_systemData->dyn_power_input); j["dyn_power_input"] = Json::Value(m_systemData->dyn_power_input);
//电池电压电流 //电池电压电流
j["ins_voltage_link"] = Json::Value(m_systemData->ins_voltage_link); // 仪表电池LINK端电压,单位:0.01V j["ins_voltage_link"] = Json::Value(m_systemData->ins_voltage_link); // 仪表电池LINK端电压,单位:V
j["ins_voltage_pack"] = Json::Value(m_systemData->ins_voltage_pack); // 仪表电池PACK端电压,单位:0.01V j["ins_voltage_pack"] = Json::Value(m_systemData->ins_voltage_pack); // 仪表电池PACK端电压,单位:V
j["ins_current"] = Json::Value(m_systemData->ins_current); // 仪表电池电流,单位:0.01A j["ins_current"] = Json::Value(m_systemData->ins_current); // 仪表电池电流,单位:A
j["ins_resistance_pos"] = Json::Value(m_systemData->ins_resistance_pos); // 仪表电池正极绝缘电阻,单位:kΩ j["ins_resistance_pos"] = Json::Value(m_systemData->ins_resistance_pos); // 仪表电池正极绝缘电阻,单位:kΩ
j["ins_resistance_neg"] = Json::Value(m_systemData->ins_resistance_neg); // 仪表电池负极绝缘电阻,单位:kΩ j["ins_resistance_neg"] = Json::Value(m_systemData->ins_resistance_neg); // 仪表电池负极绝缘电阻,单位:kΩ
j["dyn_voltage_link"] = Json::Value(m_systemData->dyn_voltage_link); // 动力电池LINK端电压,单位:0.01V j["dyn_voltage_link"] = Json::Value(m_systemData->dyn_voltage_link); // 动力电池LINK端电压,单位:V
j["dyn_voltage_pack"] = Json::Value(m_systemData->dyn_voltage_pack); // 动力电池PACK端电压,单位:0.01V j["dyn_voltage_pack"] = Json::Value(m_systemData->dyn_voltage_pack); // 动力电池PACK端电压,单位:V
j["dyn_current"] = Json::Value(m_systemData->dyn_current); // 动力电池电流,单位:0.05A j["dyn_current"] = Json::Value(m_systemData->dyn_current); // 动力电池电流,单位:A
j["dyn_resistance_pos"] = Json::Value(m_systemData->dyn_resistance_pos); // 动力电池正极绝缘电阻,单位:kΩ j["dyn_resistance_pos"] = Json::Value(m_systemData->dyn_resistance_pos); // 动力电池正极绝缘电阻,单位:kΩ
j["dyn_resistance_neg"] = Json::Value(m_systemData->dyn_resistance_neg); // 动力电池负极绝缘电阻,单位:kΩ j["dyn_resistance_neg"] = Json::Value(m_systemData->dyn_resistance_neg); // 动力电池负极绝缘电阻,单位:kΩ
+2 -2
View File
@@ -139,10 +139,10 @@ typedef struct {
unsigned char fcmode; unsigned char fcmode;
unsigned char fcuCmd; unsigned char fcuCmd;
unsigned char fcuPowerEfficiency; unsigned char fcuPowerEfficiency;
unsigned char fcuInsEfficiency; unsigned char insChargeEnable; //0 不允许充电 1 允许充电
unsigned char insBatCmd; unsigned char insBatCmd;
unsigned char powerBatCmd; unsigned char powerBatCmd;
unsigned char powerBatEfficiency; unsigned short powerBatEfficiency;
unsigned char heartbeat; unsigned char heartbeat;
unsigned char masterState; unsigned char masterState;
unsigned int paceholder1; unsigned int paceholder1;
+2 -2
View File
@@ -591,7 +591,7 @@ bool SQLite::insertData(const ccuColCmd cmd) {
const char* sql = R"( const char* sql = R"(
INSERT INTO ccuColCmd ( INSERT INTO ccuColCmd (
workCondition, fcuCmd, fcuPowerEfficiency, workCondition, fcuCmd, fcuPowerEfficiency,
fcuInsEfficiency, insBatCmd, powerBatCmd, insChargeEnable, insBatCmd, powerBatCmd,
powerBatEfficiency, heartbeat, masterState, powerBatEfficiency, heartbeat, masterState,
paceholder1, paceholder2 paceholder1, paceholder2
) VALUES ( ) VALUES (
@@ -611,7 +611,7 @@ bool SQLite::insertData(const ccuColCmd cmd) {
BIND_INT(cmd.fcmode); BIND_INT(cmd.fcmode);
BIND_INT(cmd.fcuCmd); BIND_INT(cmd.fcuCmd);
BIND_INT(cmd.fcuPowerEfficiency); BIND_INT(cmd.fcuPowerEfficiency);
BIND_INT(cmd.fcuInsEfficiency); BIND_INT(cmd.insChargeEnable);
BIND_INT(cmd.insBatCmd); BIND_INT(cmd.insBatCmd);
BIND_INT(cmd.powerBatCmd); BIND_INT(cmd.powerBatCmd);
BIND_INT(cmd.powerBatEfficiency); BIND_INT(cmd.powerBatEfficiency);
+30 -7
View File
@@ -66,7 +66,7 @@ public:
float power_cabin_temperature; // 动力舱内温度,单位:0.1℃ float power_cabin_temperature; // 动力舱内温度,单位:0.1℃
float power_cabin_humidity; // 动力舱内湿度,单位:0.1%RH float power_cabin_humidity; // 动力舱内湿度,单位:0.1%RH
float power_cabin_pressure; // 动力舱内大气压,单位:0.2kPa float power_cabin_pressure; // 动力舱内大气压,单位:0.2kPa
uint8_t reserved2[1]; // 保留字段 uint8_t reserved2[2]; // 保留字段
//电池报警标志 //电池报警标志
uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志 uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志
@@ -78,6 +78,18 @@ public:
uint8_t dyn_relay_status1; // 动力电池正极与充电继电器状态 uint8_t dyn_relay_status1; // 动力电池正极与充电继电器状态
uint8_t dyn_relay_status2; // 动力电池预充与负极继电器状态 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 ins_max_discharge_power; // 仪表电池最大允许放电功率,单位:0.05kW
float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW
@@ -483,6 +495,17 @@ public:
dyn_relay_status1 = data.dyn_relay_status1; dyn_relay_status1 = data.dyn_relay_status1;
dyn_relay_status2 = data.dyn_relay_status2; 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; ins_max_discharge_power = data.ins_max_discharge_power * 0.05;
dyn_max_discharge_power = data.dyn_max_discharge_power * 0.05; dyn_max_discharge_power = data.dyn_max_discharge_power * 0.05;
@@ -496,21 +519,21 @@ public:
dyn_total_energy = data.dyn_total_energy * 0.1; dyn_total_energy = data.dyn_total_energy * 0.1;
//电池输入功率 //电池输入功率
ins_power_input = data.ins_power_input * 0.1; ins_power_input = data.ins_power_input ;
dyn_power_input = data.dyn_power_input * 0.1; dyn_power_input = data.dyn_power_input ;
//电池充放电状态 //电池充放电状态
ins_charge_status = data.ins_charge_status; ins_charge_status = data.ins_charge_status;
dyn_charge_status = data.dyn_charge_status; dyn_charge_status = data.dyn_charge_status;
//电池电压电流 //电池电压电流
ins_voltage_link = data.ins_voltage_link * 0.01; ins_voltage_link = data.ins_voltage_link * 0.1;
ins_voltage_pack = data.ins_voltage_pack * 0.01; ins_voltage_pack = data.ins_voltage_pack * 0.1;
ins_current = static_cast<int16_t>(data.ins_current) * 0.05; 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.1;
dyn_voltage_pack = data.dyn_voltage_pack * 0.01; dyn_voltage_pack = data.dyn_voltage_pack * 0.1;
dyn_current = static_cast<int16_t>(data.dyn_current) * 0.05; dyn_current = static_cast<int16_t>(data.dyn_current) * 0.05;
dyn_resistance_pos = data.dyn_resistance_pos; dyn_resistance_pos = data.dyn_resistance_pos;
dyn_resistance_neg = data.dyn_resistance_neg; dyn_resistance_neg = data.dyn_resistance_neg;
+1
View File
@@ -163,6 +163,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
{ {
// sError.push_back("pushMsgToQueue faile,Msg ID error"); // sError.push_back("pushMsgToQueue faile,Msg ID error");
// LOG_F(INFO, "pushMsgToQueue faile,Msg ID error header: %p", header); // LOG_F(INFO, "pushMsgToQueue faile,Msg ID error header: %p", header);
delete []header;
return false; return false;
} }
delete []header; delete []header;
@@ -16,7 +16,7 @@ public:
Json::Value root; Json::Value root;
Json::CharReaderBuilder builder; Json::CharReaderBuilder builder;
JSONCPP_STRING errs; JSONCPP_STRING errs;
DeviceSwitchCmd cmd; DeviceSwitchCmd cmd{};
// 解析JSON字符串 // 解析JSON字符串
std::istringstream stream(msg); std::istringstream stream(msg);
if (!Json::parseFromStream(builder, stream, &root, &errs)) { if (!Json::parseFromStream(builder, stream, &root, &errs)) {
+1 -1
View File
@@ -16,7 +16,7 @@ public:
~uPlan_taskStartMsg(){}; ~uPlan_taskStartMsg(){};
MissionState getMission(const std::string& key, const std::string& msg) { MissionState getMission(const std::string& key, const std::string& msg) {
MissionState mission; MissionState mission{};
Json::Value root; Json::Value root;
Json::CharReaderBuilder builder; Json::CharReaderBuilder builder;
JSONCPP_STRING errs; JSONCPP_STRING errs;
+8 -13
View File
@@ -21,20 +21,15 @@ public:
{ {
//构建配电系统状态报告 //构建配电系统状态报告
Json::Value dis; Json::Value dis;
disBus1Breaker* pdis1=new disBus1Breaker; disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker;
disBus2Breaker* pdis2=new disBus2Breaker; disBus2Breaker dis2 = currentDisBreakerState.bus2Breaker;
disBus3Breaker* pdis3=new disBus3Breaker; disBus3Breaker dis3 = currentDisBreakerState.bus3Breaker;
disBus4Breaker* pdis4=new disBus4Breaker; disBus4Breaker dis4 = currentDisBreakerState.bus4Breaker;
*pdis1 = currentDisBreakerState.bus1Breaker; dis["HVolBusBreaker_uint16"] = *(unsigned short*)&dis1;
*pdis2 = currentDisBreakerState.bus2Breaker; dis["HVolABusBreaker_unit16"] = *(unsigned short*)&dis2;
*pdis3 = currentDisBreakerState.bus3Breaker; dis["HVolBBusBreaker_unit16"] = *(unsigned short*)&dis3;
*pdis4 = currentDisBreakerState.bus4Breaker; dis["LVolBusBreaker_uint16"] = *(unsigned short*)&dis4;
dis["HVolBusBreaker_uint16"] = *(unsigned short*)pdis1;
dis["HVolABusBreaker_unit16"] = *(unsigned short*)pdis2;
dis["HVolBBusBreaker_unit16"] = *(unsigned short*)pdis3;
dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4;
//TODO: 构建配电系统故障码 //TODO: 构建配电系统故障码
Json::Value faultCodeDis_array = Json::Value(Json::arrayValue); Json::Value faultCodeDis_array = Json::Value(Json::arrayValue);
+9 -1
View File
@@ -11,7 +11,15 @@ private:
/* data */ /* data */
public: public:
uPower_pmStateMsg() { uPower_pmStateMsg() {
memset(&state, 0, sizeof(state)); state.workCondition = 0;
state.currentMod = 0;
state.powerState = 0;
state.faultLevel = 0;
state.faultCode.clear();
state.soc = 0;
state.sustainableTime = 0;
state.m_faultNum = 0;
state.m_leakage = 0;
}; };
~uPower_pmStateMsg() {}; ~uPower_pmStateMsg() {};
std::string key = "uPower_pmState_fb"; std::string key = "uPower_pmState_fb";
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
DBC文件生成工具
"""
import cantools
from cantools.database import Database, Message, Signal
def create_sample_dbc():
"""创建一个示例DBC文件"""
db = Database()
# 添加消息
msg1 = Message(
name="EngineData",
frame_id=0x100,
length=8,
signals=[
Signal(name="RPM", start=0, length=16, is_signed=False),
Signal(name="Speed", start=16, length=16, is_signed=False),
Signal(name="Temp", start=32, length=8, is_signed=True)
]
)
msg2 = Message(
name="VehicleStatus",
frame_id=0x200,
length=4,
signals=[
Signal(name="DoorStatus", start=0, length=4, is_multiplexer=False),
Signal(name="LightStatus", start=4, length=4, is_multiplexer=False)
]
)
# 添加断路器状态消息
msg3 = Message(
name="CircuitBreakerStatus",
frame_id=0x1401A501,
is_extended_frame=True,
length=8,
signals=[
Signal(name="FuelCellBreaker", start=0, length=8, is_signed=False),
Signal(name="BatteryBreaker", start=8, length=8, is_signed=False),
Signal(name="MotorBreaker", start=16, length=8, is_signed=False),
Signal(name="BatteryMeterBreaker", start=24, length=8, is_signed=False),
Signal(name="DCDC5Breaker", start=32, length=8, is_signed=False),
Signal(name="BowDistBoxBreaker", start=40, length=8, is_signed=False),
Signal(name="SternFT45Breaker", start=48, length=8, is_signed=False),
Signal(name="SternRudder1Breaker", start=56, length=8, is_signed=False)
]
)
db.messages.extend([msg1, msg2, msg3])
return db
def save_dbc_file(db, filename):
"""保存DBC文件"""
with open(filename, "w") as f:
f.write(db.as_dbc_string())
if __name__ == "__main__":
print("正在生成示例DBC文件...")
db = create_sample_dbc()
save_dbc_file(db, "generated.dbc")
print("DBC文件已生成: generated.dbc")