9月号特別企画「ラズパイでPLC」 第4章 リレーによる1 ビット記憶回路を例に初めてのラダー・プログラム

前章:第3章 開発環境OpenPLC Editor をパソコンにインストール
https://interface.cqpub.co.jp/raspi-plc-2020-09-1/
 開発環境 OpenPLC Editorの準備ができたら,ラダー・プログラムを入力してみます.ラダー・プログラムは,リレーによる制御回路をプログラム化したようなものです.ここでは1ビットを記憶するプログラムをOpenPLC Editorに入力します.

図1 リレーによる1 ビット記憶回路の例


例題:1ビットを記憶保持する回路


● 基本はリレー


 リレーは,コイルと接点(コンタクト)で構成されています.図1はリレーで組んだ1ビットを記憶保持する回路です.SW1とSW2 はノーマル・オープン(通常時が開)の押しボタン・スイッチです.SW1がSETスイッチ,SW2がRESETスイッチです.これらをCR1,CR2の2つのリレーで受けています.リレー・コイルに並列に接続されているのは,逆起電力吸収用ダイオードです.直流駆動のリレー回路の場合,これがないと駆動する側の接点がすぐに焼けてしまいます.
 図の左右に縦に2本の線があります.これは電源線です.ラダー図では,この線を「母線」と呼ぶこともあります.右側がプラス母線,左側がマイナス母線です.図には書かれていませんが,これらの母線にはシステムから電源が供給されています.
 ラダー・プログラムを使って,この回路をほぼそのままプログラムとして組むことができます.ラダー・プログラムには,リレー記号だけでなく,タイマやその他のファンクション・ブロック(機能ブロック)がありますが,今のところリレー・コイルとA接点(ノーマル・オープン),B接点(ノーマル・クローズ)だけで話を進めることにします.

● 記憶を保持するメカニズム


 まず,システムの電源が供給されたところを考えてみます.CR1からCR3の各リレー・コイルは全てOFF です.ここで,SW1 が押されるとCR1 のリレー・コイルがON し,CR1 のA接点が閉じます.CR2 はOFFのままなので,CR2のB接点は閉じています.
CR1のA接点とCR2のB接点が閉じるのでCR3のコイルがONします.すると,CR3のA接点もONするので,CR3は自身のA接点によってON状態を保持します.この状態で,SW1を離してCR1のコイルがOFFになっても,CR3は自身のA接点によってON状態を保持し続けます.
 ここで,SW1とSW2はそれぞれ1度リレーで受けていますが,SW2にノーマル・クローズ(通常時が閉)の押しボタン・スイッチを使えば,CR1とCR2の接点の代わりに直接スイッチを用いることもできます.

表1 入力/ 出力リレーが使用できる番号の範囲


▶記憶保持解除の方法


 記憶保持状態は,SW2を押してCR2をONさせCR2のB接点を開くことで解除できます.CR3の保持状態は,システム電源を切ることでも解除できます.

リレーに付ける番号と名前


表2 ラズベリー・パイ3B+のビット・デバイスとI/Oマッピング


● リレー番号の表し方


 ラダー・プログラムの中で使うリレーには,入力専用と出力専用の2つがあります.入力リレーは,%IX0.0(0.0は適宜変更)と表し,出力リレーは,%QX0.0(0.0は適宜変更)と表します.番号の範囲は表1のようになっています.
ピンの数だけしかありませんが,内部リレーは多くあります.
 ここで注意が必要なのは,入力リレーは内部リレーも含めてコイルが使えないので,実質的には入力につながっているスイッチなど以外は使用できません.

▶ラズパイに設定されているリレー番号


 表2はラズベリー・パイ3B+のI/Oピンと使用できるリレー番号の関係です.ピン位置を見て分かると思いますが,奇数ピンが入力,偶数ピンが出力に設定されています.%IX,%QXの後の数字の小数点以下は,ビットの位置を表していて0 〜7の数字です.小数点以上の数字は,チャネルの数を表していて,0 〜99の数字です.ピン配置に出てくるレジスタ・アドレス%IX0.0 〜%IX1.5は入力用I/Oリレーです.
%QX0.0 〜%QX1.2は,出力用I/Oリレーです.この状態で内部リレーとして使用できるリレーは,%QX1.3 〜%QX99.7の範囲の781点です.

● 全てのリレーには固有の名前を付ける


 ラダー・プログラムで使うリレーには,全て固有の名前を付ける必要があります.ラダー・プログラム上では,リレーはその名前でコイルや接点(コンタクト)を識別します.

● OpenPLC Editorでリレーの番号と名前を入力する方法


 図2はOpenPLC Editorの中央上側にある窓です.
この窓の上の部分はデバイス名を設定するエリアで,窓の下の部分はプログラムの編集エリアです.図にあるデバイス名設定エリアの右肩に,+−↑↓などのコマンド・ボタンがあります.ボタンの意味は以下の通りです.
(1):カーソルの次にデバイスを追加   
(2):カーソル位置のデバイスを削除
(3):カーソル位置のデバイスを1 つ上に移動
(4):カーソル位置のデバイスを1 つ下に移動
 (1)のボタンを押すと,リストが1行追加されるので,そこへ希望のデバイス名や種類,Locationなどを入力していきます.入力するものは以下の通りです.

図2 OpenPLC Editor に入力したリレーの名前やロケーション情報


表3 デバイス名設定エリアに入力したI/O の設定内容


▶名前


 名前にはSW1などプログラム上の名前を書き込みます.

▶ Class


 ClassはデフォルトのLocal とします.

▶種類


 種類は,項目をクリックすると表示されるドロップダウンから,「Base Types」→「BOOL」を選んで設定します.リレーなどのビット・デバイスを使用する場合には,ここはBOOLとなります.BOOLは真と偽の2つの値を取る変数のことです.リレーを指定する場合はBOOL だと覚えてください.

▶ Location


 LocationにはI/Oリレーか内部リレーを指定します.ここで別々の名前に同じロケーションのリレーを指定してはいけません.
 先にも説明したように,入力リレー(%IXn.n)は内部リレーでもコイルは使用できません.なので,内部リレーを使用する場合は必ず%QXn.nの出力リレーを使用するようにします.

▶ InitialValue,Option


 InitialValueは初期値のことです.InitialValueとOptionは,空きにしておいてください.

▶ Documentation


 ここに日本語でのコメントが入力できます.コメントは空白のままでも構いません.
 ここまでが各項目の説明ですが,習うより慣れろで表3を見ながら同じように入力してください.
 実際に入力したものを表3に示します.SETスイッチはI/O 入力(%IX0.3),RESETスイッチは同じくI/O 入力(% IX0.4)につないでいるものとします.
これをCR1内部リレー(%QX2.0)と同じく,CR2 内部リレー(%QX2.1)で受けています.そして,記憶保持はI/Oリレー(%QX0.0)としています.これらは後述のラズベリー・パイでの動作確認が行えるように設定してあります.

ラダー・プログラムで用いる記号


 図3に示すのはラダー・プログラムを組む際に用いる記号です.以降では,この記号で書かれたものの動作やプログラムを組む上での約束事を解説します.

● 母線の記号


 母線は,図1では縦に長い線でつながっていましたが,このラダー・プログラム上では任意の点に左右母線記号を書きます.1つのラダー・プログラム当たり左右1 対書くのが原則です.

図3 ラダー・プログラムで用いる記号


● 接点の記号


 実物のリレーの接点は,A接点とB接点の2種類があります.プログラム上のリレー接点はこの他に立ち上がりエッジ(微分),立ち下がりエッジ(微分)接点があります.
 ここで,接点の入力とは接点を駆動するための信号のことです.例えば,I/O入力リレーならスイッチのタイミングであり,内部リレーやI/O出力であればその接点のコイルに対応します.

● 立ち上がり/立ち下がりエッジの記号


 立ち上がりエッジは信号がONになったときに一瞬だけONする接点です.立ち下がりエッジは逆に信号がOFFになったときに一瞬だけONする接点です.
一瞬というのは漠然としていますが,正確に言うと1スキャン(ワン・スキャン)だけONにします.

● リレー・コイルの記号


 1つのリレー・コイルは,原則的にプログラム中で1回だけしか書けません.例えば,同じリレー・コイルを複数回書くと同じコイルが複数の状態にあるという矛盾した状況になってしまうことがあるので,同一リレーのコイルを多重に書くことはしない方が無難です.
 図4では同じリレーを2回出力に使っていますが,このままコンパイルしてもエラーにはなりません.このラダー・プログラムは,仕組みを十分理解した上で特定のトリッキーな効果を狙って使うことはできますが,十分に理解しないうちは,同一リレーを多重に出力することはおすすめしません.

リレー・コイルの種類と働き


● 普通のコイルとノット・コイル


 まずは,普通のコイルですが信号がONするとコイルもONします.このとき,このリレーのA接点はONでB接点はOFFです. 次に, ノット・コイル(Negated)の場合,信号がON するとコイルはOFFします.このノット・コイルを使うと,このリレーのA接点とB接点が全く逆になるので,動作を考えるのが非常に困難になります.通常はノット・コイルを使用するくらいであれば,代わりにコイルを駆動する接点にB接点を用いる方が思考が煩雑にならずに済むと思います.

● 立ち上がりエッジ/立ち下がりエッジ・コイル


 立ち上がりエッジ・コイルと立ち下がりエッジ・コイルは,接点と同じように立ち上がり/立ち下がりのエッジの1スキャンだけコイルがONします.コイルそのものの動きが1スキャンのみONするので,このリレーの接点は全て1 スキャンだけON します.
 このようなエッジ動作のコイルを使用した場合,複雑なプログラムを組むときに使用する接点がエッジ動作なのか通常動作なのか分かりにくくなるので,なるべくコイル側でエッジ動作を指定するのではなく,接点側でエッジを使用した方が見通しの良いプログラムが組めると思います.

● SET/RESET コイル


 SET/RESETコイルは,保持リレーやラッチング・リレーをシミュレートするものです.実際の保持リレーには,SETとRESETの1対のコイルが付いていて,SET側コイルをOFFからONにすると,リレーはON状態になり,その状態を保持します.RESET側コイルをOFFからONにすると,リレーはOFF状態になり,その状態を保持します.プログラム上のSET/RESETも同じです.SETやRESET は,リレーの原則に反して同一コイルに対して複数の出力をプログラム上に書くことができます.ただし,SETとRESET は同時にONしてはいけません.

● SET とRESET の関係性と扱い方


 SETとRESETの関係は言葉で説明しても分かりづらいと思うので,図5に例を示します.
 図5(a)はCR1の記憶保持のラダー・プログラムです.SW1またはSW2がONするとCR1がONして,CR1はCR1自身のA接点で駆動されているので,そのままON状態を保持します.SW3がONになると保持プログラムの途中に入ったB接点で自己保持プログラムが切れるのでCR1 はOFF になります.
 図5(b)はSETとRESETを使ったラダー・プログラムで,1つのSETにSW1とSW2が並列にORでつながっています.そして,RESETにはSW3がつながっています.これでSW1かSW2がONになるとCR1はONになります.SW3がON になるとRESET によってCR1 はOFF になります.
 図5(c)はSW1とSW2にそれぞれ別々にSETをつないだものです.このように,SETとRESETは1つのリレーに対して幾つも使うことができます.
 ただし,あちこちにSETとRESETが散在するとCR1の挙動が把握しにくくなります.このようにSETとRESETは思い付きであちこちに書けるため記述性は高いのですが,そのぶん可読性が劣ることになります.

図4 同一のリレーに対して出力することはしない


図5 SET/RESET を使えばコイルを制御できる


図6 母線の入力手順


OpenPLC Editorにラダー・プログラムを入力


 以降では,既にリレーの名前は打ち込んであるものとして,話を進めます.ラダー・プログラムは,左右の母線に挟まれたラダー・プログラム単位で入力していきます.

● 入力手順


▶ステップ1:母線の入力


 まず,左の母線を入力します.入力手順を図6に示します.
 ツール・バーの母線ボタン[図6(a)]をクリックしてラダー・プログラムの編集エリアで適当な位置をクリックします.
 母線のプロパティ設定ウィンドウ[図6(b)]が開くので設定項目を入力して[OK]をクリックします.
 ラダー・プログラムの編集エリアにできた母線を希望の位置にドラッグします.今回は,まず1ピンの左母線をプログラム編集エリアの左端の方に入力します.

▶ステップ2:スイッチの入力


 スイッチの入力手順を図7に示します.
 ツール・バーの接点入力ボタン[図7(a)]をクリックしてラダー・プログラムの編集エリアで適当な位置をクリックします.
 接点編集ウィンドウが開くので,必要項目を選択し[OK]をクリックします[図7(b)].
 ラダー・プログラムの編集エリアにできた接点を適当な位置にドラッグします[図7(c)].
 必要に応じて,配置した接点を他のデバイスと配線でつなぎます[図7(d)].
 ここでSW1はI/O入力につながっていますが,ラダー・プログラムでは接点として入力します.上に示した要領でSW1を母線の右側に入力して,先ほど入力した母線と配線でつなぎます.

▶ステップ3:リレー・コイルの入力


 リレー・コイルを入力し,上と同じようにSW1の反対の配線に両者をつなぎます.コイルの入力手順を図8に示します.
 ツール・バーのコイル・ボタン[図8(a)]をクリックして,ラダー・プログラムの編集エリア上で適当な位置をクリックします.
 コイル編集ウィンドウが開くので,必要項目を選択して[OK]をクリックします.
 ラダー・プラグラムの編集エリア上にできたコイルを適当な位置にドラッグして,コイルの配線部分クリック後にドラッグして配線を所望のデバイスとつなぎます.

図7 スイッチの入力手順


図8 コイルの入力手順


図9 ラダー・プログラムで作成した1ビット記憶保持プログラム


● ラダー・プログラム単位で上下の入れ替えが可能


 以上の手順を繰り返して記憶プログラムが完成します(図9).図9を見ると,母線が縦方向に切れていますが,右母線同士,または左母線同士はプログラム的につながっているというイメージです.この左右の母線に挟まれたプログラムが,それぞれ1つのラダー・プログラムのブロックです.プログラム単位で上下関係を入れ替えても原則的に動作に変わりはありません.
 入れ替えをした場合,厳密には若干タイミングが変わる場合がありますが,エア・シリンダなどの比較的動作の遅いメカ部品の制御や人間の操作するスイッチの読み込みなどは,どこにあっても基本的に変わりはないと考えられます.簡単ですが,ラダー・プログラムの一例を入力することができたので,次章では,OpenPLC Editorのデバッガ機能を試してみます.

今関 雅敬(Interface2020年9月号 pp.124-130より転載)

次章:第6章 OpenPLC のインストールやWi-Fi ルータ化プログラムを ラズベリー・パイで動かす
https://interface.cqpub.co.jp/raspi-plc-2020-09-3/