たのしいPLCプログラミング
※この記事は Luup Advent Calendar 2024 の 23 日目の記事です。
IoT チーム業務委託エンジニアの山口です。本記事では PLC のプログラミングについてご紹介します。
はじめに
朝のエレベーター、自動改札、自動ドア、コンビニに並ぶ工業製品、私たちの周りには数えきれないほどの自動化システムが働いています。これらを制御しているのが PLC(Programmable Logic Controller)です。
制御に特化したコンピュータである PLC は、過酷な環境下で 24 時間 365 日の連続運転に耐える高い信頼性を備えており、各メーカーがそれぞれの特徴を活かした製品を展開しています。
キーエンス KV-7500 + 拡張ユニット
産業用の PLC は高価なため、個人で学ぶにはハードルが高いという問題がありました。しかし、最近では Raspberry Pi や Arduino を活用した手頃な価格の PLC[1] や、OpenPLC などの無料の開発環境が登場し、学習環境は改善されつつあります。
ラダー言語
PLC のプログラミング言語として広く普及しているのが、ビジュアルプログラミング言語であるラダー言語(LD 言語)です。
ラダー言語はリレー回路の形をしているため、電気技術者にも扱いやすく、開発や保守が容易であるという利点があります。もちろん、論理演算や算術演算に馴染みのある IT エンジニアであれば、習得はそれほど難しくありません。
リレーのしくみ
電磁リレーはコイルの磁力で接点を開閉しますが、ラダー言語にも電磁リレーを模した仮想的なリレーが登場します。これはソフトウェア上の論理素子、1Bit の変数のようなものです。ラダー言語では、リレーのコイルと接点を配置して論理回路を構成します。
電磁リレーの概略図。コイルに電気を流すと接点が閉じる。
入力リレーと出力リレー
スイッチを押すとランプが点灯するというシンプルな制御をラダーで書いてみます。
ラダー図の左側に入力リレーの接点、右側に出力リレーのコイルを配置します。
スイッチを押すと入力リレーの接点が ON になるので、出力リレーのコイルも ON になり、ランプが点灯します。
┤├ は接点、○ はコイルを表す。左右の縦線(母線)に電気が流れているイメージ。
AND 回路 と OR 回路
接点を直列につなぐと AND 回路、並列につなぐと OR 回路になります。
斜線のついた接点は、論理が反転していることを表しています。
コイルが ON のときに接点が閉じるものを A 接点、開くものを B 接点といいます。
X2 は B 接点なので OFF のときに Y2 が ON となる。
自己保持回路
入力リレーの接点と並列に、出力リレーの接点を配置すると、入力接点が OFF になった後も、コイルの ON 状態が保持されます。このような回路を自己保持回路といいます。ラダー図で頻繁に使用される回路の 1 つです。
X0 が OFF になっても、Y0 の ON 状態が保持される。
タイマとカウンタ
タイマは、コイルが ON になってから一定時間後に接点の状態が変化するリレーです。
時間経過後に接点を ON にするオンディレイ動作と、OFF にするオフディレイ動作があります。
入力信号のチャタリング対策やインターバル制御などに利用されます。
T0 のコイルが ON になって一定時間後に、T0 の接点が ON になる。
カウンタは、入力信号の立ち上がり(OFF から ON への変化)の回数をカウントし、指定したカウント数に達すると接点が ON になるリレーです。繰り返し処理などに使います。
一定のカウント値になると接点 C0 が ON になる。
データレジスタ
データレジスタ(ワードデバイス)は、数値データを格納するメモリ領域です。センサ値の読み取りや外部機器の制御、演算結果の保持などに使います。
演算命令や比較命令をラダー上に配置することで、数値データを使った複雑な制御を実現できます。
接点の ↑ は立ち上がりパルスを表す。X0 が ON になると、D0 の値がインクリメントされ、D0 > 100 になると、Y0 が ON になる。
プログラム言語を使い分ける
PLC の国際規格である IEC 61131-3 には、5 つのプログラム言語が規定されています[2]。これらを組み合わせることで、より効率的なプログラムを書くことができます。
IEC61131-3 のプログラミング言語
プログラム言語 | 記述形式 | 特長 |
---|---|---|
LD | グラフィックス | シーケンス制御の記述に適している。 |
IL | テキスト | アセンブラに似た低水準言語。 |
ST | テキスト | 高水準言語に似た文法。複雑な演算処理など。 |
FBD | グラフィックス | 機能ブロックを組み合わせて処理を表現する。 |
SFC | グラフィックス | 工程の流れを状態遷移図で表現できる。 |
複雑な演算処理は ST で記述し、繰り返し使用する機能は FBD で部品化するなど、用途に応じた柔軟なプログラム設計が可能です。
ラダーに FBD を配置している例。OpenPLC のサンプルプログラム。
おわりに
製造業 DX では「IT と OT(Operational Technology:制御技術)の分断」が大きな課題であるといわれています。クラウドや AI の導入を検討したものの、制御システムとの連携が上手くいかず、現場の要望に対応できない、といったケースを指すようです。
こうした課題を受けて、クラウドやアプリケーション層の開発だけでなく、現場の制御機器そのものを理解できる技術者への需要が高まっています。
エッジ技術に踏み込む IT / IoT エンジニアの皆さんに、PLC に興味を持っていただけたら幸いです。
-
例えば Arduino OPTA や、Revolution Pi など。 ↩︎
-
日本産業規格には JIS B 3503『プログラマブルコントローラ − プログラム言語』という同様の規格があります。 ↩︎
Discussion