新しいプログラムは、IEC 61131-3標準の5つの言語すべてを使用します。
最初のセクションはILについてです。
これはアセンブリ言語です。
セクションには2行しかありません。
LD-バッテリーへの負荷値
S-バッテリーがtrueの場合、変数をtrueに設定します。そうでない場合、変数は変更されません。

周期が0.5秒のパルスジェネレーターは、以前のバージョンと同様にFBDで記述されています。

メインセクションはSFCで記述されています。 これは、IEC 61131-3規格で使用するのが最も難しい言語であるように思えます。
プログラムは、ステップと遷移で構成されています。
プログラムが開始されると、Initステップが実行されます。
次のステップは、遷移条件が真の場合に実行されます。 ステップは遅延する場合があり、ステップ時間が制限される場合があります。
次の図では、1つの遷移のみに条件が含まれています。 他の遷移は常に実行されます。
チェーンの最後で、WaitPeopleラベルへの無条件ジャンプが実行されます。

各ステップは、特定の状態の信号機に必要な時間に対応する遅延で実行されます。

各ステップで、特定のアクションが実行されます。 私のプログラムでは、ST言語のセクションの実行が設定されています。

uState変数がプロジェクトに追加され、信号機の状態に対応します。
手順で実行されるすべてのセクションの内容は次のとおりです。

STのセクションは、uStateの状態に応じて、値をブール変数に書き込みます。ブール変数は、出力に書き換えられます。 これは、stStep_1..stStep_8セクションで行うことができますが、CASEステートメントが表示されず、STがIEC 61131-3標準のプログラマーに最も近い言語であることが理解できます。 また、このセクションでは、ソフトウェアエラーに対する保護が、未定義の状態で黄色に点滅する形で導入されています。

LDはラダーロジック回路に近い。 LDの基礎は接点とコイルです。 この図は、左側が「電圧」(真)が分岐に沿って右側に伸びる導体であることを示しています。
バインドされた変数がtrueの場合、通常開いている接点(コンデンサに類似)は閉じます。
通常閉じられている接点(内部にスラッシュがあるコンデンサに似ています)は、それに接続されている変数がfalseの場合に閉じます。
コイル(2つのブラケット)は、それ自体に「電圧」を渡し、その値(falseまたはtrue)をそれにバインドされた変数に書き換えます。
プログラムでは、このセクションを使用して、ソフトウェアエラーから保護して、中間変数を出力バインド変数に書き換えます。 緑色のライトは、この信号機に赤がなく、別の信号機に緑がない場合にのみ点灯します。

プログラムの結果:
1つのプログラムで5つの言語すべてを使用することは正当化されません。 しかし、実際のプロジェクトでは、2..3言語を同時に適用する必要がある場合があります。 ほとんどの場合、STを使用しますが、FBDはあまり使用せず、ILも使用します。 実際のプロジェクトでのSFCとLDは適用する必要がありませんでした。
UPD。 修正を行いました-RouRの発言に従って、標準の名前から余分なゼロを削除しました
UPD2。 LDの説明のわずかな変更。