使用tinyfsm优化代码

This commit is contained in:
zjk
2025-04-06 23:51:03 +08:00
parent 002df307d7
commit ebf1701335
9 changed files with 158 additions and 321 deletions
+30 -27
View File
@@ -72,8 +72,11 @@ PowerManger::PowerManger()
m_db->createDriversTables(VAR_TO_STR(m_MSDriverCmd));
// 初始化状态机
cout << "init fsm" << endl;
m_fsm.init(this);
PowerManagerFsm::start();
PowerManagerFsm::dispatch(InitEvent());
cout << "init fsm ok" << endl;
}
//---------------------------------------------------------
@@ -188,12 +191,12 @@ bool PowerManger::Iterate()
// saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json");
///////////////////////
//4. 写状态信息到数据库
m_stateData.state_id = m_pmState.id;
m_stateData.state_name = m_pmState.name;
m_stateData.event = m_pmEvent;
m_stateData.fault_code = m_faultNum;
if(!m_db->insertStateData(m_stateData))
return false;
// m_stateData.state_id = m_pmState.id;
// m_stateData.state_name = m_pmState.name;
// m_stateData.event = m_pmEvent;
// m_stateData.fault_code = m_faultNum;
// if(!m_db->insertStateData(m_stateData))
// return false;
//AppCastingMOOSApp::PostReport();
//5. 清空UDP消息队列
m_udpComm.clearMsgQueue();
@@ -336,13 +339,13 @@ bool PowerManger::FsmLoop()
//状态机循环
while (!m_FsmThread.IsQuitRequested())
{
// 检查故障并触发事件
if(int error = checkError()) {
triggerFaultEvent(error);
} else {
// 自动状态转换由状态机内部处理
MOOSPause(1000);
}
// // 检查故障并触发事件
// if(int error = checkError()) {
// m_fsm.triggerFaultEvent(error);
// } else {
// // 自动状态转换由状态机内部处理
// MOOSPause(1000);
// }
//延时1s
usleep(1000000);
@@ -598,24 +601,24 @@ int PowerManger::checkError()
}
void PowerManger::triggerInitEvent()
{
PowerManagerFsm::dispatch(InitEvent());
}
// void PowerManger::triggerInitEvent()
// {
// PowerManagerFsm::dispatch(InitEvent());
// }
void PowerManger::triggerStandbyEvent()
{
PowerManagerFsm::dispatch(StandbyEvent());
}
// void PowerManger::triggerStandbyEvent()
// {
// PowerManagerFsm::dispatch(StandbyEvent());
// }
void PowerManger::triggerFaultEvent(unsigned int faultCode)
{
PowerManagerFsm::dispatch(FaultEvent(faultCode));
}
// 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 " << st.id << " [" << st.name << "] " << MOOS::ConsoleColours::reset();
cout << MOOS::ConsoleColours::Blue() << " -> " << MOOS::ConsoleColours::reset();
cout << MOOS::ConsoleColours::Yellow() << "STATE " << stateName << " " << MOOS::ConsoleColours::reset();
cout << MOOS::ConsoleColours::Blue() << " -> " << MOOS::ConsoleColours::reset();
// 检查desp是否有“故障”
if (desp.find("故障") != string::npos) {
cout << MOOS::ConsoleColours::Red() << desp << MOOS::ConsoleColours::reset() << endl;