ラズベリーパイ5にCODESYSをインストールして、PLC制御してみました。
ただしSysfsを使ったGPIO制御です。(*Sysfs…ファイルシステムを介した制御)
厳密な制御では難しいと思いますが、インストール含めて方法を紹介します。
CODESYSとRaspberry Pi 5でPLC制御してみた(Sysfs暫定版)
ラズベリーパイ5にCODESYSをインストールして、PLC制御してみました。
ただしSysfsを使ったGPIO制御です。(*Sysfs…ファイルシステムを介した制御)
厳密な制御では難しいと思いますが、ラズパイ5へのインストール含めて方法を紹介します。


ラズパイ5を使ったテスト動画に関しては未編集ですが、下記にアップしています。
細かい箇所を確認したい方はご確認下さい。
CODESYSとラズベリーパイ
CODESYSとラズベリーパイのインストール・制御方法に関しては、下記記事で紹介しています。
ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた

ただし、今までラズベリーパイ4までを制御していました。
今回ラズパイ5を使って、同様にCODESYSでPLC・GPIO制御した旨を紹介します。
ただし冒頭でも記載しましたが、Sysfsを使った制御のためご注意下さい。(詳細は後述。)
Arm+Linuxベースのライセンス
この記事はあくまで、20250103時点の情報という旨をご了承下さい。
ラズパイ5のGPIOをCODESYSで使うには、下記ライセンスを使います。
Arm+Linuxベースのライセンスです。
https://store.codesys.com/en/codesys-control-for-linux-arm-sl-1.html
通常のラズパイのCODESYSライセンスでは出来ませんでした。
理由は下記のラズパイ版ライセンスだと、ラズパイ5のGPIOを対応していないためです。
https://store.codesys.com/en/codesys-control-for-raspberry-pi-sl.html
CODESYS Control for Raspberry Pi SL does not support GPIOs for the Raspberry Pi 5
ラズパイ5とCODESYSでPLC制御
インストーラでもArmベースのライセンスを用意しています。
今回はラズパイ5のOSは64bit版を使っていますので、ARM64**のものを使っています。

最初にプロジェクトを作る際もARMベースのプロジェクトを作成します。


テストプログラムは、通常のリセット付きのラダー回路です。

Arm+Linuxのライセンスで注意する箇所
デバイスの追加でGPIOを選択します。
ここが、今までのラズパイのライセンスと一番違う箇所です。
各自でGPIOの設定をする必要があります。(今までは自動的に設定されていました)


GPIOを追加したら、今回は4bitのGPIOを追加で設定します。
必要に応じて1bitや16bitの設定にしても大丈夫です。

そしてGPIOのピン番号と入出力の設定をする必要があります。
一番注意するのはこの箇所です。
ラズパイのピン番号ではなく、CPU(カーネル)視点のGPIO番号を入力する必要があります。
CPU視点のGPIO番号はラズパイで下記コマンドにて調べれます。
pi@raspberrypi:~ $ cat /sys/kernel/debug/gpio

ログを見ると下記のようになっています。*必要な箇所のみ抜粋
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | pi@raspberrypi:~ $ cat /sys/kernel/debug/gpio gpiochip0: GPIOs 571-624, parent: platform/1f000d0000.gpio, pinctrl-rp1:  gpio-571 (ID_SDA              )  gpio-572 (ID_SCL              )  gpio-573 (GPIO2               )  gpio-574 (GPIO3               )  gpio-575 (GPIO4               |onewire@0           ) out lo  gpio-576 (GPIO5               )  gpio-577 (GPIO6               )  gpio-578 (GPIO7               |spi0 CS1            ) out hi ACTIVE LOW  gpio-579 (GPIO8               |spi0 CS0            ) out hi ACTIVE LOW  gpio-580 (GPIO9               )  gpio-581 (GPIO10              )  gpio-582 (GPIO11              )  gpio-583 (GPIO12              )  gpio-584 (GPIO13              )  gpio-585 (GPIO14              )  gpio-586 (GPIO15              )  gpio-587 (GPIO16              )  gpio-588 (GPIO17              )  gpio-589 (GPIO18              )  gpio-590 (GPIO19              )  gpio-591 (GPIO20              )  gpio-592 (GPIO21              )  gpio-593 (GPIO22              )  gpio-594 (GPIO23              )  gpio-595 (GPIO24              )  gpio-596 (GPIO25              )  gpio-597 (GPIO26              )  gpio-598 (GPIO27              )  gpio-599 (PCIE_RP1_WAKE       )  gpio-600 (FAN_TACH            )  gpio-601 (HOST_SDA            )  gpio-602 (HOST_SCL            )  gpio-603 (ETH_RST_N           |phy-reset           ) out hi ACTIVE LOW  gpio-604 (-                   )  gpio-605 (CD0_IO0_MICCLK      |cam0_reg            ) out lo  gpio-606 (CD0_IO0_MICDAT0     )  gpio-607 (RP1_PCIE_CLKREQ_N   )  gpio-608 (-                   )  gpio-609 (CD0_SDA             )  gpio-610 (CD0_SCL             )  gpio-611 (CD1_SDA             )  gpio-612 (CD1_SCL             )  gpio-613 (USB_VBUS_EN         )  gpio-614 (USB_OC_N            )  gpio-615 (RP1_STAT_LED        |PWR                 ) out hi ACTIVE LOW  gpio-616 (FAN_PWM             )  gpio-617 (CD1_IO0_MICCLK      |cam1_reg            ) out lo  gpio-618 (2712_WAKE           )  gpio-619 (CD1_IO1_MICDAT1     )  gpio-620 (EN_MAX_USB_CUR      )  gpio-621 (-                   )  gpio-622 (-                   )  gpio-623 (-                   )  gpio-624 (-                   ) | 
今回は下記3本を出力1本、入力2本として使用するために確認しました。
- gpio-585 (GPIO14 )
- gpio-598 (GPIO27 )
- gpio-593 (GPIO22 )



DirectionでInput/Outputを選択して、Pin numberの箇所でカーネル視点の番号を入力します。
- gpio-585 (GPIO14 )
- gpio-598 (GPIO27 )
- gpio-593 (GPIO22 )

またINとOUTに使う、ラダーの信号も割り振ります。

Armベースのランタイムをインストールする
ツールからControl SLを開き、ラズパイ5と接続します。


「CODESYS Control for Linux ARM SL」をインストールします。


ラズパイ5でラダープログラムをテスト実行
インストール後はラズパイ5に接続して、ログインします。
また事前にプログラムのビルドをして、エラーが無いことを確認しておきます。


あとは実行ボタンを押して、テストするのみです。
ラズパイ5でPLCのラダー自己保持・リセットできることを確認しています。
今回のようなスイッチを押して、LED光らすテストレベルならば問題無しです。



追加でログインしてダウンロードに、再度カーネル視点のGPIOを確認してみます。
設定した通りに、CODESYSがSysfsでGPIOを制御していることがわかります。
- gpio-585 (GPIO14 |sysfs ) out lo
- gpio-593 (GPIO22 |sysfs ) in lo
- gpio-598 (GPIO27 |sysfs ) in lo

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | pi@raspberrypi:~ $ cat /sys/kernel/debug/gpio gpiochip0: GPIOs 571-624, parent: platform/1f000d0000.gpio, pinctrl-rp1:  gpio-571 (ID_SDA              )  gpio-572 (ID_SCL              )  gpio-573 (GPIO2               )  gpio-574 (GPIO3               )  gpio-575 (GPIO4               |onewire@0           ) out lo  gpio-576 (GPIO5               )  gpio-577 (GPIO6               )  gpio-578 (GPIO7               |spi0 CS1            ) out hi ACTIVE LOW  gpio-579 (GPIO8               |spi0 CS0            ) out hi ACTIVE LOW  gpio-580 (GPIO9               )  gpio-581 (GPIO10              )  gpio-582 (GPIO11              )  gpio-583 (GPIO12              )  gpio-584 (GPIO13              )  gpio-585 (GPIO14              |sysfs               ) out lo  gpio-586 (GPIO15              )  gpio-587 (GPIO16              )  gpio-588 (GPIO17              )  gpio-589 (GPIO18              )  gpio-590 (GPIO19              )  gpio-591 (GPIO20              )  gpio-592 (GPIO21              )  gpio-593 (GPIO22              |sysfs               ) in  lo  gpio-594 (GPIO23              )  gpio-595 (GPIO24              )  gpio-596 (GPIO25              )  gpio-597 (GPIO26              )  gpio-598 (GPIO27              |sysfs               ) in  lo  gpio-599 (PCIE_RP1_WAKE       )  gpio-600 (FAN_TACH            )  gpio-601 (HOST_SDA            )  gpio-602 (HOST_SCL            )  gpio-603 (ETH_RST_N           |phy-reset           ) out hi ACTIVE LOW  gpio-604 (-                   )  gpio-605 (CD0_IO0_MICCLK      |cam0_reg            ) out lo  gpio-606 (CD0_IO0_MICDAT0     )  gpio-607 (RP1_PCIE_CLKREQ_N   )  gpio-608 (-                   )  gpio-609 (CD0_SDA             )  gpio-610 (CD0_SCL             )  gpio-611 (CD1_SDA             )  gpio-612 (CD1_SCL             )  gpio-613 (USB_VBUS_EN         )  gpio-614 (USB_OC_N            )  gpio-615 (RP1_STAT_LED        |PWR                 ) out hi ACTIVE LOW  gpio-616 (FAN_PWM             )  gpio-617 (CD1_IO0_MICCLK      |cam1_reg            ) out lo  gpio-618 (2712_WAKE           )  gpio-619 (CD1_IO1_MICDAT1     )  gpio-620 (EN_MAX_USB_CUR      )  gpio-621 (-                   )  gpio-622 (-                   )  gpio-623 (-                   )  gpio-624 (-                   ) | 
ラズパイ5でSysfsでGPIO・PLC制御することの注意
今回、久しぶりにCODESYSを触ってラズパイ5を制御しました。
ラズパイ5で、従来でのCODESYSのライセンスではGPIO制御はできないです。
色々と気づいたのでまとめておきます。あくまで一個人の感想なのでご了承ください。
CODESYS Control for Raspberry Pi SL
まずラズベリーパイ関連のライセンスが統一されています。
(少し前までマルチコア用とかシングルコア用でライセンス分かれていた)
*CODESYS Control for Raspberry Pi SL
詳細は従来のラズパイのライセンスを参照ください。

下記辺りの記載がしっかりされるようになりました
- CODESYS Runtimeとラズパイの組み合わせは、「非商用」と明確に記載
- The combination of Raspberry Pi and a CODESYS Runtime is for private use, test and teaching purposes. Commercial use is not permitted.
- ラズパイ5のGPIOには対応していない
CODESYS Control for Raspberry Pi SL does not support GPIOs for the Raspberry Pi 5
ただ従来通りラズパイ4までの個人使用・デバッグならば、上記のもので全く問題無しです。
マルチコア、64bitまで対応しています。
別の下記動画でも共有しましたが、ラズパイ4で問題なく使えています。
CODESYS Control for Linux ARM SL
では、最近のラズパイ5や商用で使いたい方はどうすれば良いかとなります。
基本ARM+Linuxのライセンスになるということになるよう???
ちょっとここら辺の指針が明確に見えておらず…

フォーラムにもその旨が書かれていました。
(今までのライセンス販売どうなるんだゴラァと悲鳴が上がっていました)
https://forge.codesys.com/forge/talk/Runtime/thread/822b45aa8f/
https://forge.codesys.com/forge/talk/Runtime/thread/9cdca9ecf3/
ラズパイGPIOの設定を各自で対応する必要
また今回紹介したようにARM+Linuxベースにすると厄介な点があります。
各自でLinuxベースでsysfsのピンを確認・設定する必要がありました。

勝手に推察すると、多分下記辺りも影響していると思います。あくまで予想です。
- ラズパイ5からGPIOピンがPCIE経由になった。
 →従来までとの互換性+パッケージ管理が手間になった?
- CODESYS自体が幅広く・色んなプラットフォームで使われるようになった。
 →CPUベースのARMでまとめた方が楽だった?
SysfsによるGPIO制御が非推奨
あと最近カーネル自体がでも、SysfsによるGPIOが非推奨されていない旨もあります。
下記記事で詳しく書かれていたので、リンク先貼っておきます。
(おそらくCODESYS側でも、色々と対応が間に合っていないのかなと思います。)
Sysfsでリアルタイム制御できるの?
正直、これが結構???です。*Sysfs…ファイルシステムを介した制御
(個人的な感覚ではリアルタイム性を求められる箇所では、あまり使わないのだが…)
今回ARMベースでGPIOを選択するとSysfsでの形態しかなかったので、これを使ったまでです。
厳密に何処まで制御できるかまでは検証していないですが、注意する必要があります。

今までのラズパイ4までのラズパイのライセンスでの下記設定を見ると、Sysfsでは無し。
IOピン(IoDrvGPIO?)での制御のように見えます。

まとめ
ラズベリーパイ5にCODESYSをインストールして、PLC制御してみました。
ただしSysfsを使ったGPIO制御です。(*Sysfs…ファイルシステムを介した制御)
厳密な制御では難しいと思いますが、インストール含めて方法を紹介しました。
 
  
  
  
  

コメント
気になった点がありコメントします。
ランタイム自体はRaspberry Pi MC SL (か64bit RasPiOS 向けの64 SL) が使用可能です。
ライセンス移行周りのFAQページ、下から10番目で「Raspberry Pi SL」が非商用向け、「Raspberry Pi MC SL」がapplication-based model に移行とあります。
https://store.codesys.com/en/faq-applicationbased-licenses
=>ランタイムは従来と変わらず、ライセンスはほぼ全ランタイム共通のapplication-based model ということかと。
RPi5は持ち合わせていないため未検証ですが、MC SLはGPIOを使える可能性があります。