完善了显示,修改了复合管控的通信协议
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);
|
// 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())
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class PowerManger; // 前向声明
|
|||||||
class UpperCommManager {
|
class UpperCommManager {
|
||||||
public:
|
public:
|
||||||
UpperCommManager(PowerManger* powerManager);
|
UpperCommManager(PowerManger* powerManager);
|
||||||
~UpperCommManager();
|
~UpperCommManager(){};
|
||||||
|
|
||||||
// 周期调用
|
// 周期调用
|
||||||
void processPeriodicTasks();
|
void processPeriodicTasks();
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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: 增加设备操作函数
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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Ω
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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