修复了事件跳转状态跳转的问题,但是目前事件跳转仍然不完善,返回使用指针跳转的状态

This commit is contained in:
zjk
2024-12-02 23:21:55 +08:00
parent ec595ac1dc
commit d9d715326a
7 changed files with 153 additions and 126 deletions
+38 -38
View File
@@ -1,47 +1,47 @@
{
"HVABFTDev123Cur_uint16": 0,
"HVABactCur_uint16": 0,
"HVABbowRudCur_uint16": 0,
"HVABbusBCur_uint16": 0,
"HVABbusBVol_uint16": 255,
"HVABmastSteGeaCur_uint16": 0,
"HVABopenWaterCur_uint16": 0,
"HVABxczCur_uint16": 0,
"HVBBCCUCur_uint16": 276,
"HVBBFCSSecurSysCur_uint16": 43016,
"HVBBbatInsCur_uint16": 275,
"HVBBbowLowVolDisBoxCur_uint16": 275,
"HVBBdcC1InsCur_uint16": 43016,
"HVBBemer2BusVol_uint16": 6144,
"HVBBemerBatCur_uint16": 61440,
"HVBBinsBusVol_uint16": 47104,
"HVABFTDev123Cur_uint16": 24953,
"HVABactCur_uint16": 42982,
"HVABbowRudCur_uint16": 31,
"HVABbusBCur_uint16": 24576,
"HVABbusBVol_uint16": 0,
"HVABmastSteGeaCur_uint16": 127,
"HVABopenWaterCur_uint16": 65280,
"HVABxczCur_uint16": 32768,
"HVBBCCUCur_uint16": 24851,
"HVBBFCSSecurSysCur_uint16": 42982,
"HVBBbatInsCur_uint16": 24851,
"HVBBbowLowVolDisBoxCur_uint16": 0,
"HVBBdcC1InsCur_uint16": 0,
"HVBBemer2BusVol_uint16": 47104,
"HVBBemerBatCur_uint16": 36864,
"HVBBinsBusVol_uint16": 0,
"HVBBplcCur_uint16": 127,
"HVBBreservedCur1_uint16": 127,
"HVBBreservedCur1_uint16": 0,
"HVBBreservedCur2_uint16": 127,
"HVBBunit4Cur_uint16": 43016,
"HVBFTDev45Cur_uint16": 32680,
"HVBbatGroupCur_uint16": 5104,
"HVBbowHVolDisBoxCur_uint16": 2049,
"HVBBunit4Cur_uint16": 42982,
"HVBFTDev45Cur_uint16": 32679,
"HVBbatGroupCur_uint16": 48760,
"HVBbowHVolDisBoxCur_uint16": 58976,
"HVBbusACur_uint16": 0,
"HVBbusAVol_uint16": 2049,
"HVBbusAVol_uint16": 58943,
"HVBdcDc5Cur_uint16": 0,
"HVBfbCur_uint16": 51236,
"HVBmotorCur_uint16": 32680,
"HVBpowerBusCur_uint16": 5048,
"HVBpowerBusVol_uint16": 32680,
"HVBreservedCur1_uint16": 2049,
"HVBfbCur_uint16": 5144,
"HVBmotorCur_uint16": 32679,
"HVBpowerBusCur_uint16": 7264,
"HVBpowerBusVol_uint16": 32679,
"HVBreservedCur1_uint16": 58977,
"HVBreservedCur2_uint16": 0,
"HVBreservedCur3_uint16": 2041,
"HVBsternRud1Cur_uint16": 5144,
"HVBsternRud2Cur_uint16": 32680,
"HVBreservedCur3_uint16": 58977,
"HVBsternRud1Cur_uint16": 5048,
"HVBsternRud2Cur_uint16": 32679,
"HVBtyzCur_uint16": 0,
"LVBBbowPZDevCur_uint16": 0,
"LVBBemerBatCur_uint16": 0,
"LVBBemerBusVol_uint16": 0,
"LVBBinsBusCur_uint16": 43016,
"LVBBbowPZDevCur_uint16": 127,
"LVBBemerBatCur_uint16": 6144,
"LVBBemerBusVol_uint16": 24852,
"LVBBinsBusCur_uint16": 42982,
"LVBBunit1Cur_uint16": 127,
"LVBBunit2Cur_uint16": 0,
"LVBBunit3Cur_uint16": 0,
"LVBBunit5Cur_uint16": 0,
"LVBinsBusVol_uint16": 276
"LVBBunit2Cur_uint16": 61440,
"LVBBunit3Cur_uint16": 24851,
"LVBBunit5Cur_uint16": 42982,
"LVBinsBusVol_uint16": 24852
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"HVolABusBreaker_unit16": 0,
"HVolBBusBreaker_unit16": 0,
"HVolBusBreaker_uint16": 0,
"HVolBusBreaker_uint16": 512,
"LVolBusBreaker_uint16": 0,
"faultCode_array":
[
+27 -27
View File
@@ -1,30 +1,30 @@
{
"backpressure1_fp32": -5.4051763149612203e-28,
"backpressure2_fp32": 7.0480565570603022e-25,
"ch4oConcent1_fp32": 5.7198690228688065e-12,
"ch4oConcent2_fp32": 1.172338626680628e-38,
"backpressure1_fp32": -9.0950115693742826e-30,
"backpressure2_fp32": 1.1723338622658493e-38,
"ch4oConcent1_fp32": 0.0,
"ch4oConcent2_fp32": 0.0,
"ch4o_fp32": 0.0,
"excTemp_fp32": 7.8389743120117084e-39,
"faultCode1_uint16": 22608,
"faultCode2_uint16": 34680,
"faultCode3_uint16": 32767,
"fcuCurIns_fp32": 3.5873240686715317e-43,
"fcuCurPower_fp32": 0.0,
"fcuCur_fp32": 1.7600060933568737e+34,
"fcuFaultLeve_uint8": 43,
"fcuOutIns_fp32": 1.172338626680628e-38,
"fcuOutPower_fp32": 5.8264504332328215e-11,
"fcuState_uint8": 84,
"fcuVolIns_fp32": 3.1653568655087838e-12,
"fcuVolPower_fp32": 1.172338626680628e-38,
"fcuVol_fp32": 1.1723384865507816e-38,
"flameDet_uint8": 170,
"h2Concent1_fp32": 0.0,
"h2Concent2_fp32": 0.0,
"o2Concent1_fp32": 8.2589490801865395e-13,
"o2Concent2_fp32": 1.172338626680628e-38,
"o2Level_fp32": 1.1754773951108692e-38,
"o2_fp32": -1.049113533195957e+19,
"powLimit_fp32": 1.172338626680628e-38,
"powerGen_fp32": 4.6635212892729912e-42
"excTemp_fp32": 1.1723338622658493e-38,
"faultCode1_uint16": 39232,
"faultCode2_uint16": 59024,
"faultCode3_uint16": 32679,
"fcuCurIns_fp32": -6.5672670359649233e-28,
"fcuCurPower_fp32": 1.1723338622658493e-38,
"fcuCur_fp32": 4.6635212892729912e-42,
"fcuFaultLeve_uint8": 144,
"fcuOutIns_fp32": 1.1753926165537775e-38,
"fcuOutPower_fp32": -1.104591035133728e+23,
"fcuState_uint8": 46,
"fcuVolIns_fp32": -410840465408.0,
"fcuVolPower_fp32": 7.8490804765364189e-39,
"fcuVol_fp32": 1.1723338622658493e-38,
"flameDet_uint8": 0,
"h2Concent1_fp32": -3.4461820052887443e-29,
"h2Concent2_fp32": 1.1723338622658493e-38,
"o2Concent1_fp32": 3.5873240686715317e-43,
"o2Concent2_fp32": 0.0,
"o2Level_fp32": 0.0,
"o2_fp32": -8.1197206455365864e-30,
"powLimit_fp32": 1.1723338622658493e-38,
"powerGen_fp32": 3.5873240686715317e-43
}
+29 -29
View File
@@ -1,38 +1,38 @@
{
"fcuCurToInsLimit1_uint8": 85,
"fcuCurToInsLimit1_uint8": 127,
"fcuCurToinsLimit2_uint8": 0,
"insBatCurElect_uint16": 0,
"insBatLimit_uint16": 0,
"insBatSoc_uint8": 0,
"insBatTotalElect_uint16": 0,
"insChargeState_uint8": 240,
"insCurSocHold1_uint8": 23,
"insCurSocHold2_uint8": 223,
"insCurSocHold3_uint8": 91,
"insBatCurElect_uint16": 32765,
"insBatLimit_uint16": 39552,
"insBatSoc_uint8": 97,
"insBatTotalElect_uint16": 47744,
"insChargeState_uint8": 2,
"insCurSocHold1_uint8": 144,
"insCurSocHold2_uint8": 230,
"insCurSocHold3_uint8": 167,
"insCurrent_uint16": 0,
"insLinkVol_uint16": 34680,
"insLinkVol_uint16": 0,
"insNegRelayState_uint8": 0,
"insNegRes_uint16": 2092,
"insPackVol_uint16": 32767,
"insNegRes_uint16": 0,
"insPackVol_uint16": 0,
"insPosRelayState_uint8": 0,
"insPosRes_uint16": 33210,
"insfaultCode_uint8": 80,
"insPosRes_uint16": 0,
"insfaultCode_uint8": 186,
"powBatCurElect_uint16": 0,
"powBatSoc_uint8": 0,
"powBatTotalElect_uint16": 0,
"powChargeState_uint8": 88,
"powBatSoc_uint8": 175,
"powBatTotalElect_uint16": 10981,
"powChargeState_uint8": 0,
"powCurSocHold1_uint8": 0,
"powCurSocHold2_uint8": 76,
"powCurSocHold3_uint8": 43,
"powCurToInsLimit1_uint8": 146,
"powCurToinsLimit2_uint8": 117,
"powCur_uint16": 55776,
"powLinkVol_uint16": 32680,
"powNegRelayState_uint8": 0,
"powNegRes_uint16": 21851,
"powPosRelayState_uint8": 2,
"powPosRes_uint16": 57111,
"powerBatLimit_uint16": 0,
"powCurSocHold2_uint8": 224,
"powCurSocHold3_uint8": 233,
"powCurToInsLimit1_uint8": 210,
"powCurToinsLimit2_uint8": 11,
"powCur_uint16": 47904,
"powLinkVol_uint16": 0,
"powNegRelayState_uint8": 115,
"powNegRes_uint16": 32765,
"powPosRelayState_uint8": 238,
"powPosRes_uint16": 10981,
"powerBatLimit_uint16": 42026,
"powerPackVol_uint16": 0,
"powfaultCode_uint8": 175
"powfaultCode_uint8": 81
}
+19 -1
View File
@@ -46,7 +46,15 @@ PowerManger::PowerManger()
m_fsm.RegisterHandleFunction(&m_state3,handleState3);
// 注册状态机转换条件
// m_fsm.RegisterEvent()
// 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_pmState = m_state1;
@@ -108,6 +116,13 @@ 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();
// 更新当前状态
updatePmState();
@@ -785,6 +800,7 @@ 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)
@@ -792,6 +808,7 @@ 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)
@@ -799,5 +816,6 @@ 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;
}
+37 -28
View File
@@ -1,5 +1,5 @@
#include "fsm.h"
#include <iostream>
FSM::FSM(/* args */)
@@ -61,34 +61,43 @@ FSM_State FSM::getState(std::string name)
}
// int FSM::RegisterEvent(FSM_State* fsm, std::string event, FSM_State state)
// {
// if(fsm == NULL)
// return -1;
// fsm->event[event] = state;
// return 0;
// }
int FSM::RegisterEvent(FSM_State* fsm, std::string event, FSM_State *state)
{
if(fsm == NULL)
return -1;
fsm->event[event] = state;
return 0;
}
// int FSM::unRegisterEvent(FSM_State* fsm, std::string event)
// {
// if(fsm == NULL)
// return -1;
// if(fsm->event.count(event) <= 0)
// return -1;
// fsm->event.erase(event);
// return 0;
// }
int FSM::unRegisterEvent(FSM_State* fsm, std::string event)
{
if(fsm == NULL)
return -1;
if(fsm->event.count(event) <= 0)
return -1;
fsm->event.erase(event);
return 0;
}
// int FSM::run(FSM_State &fsm,void* data, std::string event)
// {
// if(fsm.event.count(event) <= 0)
// {
// return run(fsm,data);
// }
// else
// {
// fsm = fsm.event[event];
// return run(fsm,data);
// }
int FSM::run(FSM_State *fsm,void* data, std::string event)
{
if(fsm->event.count(event) <= 0)
{
std::cout << "no event" << std::endl;
return run(*(fsm),data);
}
else
{
int r = run(*(fsm),data);
// fsm = fsm->event[event];
*fsm = *fsm->event[event];
// std::cout << "event " << event <<std::endl;
// std::cout << "fsm" << fsm->name << std::endl;
return r;
}
}
// int FSM::run(FSM_State *fsm,void* data)
// {
// return run(*fsm,data);
// }
+2 -2
View File
@@ -25,10 +25,10 @@ public:
std::map<unsigned int, FSM_State> idStateMap;
int run(FSM_State &fsm,void* data);
int run(FSM_State &fsm,void* data, std::string event);
int run(FSM_State *fsm,void* data, std::string event);
//TODO: 事件注册机制实现
int RegisterEvent(FSM_State* fsm, std::string event, FSM_State &state);
int RegisterEvent(FSM_State* fsm, std::string event, FSM_State *state);
int unRegisterEvent(FSM_State* fsm, std::string event);
int RegisterState(std::string name, unsigned int id,FSM_State &state);