IEC61131-3 / CodeSyS v2.3 で効率的かつ柔軟なステート ステート マシン (SM) を作成する最良の方法は何ですか? CodeSys V2.3 での SM 実現の良い例はありますか?
私が理解している限りでは、SM には 3 つの異なるタイプがあります。
1. ケース ロジック SM - シンプルで、if ロジックに基づいて状態を変更するだけで、柔軟性がまったくなく、維持が困難です。
2. テーブル駆動型 SM - より優れていますが、関数ポインターがなければ、現在の状態に基づいていくつかのアクションを実行するための追加の条件付き命令が必要です。
3. ステート デザイン パターン SM - 最適なオプション、柔軟、膨大な CASE ステートメントなし、重複なし。
Adam Tornhill による C ステート デザイン パターンを採用しようとしています: http://www.adamtornhill.com/Patterns%20in%20C%202,%20STATE.pdf しかし、プレーン C から構造テキストに変換するのは非常に困難です。CodeSys は Function Block ポインターをサポートしていますが、ST で不完全なポインター型を宣言する方法がわかりません (それは可能ですか?):
/*C-style incomplite state pointer*/
typedef struct State* StatePtr;
struct State
{
EventFunc exampleFunc1;
EventFunc exampleFunc2;
}
{ST-style incomplite state pointer ???}
TYPE Sm_state_t :
STRUCT
State:POINTER TO ???;
END_STRUCT
END_TYPE