去掉了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)
|
||||
|
||||
|
||||
set(keytest 789)
|
||||
# set(keytest 789)
|
||||
# set(child_parent 789)
|
||||
if(DEFINED keytest)
|
||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
||||
|
|
|
@ -29,21 +29,13 @@
|
|||
*/
|
||||
static inline void setNextState(FSM* pFSM){
|
||||
int curState = pFSM->privateVars->curState;
|
||||
if(curState != 0){
|
||||
if(curState == 0)
|
||||
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;
|
||||
}
|
||||
|
||||
if(0 == pFSM->privateVars->numChild)
|
||||
return;
|
||||
|
||||
|
||||
for (int i = 0; i < pFSM->privateVars->numChild; i++)
|
||||
{
|
||||
FSM *cFSM = pFSM->privateVars->childFSM[i];
|
||||
setNextState(cFSM);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -81,37 +73,28 @@ void stepBaseFSM(FSM *pFSM)
|
|||
int index = pFSM->privateVars->index;
|
||||
int nextState = pFSM->privateVars->nextState;
|
||||
|
||||
|
||||
|
||||
if(nextState && curState != nextState){ // 状态切换
|
||||
if (fcns->exitActionTable[curState] != NULL)
|
||||
fcns->exitActionTable[curState](data, childFSM);
|
||||
|
||||
if (fcns->transitionTable[index] != NULL) // 有特定的状态转移函数
|
||||
(*fcns->transitionTable[index])(data);
|
||||
|
||||
if(fcns->transitionGeneralAction != NULL)
|
||||
fcns->transitionTable[index](data); // 有特定的状态转移函数
|
||||
fcns->transitionGeneralAction(data); // 通用状态转移函数
|
||||
|
||||
if (fcns->enterActionTable[nextState] != NULL)
|
||||
fcns->enterActionTable[nextState](data, childFSM);
|
||||
|
||||
pFSM->privateVars->curState = nextState;
|
||||
}
|
||||
else if(curState == 0){ // 处理刚运行进入的默认状态
|
||||
nextState = pFSM->privateVars->defaultState;
|
||||
if (fcns->enterActionTable[nextState] != NULL)
|
||||
fcns->enterActionTable[nextState](data, childFSM);
|
||||
pFSM->privateVars->curState = nextState;
|
||||
}
|
||||
else // 状态机没动
|
||||
{
|
||||
if (fcns->duringActionTable[curState] != NULL)
|
||||
fcns->duringActionTable[curState](data, childFSM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* public 函数 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
@ -127,7 +110,6 @@ void _stepFSM(FSM *pFSM){
|
|||
pFSM->publicFcns.step(pFSM);
|
||||
}
|
||||
|
||||
|
||||
int getFSMCurState(FSM *pFSM){
|
||||
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){
|
||||
return (const void *)pFSM->data;
|
||||
|
@ -153,6 +138,9 @@ void _setSignal(FSM *pFSM, Uint16 signalFlag){
|
|||
pFSM->signals.all |= (1 << signalFlag);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* @deprecated 弃用
|
||||
|
@ -231,6 +219,8 @@ void constructFSM(FSM* pFSM){
|
|||
assert(pFSM->pureVtbl.initData);
|
||||
assert(pFSM->pureVtbl.initDataLoader);
|
||||
|
||||
|
||||
|
||||
pFSM->pureVtbl.setupHandler(&pFSM->privateVars->fcns);
|
||||
pFSM->pureVtbl.initData(pFSM);
|
||||
pFSM->pureVtbl.initDataLoader(pFSM);
|
||||
|
|
|
@ -53,14 +53,16 @@ typedef struct FSMPrivateVars
|
|||
|
||||
FSMHandler fcns; /**< 状态函数表 */
|
||||
|
||||
int numChild; /**< @deprecated 和子状态机相关的暂时弃用 */
|
||||
FSM **childFSM; /**< @deprecated 和子状态机相关的暂时弃用 */
|
||||
FSM *childFSM; /**< 限定只能有一个子状态机 */
|
||||
|
||||
FSMDataLoader preloader; /**< @deprecated 弃用 */
|
||||
|
||||
}FSMPrivateVars;
|
||||
|
||||
|
||||
static void empty_func(){
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 仅在FSM.c中调用,新建私有变量并分配空间
|
||||
|
@ -80,7 +82,7 @@ FSMPrivateVars* newFMSPrivateVars(int numState, int defaultState){
|
|||
privateVars->defaultState = defaultState;
|
||||
privateVars->curState = 0;
|
||||
privateVars->nextState = 0;
|
||||
privateVars->numChild = 0;
|
||||
privateVars->childFSM = NULL;
|
||||
|
||||
privateVars->preloader.isReady = 0;
|
||||
|
||||
|
@ -88,13 +90,33 @@ FSMPrivateVars* newFMSPrivateVars(int numState, int defaultState){
|
|||
privateVars->fcns.enterActionTable = 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.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 = empty_func;
|
||||
|
||||
privateVars->fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
||||
|
||||
return privateVars;
|
||||
}
|
||||
|
||||
|
||||
static int hasChildFSM(FSM *pFSM){
|
||||
return (pFSM->privateVars->childFSM != NULL);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
|
@ -68,7 +68,7 @@ typedef struct FSMHandler{
|
|||
int (**selectNextState)(void *data, FSMSignals* signals); /**< 每个状态配置的状态选择函数 */
|
||||
|
||||
void (**transitionTable)(void *data); /**< 状态转移函数表 */
|
||||
void (*transitionGeneralAction)(void *data); /**< 通用状态转移函数,不论有没有独立的状态转移函数都会执行 */
|
||||
void (*transitionGeneralAction)(void *data); /**< 通用状态转移函数,不论有没有独立的状态转移函数都会执行。常用来清空内部变量 */
|
||||
|
||||
void (**enterActionTable)(void *data, FSM **cFSM); /**< 进入状态时运行的函数,和plecs对标 */
|
||||
void (**duringActionTable)(void *data, FSM **cFSM); /**< 状态不变时运行的函数,和plecs对标 */
|
||||
|
@ -151,4 +151,6 @@ static inline void clearAllSignals(FSMSignals *signals){
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -41,8 +41,6 @@ void _stepFSM(FSM *pFSM);
|
|||
/* --------------------------------- 状态机信息获取 -------------------------------- */
|
||||
int getFSMCurState(FSM *pFSM);
|
||||
int getFSMNextState(FSM *pFSM);
|
||||
void setChildNum(FSM *pFSM, int num);
|
||||
void registerChildFSM(FSM *parent, FSM *child, int index);
|
||||
|
||||
/* ------------------------------ Data和Signals ------------------------------ */
|
||||
const void *_getData(FSM* pFSM);
|
||||
|
@ -54,6 +52,7 @@ void _preloaderGetReady(FSM *pFSM);
|
|||
int _getPreloaderOverFlag(FSM *pFSM);
|
||||
void _clearPreloaderOverFlag(FSM *pFSM);
|
||||
|
||||
|
||||
/* ---------------------------------- 子状态机 ---------------------------------- */
|
||||
void registerChildFSM(FSM *parent, FSM *child);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <stdio.h>
|
||||
#include "assert.h"
|
||||
|
||||
#include "keyFSM.h"
|
||||
#include "FSM_public.h"
|
||||
|
@ -23,6 +24,7 @@ KeyIn keystat;
|
|||
|
||||
int main(){
|
||||
|
||||
|
||||
KeyFSM* keyFSM = createKeyFSM();
|
||||
|
||||
for (int i = 0; i < NUM; i++)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "templateFSM.h"
|
||||
#include "FSM_public.h"
|
||||
|
|
181
父子状态机测试.plecs
181
父子状态机测试.plecs
|
@ -1,5 +1,5 @@
|
|||
Plecs {
|
||||
Name base64 "54q25oCB5py65rWL6K+V"
|
||||
Name base64 "54i25a2Q54q25oCB5py65rWL6K+V"
|
||||
Version "4.7"
|
||||
CircuitModel "ContStateSpace"
|
||||
StartTime "0.0"
|
||||
|
@ -47,7 +47,7 @@ Plecs {
|
|||
ScriptsDialogGeometry ""
|
||||
ScriptsDialogSplitterPos "0"
|
||||
Schematic {
|
||||
Location [1734, 301; 2376, 730]
|
||||
Location [818, 291; 1460, 717]
|
||||
ZoomFactor 1.71498
|
||||
SliderPosition [0, 0]
|
||||
ShowBrowser off
|
||||
|
@ -139,9 +139,9 @@ Plecs {
|
|||
Show off
|
||||
}
|
||||
FSM {
|
||||
Location [-1, -8; 2559, 1309]
|
||||
ZoomFactor 1.14437
|
||||
SliderPosition [0, 0]
|
||||
Location [0, 0; 1918, 923]
|
||||
ZoomFactor 0.76361
|
||||
SliderPosition [0, 44]
|
||||
FsmState {
|
||||
Name "A"
|
||||
Position [360, 480]
|
||||
|
@ -161,8 +161,8 @@ Plecs {
|
|||
}
|
||||
FsmState {
|
||||
Name "B"
|
||||
Position [1110, 430]
|
||||
Frame [-420, -270; 420, 270]
|
||||
Position [1400, 420]
|
||||
Frame [-710, -260; 710, 260]
|
||||
Parameter {
|
||||
Name "EnterAction"
|
||||
Value "printf(\" enterB \");"
|
||||
|
@ -177,7 +177,7 @@ Plecs {
|
|||
}
|
||||
FsmState {
|
||||
Name "D"
|
||||
Position [-240, -10]
|
||||
Position [-530, 0]
|
||||
Frame [-100, -90; 100, 90]
|
||||
Parameter {
|
||||
Name "EnterAction"
|
||||
|
@ -192,48 +192,107 @@ Plecs {
|
|||
Value "printf(\" exitD \");"
|
||||
}
|
||||
}
|
||||
FsmState {
|
||||
Name ".Junction"
|
||||
Position [-380, -150]
|
||||
}
|
||||
FsmState {
|
||||
Name ".PointState"
|
||||
Position [-380, -190]
|
||||
}
|
||||
FsmState {
|
||||
Name "E"
|
||||
Position [210, -10]
|
||||
Frame [-100, -90; 100, 90]
|
||||
Position [220, 40]
|
||||
Frame [-400, -130; 400, 130]
|
||||
Parameter {
|
||||
Name "EnterAction"
|
||||
Value "printf(\" enterE \");"
|
||||
}
|
||||
Parameter {
|
||||
Name "DuringAction"
|
||||
Value "printf(\" duringE \");"
|
||||
Value ""
|
||||
}
|
||||
Parameter {
|
||||
Name "ExitAction"
|
||||
Value "printf(\" exitE \");"
|
||||
}
|
||||
}
|
||||
FsmState {
|
||||
Name ".Junction"
|
||||
Position [-90, -160]
|
||||
Name "State"
|
||||
Position [-130, 30]
|
||||
Frame [-90, -60; 90, 60]
|
||||
Parameter {
|
||||
Name "EnterAction"
|
||||
Value "/* enter action */"
|
||||
}
|
||||
Parameter {
|
||||
Name "DuringAction"
|
||||
Value ""
|
||||
}
|
||||
Parameter {
|
||||
Name "ExitAction"
|
||||
Value ""
|
||||
}
|
||||
}
|
||||
FsmState {
|
||||
Name ".PointState"
|
||||
Position [-90, -200]
|
||||
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 {
|
||||
Name "C"
|
||||
Position [650, 1050]
|
||||
Frame [-100, -90; 100, 90]
|
||||
Position [1100, 1110]
|
||||
Frame [-550, -150; 550, 150]
|
||||
Parameter {
|
||||
Name "EnterAction"
|
||||
Value "printf(\" enterC \");"
|
||||
}
|
||||
Parameter {
|
||||
Name "DuringAction"
|
||||
Value "printf(\" duringC \");"
|
||||
Value ""
|
||||
}
|
||||
Parameter {
|
||||
Name "ExitAction"
|
||||
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 {
|
||||
Name ".PointState"
|
||||
|
@ -367,6 +426,38 @@ Plecs {
|
|||
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 {
|
||||
FsmSrcInfo {
|
||||
StatePath "B/D"
|
||||
|
@ -529,18 +620,50 @@ Plecs {
|
|||
}
|
||||
FsmTransition {
|
||||
FsmSrcInfo {
|
||||
StatePath ".PointState"
|
||||
StatePath "C/.PointState"
|
||||
TerminalLoc bottom
|
||||
TerminalCoord 0.5
|
||||
External on
|
||||
}
|
||||
FsmDstInfo {
|
||||
StatePath "A"
|
||||
StatePath "C/D"
|
||||
TerminalLoc top
|
||||
TerminalCoord 0.509626
|
||||
TerminalCoord 0.414129
|
||||
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
|
||||
Parameter {
|
||||
Name "Trigger"
|
||||
|
@ -571,7 +694,7 @@ Plecs {
|
|||
LabelPosition south
|
||||
Parameter {
|
||||
Variable "DialogGeometry"
|
||||
Value "[1296 663 655 313]"
|
||||
Value "[782 587 655 313]"
|
||||
Show off
|
||||
}
|
||||
Parameter {
|
||||
|
@ -683,17 +806,17 @@ Plecs {
|
|||
Direction up
|
||||
Flipped off
|
||||
LabelPosition south
|
||||
Location [811, 582; 1161, 825]
|
||||
Location [811, 582; 1161, 833]
|
||||
State "AAAA/wAAAAD9AAAAAgAAAAEAAAAAAAAAAPwCAAAAA/sAAAAQAFoAbwBvA"
|
||||
"G0AQQByAGUAYQAAAAAA/////wAAADQA////+wAAABQAUwBhAHYAZQBkAFYAaQBlAHcAcwAAAAAA//"
|
||||
"///wAAAGYA////+wAAAAwAVAByAGEAYwBlAHMAAAAAAP////8AAABmAP///wAAAAMAAAAAAAAAAPw"
|
||||
"BAAAAAfsAAAAUAEQAYQB0AGEAVwBpAGQAZwBlAHQAAAAAAP////8AAABQAP///wAAAV4AAADYAAAA"
|
||||
"BAAAAAfsAAAAUAEQAYQB0AGEAVwBpAGQAZwBlAHQAAAAAAP////8AAABQAP///wAAAV4AAADgAAAA"
|
||||
"BAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAFQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAA"
|
||||
"AAAAA=="
|
||||
SavedViews "AAAAAgAAAAA="
|
||||
HeaderState "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAL/gMAAAAJAAAAA"
|
||||
"wAAAGQAAAACAAAAZAAAAAkAAABkAAAACAAAAGQAAAAFAAAAZAAAAAQAAABkAAAABwAAAGQAAAAGAA"
|
||||
"AAZAAAAAEAAABkAAAAiwAAAAsBAAABAAAAAAAAAAAAAAAAZP////8AAACBAAAAAAAAAAsAAABzAAA"
|
||||
HeaderState "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAL/gMAAAAJAAAAB"
|
||||
"gAAAGQAAAAHAAAAZAAAAAgAAABkAAAACQAAAGQAAAABAAAAZAAAAAIAAABkAAAAAwAAAGQAAAAEAA"
|
||||
"AAZAAAAAUAAABkAAAAiwAAAAsBAAABAAAAAAAAAAAAAAAAZP////8AAACBAAAAAAAAAAsAAABzAAA"
|
||||
"AAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAA"
|
||||
"AAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAA"
|
||||
"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