howto:open_plc:basic
ラダープログラミングことはじめ

PLCの動きを決めるプログラムの、一般的なラダーダイアグラム/ラダー図によるプログラムの作成の仕方について、初めての人がイメージを持てるように説明してみます。私も初心者なので基本のところだけですが、学び始めに出てくる疑問の理解の助けになればと思います。
使ってみた印象
- 機械や器具の自動運転という限られた用途に必要な機能に特化しているので、使い始めに覚える必要のあるルールがあまりなく、シンプルでとっつきやすい印象です。
汎用の何でもできるプログラミング言語とは違いますが、それでもかなり複雑なこともできる仕組みは持っています。それらは必要になったところで必要な分だけ追加して覚えていけばよいだけです。
- 操作する機械、器具の追加・削除をするときや、操作方法を変更するときに修正がしやすいので、変更することがおっくうにならずに気軽に手を付ける気が起きます。運用しながら改良や変更をしていこうというのに向いています。
できること
- 接続した外部機器(センサー、スイッチ)からの情報の取り込み
- 接続した外部機器(照明やモーター等電気で動くもの)の動作ON/OFFや強弱の制御信号の出力
- 上の2つをくっつければ、センサーからの情報に応じて機器の運転/停止を操作するような自動運転のプログラムになります。
例えば、土の湿度がX%を下回ったら植物に散水するようなことですが、季節によってX%の値が切り替わるようにしたり、温度と湿度の関係で散水開始を判断するような設定にしたりと、途中の仕組みを見直すことが簡単にできます。
- 電気で動くものを使った作業の自動化に広く活用できます。ホームオートメーション、園芸、農業等々。
- 工場の生産ラインなど業務用で使われるPLC製品の場合は、製品とセットになったPLCソフトが使われるでしょうから、OpenPLCの出番は、その対応するハードウェアから想定されるような、個人ベースの趣味や小規模なシステムでの利用になります。
とはいえ、ハードウェアに依存しないソフトウェアを目指して国際基準IEC61131-3ができてきていますので、広い範囲で活用できると思います。
プログラミングの流れ
OpenPLCでプログラムを作って自動運転するまでの大まかな作業の流れはこんなふうになります
(Officialサイトのインストラクションはこちら)。
- PC(Windows/Linux(Debian)/MacOC(beta))にOpenPLCエディターをインストールし、PLC実機にOpenPLCランタイムをインストールします。ランタイムはインストールする機器によって手順が異なりますので、該当するものに従います。
- PCのOpenPLCエディターでプログラムを作ります。
- OpenPLCエディターを開きます。
- 新しいプロジェクトを設定します。
- プログラム内で使うリソースを登録します。
- プログラム(ここではラダーダイアグラム)を記述します。
- シミュレーションしてエラーをチェックし、デバッグ画面で思い通りに動くかを確認します。
- 実機に渡すプログラムファイル(*.st)を作成します。
- PCをPLC実機に接続(WiFiが便利)し、PCのブラウザでPLC側のOpenPLCランタイムを操作します。
- PCのブラウザでPLCのランタイムを開いてログインします。
- PCで作成したプログラムファイルを指定し、ランタイム側に取り込み、登録します。
- ランタイム上でプログラムの運転を開始し、実機が予定通りに動作するかを確認します。
- ランタイム上でも運転中の各入出力の状態が確認できます。
※ Arduino等のマイコンにインストールできるマイクロ版ランタイムが2022年に追加されましたが、こちらの手順は上記とは異なります。実際にやってみてから追記したいと思いますが、ブラウザ(Webサーバー)の無いマイコンに、OpenPLCエディター側から直接書き込む手順になるようです。
ラダープログラムの要素
PLCで自動運転をしている間、プログラムは延々と繰り返し実行され続け、状況に応じて中身のON/OFFの状態が更新されて出力内容が変わっていきます。その繰り返される1サイクル分の手順を作成することになります。
- プログラムは記号を線でつないで描いた図の形をしています。デジタル電子回路図に似ています。文字を書き連ねて記述するプログラムよりも直感的でわかりやすいです。左から右、上から下への向きにそれぞれの記号のON/OFFの状態が決まっていきます。
- 基本となる記号(要素)はスイッチとコイルに左右の電源線です。それらを線でつないで、ほしい動きをさせるロジックを作ります。それぞれの要素がON/OFFどちらの状態なのかを問題にします。
出来ることを増やすさせるために機能ブロックやアナログ入出力といった道具もありますが、最低限必要なものではないので、ここでは省略します。
- 各要素を線でつなぐと、つながった先の要素にON/OFFの状態(や値)を伝えます。スイッチがONになったら、それにつながったコイルもONになるといった具合です。
さらに、左から1:多に線をつないだら、右側は全部が同じ動作になります。逆に左から多:1につないだら、左のどれかがONになれば右もONになります。
- ラダーダイアグラムを学び始めてしばらくの間、コイルの使い方がどうもすっきりと理解できませんでした。
内部スイッチと外部出力の関係がどうなっているのかが疑問でした。コイルへの入力がONになると、同じ名前の内部スイッチはONになりますが、それが外部出力をONするスイッチとどういう関係になっているのか?
結論はコイルに割り当てられた外部出力と、コイルと同じ名前の内部スイッチは、どちらも同じコイルに連動してON/OFFするものの、全くの別物と考えます。
外部出力のスイッチが図中に出てこない上に、内部スイッチは、使わないことも、複数個設置することもあるので、図を見ていても判断がつきません。
- コイルというものは一度に異なる種類の動作を設定出来る便利な道具です。コイルと内部スイッチをいかにうまく使って目的の動作をさせる仕組みを組み立てるかが、ラダープログラム作成のキモだと思います。
基本のプログラムの書き方
- 電源線を左右の両端に置いて、その間にスイッチとコイルを並べ、それぞれを線でつなげば、スイッチを押したときにコイルをONにするプログラムになります。

このスイッチに外部入力の番号を割り当てて、それに対応するPLC外部入力端子に部品のスイッチを接続し、さらにコイルに外部出力の番号を割り当てて、それに対応するPLC外部出力端子にLEDを配線すれば、部品のスイッチを押したときにLEDが点灯するシステムになります。
スイッチをセンサースイッチに変えれば、押す作業も不要になりますし、スイッチの数を増やしたり、トラブル時のための強制電源OFFスイッチを入れたりとどんどん拡張していけます。また、出力側にLEDの代わりにモーターをつないだりするのも、プログラム上は外部機器の割り当て(番号)を変えるだけです(実機の配線の方は、つなぐものにより考慮する内容がありますが)。
- PLCプログラム内では単純なON/OFFの入出力のロジックを作成しますが、実際の外部機器のPLCへの接続にあたっては、機器の仕様に合わせた電気回路を構成するように配線する必要があります。
PLCプログラムを処理するコンピュータが直接入出力できる電圧、電流は大きくありませんので、トランジスタで増幅したり、フォトカプラやリレーで電気的に絶縁したりして、外部機器に必要な電圧、電流を扱えるようにしますが、このあたりはプログラム中には出てきません。
- プログラムでは、コイルと内部スイッチでつくる自己保持という手法をよく使います。
スイッチをOFF→ONにして、つながったコイルをONにする場合に、通常はスイッチがOFFに変わるとコイルもOFFになりますが、そのスイッチがOFFになってもコイルのON状態を継続させる方法です。
そのためには、コイルと同じ名前の内部スイッチを、コイル自身の入力につながるような配線で追加してやります。コイルへの入力ONによって内部スイッチがONになると、内部スイッチからコイルにONを送り込む堂々巡りが発生して、ずっとコイルがON状態に保たれます。
コイルをOFFにするためには、つないでいる線の途中に別のスイッチを入れて、外から切ってやる必要があります。
これは、スイッチにせよコイルにせよ、入力(押す力や電流)がなくなるとOFFに戻る部品(モーメンタリー)を想定しており(制御がシンプルになり使いやすいため?)、それらを使いつつも状態を維持できる方法です。
- プログラムが大きく複雑になってくると、図のどの部分で何をやっているかすぐわからなくなってしまいます。
コメントを、テキストボックスの形で好きな場所に入れることが出来るので、処理のまとまりごとにタイトルや注釈を入れて、後からメンテナンスしやすい体裁にしておくようにします。
ラダーダイアグラムを一目見れば処理がわかるぐらいに慣れてくれば目安程度でよいでしょうが、初心者ほど注釈を丁寧に入れたほうが良いと思います。
処理のブロックごとにスペースを空けるのも見やすさにつながります。必要なスペースを空けるには、ちょっと面倒ですが、開けたい場所の下にある要素全部を選択して下に移動します。
プログラムの実行
- プログラムは実行されると、外部入力の状態を読み込んで、内部のロジックを回して、外部出力の値を決めてという一連の処理を行います。この1回分をスキャンという言い方をします。
プログラム全体が処理されて全部の要素の値が確定したら、外部へのアウトプットの状態も更新されます。処理の途中では更新されません。
引き続いて次回の実行が始まり、停止させるまで延々とこのプロセスが繰り返されます。
howto/open_plc/basic.txt · 最終更新: by Staff_Ujiie






