diff --git a/cppcheck_full_report.txt b/cppcheck_full_report.txt new file mode 100644 index 0000000..5d66c4e --- /dev/null +++ b/cppcheck_full_report.txt @@ -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] + diff --git a/generated.dbc b/generated.dbc new file mode 100644 index 0000000..4ecad1f --- /dev/null +++ b/generated.dbc @@ -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 + + + + + + + + + + + + diff --git a/src/pPowerManger/LowerCommManager.cpp b/src/pPowerManger/LowerCommManager.cpp index c7b35df..2e6015f 100644 --- a/src/pPowerManger/LowerCommManager.cpp +++ b/src/pPowerManger/LowerCommManager.cpp @@ -171,7 +171,7 @@ bool LowerCommManager::updatePoweSystemStates(){ //写入文件 // std::ofstream outFile("ccuState.txt", std::ios::app); // coutMsg(m_CcuCurrentState, outFile); - coutMsg(m_CcuCurrentState,std::cout); + // coutMsg(m_CcuCurrentState,std::cout); msg_CcuStateFbMsg_Update_time = time; } if(!m_udpComm->m_qReceiveDisHighVolBusBuffer.empty()) diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 50436b4..10f893b 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -79,6 +79,9 @@ PowerManger::~PowerManger() { delete m_db; 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_c2.lastUpdateTime = m_lowerCommManager->msg_disLowBusFbMsg_Update_time; m_systemData->updateCommonStatus(); - // 运行状态 - + // m_CcuColCmd.heartbeat if (m_ticker++ % 5 == 0) { m_CcuColCmd.heartbeat++; @@ -204,7 +206,6 @@ bool PowerManger::OnStartUp() } registerVariables(); - // 初始化状态机 PowerManagerFsm::init(this); @@ -341,7 +342,7 @@ void PowerManger::initControlCmd() m_CcuColCmd.fcmode = 0x00; //默认无效 m_CcuColCmd.fcuCmd = 0x00; //无效指令 m_CcuColCmd.fcuPowerEfficiency = 15; //默认为15kw - m_CcuColCmd.fcuInsEfficiency = 00; //预留指令,无效 + m_CcuColCmd.insChargeEnable = 00; //不允许充电 m_CcuColCmd.insBatCmd = 0x00; //无效指令 m_CcuColCmd.powerBatCmd = 0x00; //无效指令 m_CcuColCmd.powerBatEfficiency = 230; //默认为最大 @@ -368,7 +369,6 @@ unsigned char PowerManger::getFaultLevel() return maxLevel; } - void PowerManger::injectFault(unsigned type,unsigned int faultCode){ LOG_F(INFO, "注入故障: %d %d", type, faultCode); TestEvent testEvent("故障注入测试",type,faultCode); diff --git a/src/pPowerManger/UpperCommManager.cpp b/src/pPowerManger/UpperCommManager.cpp index 857e834..eb9c1b8 100644 --- a/src/pPowerManger/UpperCommManager.cpp +++ b/src/pPowerManger/UpperCommManager.cpp @@ -3,16 +3,27 @@ #include "driver.h" #include "fsm/PowerManagerFsm.hpp" -UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) { - // 初始化消息对象 - m_secdistStateMsg = uDevice_secdistStateMsg(); - m_setOpConditionMsg = uExternComm_setOpConditionMsg(); - m_depthMsg = uDevice_depthMsg(); - m_taskStartMsg = uPlan_taskStartMsg(); - m_equInsStateMsg = uPower_equInsStateMsg(); - m_equStateMsg = uPower_equStateMsg(); - m_setPMSysMsg = uExternComm_setPowerSystemMsg(); -}; +UpperCommManager::UpperCommManager(PowerManger* pm) : + m_pm(pm), + m_secdistStateMsg(), + m_setOpConditionMsg(), + m_depthMsg(), + m_taskStartMsg(), + m_equInsStateMsg(), + m_equStateMsg(), + 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) { if (key == m_sysStateMsg.key) @@ -190,4 +201,4 @@ void UpperCommManager::buildSystemReport() { m_disSysStateMsg_st_debug = std::make_pair(m_disSysStateMsg.key, m_disSysStateMsg.buildMsg(*(m_pm->m_systemData),m_pm->m_currentDisBreakerState)); m_currentStateMsg_st_debug = std::make_pair(m_currentStateMsg.key, m_currentStateMsg.buildMsg(m_pm->m_pmCurrentState)); #endif -} \ No newline at end of file +} diff --git a/src/pPowerManger/UpperCommManager.h b/src/pPowerManger/UpperCommManager.h index 709572d..8be1234 100644 --- a/src/pPowerManger/UpperCommManager.h +++ b/src/pPowerManger/UpperCommManager.h @@ -50,7 +50,7 @@ class PowerManger; // 前向声明 class UpperCommManager { public: UpperCommManager(PowerManger* powerManager); - ~UpperCommManager(); + ~UpperCommManager(){}; // 周期调用 void processPeriodicTasks(); diff --git a/src/pPowerManger/driver.cpp b/src/pPowerManger/driver.cpp index 86e0d9f..93fc42b 100644 --- a/src/pPowerManger/driver.cpp +++ b/src/pPowerManger/driver.cpp @@ -2,17 +2,12 @@ Driver::Driver() { - currentDriverTable = new DriverTable(); - nextDriverTable = new DriverTable(); + currentDriverTable.reset(new DriverTable()); + nextDriverTable.reset(new DriverTable()); debug = false; - } -Driver::~Driver() -{ - delete currentDriverTable; - delete nextDriverTable; -} +Driver::~Driver() = default; void Driver::setDebug(bool debug) { @@ -734,17 +729,17 @@ std::string Driver::saveDriverTableToJson(const DriverTable* driverTable) } std::string Driver::getDriverTableJson() { - return saveDriverTableToJson(currentDriverTable); + return saveDriverTableToJson(currentDriverTable.get()); } std::string Driver::getSubDisCmdJson(const DriverTable* driverTable) { - return saveDriverTableToJson(currentDriverTable); + return saveDriverTableToJson(currentDriverTable.get()); } std::string Driver::getDriveStateJson(const DriverTable* driverTable) { - return saveDriverTableToJson(currentDriverTable); + return saveDriverTableToJson(currentDriverTable.get()); } @@ -960,4 +955,4 @@ int Driver::loadDriverTableFromJson(const std::string &strJson, DriverTable& tab error_code = SafeReadUInt(root, "buoyage_uint8", table.buoyage); return 0; // 返回0表示所有数据成功读取 -} \ No newline at end of file +} diff --git a/src/pPowerManger/driver.h b/src/pPowerManger/driver.h index c9c03e8..f3633c8 100644 --- a/src/pPowerManger/driver.h +++ b/src/pPowerManger/driver.h @@ -1,5 +1,6 @@ #ifndef DRIVER_H #define DRIVER_H +#include #include "json/json.h" #include "iostream" #include @@ -96,8 +97,8 @@ public: void setDebug(bool debug); public: - DriverTable* currentDriverTable; - DriverTable* nextDriverTable; + std::unique_ptr currentDriverTable; + std::unique_ptr nextDriverTable; //操作函数,操作指定设备 //TODO: 增加设备操作函数 diff --git a/src/pPowerManger/fsm/StandbyState.cpp b/src/pPowerManger/fsm/StandbyState.cpp index 9e24376..fa9409b 100644 --- a/src/pPowerManger/fsm/StandbyState.cpp +++ b/src/pPowerManger/fsm/StandbyState.cpp @@ -6,13 +6,11 @@ void StandbyState::entry() { // pm->m_CcuColCmd.fcuCmd = FcuCommand::Stop; // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop; // 启动流程 仪表电一直设置为启动 - pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; + // pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start; // 启动设备 - pm->workCondition = WorkCondition::STANDBY; pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd); - // LOG_F(INFO, "WorkCondition %d", pm->workCondition); } void StandbyState::react(StandbyEvent const &) { diff --git a/src/pPowerManger/httpserver/batteryoperation.h b/src/pPowerManger/httpserver/batteryoperation.h index e0fd21e..1f5fadc 100644 --- a/src/pPowerManger/httpserver/batteryoperation.h +++ b/src/pPowerManger/httpserver/batteryoperation.h @@ -356,6 +356,26 @@ body { +
主机状态
+ +
+ +
+ + + +
+
+
diff --git a/src/pPowerManger/httpserver/data.h b/src/pPowerManger/httpserver/data.h index 41c4196..5d1b9e9 100644 --- a/src/pPowerManger/httpserver/data.h +++ b/src/pPowerManger/httpserver/data.h @@ -189,7 +189,7 @@ const std::string DATA_HTML = R"( - +
@@ -201,13 +201,37 @@ const std::string DATA_HTML = R"( 正在加载...
- 仪表电池电压: + 仪表电池LINK电压: 正在加载...
- 动力电池电压: + 仪表电池PACK电压: + 正在加载... +
+
+ 仪表电池正极绝缘电阻: + 正在加载... +
+
+ 仪表电池负极绝缘电阻: + 正在加载... +
+
+ 动力电池LINK电压: 正在加载...
+
+ 动力电池PACK电压: + 正在加载... +
+
+ 动力电池正极绝缘电阻: + 正在加载... +
+
+ 动力电池负极绝缘电阻: + 正在加载... +
仪表电池电流: 正在加载... @@ -262,6 +286,38 @@ const std::string DATA_HTML = R"( 动力继电器2: 正在加载...
+
+ 仪表正极继电器: + 正在加载... +
+
+ 仪表充电继电器: + 正在加载... +
+
+ 仪表预充继电器: + 正在加载... +
+
+ 仪表负极继电器: + 正在加载... +
+
+ 动力正极继电器: + 正在加载... +
+
+ 动力充电继电器: + 正在加载... +
+
+ 动力预充继电器: + 正在加载... +
+
+ 动力负极继电器: + 正在加载... +
@@ -956,10 +1012,28 @@ function updateSystemData(data) { document.getElementById('dyn-soc').textContent = (data.dyn_soc).toFixed(1) + '%'; } 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) { - 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) { 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'; } 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) { - 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) { 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) { 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) { 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) { @@ -1542,6 +1640,15 @@ if (data.power_a_bus_status) { } } +// 继电器状态文本转换 +function getRelayStatusText(status) { + const statuses = { + 1: '接通', + 2: '断开' + }; + return statuses[status] || '无效'; +} + // 紧急状态文本转换 function getEmergencyStatusText(status) { const statuses = { diff --git a/src/pPowerManger/httpserver/httpserver.cpp b/src/pPowerManger/httpserver/httpserver.cpp index ca343e8..c912b33 100644 --- a/src/pPowerManger/httpserver/httpserver.cpp +++ b/src/pPowerManger/httpserver/httpserver.cpp @@ -105,6 +105,7 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_ unsigned char instrumentBattery = 0; unsigned char powerBattery = 0; unsigned short powerBatteryPower = 0; + unsigned char hostStatus = 0; char tmp[16] = {0}; 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); mg_http_get_var(&body, "powerBatteryPower", tmp, sizeof(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: " "fuelCellMode=%02XH, fuelCellCommand=%02XH, fuelCellPower=%d, " - "instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d", + "instrumentBattery=%02XH, powerBattery=%02XH, powerBatteryPower=%d, " + "hostStatus=%02XH", fuelCellMode, fuelCellCommand, fuelCellPower, - instrumentBattery, powerBattery, powerBatteryPower); + instrumentBattery, powerBattery, powerBatteryPower, hostStatus); m_powerManger->m_CcuColCmd.fcmode = fuelCellMode; 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; m_powerManger->m_CcuColCmd.powerBatCmd = powerBattery; 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", "{\"success\": true, \"message\": \"电池配置提交成功\"}"); @@ -340,13 +345,18 @@ bool HttpServer::serverThreadFunc() { } void HttpServer::pushSystemData() { - if (!m_systemData) return; + if (!m_systemData) { + LOG_F(ERROR, "System data pointer is null"); + return; + } + // 序列化系统数据为JSON 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_fault_level"] = Json::Value(m_systemData->fc_fault_level); + + // 初始化所有字段为默认值 + j["fc_mode"] = m_systemData->fc_mode ? Json::Value(m_systemData->fc_mode) : Json::Value(0); + 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 @@ -369,37 +379,37 @@ void HttpServer::pushSystemData() { 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_pressure2"] = Json::Value(m_systemData->cabin_pressure2); // 舱室2压力,单位:0.01kPa - j["cabin_temp1"] = Json::Value(m_systemData->cabin_temp1); // 舱室1温度,单位:0.01℃ - j["cabin_temp2"] = Json::Value(m_systemData->cabin_temp2); // 舱室2温度,单位:0.01℃ - j["cabin_humidity1"] = Json::Value(m_systemData->cabin_humidity1); // 舱室1湿度,单位:0.01%RH - j["cabin_humidity2"] = Json::Value(m_systemData->cabin_humidity2); // 舱室2湿度,单位:0.01%RH + j["cabin_pressure1"] = Json::Value(m_systemData->cabin_pressure1); // 舱室1压力,单位:kPa + j["cabin_pressure2"] = Json::Value(m_systemData->cabin_pressure2); // 舱室2压力,单位:kPa + j["cabin_temp1"] = Json::Value(m_systemData->cabin_temp1); // 舱室1温度,单位:℃ + j["cabin_temp2"] = Json::Value(m_systemData->cabin_temp2); // 舱室2温度,单位:℃ + j["cabin_humidity1"] = Json::Value(m_systemData->cabin_humidity1); // 舱室1湿度,单位:%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_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_concentration2"] = Json::Value(m_systemData->h2_concentration2); // 舱室H2浓度2,单位:0.01% LEL - j["h2_concentration3"] = Json::Value(m_systemData->h2_concentration3); // 舱室H2浓度3,单位:0.01% LEL - j["o2_concentration1"] = Json::Value(m_systemData->o2_concentration1); // 舱室O2浓度1,单位:0.01% LEL - j["o2_concentration2"] = Json::Value(m_systemData->o2_concentration2); // 舱室O2浓度2,单位:0.01% LEL - j["ch3oh_concentration1"] = Json::Value(m_systemData->ch3oh_concentration1); // 舱室甲醇气体浓度1,单位:0.01% LEL - j["ch3oh_concentration2"] = Json::Value(m_systemData->ch3oh_concentration2); // 舱室甲醇气体浓度2,单位: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,单位:% LEL + j["h2_concentration3"] = Json::Value(m_systemData->h2_concentration3); // 舱室H2浓度3,单位:% LEL + j["o2_concentration1"] = Json::Value(m_systemData->o2_concentration1); // 舱室O2浓度1,单位:% LEL + j["o2_concentration2"] = Json::Value(m_systemData->o2_concentration2); // 舱室O2浓度2,单位:% LEL + j["ch3oh_concentration1"] = Json::Value(m_systemData->ch3oh_concentration1); // 舱室甲醇气体浓度1,单位:% 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_temperature"] = Json::Value(m_systemData->cabin_temperature); // 仪表舱内温度,单位:0.1℃ - j["cabin_humidity"] = Json::Value(m_systemData->cabin_humidity); // 仪表舱内湿度,单位:0.1%RH - j["cabin_pressure"] = Json::Value(m_systemData->cabin_pressure); // 仪表舱内大气压,单位:0.2kPa + j["cabin_ox_concentration"] = Json::Value(m_systemData->cabin_ox_concentration); // 仪表舱内氧气浓度,单位:% + j["cabin_temperature"] = Json::Value(m_systemData->cabin_temperature); // 仪表舱内温度,单位:℃ + j["cabin_humidity"] = Json::Value(m_systemData->cabin_humidity); // 仪表舱内湿度,单位:%RH + 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_temperature"] = Json::Value(m_systemData->power_cabin_temperature); // 动力舱内温度,单位:0.1℃ - j["power_cabin_humidity"] = Json::Value(m_systemData->power_cabin_humidity); // 动力舱内湿度,单位:0.1%RH - j["power_cabin_pressure"] = Json::Value(m_systemData->power_cabin_pressure); // 动力舱内大气压,单位:0.2kPa + j["power_cabin_ox_concentration"] = Json::Value(m_systemData->power_cabin_ox_concentration); // 动力舱内氧气浓度,单位:% + j["power_cabin_temperature"] = Json::Value(m_systemData->power_cabin_temperature); // 动力舱内温度,单位:℃ + j["power_cabin_humidity"] = Json::Value(m_systemData->power_cabin_humidity); // 动力舱内湿度,单位:%RH + j["power_cabin_pressure"] = Json::Value(m_systemData->power_cabin_pressure); // 动力舱内大气压,单位:kPa //电池报警标志 // 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_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["dyn_max_discharge_power"] = Json::Value(m_systemData->dyn_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); // 动力电池最大允许放电功率,单位:kW //电池SOC - j["ins_soc"] = Json::Value(m_systemData->ins_soc); // 仪表电池SOC,单位:0.1% - j["dyn_soc"] = Json::Value(m_systemData->dyn_soc); // 动力电池SOC,单位:0.1% + j["ins_soc"] = Json::Value(m_systemData->ins_soc); // 仪表电池SOC,单位:% + j["dyn_soc"] = Json::Value(m_systemData->dyn_soc); // 动力电池SOC,单位:% //电池能量 - j["ins_total_energy"] = Json::Value(m_systemData->ins_total_energy); // 仪表电池能量,单位:0.01kWh - j["dyn_total_energy"] = Json::Value(m_systemData->dyn_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); // 动力电池能量,单位:kWh //电池输入功率 j["ins_power_input"] = Json::Value(m_systemData->ins_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_pack"] = Json::Value(m_systemData->ins_voltage_pack); // 仪表电池PACK端电压,单位:0.01V - j["ins_current"] = Json::Value(m_systemData->ins_current); // 仪表电池电流,单位:0.01A + 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端电压,单位:V + 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_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_pack"] = Json::Value(m_systemData->dyn_voltage_pack); // 动力电池PACK端电压,单位:0.01V - j["dyn_current"] = Json::Value(m_systemData->dyn_current); // 动力电池电流,单位:0.05A + 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端电压,单位:V + 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_neg"] = Json::Value(m_systemData->dyn_resistance_neg); // 动力电池负极绝缘电阻,单位:kΩ diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h index 5489fc7..e4fa432 100644 --- a/src/pPowerManger/pmSysvariable.h +++ b/src/pPowerManger/pmSysvariable.h @@ -139,10 +139,10 @@ typedef struct { unsigned char fcmode; unsigned char fcuCmd; unsigned char fcuPowerEfficiency; - unsigned char fcuInsEfficiency; + unsigned char insChargeEnable; //0 不允许充电 1 允许充电 unsigned char insBatCmd; unsigned char powerBatCmd; - unsigned char powerBatEfficiency; + unsigned short powerBatEfficiency; unsigned char heartbeat; unsigned char masterState; unsigned int paceholder1; diff --git a/src/pPowerManger/sqlit3/SQLite.cpp b/src/pPowerManger/sqlit3/SQLite.cpp index 9e241c9..fece0fe 100644 --- a/src/pPowerManger/sqlit3/SQLite.cpp +++ b/src/pPowerManger/sqlit3/SQLite.cpp @@ -591,7 +591,7 @@ bool SQLite::insertData(const ccuColCmd cmd) { const char* sql = R"( INSERT INTO ccuColCmd ( workCondition, fcuCmd, fcuPowerEfficiency, - fcuInsEfficiency, insBatCmd, powerBatCmd, + insChargeEnable, insBatCmd, powerBatCmd, powerBatEfficiency, heartbeat, masterState, paceholder1, paceholder2 ) VALUES ( @@ -611,7 +611,7 @@ bool SQLite::insertData(const ccuColCmd cmd) { BIND_INT(cmd.fcmode); BIND_INT(cmd.fcuCmd); BIND_INT(cmd.fcuPowerEfficiency); - BIND_INT(cmd.fcuInsEfficiency); + BIND_INT(cmd.insChargeEnable); BIND_INT(cmd.insBatCmd); BIND_INT(cmd.powerBatCmd); BIND_INT(cmd.powerBatEfficiency); diff --git a/src/pPowerManger/systemData.h b/src/pPowerManger/systemData.h index 0c15936..1a82cf6 100644 --- a/src/pPowerManger/systemData.h +++ b/src/pPowerManger/systemData.h @@ -66,7 +66,7 @@ public: float power_cabin_temperature; // 动力舱内温度,单位:0.1℃ float power_cabin_humidity; // 动力舱内湿度,单位:0.1%RH float power_cabin_pressure; // 动力舱内大气压,单位:0.2kPa - uint8_t reserved2[1]; // 保留字段 + uint8_t reserved2[2]; // 保留字段 //电池报警标志 uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志 @@ -78,6 +78,18 @@ public: 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 @@ -483,6 +495,17 @@ public: 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; @@ -496,21 +519,21 @@ public: dyn_total_energy = data.dyn_total_energy * 0.1; //电池输入功率 - ins_power_input = data.ins_power_input * 0.1; - dyn_power_input = data.dyn_power_input * 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.01; - ins_voltage_pack = data.ins_voltage_pack * 0.01; + 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.01; - dyn_voltage_pack = data.dyn_voltage_pack * 0.01; + 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; @@ -732,4 +755,4 @@ public: }; -#endif \ No newline at end of file +#endif diff --git a/src/pPowerManger/udpcomm/udpComm.cpp b/src/pPowerManger/udpcomm/udpComm.cpp index 3421efc..bcdcf91 100644 --- a/src/pPowerManger/udpcomm/udpComm.cpp +++ b/src/pPowerManger/udpcomm/udpComm.cpp @@ -163,6 +163,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m) { // sError.push_back("pushMsgToQueue faile,Msg ID error"); // LOG_F(INFO, "pushMsgToQueue faile,Msg ID error header: %p", header); + delete []header; return false; } delete []header; diff --git a/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h b/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h index 2afaa1d..31f8f0f 100644 --- a/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h +++ b/src/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h @@ -16,7 +16,7 @@ public: Json::Value root; Json::CharReaderBuilder builder; JSONCPP_STRING errs; - DeviceSwitchCmd cmd; + DeviceSwitchCmd cmd{}; // 解析JSON字符串 std::istringstream stream(msg); if (!Json::parseFromStream(builder, stream, &root, &errs)) { @@ -40,4 +40,4 @@ public: }; }; -#endif \ No newline at end of file +#endif diff --git a/src/pPowerManger/upmsg/uPlan_taskStart.h b/src/pPowerManger/upmsg/uPlan_taskStart.h index cda2a71..0c5a11c 100644 --- a/src/pPowerManger/upmsg/uPlan_taskStart.h +++ b/src/pPowerManger/upmsg/uPlan_taskStart.h @@ -16,7 +16,7 @@ public: ~uPlan_taskStartMsg(){}; MissionState getMission(const std::string& key, const std::string& msg) { - MissionState mission; + MissionState mission{}; Json::Value root; Json::CharReaderBuilder builder; JSONCPP_STRING errs; diff --git a/src/pPowerManger/upmsg/uPower_disSysState.h b/src/pPowerManger/upmsg/uPower_disSysState.h index d2c4380..78a33f7 100644 --- a/src/pPowerManger/upmsg/uPower_disSysState.h +++ b/src/pPowerManger/upmsg/uPower_disSysState.h @@ -21,20 +21,15 @@ public: { //构建配电系统状态报告 Json::Value dis; - disBus1Breaker* pdis1=new disBus1Breaker; - disBus2Breaker* pdis2=new disBus2Breaker; - disBus3Breaker* pdis3=new disBus3Breaker; - disBus4Breaker* pdis4=new disBus4Breaker; + disBus1Breaker dis1 = currentDisBreakerState.bus1Breaker; + disBus2Breaker dis2 = currentDisBreakerState.bus2Breaker; + disBus3Breaker dis3 = currentDisBreakerState.bus3Breaker; + disBus4Breaker dis4 = currentDisBreakerState.bus4Breaker; - *pdis1 = currentDisBreakerState.bus1Breaker; - *pdis2 = currentDisBreakerState.bus2Breaker; - *pdis3 = currentDisBreakerState.bus3Breaker; - *pdis4 = currentDisBreakerState.bus4Breaker; - - dis["HVolBusBreaker_uint16"] = *(unsigned short*)pdis1; - dis["HVolABusBreaker_unit16"] = *(unsigned short*)pdis2; - dis["HVolBBusBreaker_unit16"] = *(unsigned short*)pdis3; - dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4; + dis["HVolBusBreaker_uint16"] = *(unsigned short*)&dis1; + dis["HVolABusBreaker_unit16"] = *(unsigned short*)&dis2; + dis["HVolBBusBreaker_unit16"] = *(unsigned short*)&dis3; + dis["LVolBusBreaker_uint16"] = *(unsigned short*)&dis4; //TODO: 构建配电系统故障码 Json::Value faultCodeDis_array = Json::Value(Json::arrayValue); @@ -50,4 +45,4 @@ public: } }; -#endif \ No newline at end of file +#endif diff --git a/src/pPowerManger/upmsg/uPower_pmState.h b/src/pPowerManger/upmsg/uPower_pmState.h index 886f002..61e96e7 100644 --- a/src/pPowerManger/upmsg/uPower_pmState.h +++ b/src/pPowerManger/upmsg/uPower_pmState.h @@ -11,7 +11,15 @@ private: /* data */ public: 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() {}; std::string key = "uPower_pmState_fb"; @@ -59,4 +67,4 @@ public: } }; -#endif \ No newline at end of file +#endif diff --git a/test/cantools/generate_dbc.py b/test/cantools/generate_dbc.py new file mode 100644 index 0000000..ee7c81b --- /dev/null +++ b/test/cantools/generate_dbc.py @@ -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")