ラズベリーパイをPLC(シーケンサ)として使う実践編で「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」を紹介します
ラズベリーパイでラダーのプログラムを実際に動かす手順を紹介しています。「自分でPLC(シーケンサ)・ラダーを色々触ってみたい!」という方におすすめな記事となっています
本来は1記事でデバッグ動作の記事まで書きたかったのですが、長くなりすぎるので2つの記事に分けています。前回の記事はこちらから

前回の続き
前回はラダー作成・シミュレーションまで終了しました。
今回はラズベリーパイの設定~デバッグ動作まで行っていきます。接続図は下記イメージで、PLC(シーケンサ)代わりに使うラズベリーパイのGPIO設定からスタートします
「CODESYS」でGPIOマッピングをする
前回はラダー回路を書いただけですので、ラズベリーパイのどこのGPIOピンを入力・出力にするかマッピングしていきます。(まだどのピンで入力・出力するか決めていません。)
今回はラズベリーパイの「GPIO27」を入力、「GPIO17」を出力に選択します。(特に選択したピンに意図はそこまでありません。GPIOとして独立しているピンを基本選択しました)
前回の続きでPCで「CODESYS」を編集していきます。まずデバイスの欄にある「GPIOs_A_B」を選択してGPIOの設定画面を出します
①まずはGPIOs'パラメータの箇所でどのピンを入力・出力にするか決定します。設定する箇所の値をクリックして選択します(今回は「GPIO27」を入力、「GPIO17」を出力)
②次にGPIOs' I/O マッピング を編集してラダー回路の「X001,Y001」と「GPIO17,GPIO27」を紐付けます。マッピングの箇所をクリックして入力・出力のピン一覧を出して該当の入出力箇所を選択します
新たなウインドウが出てきますのでまず入力のGPIO27では「Application」⇒「PLC_PRG」⇒「X001」を選択してあげます。
そして次に出力も同様に設定していきます。出力の場合はGPIO17の箇所に「Y001」を
選択します。
これでGPIO設定の処理が完了しました。次の章ではデバッグ用配線についてを説明します
デバッグ用の配線をする
今回は1入力(SW)・1出力(LED)の回路を用意していきます。
必要部品は上記に書いてある通りです
・タクトSW
・LED(赤)
・抵抗×2(筆者は10kΩ×2) ※入力のプルダウン用,LEDの電流制限用
・ブレッドボード
・ジャンパー線 ※筆者はメス-オスが4本,オス-オス2本でした
電子工作する人ならば基本手元にある部品かと思いますが、無ければ下記のようなセットを購入すればよいかと思います
接続図としては下記のような回路となります。よくある回路ですので特に問題ないはずです。
ラズベリーパイの設定を行う
前回記載していましたが今回PLC(シーケンサ)として使っているラズベリーパイ側の設定を行っていきます
今回のラズベリーパイ環境
今回の環境は下記となっています
ラズベリーパイ本体は古い「Raspberry Pi 1 Model B」から~最新の「Raspberry Pi 3 Model B+」のどのVerでもOKです。筆者も両方で動作を確認できています
<<20191117追記>>
最新のRaspberry Pi 4 model Bも既にサポートされているということです
OSに関しては筆者はRaspbianのその当時最新Ver(Ver4.14)で実施しています。
筆者のSDカードは下記の「Raspberry Pi 3 Model B+」はMicroSDの32GB,「Raspberry Pi 1 Model B」はSDの16GBですが特に問題ありませんでした
OSのRaspbianのダウンロード・インストールに関しては既にネット上に多くの記事がありますので省略します。
LANの設定(ラズベリーパイ側)
OSインストール後のラズベリーパイ側の設定に関して行っていきます。まずはPCとラズベリーパイをLANで接続するのでLAN周辺を設定します。
※PC側のLAN設定に関しては次章で説明します
今回はPCのIPアドレスを「192.168.0.100」、ラズベリーパイのIPアドレスは「192.168.0.10」設定していきます。
※特に繋がればIPアドレスは任意に設定してもらって大丈夫です(筆者はラズベリーパイのデフォルト値を使用しています)
最近のRaspbianは助かることにデフォルト設定を用意してくれています。
筆者が行った手順としては「/etc」フォルダを開き「dhcpcd.conf」ファイルを開きます。
青所の「Example static IP configuration」の箇所を編集します。といっても頭の「#」を消すだけです。「interface~」から「static domain~」の行の頭「#」を消します
消し終えましたら上書き保存したら終了です
インターフェイス設定(ラズベリーパイ側)
LAN経由で動かすとなるとSSH等の設定が必要になると思いましたのであらかじめ筆者は対応しました。(もし不要でしたらすみません)
こちらも最近のRaspbianは便利なもので、左上のラズベリーパイのアイコンから「設定」⇒「Raspberry Piの設定」で変更できます
タブをインターフェイスにすればSSH,VNC,SPIなどすべてここで変更が可能です。筆者は一旦すべて有効にしておきました。
理由はI2C・SPI・Onewire・カメラなどの情報も「CODESYS」経由で使えるらしいためです。(また使えるようになりましたら記事にしたいと思います)
これでラズベリーパイ側の設定は終了です。
PC側のLAN設定を行う
先ほどはラズベリーパイ側の設定をしましたので、PC側の設定もしておきます
PC側のLANのIPアドレスを「192.168.0.100」に設定していきます
「コントロールパネル」などから「ネットワーク接続」に行き、ローカルエリア接続のTCP/IPv4を選択します
後はIPアドレスを指定すればOKです。筆者のは下記設定ですが特にラズベリーパイと接続できるならば好きに設定しもらえれば構いません。
これでPC側のLAN設定も終了です
ラズベリーパイをPLC(シーケンサ)にする
これまでの章で準備が終わったので実際にラズベリーパイをPLC(シーケンサ)にしていきます。
LAN接続して電源を入れておく
既にデバッグ回路は組みましたので、この段階でPCとラズベリーパイをLAN接続していきます。LANケーブルは特に何でも構いません
筆者が使ったのは下記です
PCとラズベリーパイのLANコネクタ口にケーブルを接続します
LAN接続したら電源を入れておきましょう。
ビルドしておきましょう
既に何かしらビルドしてエラーないことを確認していると思いますが、実施していなかったら行っておきましょう。
タブの「ビルド」⇒「ビルド」を選択すれば実行できます、特にエラーが無ければOKです。
CODESYSをラズベリーパイにインストールします
PC経由でラズベリーパイにCODESYSをインストールをします。
まずは左枠にでている「Device」をダブルクリックしてDevice設定ができる画面を開きいておきます。※但しこの時点ではまだPCとラズベリーパイが接続できません
ラズベリーパイ側にまだ「CODESYS」がインストールされていないためです。そのためインストールします。「ツール」⇒「Update Raspberry Pi」を選択します
左枠がでてきましたらラズベリーパイを探してインストールしていきます。
①ラズベリーパイのユーザ名・パスワードを入力します。
②IPアドレスを入れてスキャンします。正常にLAN設定できていれば無事スキャンできます。見つけれたら「OK」を選択します
③「install」を選択しますと「CODESYS」がラズベリーパイ側にもインストールされます。少し時間がかかりますがこれでインストール作業完了です
<<20180106追記>>
※最新のVer3.5.14.0以降ではインストールのときに「Standard」か「Multicore」を聞かれますので、プロジェクト作った際にマルチコア対応・非対応の選んだ方を選択してあげます。
特に実施する必要はありませんがインストール後に「System info」をクリックすると、ラズベリーパイの詳細情報(CPU情報・パッケージ内容など)が確認できます
インストール後にはデバイス欄でラズベリーパイが認識できるようになっています
デバッグ動作をしてみる
最後にラズベリーパイでデバッグ動作をしてみます。
①タブ「オンライン」から「ログイン」を選択します
②ダウンロードしていいか聞かれるので「はい」を選択しましょう
これでラダープログラムが動き出す直前になりました。「運転」のアイコンをクリックしましょう。
実際のラダー回路動作
前回作成したラダープログラム通りでしたらSWを押しているときは「X001」⇒「M001」⇒「Y001」とラダー回路が動作し、LEDが付くようになっています。
※SWが押していないとき…LED非点灯
※SWを押しているとき…LED点灯
実動作とラダー動作を合わせた動画をYoutubeでも上げておきました。こちらの方が何をしているか分かりやすいかと思います
これで無事ラズベリーパイをPLC(シーケンサ)としてラダー回路を動作させることができました。ラダー回路を変更すれば、様々な動作が可能です。
まとめ・感想
今回はフリーで使える「CODESYS」を使って実際にラズベリーパイをPLC(シーケンサ)として動作させることができました。
「自宅でPLC(シーケンサ)・ラダー回路の勉強・デバッグをしてみたい!」という方には非常に使いやすいソフトだと思います。ぜひ使ってみてください
次の記事ではさらに簡単なPLC・ラダーのプログラムを2例ほど作って動作させています。よろしければご覧ください

コメント
CODESYSをラズベリーパイにインストールをするところでinstallを押し、runntime modeの選択までいくのですが、codesysがラズベリーパイを認識してくれません。なにか考えられる原因はありますか?
お世話になっております。ミソジです
一度「ネットワークスキャン」をしてみては如何でしょうか。
「Device」タブ⇒「通信設定」でPCの絵の上に「ネットワークスキャン」があります
そこでラズベリーパイがいるようでしたら選択してOKを押してもらえれば反応があるかもしれません。
返信ありがとうございます。kです。
ネットワークスキャンでラズパイを見つけたのですが設定したデバイスアドレスの168~ではないのですが大丈夫でしょうか?
また、ログイン後スイッチを押しても全く反応しないのですが何か原因がありますか?
大変興味深い内容でした。
ありがとうございます。
入力点数と、出力点数はそれぞれ何点まで可能ですか?
よろしくお願い致します。
管理人とミソジと申します。
コメントありがとうございました。
CODESYSのGPIOsパラメータを確認すると
GPIO4,17,18,22,23,24,25,27,28,29,30,31が使えましたので
ラズベリーパイだと入出力合計で12のようです
ありがとうございました。
ラズパイを触るきっかけになりました。
拝読して勉強させて頂いております。
GPIOマッピングでラズパイの持っているI/O(GPIO 2~27)がすべて表示されず、一部のみ表示されるのですが、これはCODESYSの仕様によるものでしょうか。
また、ラズパイ側に「GPIO 1」がない理由について知見お持ちでしょうか。
コメントありがとうございます。
管理人のミソジです。
>>GPIOマッピングでラズパイの持っているI/O(GPIO 2~27)がすべて表示されず、一部のみ表示されるのですが、これはCODESYSの仕様によるものでしょうか。
⇒はい、私のマップでもGPIO4,17,18,22,23,24,25,27,28,29,30,31でした。CODESYSの仕様と思われます
>>また、ラズパイ側に「GPIO 1」がない理由について知見お持ちでしょうか。
⇒あくまで予想ですが、ピンとしてではなく別のIFで使われているのではないでしょうか
古いラズベリーパイ1Bの回路図ならばオープンになっています
https://www.rs-online.com/designspark/raspberry-pi-schematics-revision-2-1
上記を確認するとGPIO1は「SCL0」として使われていてカメラモジュールのコネクタに繋がっていました
ご教示頂きましてありがとうございます。
大変勉強になりました。
はじめまして。ラズパイ初心者でこちらで勉強させていただいています。
gpioは5から16までは使えないのでしょうか?
今使用中の拡張ボードが、5,6にスイッチがついているので活用したいのですが。
方法、わかりましたら、よろしくお願いします
お世話になっております。
管理人のミソジです。コメントありがとうございます。
>>今使用中の拡張ボードが、5,6にスイッチがついているので活用したいのですが。
>>方法、わかりましたら、よろしくお願いします
⇒私も使いたいのですが、おそらく出来ないかと思われます。
CODESYSのGPIOを確認するとGPIO4,17,18,22,23,24,25,27,28,29,30,31でした。
仕様と思われます。
どうかよろしくお願いします
このまま、GPIOの使用可能点数が少ないと使い勝手が悪いと思い、悪あがきしていたところ、下記のような記述を見つけました。
私は初心者なので、すぐには理解、実践できないのですが、下記の記事を参考に、管理人さんのお力で何とかならないでしょうか?
https://forum.codesys.com/viewtopic.php?t=5832
お世話になっております。
管理人のミソジです。コメント・連絡ありがとうございます。
調査して使えるようになりました。下記に方法をまとめましたのでご覧ください
https://misoji-engineer.com/archives/codesys-gpio.html
お世話になります。
codesys+ラズパイをこれから試してみようと考えている初心者です。
PCにてラダーの編集を行って、ラズパイへダウンロードした後は、
PCとの接続がなくても、ラズパイ単独でGPIOの制御やEther系のフィールドバスのマスタとして動作できるのでしょうか?
お世話になっております。
管理人のミソジです。コメント・連絡ありがとうございます。
はい、一度ダウンロードした後はラズパイ単独で動作が可能です。
お世話になります。
大変参考になりました。ありがとうございます。
ラズパイにCODESYSをインストールまではできたと思われますが、
表示されるデバイス側のランプが灰色のままです(緑色にならない)。
GATEWAY のランプは緑色です。
SYSTEM INFO にはラズパイの詳細情報が表示されます。
何か操作が足りないのでしょうか?
お世話になっております。管理人のミソジです。
>>表示されるデバイス側のランプが灰色のままです(緑色にならない)。
⇒下記2パターンでランプが緑色になるか確認していただけないでしょうか
・画面の左上にある「ネットワークスキャン」をクリック⇒raspberrypiを選択してOKを押す
・もしくはランプが灰色の下にあるIPアドレス箇所にIPアドレスをもう一度打ち込みEnterを押す
大変お手数ですがどうかよろしくお願いします
御回答ありがとうございました。
・「ネットワークスキャン」をクリックしてみましたが、raspberrypiが出てきません。
・IPアドレス(192.168.0.10)を直接入力してENTERを押してみましたが、「スキャン要求に反応するデバイスがありません」から変わりません。
他に考えられる対策がありましたら、大変お手数ですが御教示願います。
大変お世話になります。
raspberrypiは認識されるようになりましたが、ログイン後のデバッグがうまくいきません。
「オンライン」→「ログイン」でDEVICE接続完了にはなりますが、運転ボタンを押していないのに運転状態に入ってしまいます。そこでスイッチを押してもラダーは動作しません。
しばらくすると、「デバイスへの接続がありません。ネットワークを再スキャンしてください。」が出ます。
また、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」と出ることもあります。
GPIOマッピングなどは手順通り行っており、配線も間違いはないと思われます。
何か確認すべき点などあれば、大変お手数ですが御教示願います。
IKEDAさんは問題を解決されたようですが、どうやって解決されたのでしょうか?
私もまったく同じ問題が起きていて解決できずに困っています。
・System Infoの取得はできています。
・RuntimeのStartを押しても"codesyscontrol already running"が出てきますのでRuntimeは動いているようです。
・Deviceでネットワークスキャンを押してもraspberrypiは出てきません。
・IPアドレスを直接入力してENTERを押してみても「スキャン要求に反応するデバイスがありません」が返ってきます。
・ラズパイ側はPortの4840のファイアウォールを開けてあり、TCPのコネクション確立できるのを確認しました(netstatで4840をlisten状態にあることも確認した)。
OSの再インストールからラズパイ側をまっさらにしてやりなおしたらraspberrypiを検出できました。LEDの点灯までできました。
ハマった
https://forge.codesys.com/forge/talk/Runtime/thread/4d43247a3a/
sudo rpi-update e1050e94821a70b2e4c72b318d6c6c968552e9a2
ハマった問題があって解決しましたの参考情報として投稿致します。
Raspbian OS を最新にアップデートするとPi側 Runtime の codesyscontrol が
30秒で終了してしまうため、古い状態に戻することで復旧しました。
(codesyscontrol が起動していないと「スキャン要求に反応するデバイスがありません」に
なってしまいます)
情報元はこちら
Latest Raspberry Pi Update Breaking CODESYS 3.5.16.0
https://forge.codesys.com/forge/talk/Runtime/thread/4d43247a3a/
# 古い状態に戻すコマンド
sudo rpi-update e1050e94821a70b2e4c72b318d6c6c968552e9a2