完善了显示,修改了复合管控的通信协议
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
[1msrc/pPowerManger/main.cpp:0:0: [31minformation:[39m Too many #ifdef configurations - cppcheck only checks 12 of 78 configurations. Use --force to check all configurations. [toomanyconfigs][0m
|
||||
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:524:22: [31merror:[39m Array 'reserved2[1]' accessed at index 1, which is out of bounds. [arrayIndexOutOfBounds][0m
|
||||
reserved2[i] = data.reserved2[i];
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:523:23: [2mnote:[0m Assuming that condition 'i<2' is not redundant
|
||||
for(int i=0; i<2; i++) {
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:524:22: [2mnote:[0m Array index out of bounds
|
||||
reserved2[i] = data.reserved2[i];
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:524:42: [31merror:[39m Array 'data.reserved2[1]' accessed at index 1, which is out of bounds. [arrayIndexOutOfBounds][0m
|
||||
reserved2[i] = data.reserved2[i];
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:523:23: [2mnote:[0m Assuming that condition 'i<2' is not redundant
|
||||
for(int i=0; i<2; i++) {
|
||||
^
|
||||
[1msrc/pPowerManger/systemData.h:524:42: [2mnote:[0m Array index out of bounds
|
||||
reserved2[i] = data.reserved2[i];
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPower_pmState.h:14:9: [31merror:[39m Using 'memset' on struct that contains a 'std::vector'. [memsetClass][0m
|
||||
memset(&state, 0, sizeof(state));
|
||||
^
|
||||
[1msrc/pPowerManger/logc/loguru.hpp:666:3: [31mwarning:[39m Member variable 'LogScopeRAII::_verbosity' is not initialized in the constructor. [uninitMemberVar][0m
|
||||
LogScopeRAII() : _file(nullptr) {} // No logging
|
||||
^
|
||||
[1msrc/pPowerManger/logc/loguru.hpp:666:3: [31mwarning:[39m Member variable 'LogScopeRAII::_line' is not initialized in the constructor. [uninitMemberVar][0m
|
||||
LogScopeRAII() : _file(nullptr) {} // No logging
|
||||
^
|
||||
[1msrc/pPowerManger/logc/loguru.hpp:666:3: [31mwarning:[39m Member variable 'LogScopeRAII::_indent_stderr' is not initialized in the constructor. [uninitMemberVar][0m
|
||||
LogScopeRAII() : _file(nullptr) {} // No logging
|
||||
^
|
||||
[1msrc/pPowerManger/logc/loguru.hpp:666:3: [31mwarning:[39m Member variable 'LogScopeRAII::_start_time_ns' is not initialized in the constructor. [uninitMemberVar][0m
|
||||
LogScopeRAII() : _file(nullptr) {} // No logging
|
||||
^
|
||||
[1msrc/pPowerManger/logc/loguru.hpp:666:3: [31mwarning:[39m Member variable 'LogScopeRAII::_name' is not initialized in the constructor. [uninitMemberVar][0m
|
||||
LogScopeRAII() : _file(nullptr) {} // No logging
|
||||
^
|
||||
[1msrc/pPowerManger/sqlit3/SQLite.h:13:5: [31mstyle:[39m Class 'SQLite' has a constructor with 1 argument that is not explicit. [noExplicitConstructor][0m
|
||||
SQLite(const std::string& dbName);
|
||||
^
|
||||
[1msrc/pPowerManger/UpperCommManager.h:52:5: [31mstyle:[39m Class 'UpperCommManager' has a constructor with 1 argument that is not explicit. [noExplicitConstructor][0m
|
||||
UpperCommManager(PowerManger* powerManager);
|
||||
^
|
||||
[1msrc/pPowerManger/httpserver/httpserver.h:20:5: [31mstyle:[39m Class 'HttpServer' has a constructor with 1 argument that is not explicit. [noExplicitConstructor][0m
|
||||
HttpServer(int port = 8000);
|
||||
^
|
||||
[1msrc/pPowerManger/fsm/PowerManagerFsm.hpp:275:10: [31mstyle:[39m The function 'react' overrides a function in a base class but is not marked with a 'override' specifier. [missingOverride][0m
|
||||
void react(FaultEvent const &);
|
||||
^
|
||||
[1msrc/pPowerManger/fsm/PowerManagerFsm.hpp:90:18: [2mnote:[0m Virtual function in base class
|
||||
virtual void react(FaultEvent const &e);
|
||||
^
|
||||
[1msrc/pPowerManger/fsm/PowerManagerFsm.hpp:275:10: [2mnote:[0m Function in derived class
|
||||
void react(FaultEvent const &);
|
||||
^
|
||||
[1msrc/pPowerManger/udpcomm/udpComm.h:54:31: [31mstyle:[39m C-style pointer casting [cstyleCast][0m
|
||||
udpScoket->iSendMessageTo((void*) msg, size, ccuPort, ccuHost);
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPower_disSysState.h:34:42: [31mstyle:[39m C-style pointer casting [cstyleCast][0m
|
||||
dis["HVolBusBreaker_uint16"] = *(unsigned short*)pdis1;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPower_disSysState.h:35:42: [31mstyle:[39m C-style pointer casting [cstyleCast][0m
|
||||
dis["HVolABusBreaker_unit16"] = *(unsigned short*)pdis2;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPower_disSysState.h:36:42: [31mstyle:[39m C-style pointer casting [cstyleCast][0m
|
||||
dis["HVolBBusBreaker_unit16"] = *(unsigned short*)pdis3;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPower_disSysState.h:37:42: [31mstyle:[39m C-style pointer casting [cstyleCast][0m
|
||||
dis["LVolBusBreaker_uint16"] = *(unsigned short*)pdis4;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:29:20: [31mstyle:[39m Variable 'cmd.id' is reassigned a value before the old one has been used. [redundantAssignment][0m
|
||||
cmd.id = root["id_uint8"].asUInt();
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:24:20: [2mnote:[0m cmd.id is assigned
|
||||
cmd.id = -1;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:29:20: [2mnote:[0m cmd.id is overwritten
|
||||
cmd.id = root["id_uint8"].asUInt();
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setOpCondition.h:34:13: [31mstyle:[39m Statements following 'return' will never be executed. [unreachableCode][0m
|
||||
LOG_F(INFO, "上位机指令:opCondition: %d", root["state_uint8"].asUInt());
|
||||
^
|
||||
[1msrc/pPowerManger/udpcomm/udpComm.h:45:38: [31mperformance:[39m Function parameter 'cmd' should be passed by const reference. [passedByValue][0m
|
||||
bool sendCcuColCmd(const ccuColCmd cmd);
|
||||
^
|
||||
[1msrc/pPowerManger/fsm/PowerManagerFsm.hpp:49:27: [31mperformance:[39m Function parameter 'eventName' should be passed by const reference. [passedByValue][0m
|
||||
TestEvent(std::string eventName, unsigned int type,unsigned int eventId) : eventName(eventName), eventId(eventId),type(type) {};
|
||||
^
|
||||
[1msrc/pPowerManger/LowerCommManager.h:85:41: [31mperformance:[39m Function parameter 'cmd' should be passed by const reference. [passedByValue][0m
|
||||
bool sendCcuCommand(const ccuColCmd cmd);
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uDevice_secdistState.h:195:61: [31mstyle:[39m Parameter 'state' can be declared as reference to const [constParameter][0m
|
||||
std::string buildSecdistStateToJson(DeviceSecdistState &state){
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uDevice_secdistState.h:435:39: [31mstyle:[39m Parameter 'driver' can be declared as reference to const [constParameter][0m
|
||||
std::string buildMsg(DriverTable &driver){
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uPlan_taskStart.h:29:20: [31merror:[39m Uninitialized variable: mission [uninitvar][0m
|
||||
return mission;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:39:16: [31mwarning:[39m Uninitialized variable: cmd.cmd [uninitvar][0m
|
||||
return cmd;
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:34:40: [2mnote:[0m Assuming condition is false
|
||||
if (root.isMember("cmd_uint8") && root["cmd_uint8"].isUInt()) {
|
||||
^
|
||||
[1msrc/pPowerManger/upmsg/uExternComm_setDeviceSwitch.h:39:16: [2mnote:[0m Uninitialized variable: cmd.cmd
|
||||
return cmd;
|
||||
^
|
||||
[1mnofile:0:0: [31minformation:[39m Cppcheck cannot find all the include files (use --check-config for details) [missingInclude][0m
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ class PowerManger; // 前向声明
|
||||
class UpperCommManager {
|
||||
public:
|
||||
UpperCommManager(PowerManger* powerManager);
|
||||
~UpperCommManager();
|
||||
~UpperCommManager(){};
|
||||
|
||||
// 周期调用
|
||||
void processPeriodicTasks();
|
||||
|
||||
@@ -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表示所有数据成功读取
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef DRIVER_H
|
||||
#define DRIVER_H
|
||||
#include <memory>
|
||||
#include "json/json.h"
|
||||
#include "iostream"
|
||||
#include <sstream>
|
||||
@@ -96,8 +97,8 @@ public:
|
||||
void setDebug(bool debug);
|
||||
|
||||
public:
|
||||
DriverTable* currentDriverTable;
|
||||
DriverTable* nextDriverTable;
|
||||
std::unique_ptr<DriverTable> currentDriverTable;
|
||||
std::unique_ptr<DriverTable> nextDriverTable;
|
||||
|
||||
//操作函数,操作指定设备
|
||||
//TODO: 增加设备操作函数
|
||||
|
||||
@@ -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 &) {
|
||||
|
||||
@@ -356,6 +356,26 @@ body {
|
||||
</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>
|
||||
|
||||
<div id="statusMessage" class="status-message"></div>
|
||||
|
||||
@@ -189,7 +189,7 @@ const std::string DATA_HTML = R"(
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="collapsible">电池系统</button>
|
||||
<button class="collapsible">锂电池系统</button>
|
||||
<div class="content">
|
||||
<div class="system-data-grid">
|
||||
<div class="data-item">
|
||||
@@ -201,13 +201,37 @@ const std::string DATA_HTML = R"(
|
||||
<span class="data-value" id="dyn-soc">正在加载...</span>
|
||||
</div>
|
||||
<div class="data-item">
|
||||
<span class="data-label">仪表电池电压:</span>
|
||||
<span class="data-label">仪表电池LINK电压:</span>
|
||||
<span class="data-value" id="ins-voltage-link">正在加载...</span>
|
||||
</div>
|
||||
<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>
|
||||
</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">
|
||||
<span class="data-label">仪表电池电流:</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-value" id="dyn-relay-status2">正在加载...</span>
|
||||
</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>
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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Ω
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<int16_t>(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<int16_t>(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
|
||||
#endif
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
#endif
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
#endif
|
||||
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user