优化通信代码,修复状态机的bug
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -317,4 +317,10 @@ char LowerCommManager::getBreakerOption(char cmd)
|
||||
return 0xAA;
|
||||
else
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
//TODO:根据心跳检查连接状态
|
||||
bool LowerCommManager::checkConnection()
|
||||
{
|
||||
m_pm->connectState =5;
|
||||
}
|
||||
@@ -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", "进入待机状态");
|
||||
}
|
||||
|
||||
|
||||
@@ -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 &);
|
||||
};
|
||||
|
||||
|
||||
@@ -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; // 成功
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user