使用状态机增加了初始状态和故障状态,编写了gui调试程序
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
#include "MBUtils.h"
|
||||
#include "ACTable.h"
|
||||
#include "PowerManger.h"
|
||||
#include "MOOS/libMOOS/Utils/ConsoleColours.h"
|
||||
#include <memory>
|
||||
|
||||
using namespace std;
|
||||
@@ -32,33 +31,18 @@ PowerManger::PowerManger()
|
||||
falutLevel = 0;
|
||||
soc = 0;
|
||||
sustainableTime = 0;
|
||||
m_connected = false;
|
||||
faultCode.push_back(0);
|
||||
|
||||
|
||||
|
||||
//注册状态机
|
||||
m_fsm.RegisterState("PM_STATE", 1, m_state1);
|
||||
m_fsm.RegisterState("PM_STATE2", 2, m_state2);
|
||||
m_fsm.RegisterState("PM_STATE3", 3, m_state3);
|
||||
m_fsm.RegisterState("Init", 1, m_Inite_s1);
|
||||
m_fsm.RegisterState("Fault", 99, m_Fault_s99);
|
||||
|
||||
m_fsm.RegisterHandleFunction(&m_state1,handleState1);
|
||||
m_fsm.RegisterHandleFunction(&m_state2,handleState2);
|
||||
m_fsm.RegisterHandleFunction(&m_state3,handleState3);
|
||||
|
||||
// 注册状态机转换条件
|
||||
// m_fsm.RegisterEvent(&m_state1, "a", &m_state2);
|
||||
// m_fsm.RegisterEvent(&m_state2, "b", &m_state3);
|
||||
// m_fsm.RegisterEvent(&m_state3, "c", &m_state1);
|
||||
|
||||
// cout << m_state1.event["a"]->name << endl;
|
||||
// cout << m_state2.event["b"]->name << endl;
|
||||
// cout << m_state1.event["a"]->id << endl;
|
||||
|
||||
// m_pmEvent = "a";
|
||||
m_fsm.RegisterHandleFunction(&m_Inite_s1, handleInite_s1);
|
||||
m_fsm.RegisterHandleFunction(&m_Fault_s99, handleFault_s99);
|
||||
|
||||
// 初始化状态机
|
||||
m_pmState = m_state1;
|
||||
|
||||
m_pmState = m_Inite_s1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
@@ -115,20 +99,17 @@ bool PowerManger::OnConnectToServer()
|
||||
|
||||
bool PowerManger::Iterate()
|
||||
{
|
||||
m_fsm.run(m_pmState,this);
|
||||
// m_fsm.run(&m_pmState,this,m_pmEvent);
|
||||
|
||||
cout <<"CURRENT STATE:" << m_pmState.name << " | CURRENT EVENT :" << m_pmEvent << endl;
|
||||
// cout <<"____________________________________-" << m_pmState.event[m_pmEvent]->name << endl;
|
||||
|
||||
// cout << m_pmState.name << endl;
|
||||
// cout << m_pmEvent << endl;
|
||||
AppCastingMOOSApp::Iterate();
|
||||
// 更新当前状态
|
||||
//1. 更新当前状态
|
||||
updatePmState();
|
||||
updateTime();
|
||||
//2. 运行状态机
|
||||
m_fsm.run(m_pmState,this);
|
||||
cout <<"CURRENT STATE:" << m_pmState.name << " | CURRENT EVENT :" << m_pmEvent << endl;
|
||||
|
||||
AppCastingMOOSApp::Iterate();
|
||||
//3. 输出报告
|
||||
buildPowerSysReport();
|
||||
//输出错误信息
|
||||
//4. 打印错误信息
|
||||
if(!m_udpComm.sError.empty())
|
||||
{
|
||||
for(int i=0;i<m_udpComm.sError.size();i++)
|
||||
@@ -138,6 +119,7 @@ bool PowerManger::Iterate()
|
||||
m_udpComm.sError.clear();
|
||||
}
|
||||
//AppCastingMOOSApp::PostReport();
|
||||
//5. 清空UDP消息队列
|
||||
m_udpComm.clearMsgQueue();
|
||||
return(true);
|
||||
}
|
||||
@@ -176,10 +158,13 @@ bool PowerManger::OnStartUp()
|
||||
}
|
||||
|
||||
registerVariables();
|
||||
|
||||
//绑定UDP端口
|
||||
if(m_pCcuUdpComm = setUdpScoket(IPORT))
|
||||
{
|
||||
cout<<MOOS::ConsoleColours::green()<< "UDP set succeed!"<< MOOS::ConsoleColours::reset() << endl;
|
||||
m_udpComm.ccuHost = CCUHOST;
|
||||
m_udpComm.ccuPort = CCUPORT;
|
||||
m_udpComm.udpScoket = m_pCcuUdpComm;
|
||||
MOOSTrace("UDP set succeed");
|
||||
}
|
||||
else
|
||||
@@ -253,7 +238,9 @@ bool PowerManger::ListenLoopUDP()
|
||||
cout<<MOOS::ConsoleColours::red()<< m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
|
||||
}
|
||||
}
|
||||
m_connected = true;
|
||||
}
|
||||
// updatePmState();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -794,28 +781,97 @@ bool PowerManger::saveStringToJsonFile(const string &strJson, const string &file
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//TODO:配电系统操作函数
|
||||
bool PowerManger::disSystemOperation(disBreaker optBreaker, disBreakerOpt)
|
||||
{
|
||||
// switch (disBreaker)
|
||||
// {
|
||||
// case bus1_fuelCellCircuitBreaker :
|
||||
// // send()
|
||||
// break;
|
||||
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
int PowerManger::handleState1(FSM_State &fsm,void* pData)
|
||||
int PowerManger::handleInite_s1(FSM_State &fsm, void* pData)
|
||||
{
|
||||
cout << fsm.name << endl;
|
||||
PowerManger* pm = (PowerManger*)pData;
|
||||
fsm = pm->m_fsm.getState("PM_STATE2");
|
||||
// pm->m_pmEvent = "a";
|
||||
|
||||
//1. 检查复合管控器连接
|
||||
double StartTime = pm->GetAppStartTime();
|
||||
while (!pm->m_connected)
|
||||
{
|
||||
pm->updateTime();
|
||||
double dft = abs(pm->m_current_time - StartTime);
|
||||
if(dft > 1)
|
||||
{
|
||||
pm->m_pmState = pm->m_Fault_s99;
|
||||
break;
|
||||
}
|
||||
string desp = "等待复合管控消息 : 超时 : " + to_string(10-dft);
|
||||
pm->printState(fsm,desp);
|
||||
usleep(1000000);
|
||||
}
|
||||
//2. 检查复合管控器是否上报故障 如果故障则进入故障状态
|
||||
bool ok = true;
|
||||
if(pm->m_pmCurrentState.ccustate.fcuGZ_1H != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_1L != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_2H != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_2L != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_3H != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.fcuGZ_3L != 0 ||
|
||||
pm->m_pmCurrentState.ccustate.insEmergencyStatusWord != 0)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
if(!ok)
|
||||
{
|
||||
pm->m_pmState = pm->m_Fault_s99;
|
||||
}
|
||||
//3. 检查当前配电装置状态
|
||||
// 首先闭合应急电源开关
|
||||
//TODO 检查并配置当前配电装置状态
|
||||
disHighVolBusCmd a;
|
||||
a.fuelCellCircuitBreaker = 0xAA;
|
||||
a.propulsionMotorCircuitBreaker = 0xAA;
|
||||
pm->m_udpComm.sendDisSysCmd(a);
|
||||
MOOSPause(1000);
|
||||
|
||||
// pm->workCondition = "";
|
||||
return 0;
|
||||
}
|
||||
int PowerManger::handleState2(FSM_State &fsm,void* pData)
|
||||
|
||||
int PowerManger::handleFault_s99(FSM_State &fsm, void* pData)
|
||||
{
|
||||
cout << fsm.name << endl;
|
||||
PowerManger* pm = (PowerManger*)pData;
|
||||
fsm = pm->m_fsm.getState("PM_STATE3");
|
||||
// pm->m_pmEvent = "b";
|
||||
return 0;
|
||||
}
|
||||
int PowerManger::handleState3(FSM_State &fsm,void* pData)
|
||||
{
|
||||
cout << fsm.name << endl;
|
||||
PowerManger* pm = (PowerManger*)pData;
|
||||
fsm = pm->m_fsm.getState("PM_STATE");
|
||||
// pm->m_pmEvent = "c";
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// int PowerManger::handleState1(FSM_State &fsm,void* pData)
|
||||
// {
|
||||
// cout << fsm.name << endl;
|
||||
// PowerManger* pm = (PowerManger*)pData;
|
||||
// fsm = pm->m_fsm.getState("PM_STATE2");
|
||||
// // pm->m_pmEvent = "a";
|
||||
// return 0;
|
||||
// }
|
||||
// int PowerManger::handleState2(FSM_State &fsm,void* pData)
|
||||
// {
|
||||
// cout << fsm.name << endl;
|
||||
// PowerManger* pm = (PowerManger*)pData;
|
||||
// fsm = pm->m_fsm.getState("PM_STATE3");
|
||||
// // pm->m_pmEvent = "b";
|
||||
// return 0;
|
||||
// }
|
||||
// int PowerManger::handleState3(FSM_State &fsm,void* pData)
|
||||
// {
|
||||
// cout << fsm.name << endl;
|
||||
// PowerManger* pm = (PowerManger*)pData;
|
||||
// fsm = pm->m_fsm.getState("PM_STATE");
|
||||
// // pm->m_pmEvent = "c";
|
||||
// return 0;
|
||||
// }
|
||||
Reference in New Issue
Block a user