2026年、AUTONDMYのOPENPLC V4は大幅な更新があり、EditorとRuntimeにもV4が正式リリースしました!このシリーズは実際にOPENPLC V4を使って様々な検証を行っていきます。第3話ではPython FBの作成を紹介します。
またOpen PLC RuntimeはAdvantechのAMAX-7580 100D5AのDockerコンテナにインストールします。
さ、FAを楽しもう!

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
- 「EtherCAT通信でうまくいかない部分を検証してほしい」
- 「新しいリモートI/Oを試したいけど社内に検証環境がない」
など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。
支援のかたち
現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。
メンバーシップ(ラジオの応援)
Fullさんとのラジオをより充実させるための支援プランです。
https://note.com/fulhause/membership/join
Amazonギフトリスト
コンテンツ制作に必要な機材・書籍をリストにしています。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon(ブログ・動画活動への応援)
月額での小さなご支援が、記事の執筆・検証環境の充実につながります。
https://www.patreon.com/user?u=84249391
Paypal
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Reference Link
http://soup01.com/ja/category/openplc/
Implementation
それでは実際にプログラムを作成していきましょう。
Editorバージョン
OpenPLCV4でPython FBを使用するには、最低限では4.1.2を使用してください。

ランタイムインストール
次は下記のコマンドでRuntimeを直接IPCにインストールします。
| git clone https://github.com/Autonomy-Logic/openplc-runtime.git cd openplc-runtime sudo ./install.sh |
しばらく待ちます…

Done!

次は下記のコマンドでOPENPLC V4のRuntime状態を確認しましょう。
| sudo systemctl status openplc-runtime.service |

トラブル
次は自分がIPCに直接Runtimeをインストールするとき出てきたエラーと解決方法を説明します。
fatal: unable to access
最初にgithub.comアクセスできないエラーが最初に発生しました。
| fatal: unable to access ‘https://github.com/Autonomy-Logic/openplc-runtime.git/’: Could not resolve host: github.com |
ネット接続の確認
まずインターネットと接続しているかを確認します。
| ping 8.8.8.8 |
DNS解決の確認
次はgithub.comと通信できるかを確認します。
| ping github.com |
DNS設定の修正
自分の場合はDNSの設定問題でしたので、下記のように修正すればOKです。
| sudo nano /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 |
Python FB追加
次はPythonのFBを追加します。プロジェクトツリーにある+ボタンをクリック→Function Blocks→LanguageをPythonに設定し、POU名を入力しましょう。

Done!それでPython FBのTemplateが生成されました。

注意!
OPENPLC V4 RuntimeでPython FBを使用するに:
- Python FBはPLCメインランタイムから非同期で実行されます。
- 全ての変数は共有メモリを介してランタイムと共有されます。
- block_init() 関数はブロック起動時に一度だけ呼び出されます。
- block_loop() 関数は定期的に(約100ms間隔)呼び出されます。
- この定期呼び出しはPLCスキャンサイクルに従いません。
- block_loop()がスキャンごとに1回実行される保証はありません。
- このブロックは時間的制約のないタスクに使用してください。
- PLCスキャンサイクルに合わせる必要があるロジックには、標準のIEC 61131-3関数ブロックを使用してください。
Code
こちらは今回のPython FBのコードです。
テキストFILEを作成し、またblock_loop内で変数をずっと加算するプログラムになります。
| from multiprocessing import shared_memory import struct import time import os def block_init(): print(‘Block was initialized’) global iCounter,xCreate iCounter=0 xCreate=0 def block_loop(): print(‘Block has run the loop function’) global iCounter global xCreate iCounter=iCounter+1 if xCreate: with open(“/home/oem/Documents/example.txt”, “w”) as f: f.write(“Hello, World!”) xCreate=False |
ST POU追加
今度はPython FBを呼び出すPOUを作成します。下記の例ではSTを使用しましたが、ラダーでも構いません。

PythonのFB呼び出しはいつものIEC61311-3方式と同じです。

タスク追加
最後はST POUを呼び出すタスクを追加するために、Resourceをクリックします。

下図の+ボタンで新規タスクを追加します。

Done!新しいタスクが追加されました。

Interval欄でタスクの周期を設定します。

実際のアプリケーションに合わせて設定しましょう。

次はタスクの優先度を設定します。



インスタンス追加
次は先程追加したSTコードを呼び出します。Instance欄にある+ボタンをクリックします。

新しいInstanceが追加され、Program欄にSTコードを選択します。

次はTask欄で先ほど追加したタスクを設定すればOKです。

結果
STプログラムをモニタリングし、Python FBの出力iCounterが加算されています。

xCreate=TrueでテキストFILE作成しました。
