I prefer the state table, with columns for states, this forces you to consider every possible transition of every state and this means the definition is unambiguous and exhaustive.
Additionally, you can easily define what output conditions are for every output in every state.
Where more than one possible to state transition exists, then you put multiple columns (one for each possible transition destination) and it is a matter of first solved wins, I usually go left to right, top to bottom.
I have developed a PyQt desktop application that allows building such tables, simulating them one scan at a time and generates code and documentation. Also, it allows for hierarchal state machines so you can build up very complex systems. I initially used it to develop Burner Management System compliant to IEC61511.
Additionally, you can easily define what output conditions are for every output in every state.
Where more than one possible to state transition exists, then you put multiple columns (one for each possible transition destination) and it is a matter of first solved wins, I usually go left to right, top to bottom.
I have developed a PyQt desktop application that allows building such tables, simulating them one scan at a time and generates code and documentation. Also, it allows for hierarchal state machines so you can build up very complex systems. I initially used it to develop Burner Management System compliant to IEC61511.