优化通信代码,修复状态机的bug

This commit is contained in:
zjk
2025-04-09 15:11:31 +08:00
parent bac5f5291e
commit 785a47ff99
11 changed files with 219 additions and 235 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
"HVABbusBVol_uint16": 0,
"HVABmastSteGeaCur_uint16": 0,
"HVABopenWaterCur_uint16": 0,
"HVABxczCur_uint16": 1,
"HVABxczCur_uint16": 0,
"HVBBCCUCur_uint16": 0,
"HVBBFCSSecurSysCur_uint16": 0,
"HVBBbatInsCur_uint16": 0,
+3 -3
View File
@@ -1,8 +1,8 @@
{
"HVolABusBreaker_unit16": 0,
"HVolBBusBreaker_unit16": 79,
"HVolBusBreaker_uint16": 58,
"LVolBusBreaker_uint16": 159,
"HVolBBusBreaker_unit16": 0,
"HVolBusBreaker_uint16": 0,
"LVolBusBreaker_uint16": 0,
"faultCode_array":
[
0
+14 -14
View File
@@ -1,30 +1,30 @@
{
"backpressure1_fp32": 5.0,
"backpressure2_fp32": 3.0,
"ch4oConcent1_fp32": 85.0,
"ch4oConcent2_fp32": 48.0,
"backpressure1_fp32": 0.0,
"backpressure2_fp32": 0.0,
"ch4oConcent1_fp32": 0.0,
"ch4oConcent2_fp32": 0.0,
"ch4o_fp32": 0.0,
"excTemp_fp32": 37.0,
"excTemp_fp32": 0.0,
"faultCode1_uint16": 0,
"faultCode2_uint16": 0,
"faultCode3_uint16": 0,
"fcuCurIns_fp32": 0.0,
"fcuCurPower_fp32": 0.0,
"fcuCur_fp32": 6.0,
"fcuCur_fp32": 0.0,
"fcuFaultLeve_uint8": 0,
"fcuOutIns_fp32": 76.0,
"fcuOutPower_fp32": 912.0,
"fcuOutIns_fp32": 0.0,
"fcuOutPower_fp32": 0.0,
"fcuState_uint8": 0,
"fcuVolIns_fp32": 0.0,
"fcuVolPower_fp32": 0.0,
"fcuVol_fp32": 236.0,
"fcuVol_fp32": 0.0,
"flameDet_uint8": 0,
"h2Concent1_fp32": 32.0,
"h2Concent2_fp32": 50.0,
"o2Concent1_fp32": 56.0,
"o2Concent2_fp32": 91.0,
"h2Concent1_fp32": 0.0,
"h2Concent2_fp32": 0.0,
"o2Concent1_fp32": 0.0,
"o2Concent2_fp32": 0.0,
"o2Level_fp32": 0.0,
"o2_fp32": 0.0,
"powLimit_fp32": 64.0,
"powLimit_fp32": 0.0,
"powerGen_fp32": 0.0
}
+11 -11
View File
@@ -2,37 +2,37 @@
"fcuCurToInsLimit1_uint8": 0,
"fcuCurToinsLimit2_uint8": 0,
"insBatCurElect_uint16": 0,
"insBatLimit_uint16": 6,
"insBatSoc_uint8": 9,
"insBatTotalElect_uint16": 667,
"insBatLimit_uint16": 0,
"insBatSoc_uint8": 0,
"insBatTotalElect_uint16": 0,
"insChargeState_uint8": 0,
"insCurSocHold1_uint8": 0,
"insCurSocHold2_uint8": 0,
"insCurSocHold3_uint8": 0,
"insCurrent_uint16": 13,
"insCurrent_uint16": 0,
"insLinkVol_uint16": 0,
"insNegRelayState_uint8": 1,
"insNegRelayState_uint8": 0,
"insNegRes_uint16": 0,
"insPackVol_uint16": 0,
"insPosRelayState_uint8": 0,
"insPosRes_uint16": 0,
"insfaultCode_uint8": 0,
"powBatCurElect_uint16": 0,
"powBatSoc_uint8": 24,
"powBatTotalElect_uint16": 142,
"powBatSoc_uint8": 0,
"powBatTotalElect_uint16": 0,
"powChargeState_uint8": 0,
"powCurSocHold1_uint8": 0,
"powCurSocHold2_uint8": 0,
"powCurSocHold3_uint8": 0,
"powCurToInsLimit1_uint8": 0,
"powCurToinsLimit2_uint8": 0,
"powCur_uint16": 86,
"powCur_uint16": 0,
"powLinkVol_uint16": 0,
"powNegRelayState_uint8": 1,
"powNegRelayState_uint8": 0,
"powNegRes_uint16": 0,
"powPosRelayState_uint8": 1,
"powPosRelayState_uint8": 0,
"powPosRes_uint16": 0,
"powerBatLimit_uint16": 77,
"powerBatLimit_uint16": 0,
"powerPackVol_uint16": 0,
"powfaultCode_uint8": 0
}
+6
View File
@@ -317,4 +317,10 @@ char LowerCommManager::getBreakerOption(char cmd)
return 0xAA;
else
return 0x00;
}
//TODO:根据心跳检查连接状态
bool LowerCommManager::checkConnection()
{
m_pm->connectState =5;
}
+7
View File
@@ -8,12 +8,15 @@ PowerManger* PowerManagerFsm::pm = nullptr;
// InitState实现
void InitState::entry() {
PowerManagerFsm::entry();
std::cout << "===========================" << std::endl;
// PowerManagerFsm::pm->m_pmEvent = "初始化状态";
PowerManagerFsm::pm->printState("InitState", "进入初始化状态");
}
void InitState::react(InitEvent const &) {
// double StartTime = PowerManagerFsm::pm->GetAppStartTime();
std::cout << "开始初始化" << std::endl;
double StartTime = 0;
while (PowerManagerFsm::pm->connectState < 5) {
MOOSPause(1000);
@@ -49,10 +52,14 @@ void InitState::react(InitEvent const &) {
MOOSPause(1000);
PowerManagerFsm::pm->printState("InitState", PowerManagerFsm::pm->m_pmEvent);
}
std::cout << "InitState: 初始化完成" << std::endl;
//转换到待机状态
transit<StandbyState>();
}
// StandbyState实现
void StandbyState::entry() {
PowerManagerFsm::entry();
PowerManagerFsm::pm->printState("StandbyState", "进入待机状态");
}
+27 -8
View File
@@ -6,30 +6,48 @@
// 前向声明
class PowerManger;
enum class PowerSystemState {
INIT,
STANDBY,
FAULT,
};
// 定义事件类型
//==================状态切换事件=============================
struct InitEvent : tinyfsm::Event { };
struct StandbyEvent : tinyfsm::Event { };
struct FaultEvent : tinyfsm::Event {
unsigned int faultCode;
FaultEvent(unsigned int code) : faultCode(code) {}
};
//==================状态流程事件============================
struct MasterCommandEvent : tinyfsm::Event { };
struct TaskStart : tinyfsm::Event { };
// struct
// 定义状态机基类
class PowerManagerFsm : public tinyfsm::MooreMachine<PowerManagerFsm> {
class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> {
protected:
static PowerManger* pm;
public:
// 初始化状态机
static void init(PowerManger* powerManager) {
pm = powerManager;
}
// 响应事件默认实现
virtual void react(tinyfsm::Event const &) { }
virtual void react(tinyfsm::Event const &) { std::cout << "[ Reseve Envt ] " << "No Idear" << std::endl; }
virtual void react(InitEvent const &) {};
virtual void react(StandbyEvent const &) {};
virtual void react(FaultEvent const &) {};
virtual void react(MasterCommandEvent const &) {};
virtual void react(TaskStart const &) {};
// 状态机生命周期方法
void entry() {std::cout << "Enter state: " << typeid(*this).name() << std::endl;} // 进入状态
void exit() {std::cout << "Exit state: " << typeid(*this).name() << std::endl;} // 退出状态
virtual void entry() {std::cout << "[ Enter state ] : " << typeid(*this).name() << std::endl;} // 进入状态
virtual void exit() {std::cout << "[ Exit state ] : " << typeid(*this).name() << std::endl;} // 退出状态
// 状态转换接口
void triggerInitEvent() { dispatch(InitEvent()); }
@@ -40,14 +58,15 @@ public:
class InitState : public PowerManagerFsm {
public:
void entry();
void entry() override;
void react(InitEvent const &);
};
class StandbyState : public PowerManagerFsm {
public:
void entry();
void entry() override;
void react(StandbyEvent const &);
PowerSystemState getCurrentState();
private:
void handlePowerCommands();
void handlePowerOn();
@@ -55,7 +74,7 @@ private:
class FaultState : public PowerManagerFsm {
public:
void entry();
void entry() override;
void react(FaultEvent const &);
};
+19 -132
View File
@@ -35,15 +35,6 @@ PowerManger::PowerManger()
m_ticker = 0;
faultCode.push_back(0);
// msg_CcuStateFbMsg_Update_time = 0;
// // msg_CcuSetParmFbMsg_Update_time = 0;
// msg_disHighVolBusFbMsg_Update_time = 0;
// msg_disHighAVolBusFbMsg_Update_time = 0;
// msg_disHighBVolBusFbMsg_Update_time = 0;
// msg_disLowBusFbMsg_Update_time = 0;
connectState = 0;
m_pmCurrentState = {};
m_currentDisBreakerState = {};
m_targetDisBreakerState = {};
@@ -65,19 +56,6 @@ PowerManger::PowerManger()
m_db->createDriversTables(VAR_TO_STR(m_subDisSysCmd));
m_db->createDriversTables(VAR_TO_STR(m_MSDriverCmd));
//初始化UDP通信
m_lowerCommManager = new LowerCommManager(this,IPORT,CCUPORT,CCUHOST);
m_lowerCommManager->initUdpComm();
//初始化上位机通信
m_upperCommManager = new UpperCommManager(this);
// 初始化状态机
cout << "init fsm" << endl;
m_fsm.init(this);
PowerManagerFsm::start();
PowerManagerFsm::dispatch(InitEvent());
cout << "init fsm ok" << endl;
}
//---------------------------------------------------------
@@ -103,32 +81,9 @@ bool PowerManger::OnNewMail(MOOSMSG_LIST &NewMail)
string key = msg.GetKey();
string strJson = msg.GetString();
//处理上位机发送的控制指令
if(key == DB_TO_PM_MSCMD)
if(!m_upperCommManager->processUpperMsg(key,strJson))
{
if(getMsCmdFromJson(m_msCmd,strJson))
{
cout << "get ms cmd:" << strJson << endl;
}
else
{
cout << MOOS::ConsoleColours::Red << "get ms cmd error:" << strJson << MOOS::ConsoleColours::reset << endl;
}
}
//处理设备上电指令
if (key == DB_TO_PM_EQUIPMENTCMD)
{
if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysCmd) < 0)
{
cout << MOOS::ConsoleColours::Red << "get sub dis cmd error:" << strJson << MOOS::ConsoleColours::reset << endl;
}
}
//处理设备状态反馈
if(key == DB_TO_PM_SUBDISSTATE)
{
if(m_driver.loadDriverTableFromJson(strJson,m_subDisSysState) < 0)
{
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << strJson << MOOS::ConsoleColours::reset << endl;
}
cout << "processUpperMsg failed" << endl;
}
#if 0 // Keep these around just for template
@@ -167,13 +122,15 @@ bool PowerManger::OnConnectToServer()
bool PowerManger::Iterate()
{
AppCastingMOOSApp::Iterate();
// 打印当前状态
// cout << " Current State : " << (int)PowerManagerFsm::current_state_ptr->getCurrentState();
if (m_ticker++ % 5 == 0)
{
m_lowerCommManager->processPeriodicTasks();
m_upperCommManager->processPeriodicTasks();
// buildPowerSysReport();
Notify(PM_TO_DB_SUBDISCMD,m_driver.saveDriverTableToJson(&m_subDisSysCmd));
Notify(PM_TO_DB_EQUIPMENTSTATE,m_driver.saveDriverTableToJson(&m_currentDriverState));
//Notify(PM_TO_DB_SUBDISCMD,m_driver.saveDriverTableToJson(&m_subDisSysCmd));
//Notify(PM_TO_DB_EQUIPMENTSTATE,m_driver.saveDriverTableToJson(&m_currentDriverState));
//d.保存到数据库
writeDataToDB();
}
@@ -229,7 +186,19 @@ bool PowerManger::OnStartUp()
}
registerVariables();
//初始化UDP通信
m_lowerCommManager = new LowerCommManager(this,IPORT,CCUPORT,CCUHOST);
m_lowerCommManager->initUdpComm();
m_lowerCommManager->startListenThread();
//初始化上位机通信
m_upperCommManager = new UpperCommManager(this);
// 初始化状态机
PowerManagerFsm::init(this);
PowerManagerFsm::start();
InitEvent initEvent;
PowerManagerFsm::dispatch(initEvent);
return(true);
}
@@ -263,22 +232,6 @@ bool PowerManger::buildReport()
return(true);
}
//------------------------------------------------------------
// Procedure: setUdpScoket()
XPCUdpSocket* PowerManger::setUdpScoket(long lPort)
{
XPCUdpSocket* pUdpSocket = new XPCUdpSocket(lPort);
try
{
pUdpSocket->vBindSocket();
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
return NULL;
}
return pUdpSocket;
}
bool PowerManger::FsmLoop()
@@ -302,9 +255,6 @@ bool PowerManger::FsmLoop()
bool PowerManger::writeDataToDB()
{
// //写入配电系统状态
// if(!m_db->insertDisCcuData(m_pmCurrentState))
// return false;
//写入设备状态
if(!m_db->insertDriverTables(m_currentDriverState,VAR_TO_STR(m_currentDriverState)))
return false;
@@ -333,22 +283,6 @@ int PowerManger::checkError()
//2.检查断路器状态
}
// void PowerManger::triggerInitEvent()
// {
// PowerManagerFsm::dispatch(InitEvent());
// }
// void PowerManger::triggerStandbyEvent()
// {
// PowerManagerFsm::dispatch(StandbyEvent());
// }
// void PowerManger::triggerFaultEvent(unsigned int faultCode)
// {
// PowerManagerFsm::dispatch(FaultEvent(faultCode));
// }
void PowerManger::printState(const std::string& stateName, const std::string& desp){
cout << MOOS::ConsoleColours::Yellow() << "STATE " << stateName << " " << MOOS::ConsoleColours::reset();
cout << MOOS::ConsoleColours::Blue() << " -> " << MOOS::ConsoleColours::reset();
@@ -361,7 +295,6 @@ void PowerManger::printState(const std::string& stateName, const std::string& de
}
//==============================系统操作函数====================
bool PowerManger::shutdown()
{
@@ -425,50 +358,4 @@ void PowerManger::initControlCmd()
m_msCmd.workCMD = 99;
//================初始化设备驱动指令========================
}
bool PowerManger::getMsCmdFromJson(MSControlCmd &cmd, const std::string &strJson)
{
Json::CharReaderBuilder builder;
Json::Value root;
std::string errs;
// 解析JSON字符串
std::istringstream s(strJson);
if (!Json::parseFromStream(builder, s, &root, &errs))
{
std::cerr << "JSON解析失败: " << errs << std::endl;
return false; // 解析失败
}
if (root.isMember("powerCMD") && root["powerCMD"].isUInt())
{
cmd.powerCMD = root["powerCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: powerCMD" << std::endl;
return false; // 缺少或类型不匹配
}
if (root.isMember("modCMD") && root["modCMD"].isUInt())
{
cmd.modCMD = root["modCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: modCMD" << std::endl;
return false; // 缺少或类型不匹配
}
if (root.isMember("workCMD") && root["workCMD"].isUInt())
{
cmd.workCMD = root["workCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: workCMD" << std::endl;
return false; // 缺少或类型不匹配
}
return true; // 成功
}
}
+11 -42
View File
@@ -20,9 +20,6 @@
#define UNIX
#define JSON_USE_EXCEPTION 1
// 前向声明
class PowerManagerFsm;
#include <queue>
#include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h"
#include "MOOS/libMOOS/Utils/MOOSThread.h"
@@ -46,22 +43,6 @@ class PowerManagerFsm;
#define MAX_UDP_PKT_SIZE 65535
#define SKEW_TOLERANCE 5
//能源管理反馈的消息
#define PM_TO_DB_STATE "uPower_pmState_st"
#define PM_TO_DB_CURRENTSTATE "uPower_currentState_st"
#define PM_TO_DB_DISSTATE "uPower_disSysState_st"
#define PM_TO_DB_LIBATSTATE "uPower_liBatState_st"
#define PM_TO_DB_FCSSTATE "uPower_fcsState_st"
#define PM_TO_DB_SUBDISCMD "uPower_secdistState_cmd"
#define PM_TO_DB_EQUIPMENTSTATE "uPower_equState_fb"
//控制消息
//TODO:实现上位机交互控制功能
#define DB_TO_PM_MSCMD "uPower_sysState_cmd"
#define DB_TO_PM_EQUIPMENTCMD "uPower_equState_cmd"
#define DB_TO_PM_SUBDISSTATE "uDevice_secdistState_st"
class PowerManger : public AppCastingMOOSApp
{
public:
@@ -80,20 +61,10 @@ class PowerManger : public AppCastingMOOSApp
public:
void updateTime(){m_current_time = MOOSTime();}
bool IsSkewed(double dfTimeNow, double * pdfSkew = NULL);
string getTypeName(const string typeName);
bool inline saveStringToJsonFile(const string &strJson, const string &strFileName);
//数据库
SQLiteDB* m_db;
bool writeDataToDB();
//通信状态变量及操作函数
XPCUdpSocket* setUdpScoket(long lPort);
// bool updatePmState();
// bool updateConnectState();
int connectState;
/************************************************************/
/* |<------------FEEDBACK--------<-- */
/* | | */
@@ -113,6 +84,9 @@ class PowerManger : public AppCastingMOOSApp
disSysBreakerList m_currentDisBreakerState; //配电断路器状态
DriverTable m_currentDriverState;
DriverTable m_subDisSysState;
int m_depth;
int m_missionCode;
//===========================STATE=========================================
unsigned char workCondition;
unsigned char currentMod;
@@ -121,24 +95,19 @@ class PowerManger : public AppCastingMOOSApp
vector<unsigned int> faultCode;
unsigned int soc;
unsigned int sustainableTime;
unsigned int m_faultNum;
Driver m_driver; //设备表处理
std::string m_pmEvent; // 状态机事件描述
//===========================CONFIG========================================
long m_lPort;
unsigned int m_nReceiveBufferSizeKB;
unsigned int m_nSendBufferSizeKB;
double m_current_time;
unsigned int m_faultNum;
double m_current_time;
unsigned int m_ticker;
//===========================交互状态变量==================================
Driver m_driver; //设备驱动
std::string m_pmEvent; // 状态机事件描述
//=============================运行变量======================================
// char getBreakerOption(char cmd);
void initControlCmd();
//上位机操作函数
// bool buildPowerSysReport();
bool getMsCmdFromJson(MSControlCmd &cmd,const string &strJson);
int connectState;
//=============================过程函数======================================
void initControlCmd();
private:
// CMOOSThread m_FsmThread;
+95 -18
View File
@@ -6,39 +6,116 @@ UpperCommManager::UpperCommManager(PowerManger* pm) : m_pm(pm) {}
bool UpperCommManager::processUpperMsg(const string& key, const string& strJson) {
if(key == DB_TO_PM_MSCMD) {
if(m_pm->getMsCmdFromJson(m_pm->m_msCmd, strJson)) {
cout << "get ms cmd:" << strJson << endl;
return true;
} else {
cout << MOOS::ConsoleColours::Red << "get ms cmd error:" << strJson
<< MOOS::ConsoleColours::reset << endl;
}
m_pm->m_msCmd = getMasterControlCmd(key, strJson);
return true;
}
else if(key == DB_TO_PM_EQUIPMENTCMD) {
if(m_pm->m_driver.loadDriverTableFromJson(strJson, m_pm->m_subDisSysCmd) < 0) {
cout << MOOS::ConsoleColours::Red << "get sub dis cmd error:" << strJson
<< MOOS::ConsoleColours::reset << endl;
}
m_pm->m_MSDriverCmd = getEquipmentCmd(key, strJson);
return true;
}
else if(key == DB_TO_PM_SUBDISSTATE) {
if(m_pm->m_driver.loadDriverTableFromJson(strJson, m_pm->m_subDisSysState) < 0) {
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << strJson
<< MOOS::ConsoleColours::reset << endl;
}
m_pm->m_subDisSysState = getSubDisState(key, strJson);
return true;
}
std::cout << "Unknown key: " << key << std::endl;
return false;
}
const MSControlCmd UpperCommManager::getMasterControlCmd(const std::string& key, const std::string& msg)
{
MSControlCmd cmd;
if (parseControlCmdFromJson(cmd, msg)) {
return cmd;
}
else
{
cout << MOOS::ConsoleColours::Red << "parse control cmd error:" << msg
<< MOOS::ConsoleColours::reset << endl;
}
}
const DriverTable UpperCommManager::getEquipmentCmd(const std::string& key, const std::string& msg)
{
DriverTable cmd;
if (m_pm->m_driver.loadDriverTableFromJson(msg, cmd) < 0) {
cout << MOOS::ConsoleColours::Red << "get equipment cmd error:" << msg
<< MOOS::ConsoleColours::reset << endl;
}
return cmd;
}
const DriverTable UpperCommManager::getSubDisState(const std::string& key, const std::string& msg)
{
DriverTable state;
if (m_pm->m_driver.loadDriverTableFromJson(msg, state) < 0) {
cout << MOOS::ConsoleColours::Red << "get sub dis state error:" << msg
<< MOOS::ConsoleColours::reset << endl;
}
}
const std::string UpperCommManager::getCurrentEquState(DriverTable& driver)
{
return m_pm->m_driver.saveDriverTableToJson(&driver);
}
const std::string UpperCommManager::getSubDisCmd(DriverTable& driver)
{
return m_pm->m_driver.saveDriverTableToJson(&driver);
}
void UpperCommManager::processPeriodicTasks() {
buildSystemReport();
// m_pm->Notify(PM_TO_DB_SUBDISCMD, m_pm->m_driver.saveDriverTableToJson(&m_pm->m_subDisSysCmd));
// m_pm->Notify(PM_TO_DB_EQUIPMENTSTATE, m_pm->m_driver.saveDriverTableToJson(&m_pm->m_currentDriverState));
std::string strJson;
strJson = getCurrentEquState(m_pm->m_currentDriverState);
m_pm->sendNotification(PM_TO_DB_EQUIPMENTSTATE, strJson);
strJson = getSubDisCmd(m_pm->m_subDisSysCmd);
m_pm->sendNotification(PM_TO_DB_SUBDISCMD, strJson);
}
bool UpperCommManager::parseControlCmdFromJson(MSControlCmd &cmd, const std::string &strJson)
{
Json::CharReaderBuilder builder;
Json::Value root;
std::string errs;
// 解析JSON字符串
std::istringstream s(strJson);
if (!Json::parseFromStream(builder, s, &root, &errs))
{
std::cerr << "JSON解析失败: " << errs << std::endl;
return false; // 解析失败
}
if (root.isMember("powerCMD") && root["powerCMD"].isUInt())
{
cmd.powerCMD = root["powerCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: powerCMD" << std::endl;
return false; // 缺少或类型不匹配
}
if (root.isMember("modCMD") && root["modCMD"].isUInt())
{
cmd.modCMD = root["modCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: modCMD" << std::endl;
return false; // 缺少或类型不匹配
}
if (root.isMember("workCMD") && root["workCMD"].isUInt())
{
cmd.workCMD = root["workCMD"].asUInt();
}
else
{
std::cerr << "缺少或类型不匹配: workCMD" << std::endl;
return false; // 缺少或类型不匹配
}
return true; // 成功
}
void UpperCommManager::buildSystemReport() {
//TODO: 构建能源系统报告
string suffix;
Json::Value pms;
Json::Value fcs;
+25 -6
View File
@@ -10,6 +10,24 @@
#include <map>
using namespace std;
#define VAR_TO_STR(var) #var
//能源管理反馈的消息
#define PM_TO_DB_STATE "uPower_pmState_st"
#define PM_TO_DB_CURRENTSTATE "uPower_currentState_st"
#define PM_TO_DB_DISSTATE "uPower_disSysState_st"
#define PM_TO_DB_LIBATSTATE "uPower_liBatState_st"
#define PM_TO_DB_FCSSTATE "uPower_fcsState_st"
#define PM_TO_DB_SUBDISCMD "uPower_secdistState_cmd"
#define PM_TO_DB_EQUIPMENTSTATE "uPower_equState_fb"
//控制消息
#define DB_TO_PM_MSCMD "uPower_sysState_cmd"
#define DB_TO_PM_EQUIPMENTCMD "uPower_equState_cmd"
#define DB_TO_PM_SUBDISSTATE "uDevice_secdistState_st"
//决策消息
#define DB_TO_PM_DEEPTH "uPower_depth_fb"
#define DB_TO_PM_MISSION "uPlan_taskStart_cmd"
class PowerManger; // 前向声明
@@ -27,17 +45,18 @@ public:
// 生成系统报告
void buildSystemReport();
// 获取控制命令
const MSControlCmd& getControlCmd() const { return m_msCmd; }
// 更新设备命令状态
void updateEquipmentCmd(const DriverTable& cmd);
// 消息处理函数
const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg);
const DriverTable getEquipmentCmd(const std::string& key, const std::string& msg);
const DriverTable getSubDisState(const std::string& key, const std::string& msg);
const std::string getCurrentEquState(DriverTable& driver);
const std::string getSubDisCmd(DriverTable& driver);
// 其他公共函数
string getTypeName(const string typeName);
bool saveStringToJsonFile(const string &strJson, const string &filePath);
private:
PowerManger* m_pm;
MSControlCmd m_msCmd;