优化通信代码,修复状态机的bug
This commit is contained in:
@@ -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; // 成功
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user