State Machine, Examples of Tables in Expanded YAML
# Anything on the same line after a '#' is a comment
# Tables for building logic functions
# Not, And, Or, Xor
# Not function
"not":
-
When: {in: "on"}
Then: {out: "off"}
-
When: {in: "off"}
Then: {out: "on"}
# And function
"and":
# check state on all input terminal assertions
# for illustrative purposes, use don't care inputs in the "When" clause
# don't care means the "When" is true for any value of the input terminal
# so these "When" clauses are true for any assertion on "in1" or "in2"
-
When: {in1: "*", in2: "*"}
State: {in1: "on", in2: "on"}
Then: {out: "on"}
-
When: {in1: "*", in2: "*"}
State: {in1: "off"}
Then: {out: "off"}
-
When: {in1: "*", in2: "*"}
State: {in2: "off"}
Then: {out: "off"}
# Or function
"or":
# check state on all input terminal assertions
# for illustrative purposes, list "When" transition states explicitly
# also for illustrative purposes, use sets for defining "When" transition states
# if the input value is in the set, the "When" is true
-
When: {in1: ["on", "off"], in2: ["on", "off"]}
State: {in1: "on"}
Then: {out: "on"}
-
When: {in1: ["on", "off"], in2: ["on", "off"]}
State: {in2: "on"}
Then: {out: "on"}
-
When: {in1: ["on", "off"], in2: ["on", "off"]}
State: {in1: "off", in2: "off"}
Then: {out: "off"}
# Xor function
"xor":
# "in1" and "in2" are don't care in "When" - check state for any assertion
-
When: {in1: "*", in2: "*"}
State: {in1: "on", in2: "off"}
Then: {out: "on"}
-
When: {in1: "*", in2: "*"}
State: {in1: "off", in2: "on"}
Then: {out: "on"}
-
When: {in1: "*", in2: "*"}
State: {in1: "off", in2: "off"}
Then: {out: "off"}
-
When: {in1: "*", in2: "*"}
State: {in1: "on", in2: "on"}
Then: {out: "off"}
# Counter function
# Counts when something stimulates its "in" input.
# When gets an "off" on its input, resets.
# Illustrates hidden state - counts input stimulations and then sets
# out to "on", if 5 non-"off" stimulations in a row.
# Table symbols which start with an underscore are not visible as terminals.
"count5":
-
When: {in: "off"}
Then: {out: "off", _state: 0} # reset
-
When: {in: "*"}
State: {_state: 0}
Then: {_state: 1}
-
When: {in: "*"}
State: {_state: 1}
Then: {_state: 2}
-
When: {in: "*"}
State: {_state: 2}
Then: {_state: 3}
-
When: {in: "*"}
State: {_state: 3}
Then: {_state: 4}
-
When: {in: "*"}
State: {_state: 4}
Then: {out: "on"} # stay here
-
# If get here, state not yet initialized.
# Act like was just in 0 state.
When: {in: "*"}
Then: {out: "off", _state: 1}
|
|