こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
今回はPLC制御用のST言語プログラムにより、簡易的な横断歩道の交通管理システムを構築する。
前回の記事では、LogiCAD 3を使いST言語でプログラミングしたRevolutionPiを用いて、信号機のシミュレーションを行なった。今回はこの信号機を横断歩道用に発展させることにした。押すと信号機が動作する歩行者用のボタン形式の入力に加え、歩行者横断用の追加出力を加える。さらに、歩行者信号がまもなく赤に変わるということを伝えるためのブザーも追加する。
ハードウェア
今回もRevPi Core 3と、I/OにDIO (レーザーカットした5mm MDFに固定されたDINレールに取り付け)を使用する。既存のセットアップに加え、DIO入力端子電源に24Vを供給する必要がある。接続方法を間違えないためにも、クイックスタートガイドの「How to Connect the Power Supply (電源を接続する方法)」セクションを参照するといいだろう。
DIOモジュールのX2コネクタに接続 – 24Vをピン1、アースをピン2に接続
歩行者信号灯となる白色LEDインジケータ
(763-7905)
とブザー(626-157)は、それぞれDIOモジュール出力4と出力5に接続し、ボタンを出力1に接続した。なお、入力にはコネクタと24Vの右下から番号が付けられている。
ここで躓いたときは、入門ガイドとこちらのフォーラムの投稿に目を通すといいだろう。
次に、シンプルなアクリル板を加工して、歩行者信号用の部品(ボタン・ブザー・白色LED)を取り付けた。また雰囲気を出すため、LEDの上に「進め」を意味するグリーンマンを取り付けた。
設定
次はRevPiの構成設定を編集し、入出力に分かりやすい名前のラベルを付ける。具体的には、PiCtoryの[Value Editor]セクションを使って、LogiCAD 3のグローバル設定ファイルに変更を加える。
LogiCADからこれを行なうには、[Project Manager]で、[Revolution Pi]の[RevolutionPiResource]を右クリックし、[Change IO Configuration]をクリックする。すると、デフォルトのWebブラウザでPiCtoryページが開く。
PiCtoryの右下にある[Value Editor]セクションで、入力のラベル名と出力のラベル名を編集します。私は出力4を「Cross_4」、5を「Buzzer_5」に変更し、入力1を「Button_1」に変更した。
変更が終了したら、[File]をクリックし、[Save as Start-Config]を選択して、保存を行なう。
ここでLogi.Cad 3に戻り、再び[RevolutionPiResource]を右クリックして、[Load IOConfiguration]を選択する。するとRevPiから設定ファイルが取得され、LogiCAD 3プロジェクトで適宜グローバル設定ファイルが更新される。
コード
PROGRAM RevolutionPiProgram
VAR
wait : TON;
count : INT;
END_VAR
VAR_EXTERNAL
Red_1 : BOOL;
Amber_2 : BOOL;
Green_3 : BOOL;
Cross_4 : BOOL;
Buzzer_5 : BOOL;
Button_1 : BOOL;
END_VAR
CASE count OF
0: //init
count := count 4;
1: // Amber
Red_1 := False;
Amber_2 := True;
Green_3 := False;
Cross_4 := False;
Buzzer_5 := False;
wait(IN:=TRUE, PT:=T#7s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
2: // Red and Cross
Red_1 := True;
Amber_2 := False;
Green_3 := False;
Cross_4 := True;
Buzzer_5 := False;
wait(IN:=TRUE, PT:=T#10s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
3: // Red, Amber and Buzzer
Red_1 := True;
Amber_2 := True;
Green_3 := False;
Cross_4 := False;
Buzzer_5 := True;
wait(IN:=TRUE, PT:=T#5s);
IF wait.Q THEN
wait(IN:=FALSE);
count := count + 1;
END_IF;
4: // Green
IF Button_1 = FALSE THEN count := 1;
END_IF;
Red_1 := False;
Amber_2 := False;
Green_3 := True;
Cross_4 := False;
Buzzer_5 := False;
ELSE
count := 4;
END_CASE;
END_PROGRAM
コードの実行開始と同時に、変数がセットされる。
VAR_EXTERNAL
外部変数は、PiCtoryで設定した入力・出力のラベル及びLogiCAD 3の設定ファイルと完全に一致している必要がある。
count := 4;
プログラムが4の番号の付いたステートメントのブロックに送られる。以降の一連のステートメントは、最初にボタンが押されたかどうかを確認し、押されていない場合は緑のライトを点灯し、それ以外のライトを消灯、ブザーをオフにする。ループで実行されるSTプログラムであるため、最初に戻り、この動作が再度実行される。その結果、ボタンが押されたことが検出されるまで緑のライトは点灯したままとなる。ボタンが押されたことが検出されるとプログラムは1のステートメントに送られ、シーケンスが実行される。
各ブロックには次のタイマーが存在する。
wait(IN:=TRUE, PT:=T#5s);
シーケンスの各ステップが実行される時間は、「T#」の後の値を編集することで簡単に調整できる。このサンプルでは5秒に設定されている。この値を「10s」に設定すると10秒、「10ms」に設定すると10ミリ秒になる。
必須ではないが、私はすべてのステートメントのブロックの各変数に値を入力している。こうすることで視認性が上がるだけでなく、編集が必要な場合にプロセスの各ステップで何が発生するかがわかるので安全だ。
LogiCAD 3とRevPiの接続が完了し、コードの構築とアップロードが完了すると、ライト・ボタン・ブザーは期待どおりに動作した。
発展に期待
今回はわずか4ステップしかないシンプルなイベントのシーケンスだったが、出力を増やしたり、さまざまな出力を組み合わせて、さまざまな時間の長さでシーケンスを実行したりすることも可能だ。言い換えれば、あらゆるタイプのライト・ブザー・モータなどさまざまなものをトリガーするよう構成することが可能であり、温度センサやモーションセンサといった入力を追加することで、さらに発展させることができる。