去掉了step函数里所有的if,NULL函数用一个空函数代替,这样代码运行速度提升不少,最快178,最慢255
This commit is contained in:
parent
0cff421be5
commit
04c8c07b8f
|
@ -6,7 +6,7 @@ include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM)
|
||||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
|
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
|
||||||
|
|
||||||
|
|
||||||
set(keytest 789)
|
# set(keytest 789)
|
||||||
# set(child_parent 789)
|
# set(child_parent 789)
|
||||||
if(DEFINED keytest)
|
if(DEFINED keytest)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
||||||
|
|
|
@ -29,21 +29,13 @@
|
||||||
*/
|
*/
|
||||||
static inline void setNextState(FSM* pFSM){
|
static inline void setNextState(FSM* pFSM){
|
||||||
int curState = pFSM->privateVars->curState;
|
int curState = pFSM->privateVars->curState;
|
||||||
if(curState != 0){
|
if(curState == 0)
|
||||||
pFSM->signals.lastTriggeredSignal = Idle_Signal;
|
|
||||||
pFSM->privateVars->nextState = pFSM->privateVars->fcns.selectNextState[curState](pFSM->data, &pFSM->signals);
|
|
||||||
pFSM->privateVars->index = pFSM->privateVars->curState * pFSM->privateVars->numState + pFSM->privateVars->nextState;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(0 == pFSM->privateVars->numChild)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pFSM->signals.lastTriggeredSignal = Idle_Signal;
|
||||||
|
pFSM->privateVars->nextState = pFSM->privateVars->fcns.selectNextState[curState](pFSM->data, &pFSM->signals);
|
||||||
|
pFSM->privateVars->index = pFSM->privateVars->curState * pFSM->privateVars->numState + pFSM->privateVars->nextState;
|
||||||
|
|
||||||
for (int i = 0; i < pFSM->privateVars->numChild; i++)
|
|
||||||
{
|
|
||||||
FSM *cFSM = pFSM->privateVars->childFSM[i];
|
|
||||||
setNextState(cFSM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -80,38 +72,29 @@ void stepBaseFSM(FSM *pFSM)
|
||||||
FSM **childFSM = pFSM->privateVars->childFSM;
|
FSM **childFSM = pFSM->privateVars->childFSM;
|
||||||
int index = pFSM->privateVars->index;
|
int index = pFSM->privateVars->index;
|
||||||
int nextState = pFSM->privateVars->nextState;
|
int nextState = pFSM->privateVars->nextState;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(nextState && curState != nextState){ // 状态切换
|
if(nextState && curState != nextState){ // 状态切换
|
||||||
if (fcns->exitActionTable[curState] != NULL)
|
fcns->exitActionTable[curState](data, childFSM);
|
||||||
fcns->exitActionTable[curState](data, childFSM);
|
fcns->transitionTable[index](data); // 有特定的状态转移函数
|
||||||
|
fcns->transitionGeneralAction(data); // 通用状态转移函数
|
||||||
if (fcns->transitionTable[index] != NULL) // 有特定的状态转移函数
|
fcns->enterActionTable[nextState](data, childFSM);
|
||||||
(*fcns->transitionTable[index])(data);
|
|
||||||
|
|
||||||
if(fcns->transitionGeneralAction != NULL)
|
|
||||||
fcns->transitionGeneralAction(data); // 通用状态转移函数
|
|
||||||
|
|
||||||
if (fcns->enterActionTable[nextState] != NULL)
|
|
||||||
fcns->enterActionTable[nextState](data, childFSM);
|
|
||||||
|
|
||||||
pFSM->privateVars->curState = nextState;
|
pFSM->privateVars->curState = nextState;
|
||||||
}
|
}
|
||||||
else if(curState == 0){ // 处理刚运行进入的默认状态
|
else if(curState == 0){ // 处理刚运行进入的默认状态
|
||||||
nextState = pFSM->privateVars->defaultState;
|
nextState = pFSM->privateVars->defaultState;
|
||||||
if (fcns->enterActionTable[nextState] != NULL)
|
fcns->enterActionTable[nextState](data, childFSM);
|
||||||
fcns->enterActionTable[nextState](data, childFSM);
|
|
||||||
pFSM->privateVars->curState = nextState;
|
pFSM->privateVars->curState = nextState;
|
||||||
}
|
}
|
||||||
else // 状态机没动
|
else // 状态机没动
|
||||||
{
|
{
|
||||||
if (fcns->duringActionTable[curState] != NULL)
|
fcns->duringActionTable[curState](data, childFSM);
|
||||||
fcns->duringActionTable[curState](data, childFSM);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* public 函数 */
|
/* public 函数 */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
@ -127,7 +110,6 @@ void _stepFSM(FSM *pFSM){
|
||||||
pFSM->publicFcns.step(pFSM);
|
pFSM->publicFcns.step(pFSM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int getFSMCurState(FSM *pFSM){
|
int getFSMCurState(FSM *pFSM){
|
||||||
return pFSM->privateVars->curState;
|
return pFSM->privateVars->curState;
|
||||||
}
|
}
|
||||||
|
@ -136,14 +118,17 @@ int getFSMNextState(FSM *pFSM){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void setChildNum(FSM *pFSM, int num){
|
|
||||||
pFSM->privateVars->numChild = num;
|
|
||||||
pFSM->privateVars->childFSM = (FSM **)calloc(num, sizeof(FSM *));
|
void registerChildFSM(FSM *parent, FSM *child){
|
||||||
|
// parent->privateVars->childFSM[index] = child;
|
||||||
|
// parent->privateVars->hasChild++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerChildFSM(FSM *parent, FSM *child, int index){
|
|
||||||
parent->privateVars->childFSM[index] = child;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const void *_getData(FSM* pFSM){
|
const void *_getData(FSM* pFSM){
|
||||||
return (const void *)pFSM->data;
|
return (const void *)pFSM->data;
|
||||||
|
@ -153,6 +138,9 @@ void _setSignal(FSM *pFSM, Uint16 signalFlag){
|
||||||
pFSM->signals.all |= (1 << signalFlag);
|
pFSM->signals.all |= (1 << signalFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
* @deprecated 弃用
|
* @deprecated 弃用
|
||||||
|
@ -231,6 +219,8 @@ void constructFSM(FSM* pFSM){
|
||||||
assert(pFSM->pureVtbl.initData);
|
assert(pFSM->pureVtbl.initData);
|
||||||
assert(pFSM->pureVtbl.initDataLoader);
|
assert(pFSM->pureVtbl.initDataLoader);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pFSM->pureVtbl.setupHandler(&pFSM->privateVars->fcns);
|
pFSM->pureVtbl.setupHandler(&pFSM->privateVars->fcns);
|
||||||
pFSM->pureVtbl.initData(pFSM);
|
pFSM->pureVtbl.initData(pFSM);
|
||||||
pFSM->pureVtbl.initDataLoader(pFSM);
|
pFSM->pureVtbl.initDataLoader(pFSM);
|
||||||
|
|
|
@ -53,14 +53,16 @@ typedef struct FSMPrivateVars
|
||||||
|
|
||||||
FSMHandler fcns; /**< 状态函数表 */
|
FSMHandler fcns; /**< 状态函数表 */
|
||||||
|
|
||||||
int numChild; /**< @deprecated 和子状态机相关的暂时弃用 */
|
FSM *childFSM; /**< 限定只能有一个子状态机 */
|
||||||
FSM **childFSM; /**< @deprecated 和子状态机相关的暂时弃用 */
|
|
||||||
|
|
||||||
FSMDataLoader preloader; /**< @deprecated 弃用 */
|
FSMDataLoader preloader; /**< @deprecated 弃用 */
|
||||||
|
|
||||||
}FSMPrivateVars;
|
}FSMPrivateVars;
|
||||||
|
|
||||||
|
|
||||||
|
static void empty_func(){
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 仅在FSM.c中调用,新建私有变量并分配空间
|
* @brief 仅在FSM.c中调用,新建私有变量并分配空间
|
||||||
|
@ -80,21 +82,41 @@ FSMPrivateVars* newFMSPrivateVars(int numState, int defaultState){
|
||||||
privateVars->defaultState = defaultState;
|
privateVars->defaultState = defaultState;
|
||||||
privateVars->curState = 0;
|
privateVars->curState = 0;
|
||||||
privateVars->nextState = 0;
|
privateVars->nextState = 0;
|
||||||
privateVars->numChild = 0;
|
privateVars->childFSM = NULL;
|
||||||
|
|
||||||
privateVars->preloader.isReady = 0;
|
privateVars->preloader.isReady = 0;
|
||||||
|
|
||||||
privateVars->fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
privateVars->fcns.duringActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
privateVars->fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
privateVars->fcns.enterActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
privateVars->fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
privateVars->fcns.exitActionTable = calloc(numState, sizeof(StateFuncPtr));
|
||||||
|
|
||||||
|
for (int i = 0; i < numState; i++)
|
||||||
|
{
|
||||||
|
privateVars->fcns.duringActionTable[i] = empty_func;
|
||||||
|
privateVars->fcns.enterActionTable[i] = empty_func;
|
||||||
|
privateVars->fcns.exitActionTable[i] = empty_func;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
privateVars->fcns.selectNextState = calloc(numState, sizeof(SelectNextStateFcnPtr));
|
privateVars->fcns.selectNextState = calloc(numState, sizeof(SelectNextStateFcnPtr));
|
||||||
privateVars->fcns.transitionTable = calloc(numState * numState, sizeof(TransitionFuncPtr));
|
privateVars->fcns.transitionTable = calloc(numState * numState, sizeof(TransitionFuncPtr));
|
||||||
|
for (int i = 0; i < numState * numState; i++)
|
||||||
|
{
|
||||||
|
privateVars->fcns.transitionTable[i] = empty_func;
|
||||||
|
}
|
||||||
|
|
||||||
privateVars->fcns.transitionGeneralAction = calloc(1, sizeof(StateFuncPtr));
|
privateVars->fcns.transitionGeneralAction = calloc(1, sizeof(StateFuncPtr));
|
||||||
|
privateVars->fcns.transitionGeneralAction = empty_func;
|
||||||
|
|
||||||
privateVars->fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
privateVars->fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
||||||
|
|
||||||
return privateVars;
|
return privateVars;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
static int hasChildFSM(FSM *pFSM){
|
||||||
|
return (pFSM->privateVars->childFSM != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -68,7 +68,7 @@ typedef struct FSMHandler{
|
||||||
int (**selectNextState)(void *data, FSMSignals* signals); /**< 每个状态配置的状态选择函数 */
|
int (**selectNextState)(void *data, FSMSignals* signals); /**< 每个状态配置的状态选择函数 */
|
||||||
|
|
||||||
void (**transitionTable)(void *data); /**< 状态转移函数表 */
|
void (**transitionTable)(void *data); /**< 状态转移函数表 */
|
||||||
void (*transitionGeneralAction)(void *data); /**< 通用状态转移函数,不论有没有独立的状态转移函数都会执行 */
|
void (*transitionGeneralAction)(void *data); /**< 通用状态转移函数,不论有没有独立的状态转移函数都会执行。常用来清空内部变量 */
|
||||||
|
|
||||||
void (**enterActionTable)(void *data, FSM **cFSM); /**< 进入状态时运行的函数,和plecs对标 */
|
void (**enterActionTable)(void *data, FSM **cFSM); /**< 进入状态时运行的函数,和plecs对标 */
|
||||||
void (**duringActionTable)(void *data, FSM **cFSM); /**< 状态不变时运行的函数,和plecs对标 */
|
void (**duringActionTable)(void *data, FSM **cFSM); /**< 状态不变时运行的函数,和plecs对标 */
|
||||||
|
@ -151,4 +151,6 @@ static inline void clearAllSignals(FSMSignals *signals){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,8 +41,6 @@ void _stepFSM(FSM *pFSM);
|
||||||
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
||||||
int getFSMCurState(FSM *pFSM);
|
int getFSMCurState(FSM *pFSM);
|
||||||
int getFSMNextState(FSM *pFSM);
|
int getFSMNextState(FSM *pFSM);
|
||||||
void setChildNum(FSM *pFSM, int num);
|
|
||||||
void registerChildFSM(FSM *parent, FSM *child, int index);
|
|
||||||
|
|
||||||
/* ------------------------------ Data和Signals ------------------------------ */
|
/* ------------------------------ Data和Signals ------------------------------ */
|
||||||
const void *_getData(FSM* pFSM);
|
const void *_getData(FSM* pFSM);
|
||||||
|
@ -54,6 +52,7 @@ void _preloaderGetReady(FSM *pFSM);
|
||||||
int _getPreloaderOverFlag(FSM *pFSM);
|
int _getPreloaderOverFlag(FSM *pFSM);
|
||||||
void _clearPreloaderOverFlag(FSM *pFSM);
|
void _clearPreloaderOverFlag(FSM *pFSM);
|
||||||
|
|
||||||
|
/* ---------------------------------- 子状态机 ---------------------------------- */
|
||||||
|
void registerChildFSM(FSM *parent, FSM *child);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "assert.h"
|
||||||
|
|
||||||
#include "keyFSM.h"
|
#include "keyFSM.h"
|
||||||
#include "FSM_public.h"
|
#include "FSM_public.h"
|
||||||
|
@ -23,6 +24,7 @@ KeyIn keystat;
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
|
||||||
|
|
||||||
KeyFSM* keyFSM = createKeyFSM();
|
KeyFSM* keyFSM = createKeyFSM();
|
||||||
|
|
||||||
for (int i = 0; i < NUM; i++)
|
for (int i = 0; i < NUM; i++)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "templateFSM.h"
|
#include "templateFSM.h"
|
||||||
#include "FSM_public.h"
|
#include "FSM_public.h"
|
||||||
|
|
189
父子状态机测试.plecs
189
父子状态机测试.plecs
|
@ -1,5 +1,5 @@
|
||||||
Plecs {
|
Plecs {
|
||||||
Name base64 "54q25oCB5py65rWL6K+V"
|
Name base64 "54i25a2Q54q25oCB5py65rWL6K+V"
|
||||||
Version "4.7"
|
Version "4.7"
|
||||||
CircuitModel "ContStateSpace"
|
CircuitModel "ContStateSpace"
|
||||||
StartTime "0.0"
|
StartTime "0.0"
|
||||||
|
@ -47,7 +47,7 @@ Plecs {
|
||||||
ScriptsDialogGeometry ""
|
ScriptsDialogGeometry ""
|
||||||
ScriptsDialogSplitterPos "0"
|
ScriptsDialogSplitterPos "0"
|
||||||
Schematic {
|
Schematic {
|
||||||
Location [1734, 301; 2376, 730]
|
Location [818, 291; 1460, 717]
|
||||||
ZoomFactor 1.71498
|
ZoomFactor 1.71498
|
||||||
SliderPosition [0, 0]
|
SliderPosition [0, 0]
|
||||||
ShowBrowser off
|
ShowBrowser off
|
||||||
|
@ -139,9 +139,9 @@ Plecs {
|
||||||
Show off
|
Show off
|
||||||
}
|
}
|
||||||
FSM {
|
FSM {
|
||||||
Location [-1, -8; 2559, 1309]
|
Location [0, 0; 1918, 923]
|
||||||
ZoomFactor 1.14437
|
ZoomFactor 0.76361
|
||||||
SliderPosition [0, 0]
|
SliderPosition [0, 44]
|
||||||
FsmState {
|
FsmState {
|
||||||
Name "A"
|
Name "A"
|
||||||
Position [360, 480]
|
Position [360, 480]
|
||||||
|
@ -161,8 +161,8 @@ Plecs {
|
||||||
}
|
}
|
||||||
FsmState {
|
FsmState {
|
||||||
Name "B"
|
Name "B"
|
||||||
Position [1110, 430]
|
Position [1400, 420]
|
||||||
Frame [-420, -270; 420, 270]
|
Frame [-710, -260; 710, 260]
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "EnterAction"
|
Name "EnterAction"
|
||||||
Value "printf(\" enterB \");"
|
Value "printf(\" enterB \");"
|
||||||
|
@ -177,7 +177,7 @@ Plecs {
|
||||||
}
|
}
|
||||||
FsmState {
|
FsmState {
|
||||||
Name "D"
|
Name "D"
|
||||||
Position [-240, -10]
|
Position [-530, 0]
|
||||||
Frame [-100, -90; 100, 90]
|
Frame [-100, -90; 100, 90]
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "EnterAction"
|
Name "EnterAction"
|
||||||
|
@ -192,48 +192,107 @@ Plecs {
|
||||||
Value "printf(\" exitD \");"
|
Value "printf(\" exitD \");"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".Junction"
|
||||||
|
Position [-380, -150]
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".PointState"
|
||||||
|
Position [-380, -190]
|
||||||
|
}
|
||||||
FsmState {
|
FsmState {
|
||||||
Name "E"
|
Name "E"
|
||||||
Position [210, -10]
|
Position [220, 40]
|
||||||
Frame [-100, -90; 100, 90]
|
Frame [-400, -130; 400, 130]
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "EnterAction"
|
Name "EnterAction"
|
||||||
Value "printf(\" enterE \");"
|
Value "printf(\" enterE \");"
|
||||||
}
|
}
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "DuringAction"
|
Name "DuringAction"
|
||||||
Value "printf(\" duringE \");"
|
Value ""
|
||||||
}
|
}
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "ExitAction"
|
Name "ExitAction"
|
||||||
Value "printf(\" exitE \");"
|
Value "printf(\" exitE \");"
|
||||||
}
|
}
|
||||||
}
|
FsmState {
|
||||||
FsmState {
|
Name "State"
|
||||||
Name ".Junction"
|
Position [-130, 30]
|
||||||
Position [-90, -160]
|
Frame [-90, -60; 90, 60]
|
||||||
}
|
Parameter {
|
||||||
FsmState {
|
Name "EnterAction"
|
||||||
Name ".PointState"
|
Value "/* enter action */"
|
||||||
Position [-90, -200]
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".PointState"
|
||||||
|
Position [110, -80]
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "State1"
|
||||||
|
Position [230, 30]
|
||||||
|
Frame [-90, -60; 90, 60]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "/* enter action */"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FsmState {
|
FsmState {
|
||||||
Name "C"
|
Name "C"
|
||||||
Position [650, 1050]
|
Position [1100, 1110]
|
||||||
Frame [-100, -90; 100, 90]
|
Frame [-550, -150; 550, 150]
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "EnterAction"
|
Name "EnterAction"
|
||||||
Value "printf(\" enterC \");"
|
Value "printf(\" enterC \");"
|
||||||
}
|
}
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "DuringAction"
|
Name "DuringAction"
|
||||||
Value "printf(\" duringC \");"
|
Value ""
|
||||||
}
|
}
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "ExitAction"
|
Name "ExitAction"
|
||||||
Value "printf(\" exitC \");"
|
Value "printf(\" exitC \");"
|
||||||
}
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "D"
|
||||||
|
Position [-140, 30]
|
||||||
|
Frame [-100, -90; 100, 90]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterD \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value "printf(\" duringD \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitD \");"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".PointState"
|
||||||
|
Position [-10, -100]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FsmState {
|
FsmState {
|
||||||
Name ".PointState"
|
Name ".PointState"
|
||||||
|
@ -367,6 +426,38 @@ Plecs {
|
||||||
Value "1"
|
Value "1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath ".PointState"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "A"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.507833
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
FsmTransition {
|
FsmTransition {
|
||||||
FsmSrcInfo {
|
FsmSrcInfo {
|
||||||
StatePath "B/D"
|
StatePath "B/D"
|
||||||
|
@ -529,18 +620,50 @@ Plecs {
|
||||||
}
|
}
|
||||||
FsmTransition {
|
FsmTransition {
|
||||||
FsmSrcInfo {
|
FsmSrcInfo {
|
||||||
StatePath ".PointState"
|
StatePath "C/.PointState"
|
||||||
TerminalLoc bottom
|
TerminalLoc bottom
|
||||||
TerminalCoord 0.5
|
TerminalCoord 0.5
|
||||||
External on
|
External on
|
||||||
}
|
}
|
||||||
FsmDstInfo {
|
FsmDstInfo {
|
||||||
StatePath "A"
|
StatePath "C/D"
|
||||||
TerminalLoc top
|
TerminalLoc top
|
||||||
TerminalCoord 0.509626
|
TerminalCoord 0.414129
|
||||||
External on
|
External on
|
||||||
}
|
}
|
||||||
SegmentLengths [63.5]
|
SegmentLengths [15,-72.90010560019118,-3]
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/E/.PointState"
|
||||||
|
TerminalLoc bottom
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/E/State"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.490903
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths [18.5]
|
||||||
LabelPosition 0.5
|
LabelPosition 0.5
|
||||||
Parameter {
|
Parameter {
|
||||||
Name "Trigger"
|
Name "Trigger"
|
||||||
|
@ -571,7 +694,7 @@ Plecs {
|
||||||
LabelPosition south
|
LabelPosition south
|
||||||
Parameter {
|
Parameter {
|
||||||
Variable "DialogGeometry"
|
Variable "DialogGeometry"
|
||||||
Value "[1296 663 655 313]"
|
Value "[782 587 655 313]"
|
||||||
Show off
|
Show off
|
||||||
}
|
}
|
||||||
Parameter {
|
Parameter {
|
||||||
|
@ -683,17 +806,17 @@ Plecs {
|
||||||
Direction up
|
Direction up
|
||||||
Flipped off
|
Flipped off
|
||||||
LabelPosition south
|
LabelPosition south
|
||||||
Location [811, 582; 1161, 825]
|
Location [811, 582; 1161, 833]
|
||||||
State "AAAA/wAAAAD9AAAAAgAAAAEAAAAAAAAAAPwCAAAAA/sAAAAQAFoAbwBvA"
|
State "AAAA/wAAAAD9AAAAAgAAAAEAAAAAAAAAAPwCAAAAA/sAAAAQAFoAbwBvA"
|
||||||
"G0AQQByAGUAYQAAAAAA/////wAAADQA////+wAAABQAUwBhAHYAZQBkAFYAaQBlAHcAcwAAAAAA//"
|
"G0AQQByAGUAYQAAAAAA/////wAAADQA////+wAAABQAUwBhAHYAZQBkAFYAaQBlAHcAcwAAAAAA//"
|
||||||
"///wAAAGYA////+wAAAAwAVAByAGEAYwBlAHMAAAAAAP////8AAABmAP///wAAAAMAAAAAAAAAAPw"
|
"///wAAAGYA////+wAAAAwAVAByAGEAYwBlAHMAAAAAAP////8AAABmAP///wAAAAMAAAAAAAAAAPw"
|
||||||
"BAAAAAfsAAAAUAEQAYQB0AGEAVwBpAGQAZwBlAHQAAAAAAP////8AAABQAP///wAAAV4AAADYAAAA"
|
"BAAAAAfsAAAAUAEQAYQB0AGEAVwBpAGQAZwBlAHQAAAAAAP////8AAABQAP///wAAAV4AAADgAAAA"
|
||||||
"BAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAFQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAA"
|
"BAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAFQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAA"
|
||||||
"AAAAA=="
|
"AAAAA=="
|
||||||
SavedViews "AAAAAgAAAAA="
|
SavedViews "AAAAAgAAAAA="
|
||||||
HeaderState "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAL/gMAAAAJAAAAA"
|
HeaderState "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAL/gMAAAAJAAAAB"
|
||||||
"wAAAGQAAAACAAAAZAAAAAkAAABkAAAACAAAAGQAAAAFAAAAZAAAAAQAAABkAAAABwAAAGQAAAAGAA"
|
"gAAAGQAAAAHAAAAZAAAAAgAAABkAAAACQAAAGQAAAABAAAAZAAAAAIAAABkAAAAAwAAAGQAAAAEAA"
|
||||||
"AAZAAAAAEAAABkAAAAiwAAAAsBAAABAAAAAAAAAAAAAAAAZP////8AAACBAAAAAAAAAAsAAABzAAA"
|
"AAZAAAAAUAAABkAAAAiwAAAAsBAAABAAAAAAAAAAAAAAAAZP////8AAACBAAAAAAAAAAsAAABzAAA"
|
||||||
"AAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAA"
|
"AAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAA"
|
||||||
"AAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAA"
|
"AAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAA"
|
||||||
"AAYAAAAAQAAAAAAAAPoAAAAABg="
|
"AAYAAAAAQAAAAAAAAPoAAAAABg="
|
||||||
|
@ -781,4 +904,4 @@ Plecs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DemoSignature "C/ZrxOQHJ0OXW30du/vTiFYFVRZZzc0r6Uyc2MRNbyo="
|
DemoSignature "3mLOZwvyqmZ1g5qsGftq/0aRPBxKRskpkes5wR/pt1M="
|
||||||
|
|
|
@ -0,0 +1,784 @@
|
||||||
|
Plecs {
|
||||||
|
Name base64 "54q25oCB5py65rWL6K+V"
|
||||||
|
Version "4.7"
|
||||||
|
CircuitModel "ContStateSpace"
|
||||||
|
StartTime "0.0"
|
||||||
|
TimeSpan "2"
|
||||||
|
Timeout ""
|
||||||
|
Solver "auto"
|
||||||
|
MaxStep "1e-3"
|
||||||
|
InitStep "-1"
|
||||||
|
FixedStep "1e-3"
|
||||||
|
Refine "1"
|
||||||
|
ZCStepSize "1e-9"
|
||||||
|
RelTol "1e-3"
|
||||||
|
AbsTol "-1"
|
||||||
|
TurnOnThreshold "0"
|
||||||
|
SyncFixedStepTasks "2"
|
||||||
|
UseSingleCommonBaseRate "2"
|
||||||
|
LossVariableLimitExceededMsg "3"
|
||||||
|
NegativeSwitchLossMsg "3"
|
||||||
|
DivisionByZeroMsg "3"
|
||||||
|
StiffnessDetectionMsg "2"
|
||||||
|
MaxConsecutiveZCs "1000"
|
||||||
|
AlgebraicLoopWithStateMachineMsg "3"
|
||||||
|
AssertionAction "1"
|
||||||
|
InitializationCommands ""
|
||||||
|
InitialState "1"
|
||||||
|
SystemState ""
|
||||||
|
TaskingMode "1"
|
||||||
|
TaskConfigurations ""
|
||||||
|
CodeGenParameterInlining "2"
|
||||||
|
CodeGenFloatingPointFormat "2"
|
||||||
|
CodeGenAbsTimeUsageMsg "3"
|
||||||
|
CodeGenBaseName ""
|
||||||
|
CodeGenOutputDir ""
|
||||||
|
CodeGenExtraOpts ""
|
||||||
|
CodeGenTarget "Generic"
|
||||||
|
CodeGenTargetSettings ""
|
||||||
|
ExtendedMatrixPrecision "1"
|
||||||
|
MatrixSignificanceCheck "2"
|
||||||
|
EnableStateSpaceSplitting "2"
|
||||||
|
DisplayStateSpaceSplitting "1"
|
||||||
|
DiscretizationMethod "2"
|
||||||
|
ExternalModeSettings ""
|
||||||
|
AlgebraicLoopMethod "1"
|
||||||
|
AlgebraicLoopTolerance "1e-6"
|
||||||
|
ScriptsDialogGeometry ""
|
||||||
|
ScriptsDialogSplitterPos "0"
|
||||||
|
Schematic {
|
||||||
|
Location [633, 310; 1275, 736]
|
||||||
|
ZoomFactor 1.71498
|
||||||
|
SliderPosition [0, 0]
|
||||||
|
ShowBrowser off
|
||||||
|
BrowserWidth 100
|
||||||
|
Component {
|
||||||
|
Type FsmBlock
|
||||||
|
Name "State Machine"
|
||||||
|
Show on
|
||||||
|
Position [260, 100]
|
||||||
|
Direction up
|
||||||
|
Flipped off
|
||||||
|
LabelPosition south
|
||||||
|
Frame [-40, -15; 40, 15]
|
||||||
|
Parameter {
|
||||||
|
Variable "InputVariables"
|
||||||
|
Value "i,j"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "InputTypes"
|
||||||
|
Value "1,1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "InternalConstants"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "InternalConstantValues"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "InternalVariables"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "InternalVariableValues"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "OutputVariables"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "Declarations"
|
||||||
|
Value "#include <stdio.h>\n"
|
||||||
|
"\n"
|
||||||
|
"typedef enum _ParentEvent{\n"
|
||||||
|
" Parent_Idle_Event,\n"
|
||||||
|
" Start,\n"
|
||||||
|
" A2B,\n"
|
||||||
|
" B2A,\n"
|
||||||
|
" B2C,\n"
|
||||||
|
" C2A,\n"
|
||||||
|
"\n"
|
||||||
|
" Parent_Count_Event,\n"
|
||||||
|
"}ParentEvent;\n"
|
||||||
|
"\n"
|
||||||
|
"\n"
|
||||||
|
"typedef enum _ChildEvent{\n"
|
||||||
|
" Child_Idle_Event,\n"
|
||||||
|
" Idle2D,\n"
|
||||||
|
" Idle2E,\n"
|
||||||
|
" D2E,\n"
|
||||||
|
" E2D,\n"
|
||||||
|
"\n"
|
||||||
|
" Child_Count_Event,\n"
|
||||||
|
"}ChildEvent;"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "TransitionOrder"
|
||||||
|
Value "2"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "SampleTime"
|
||||||
|
Value "0.1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "Animate"
|
||||||
|
Value "1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
FSM {
|
||||||
|
Location [-1, -8; 1919, 979]
|
||||||
|
ZoomFactor 1.14437
|
||||||
|
SliderPosition [0, -1]
|
||||||
|
FsmState {
|
||||||
|
Name "A"
|
||||||
|
Position [360, 480]
|
||||||
|
Frame [-100, -90; 100, 90]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterA \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value "printf(\" duringA \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitA \");"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "B"
|
||||||
|
Position [1110, 430]
|
||||||
|
Frame [-420, -270; 420, 270]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterB \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitB \");"
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "D"
|
||||||
|
Position [-240, -10]
|
||||||
|
Frame [-100, -90; 100, 90]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterD \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value "printf(\" duringD \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitD \");"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "E"
|
||||||
|
Position [210, -10]
|
||||||
|
Frame [-100, -90; 100, 90]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterE \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value "printf(\" duringE \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitE \");"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".Junction"
|
||||||
|
Position [-90, -160]
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".PointState"
|
||||||
|
Position [-90, -200]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name "C"
|
||||||
|
Position [650, 1050]
|
||||||
|
Frame [-100, -90; 100, 90]
|
||||||
|
Parameter {
|
||||||
|
Name "EnterAction"
|
||||||
|
Value "printf(\" enterC \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "DuringAction"
|
||||||
|
Value "printf(\" duringC \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "ExitAction"
|
||||||
|
Value "printf(\" exitC \");"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmState {
|
||||||
|
Name ".PointState"
|
||||||
|
Position [330, 250]
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "A"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.390136
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.511449
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths [107.3600447694556]
|
||||||
|
LabelPosition 0.685
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "i==A2B"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" A2B \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.654101
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "A"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.641567
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths [-110]
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "i==B2A"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" B2A \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B"
|
||||||
|
TerminalLoc bottom
|
||||||
|
TerminalCoord 0.491978
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "C"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.435411
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "i==B2C"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" B2C \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "C"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.480089
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "A"
|
||||||
|
TerminalLoc bottom
|
||||||
|
TerminalCoord 0.531347
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "i == C2A"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" C2A \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/D"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.336937
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/E"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.350905
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "j==D2E"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" D2E \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/E"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.593025
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/D"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.560432
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value "j==E2D"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" E2D \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/.PointState"
|
||||||
|
TerminalLoc bottom
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/.Junction"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/.Junction"
|
||||||
|
TerminalLoc left
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/D"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.606534
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.135
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value "j == Idle2D"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" Idle2D \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath "B/.Junction"
|
||||||
|
TerminalLoc right
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "B/E"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.519516
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths []
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value "printf(\" Idle2E \");"
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FsmTransition {
|
||||||
|
FsmSrcInfo {
|
||||||
|
StatePath ".PointState"
|
||||||
|
TerminalLoc bottom
|
||||||
|
TerminalCoord 0.5
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
FsmDstInfo {
|
||||||
|
StatePath "A"
|
||||||
|
TerminalLoc top
|
||||||
|
TerminalCoord 0.509626
|
||||||
|
External on
|
||||||
|
}
|
||||||
|
SegmentLengths [63.5]
|
||||||
|
LabelPosition 0.5
|
||||||
|
Parameter {
|
||||||
|
Name "Trigger"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Condition"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Action"
|
||||||
|
Value ""
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Name "Priority"
|
||||||
|
Value "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component {
|
||||||
|
Type CScript
|
||||||
|
Name "C-Script"
|
||||||
|
Show on
|
||||||
|
Position [75, 70]
|
||||||
|
Direction up
|
||||||
|
Flipped off
|
||||||
|
LabelPosition south
|
||||||
|
Parameter {
|
||||||
|
Variable "DialogGeometry"
|
||||||
|
Value "[1276 398 582 313]"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "NumInputs"
|
||||||
|
Value "1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "NumOutputs"
|
||||||
|
Value "2"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "NumContStates"
|
||||||
|
Value "0"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "NumDiscStates"
|
||||||
|
Value "0"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "NumZCSignals"
|
||||||
|
Value "0"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "DirectFeedthrough"
|
||||||
|
Value "0"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "Ts"
|
||||||
|
Value "0.1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "Parameters"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "LangStandard"
|
||||||
|
Value "2"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "GnuExtensions"
|
||||||
|
Value "1"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "RuntimeCheck"
|
||||||
|
Value "2"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "Declarations"
|
||||||
|
Value "#include <stdio.h>\n"
|
||||||
|
"\n"
|
||||||
|
"static int index = 0;\n"
|
||||||
|
"static int pu[20] = {0,1,2,0,0,0,0,0, 4,5,2,3};\n"
|
||||||
|
"static int cu[20] = {0,0,1,0,0,3,4,3,0,0,0,0};"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "StartFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "OutputFcn"
|
||||||
|
Value base64 "cHJpbnRmKCJcbuesrCVk5qyhIiwgaW5kZXgpOwpPdXRwdXQo"
|
||||||
|
"MCkgPSBwdVtpbmRleF07Ck91dHB1dCgxKSA9IGN1W2luZGV4XTsKaW5kZXgrKzsKCgo="
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "UpdateFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "DerivativeFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "TerminateFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "StoreCustomStateFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
Parameter {
|
||||||
|
Variable "RestoreCustomStateFcn"
|
||||||
|
Value ""
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component {
|
||||||
|
Type Scope
|
||||||
|
Name "Scope"
|
||||||
|
Show on
|
||||||
|
Position [165, 35]
|
||||||
|
Direction up
|
||||||
|
Flipped off
|
||||||
|
LabelPosition south
|
||||||
|
Location [811, 582; 1161, 833]
|
||||||
|
State "AAAA/wAAAAD9AAAAAgAAAAEAAAAAAAAAAPwCAAAAA/sAAAAQAFoAbwBvA"
|
||||||
|
"G0AQQByAGUAYQAAAAAA/////wAAADQA////+wAAABQAUwBhAHYAZQBkAFYAaQBlAHcAcwAAAAAA//"
|
||||||
|
"///wAAAGYA////+wAAAAwAVAByAGEAYwBlAHMAAAAAAP////8AAABmAP///wAAAAMAAAAAAAAAAPw"
|
||||||
|
"BAAAAAfsAAAAUAEQAYQB0AGEAVwBpAGQAZwBlAHQAAAAAAP////8AAABQAP///wAAAV4AAADgAAAA"
|
||||||
|
"BAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAFQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAA"
|
||||||
|
"AAAAA=="
|
||||||
|
SavedViews "AAAAAgAAAAA="
|
||||||
|
HeaderState "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAL/gMAAAAJAAAAB"
|
||||||
|
"gAAAGQAAAAHAAAAZAAAAAgAAABkAAAACQAAAGQAAAABAAAAZAAAAAIAAABkAAAAAwAAAGQAAAAEAA"
|
||||||
|
"AAZAAAAAUAAABkAAAAiwAAAAsBAAABAAAAAAAAAAAAAAAAZP////8AAACBAAAAAAAAAAsAAABzAAA"
|
||||||
|
"AAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAA"
|
||||||
|
"AAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAA"
|
||||||
|
"AAYAAAAAQAAAAAAAAPoAAAAABg="
|
||||||
|
PlotPalettes "AAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
||||||
|
Axes "1"
|
||||||
|
TimeRange "0.0"
|
||||||
|
ScrollingMode "1"
|
||||||
|
SingleTimeAxis "1"
|
||||||
|
Open "0"
|
||||||
|
Ts "-1"
|
||||||
|
SampleLimit "0"
|
||||||
|
XAxisLabel "Time / s"
|
||||||
|
ShowLegend "1"
|
||||||
|
Axis {
|
||||||
|
Name ""
|
||||||
|
AutoScale 1
|
||||||
|
MinValue 0
|
||||||
|
MaxValue 1
|
||||||
|
Signals {}
|
||||||
|
SignalTypes [ ]
|
||||||
|
Untangle 0
|
||||||
|
KeepBaseline off
|
||||||
|
BaselineValue 0
|
||||||
|
}
|
||||||
|
Fourier {
|
||||||
|
SingleXAxis on
|
||||||
|
AxisLabel "Frequency / Hz"
|
||||||
|
Scaling 0
|
||||||
|
PhaseDisplay 0
|
||||||
|
ShowFourierLegend off
|
||||||
|
Axis {
|
||||||
|
Name ""
|
||||||
|
AutoScale 1
|
||||||
|
MinValue 0
|
||||||
|
MaxValue 1
|
||||||
|
Signals {}
|
||||||
|
Untangle 0
|
||||||
|
KeepBaseline off
|
||||||
|
BaselineValue 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component {
|
||||||
|
Type SignalDemux
|
||||||
|
Name "Demux"
|
||||||
|
Show off
|
||||||
|
Position [165, 100]
|
||||||
|
Direction right
|
||||||
|
Flipped on
|
||||||
|
LabelPosition south
|
||||||
|
Parameter {
|
||||||
|
Variable "Width"
|
||||||
|
Value "2"
|
||||||
|
Show off
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Connection {
|
||||||
|
Type Signal
|
||||||
|
SrcComponent "C-Script"
|
||||||
|
SrcTerminal 2
|
||||||
|
Points [135, 70]
|
||||||
|
Branch {
|
||||||
|
DstComponent "Scope"
|
||||||
|
DstTerminal 1
|
||||||
|
}
|
||||||
|
Branch {
|
||||||
|
Points [135, 100]
|
||||||
|
DstComponent "Demux"
|
||||||
|
DstTerminal 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Connection {
|
||||||
|
Type Signal
|
||||||
|
SrcComponent "Demux"
|
||||||
|
SrcTerminal 2
|
||||||
|
DstComponent "State Machine"
|
||||||
|
DstTerminal 1
|
||||||
|
}
|
||||||
|
Connection {
|
||||||
|
Type Signal
|
||||||
|
SrcComponent "Demux"
|
||||||
|
SrcTerminal 3
|
||||||
|
DstComponent "State Machine"
|
||||||
|
DstTerminal 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DemoSignature "vzTf+CQbDjWT4Ix1MTz+0HTDihYd6Bo2fAit4HiYDxE="
|
Loading…
Reference in New Issue