优化通信代码,修复状态机的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
+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; // 成功
}
}