はじめに:エントリPLCが安い今、あえてOpenPLCを選ぶ理由
PLCの開発環境といえば三菱GX WorksやオムロンCX-Oneが思い浮かびます。かつては年間ライセンス料もばかになりませんでしたが、今はエントリクラスの市販PLC本体が数万円で手に入ります。コストだけを理由にPLCを代替したいなら、わざわざOpenPLCを選ぶ必要はないかもしれません。
しかし、Raspberry Piを使い、Node-REDなどのソフトウェアと連携した独自の装置を作りたい場合、OpenPLCは有力な選択肢の一つになります。完全オープンソースで、IEC 61131-3準拠、Modbus TCP標準対応です。ラズパイにインストールすれば、現場I/Oを持ったPLCとして機能し、Node-REDとの連携でデータハブやダッシュボードも同一筐体でまかなえます。本稿ではOpenPLCの概要からセットアップ手順、Modbus通信設定、Node-RED連携、実運用の勘所までを解説します。
OpenPLCとは何か
OpenPLCはブラジルのThiago Alves氏が中心となって開発しているオープンソースのPLCプロジェクトです。2015年頃から開発が始まり、現在はGitHub上で積極的にメンテナンスされています。特徴は以下の通りです。
IEC 61131-3の5言語に対応
ラダー図(LD)、ストラクチャードテキスト(ST)、ファンクションブロック図(FBD)、シーケンシャルファンクションチャート(SFC)、インストラクションリスト(IL)の5言語全てに対応しています。市販PLCと同等のプログラミングが可能です。
対応ハードウェアの広さ
Raspberry Pi(3B+/4/5)、Arduino Uno/Mega、ESP32、Windows/Linux PCそのものがPLCになります。筆者が検証したRaspberry Pi 5(8GBモデル)では、余裕で動作しました。
OpenPLCのアーキテクチャ
OpenPLCは「OpenPLC Editor」と「OpenPLC Runtime」の2成分で構成されています。
EditorはWindows/Mac/Linuxで動作するIDEです。ここでラダープログラムを書き、ST言語でロジックを記述し、コンパイルしてSTファイルを生成します。生成されたプログラムはRuntimeにアップロードされます。
Runtimeはターゲットデバイス上で動作する実行環境です。ラズパイにインストールし、Webブラウザからアクセスしてプログラムの書き込みやI/O監視ができます。
セットアップ手順:Raspberry Pi 5編
実際のセットアップ手順を以下に示します。
Step 1: ラズパイOSのインストール
Raspberry Pi Imagerを使用し、SDカードにRaspberry Pi OS(Bookworm、64bit)を書き込みます。SSHを有効にしておくと以降の作業が楽になります。
Step 2: OpenPLC Runtimeのインストール
SSHでラズパイに接続し、以下のコマンドを実行します。
git clone https://github.com/thiagoralves/OpenPLC_v3.git
cd OpenPLC_v3
./install.sh raspberry
インストールには15分程度かかります。自動で依存パッケージがインストールされ、Webサーバ(port 8080)が起動します。
Step 3: ブラウザからアクセス
同一ネットワークのPCから http://[ラズパイのIP]:8080 にアクセスします。デフォルトのログイン情報(admin/openplc)でダッシュボードに入れます。
Step 4: フォトカプラリレー基板の接続
GPIOを実用的なPLCの入出力として使うには、フォトカプラリレー基板(例えば秋月電子の「フォトカプラ絶縁リレー基板 4ch」やホーザンのPLC入出力シミュレータ)を介します。ラズパイのGPIOピンとリレー基板を接続すれば、24Vレベルの現場信号を扱えます。
ラダープログラムの具体例
簡単な例として、押しボタン(X0)を押すとランプ(Y0)が点灯する自己保持回路を示します。
LD命令の例:
–| |–[X0]–|/|–[Y0]–( )–
–| |–[Y0]——–|
OpenPLC Editor上では、ラダー記号をドラッグ&ドロップで配置し、各要素に変数名(%IX0.0、%QX0.0など)を割り当てます。ST言語で書く場合は以下のようになります。
IF %IX0.0 OR %QX0.0 THEN
%QX0.0 := TRUE;
ELSE
%QX0.0 := FALSE;
END_IF;
Modbus TCP通信の設定
OpenPLC RuntimeはデフォルトでModbus TCPサーバとして動作します。ポート502で待ち受けており、ラダープログラムで宣言した変数がModbusレジスタに自動マッピングされます。
Modbusマッピングの例
%IX0.0 -> コイルアドレス 0 (0x0000)
%QX0.0 -> コイルアドレス 128 (0x0080)
%IW0 -> 入力レジスタ 0
%QW0 -> 保持レジスタ 0
Node-REDやGrafana、SCADAソフトからModbus TCP経由でデータを読み書きできます。
Node-REDとの連携で広がる応用
OpenPLC単体でもPLCとして機能しますが、真の価値はRaspberry Pi上でNode-REDと同居させることで生まれます。Modbus TCPでOpenPLCとNode-REDを接続すれば、制御ロジックはOpenPLC(IEC 61131-3)に任せつつ、上位のデータ処理・通知・WebダッシュボードをNode-REDで組めます。
連携構成
[現場機器]
| 24V信号
v
[フォトカプラリレー基板] --GPIO--> [Raspberry Pi]
| Modbus TCP (port 502)
+-- [OpenPLC Runtime] (I/O制御・ラダー実行)
+-- [Node-RED] (データ集約・通知・ダッシュボード)
Node-RED側の設定手順
(1) Node-REDに modbus ノード(node-red-contrib-modbus)を追加インストールします。
(2) 「Modbus Read」ノードでOpenPLCのコイル/レジスタをポーリングします。接続先は localhost:502、Unit Idは1(OpenPLC既定)とします。
(3) 「Modbus Write」ノードでNode-REDからOpenPLCのコイル(%QX0.0 等)を書き換え、現場出力を制御します。
(4) 取得した温度やカウント値を、dashboardノードでグラフ化、またはMQTT/HTTPで上位システムへ送ります。
具体例:異常検知からSlack通知まで
Modbus Read (温度レジスタ %IW0)
-> functionノードで閾値判定
-> 閾値超過なら MQTT out (異常トピック)
-> Slackノードで現場責任者へ通知
このように、OpenPLCを「現場I/Oとリアルタイム制御の担当」、Node-REDを「データハブと連携の担当」と分けるのが、Raspberry Pi一式で作る装置の実践的な形です。
実用ライン投入の現実
OpenPLCを実際の製造ラインで使う場合の限界も認識しておく必要があります。
メリット
Raspberry Pi + Node-REDと組み合わせることで、PLC+HMI+データ集約を一筐体に収められます。プロトタイピングや検証装置、予備ラインの制御・監視を低コストで実現できます。
デメリット
リアルタイム制御の保証がありません。Raspberry PiのGPIOは3.3Vロジックであり、産業用24V信号を直結できません。安全規格(ISO 13849など)の認証もありません。実生産ラインに投入する場合は、非常停止回路を別系統でハードワイヤードするなどの対策が必須です。
失敗パターン
筆者が実際に遭遇した失敗を3つ挙げます。
1つ目は「SDカードの破損」です。ラズパイPLCを24時間連続稼働させたところ、3ヶ月程度でSDカードが故障しました。対策として、OSをUSB接続のSSDにインストールする、またはRead Only Filesystemで運用します。
2つ目は「ノイズ誤動作」です。モータ駆動ラインの近くにラズパイを設置したところ、誘導ノイズでGPIOが誤動作しました。フォトカプラ絶縁とシールド線の使用で解決しました。
3つ目は「予期せぬ再起動」です。電源が不安定な環境でラズパイが頻繁に再起動しました。産業用24V-DCコンバータ(例えばMDD製の絶縁型DC-DCコンバータ)の導入で安定しました。
OpenPLCと市販PLCの比較表
| 項目 | OpenPLC + ラズパイ5 | 三菱 MELSEC iQ-Fシリーズ |
|---|---|---|
| 導入コスト | 1万円前後(ラズパイ+SDカード) | 5〜10万円(CPUユニットのみ) |
| 開発環境費用 | 0円 | GX Works3 年間ライセンス数万円〜 |
| リアルタイム性 | 非保証(Linux汎用OS) | 保証(RTOS) |
| 安全認証 | なし | ISO 13849対応機種あり |
| Modbus TCP | 標準対応 | オプションモジュール必要 |
| Node-RED等との連携 | 同一筐体で容易(Linuxベース) | ゲートウェイ等の別途構成が必要 |
| プログラム言語 | LD/ST/FBD/SFC/IL | LD/ST/FBD/SFC |
コスト重視ならエントリの市販PLCでも十分ですが、Node-RED等との連携や独自装置の構築を視野に入れるなら、OpenPLCは現実的な選択肢の一つになります。
出典・参考情報
- OpenPLC公式サイト
- OpenPLC GitHubリポジトリ
- Control.com「Turn a Raspberry Pi Into a PLC Using OpenPLC」
- SunFounder「Raspberry Pi PLC: A Low-Cost, Flexible Solution」
- node-red-contrib-modbus(Node-REDモッドバスノード)
まとめ
OpenPLCは「コストだけならエントリPLCでいいが、Raspberry Pi + Node-REDと連携した装置を自作したい」という現場エンジニアの選択肢です。IEC 61131-3準拠のPLCとして現場I/Oを担い、Node-REDでデータハブやダッシュボードを同一筐体に収められます。ただし、実ライン投入の際はリアルタイム性と安全面の制約を理解した上で、補助的な用途に限定するのが賢明です。まずはラズパイ一台でLチカから始め、そこからNode-RED連携へと視野を広げてください。


コメント