PLCの技術機器を制御するためのプログラムの作成方法を示したいと思います。
ほとんどの場合、私はシュナイダーエレクトリック製のPLCを扱いました。 このタスクに選択したQuantumは、このメーカーの中で最も強力で高価なPLCです。 彼は、実際の交通信号のために、何千もの信号で機器を制御できます。もちろん、誰もそれを使用しません。
信号機の自動化に携わることは一度もなかったので、自分でアルゴリズムを思いつきました。 ここにあります:
1.調整可能な横断歩道用の信号機。 つまり 車の場合は信号、歩行者の場合は信号、歩行者の場合はボタンをクリックします。
2.プログラムの開始後、車の場合は緑、歩行者の場合は赤が点灯します。
3.歩行者がボタンを押すと、車の緑が点滅し始め、黄色、赤の順に点灯します。 その後、歩行者用の緑色のライトが点灯し、設定された時間が経過すると点滅し始め、歩行者用の赤色のライトが点灯し、その後車用の黄色と赤色が点灯し、次に緑色に点灯します。
4.歩行者の信号機の緑の後に指定された期間、歩行者がボタンを押しても遷移アルゴリズムは開始されません。 この場合、指定された時間が経過した後にのみ遷移アルゴリズムが起動されます。
PLCプログラミングは、IEC 61131-3標準の言語のUnityプログラミング環境で実行されます。 この標準には5つの言語が含まれています。 たとえば、ファンクションブロックの言語-FBDを選択しました。
Unityのプロジェクトブラウザは次のとおりです。

PLCを構成します。

PLCは、取り付けプレート、電源(1)、コントローラー(2)、32個の24V DC信号用の個別入力モジュール(4)、32個の24V DC信号用の個別入力モジュール(5)で構成されています。 実際のプロジェクトでは、異なるネットワーク上の同じコントローラーに接続された取り付けパネルには、数十個のI / Oモジュールがあります。
変数エディターで必要なタイプの変数を作成します。

I / Oモジュールのチャンネルにバインドされた変数には、信号がバインドされているバスケット、モジュール、およびチャンネルを示すアドレスがあります。
このプログラムは、コントローラーの各スキャンサイクルで順番に実行されるセクションで構成されています。
簡略化されたコントローラースキャンサイクルは次のようになります。
1.入力モジュールからの入力信号をアドレス付き変数に読み込みます。
2.セクションの実行。
3.アドレス付き変数から出力モジュールの出力信号への値の書き込み。
4.パラグラフ1への移行。
0.5秒間、パルスジェネレーターでクロックセクションを作成します。 入力信号が0から1に変化すると、TPブロックは指定された期間のパルスを生成します。

セクションのスクリーンショットは、編集モードではなくアニメーションモードで表示されます。 ロードされたプログラムを使用してPLCに接続すると、現在の時刻の変数の値が表示されます(数値変数の数値、ブールの場合は緑(1)-赤(0))。
メインセクションはコアロジックを処理します。
ブロックSRは、S1 = 1で出力を1に設定し、R = 1で出力を0にリセットします。
R_TRIGブロックは、入力が0から1(リーディングエッジ検出器)になると、1スキャンサイクルの出力を1に設定します。
F_TRIGブロックは、入力が1から0になったときに1スキャンサイクルの出力を1に設定します(後端検出器)。
ボタンチャネルにバインドされたinButton変数は、実際の機器なしでコントローラーシミュレーターで値を変更できるように、セクションでinButtonForTestに置き換えられました。

[出力]セクションは、信号機を制御するための出力信号を生成します。

プロジェクトをコントローラーシミュレーターに読み込みます。

変数の値は、アニメーションテーブルで表示できます。

ただし、デバッグの利便性のために、アニメーションが変数に関連付けられている単純なグラフィックスでオペレーター画面を作成できます。

私たちは道路を横断しようとします:
信号機のような単純なオブジェクトを制御するために30ブロックが必要になるとは思っていませんでした。
次の記事では、IEC 61131-3標準のすべての言語を同時に使用してこのプログラムを作成する方法を示します。
UPD。 標準の名前の間違いを修正しました。