PLC IEC61131-3 ラズパイ・ArduinoでFAを?<その1>OpenPLC+ラズパイ

IEC61131-3 PLC
DSC_0647

OpenPLCエディターとTuntimeをインストール・・・(手抜きです)

とりあえずはパソコンにOpenPLCエディター、ラズパイにそのRunTimeをインストールです。パソコンへのインストールは簡単!!。雑誌「ラズパイでPLC・ハード&開発環境」の記載のまま下記アドレスで「JUST DOWNLOAD」で取得します。お気持ちあれば「CONTRIBUITE & DOWNLOAD」でお支払いを。

Download – Autonomy

ダウンロードした「OpenPLC Editor for Windows.exe」をクリックしてインストールすれば完了みたいです。この後はラズパイへのインストールですが、雑誌記載は2021年12月発刊なんで少し古くなっているようです。CQ出版社さんのHPで少し新しくした内容を得ることが可能な様です。下記アドレスになります。

書籍/連載 ラズパイでPLC サポートページ | Interface – CQ出版

まずは「RaspberryPi OSのセットアップ」でOSの作成です。必要なのはラズパイ基板(最新のものは結構高くて、入手困難みたいなんで手持ちのラズパイ3Bでやってみました)と「Raspberry Pi Imager」なるSDカードへのOS書き込みアプリケーションが必要です。ラズパイイメージャーは下記アドレスから取得可能です。

Just a moment...

ダウンロード、インストールでOSのSDカード作成可能です、サポートページではOSの「最新版(2021-10-30)」となっていますがもっと新しいものでインストールしました。ラズパイイメージャー起動後の「OSを選ぶ」で一番上に表示される「Raspberry Pi OS(32-bit)」です。これを選択してCQ出版社さんの手順で作成すればOKです。

SDカードをラズパイ基板に装着して(モニター・キーボード・マウス・イーサネットは接続しておきます)電源を投入するとセットアップになります。CQ出版社さんの情報ではログインパスワードはスキップになっていますが、最新のOSではスキップさせてくれないようですので「openplc」のID、パスワードでセットアップしました(最終的な起動は自動ログインされるみたいです)。
ラズパイの起動ができた後はラズパイ画面上のコンソールアイコンをクリックしてコンソールからCQ出版社さんの指示通り「WiringPiの最新版をインストールする」を作業します。
この後はさらに「ラズベリー・パイへのOpenPLC Runtimeのインストール」の指示に従ってRuntimeをラズパイにインストールして再起動で完了です。

OpenPLC + Raspberryで雑誌最初のプログラムを実行

パソコンでブラウザ開いて、「192.168.0.212:8080」(ラズパイでifconfig確認でwlan0は212でした)をアクセスすると下記画面がちゃんと出ました。

ユーザーネーム・パスワードは「openplc」でLOGINすると下記の様に実行環境が開きます。

さらにOpenPLCエディターを開いてラダー図を書きますと・・・

雑誌のサポートページ「OpenPLCによるラダー・プログラムの作成方法」の通りに作成したラダープログラムです。単純にSW1(実IO:%IX0.3)がONするとそれに同期してCR1がON、SW2(実IO:%IX0.3)がONすると同様にCR2がON。
このリレーコイルでCR1のONでCR3(実IO:%Qx0.0)が自己保持でONして、CR2のONで自己保持が解除されCR3がOFFするだけです。これをラズパイのRuntimeに書き込みます。

その前に実行されている環境をセットする必要があるみたいです。左タブの「Hardware」をクリックして「OpenPLC Hardware Layer」で「Raspberry Pi」を選択しておきます。下記画面はちいさいのでわかりにくいですが、画面下の方の赤いボタン「Save changes」をクリックしておきます。

クリックすると下記のようにコンパイルが現在の「Blank…」に対して実行され、下方に「Go to Dashboard」と表示されます。これをクリックして戻ります。ダッシュボードに戻った時点で、下記動画の様に作成プログラムをラズパイにアップロードして実行してみます。

動画での右側画面(ランプとスイッチ)は表題写真での制作したおまけ基板左側にあるUSBIO2基板です(入力16点、出力16点)の確認アプリケーションで、画面では上側2列が実装されています。最初の入力で1,5,6ビットがONしているのは・・・ラズパイの初期IO状態で、OpenPLCでプログラムが実行されて初めて初期化されるようです。(サーバー起動時ではないみたいで・・・実際に使うときはどうなんでしょう??起動直後にラダープログラムを実行させる機能はあるようですが、OS起動時に少し出力されてしまいそうで・・・一応ラダーのリレー回路は動作している様です。

OpenPLCでのArduinoUnoスレーブの構築

次はスレーブデバイスになるArduinoUnoにOpenPLCをインストールします。
雑誌の「OpenPLCのHP」での「GETTING STARTED」は現在見つかりませんでした(HPが更新されているようです)。下記アドレスのページでダウンロードします。

OpenPLC - Firmware: Platforms & Downloads Index

「Arduino Uno」の欄にある「arduino_uno.firmware.zip」をダウンロードです。
このZIPファイルを解凍して中にある「arduino_uno」フォルダーを適当な場所(Arduinoのドキュメントフォルダー等)にコピーします。そしてこのフォルダー名称を「OpenPLC_Uno」に変更します。フォルダー内の「OpenPLC_Uno.ino」をクリックしてArduinoIDEを開いて、このプロジェクトをおまけ拡張基板にセットしたUnoに書き込めばスレーブのできあがりです。スレーブとラズパイをUSBケーブルで接続して、OpenPLCのダッシュボードから「SlaveDevice」をクリックして下記の様に設定すればOKです。(ここは雑誌とおなじです)

「Add New Device」をクリックして

上の「DeviceName」(適当に)、「DeviceType」(ArduinoUnoを選択)で後はそのままです。
下のほうにある「Slave device」のボタンをクリックすればOKです。

登録されました。

OpenPLC ラズパイ+UNO ボード入出力の確認(IOチェック)

入力と出力の確認をしてみたいと思います。入力はスレーブも含めて「%IX0.0~1.5、%IX100.0~100.4」まで19点、出力は「%QX0.0~1.2、%QX100.0~100.3」までの15点あります。ただ確認する相手側のボード(USBIO2)が16点づつしかありませんので、それに合わせます。残りは多分OKと言うことで・・・

チェックのプログラムですが、とりあえず各ビットごとに入力で出力をONする形にします。
また、ラズパイの場合「%IX0.0」と「%IX0.1」がビット反転してしまいますので、いったんバッファ受けしてプログラムで扱う入力は「%MX0.0~0.7、%MX1.0~1.7」に展開しておきます。ラベルは入力が「IN0~15」、出力は「Out0~14」と設計します。

1:プロジェクトを保存するフォルダーを作ります。
OpenPLCエディターをインストールした際に作成される「ドキュメント」の「OpenPlcProject」フォルダーがいいと思います(適当につくるとWindowsのセキュリティで少し怒られます)。
この中に作成したいプロジェクトの名称でフォルダーを作成します。「RaspberryPiPLC」にしました。

2:OpenPLCエディターで「ファイル」>「New」でフォルダー選択のダイアログが開きますので、作成したフォルダーを指定します。

3:下記のダイアログ表示がありますので、Languageに「LD」を選択してOKします。

画面はこんな感じで表示され、プロジェクトは作成されました。

4:左上プロジェクトタブの一番上の名称は「RaspberryPi」に変更しました。
ここをダブルクリックすることでグローバルラベルを定義できます。とりあえず各プログラムで扱う入力のイメージ(%MX…)と実出力を定義しました。

5:ラズパイでは「%IX0.0」と「%IX0.1」が論理反転していますので、先頭プログラムを「InBitInterface」として実入力(%IX…)を入力イメージ(%MX…)にインターフェースします。
ここでのラベル定義は実入力「in_0~15(Local)」とイメージの「IN0~15(External)」になります。
回路は最初のin_0・in_1をB接点(Negated)で反転させました。

6:プログラムの2つ目は名前は「InOutChk」として回路の最後は出力が一つ足りませんので、入力のORで仮のリレー(ラベル:TempRy)をおいて、そのリレーで出力をONします。仮のTempRYはそのままOut14を書いてもいいのですが、ちょっとClassの「Temp」の実験で使ってみました。
別に実デバイス(Location)を定義しなくても適当に何かを割り付けてくれる様です。

7:最後にリソースの状態(Res0をダブルクリック)ですが、Tasksは「task0」のままで、Instances項目に「Instance0>InBitInterface」、「Instance1>InOutChk」とプログラムを指定しています。

8:後はアイコンの下方向矢印「Generate Program for OpenPLC Runtime」をクリックすると実行ファイルが生成され、下記のダイアログが開きますので、「InOutChk」で保存します。

9:このファイルをラズパイのRuntimeで実行すると下記の様に動作します。
確認はRuntimeのダッシュボードにある「Monitoring」で出力をモニターしながらラズパイの入力端子を「-COM」に短絡していけば確認できると思います。

<その1>のまとめ・・・

以上でとりあえずラズパイPLCのハードチェック(入出力だけですが)が出来上がった状態です。このプログラムにほかいろいろ追加してみたいと思います。使ってみた感じでは思いのほか難しいかもしれませんね。まずラベルの定義手続きが、ラダー回路の入力が、・・・結構手間です。
またIEA61131-3ではもう昔のラダーではなく、ほとんどC++なんかのテキスト言語に近くなっちゃっている感じです(オブジェクト指向らしいです)。制定されてもう10年ほど経過する様ですが、まだFAではそんなに普及していないような・・・気がします。
もう一つの無償に近いレベル(登録は必要の様ですが)の「CODESYS」ではOnLineのHelpを見ていると・・・Basic、C++、C#等々より難しいかも・・・でした。
ほかの選択肢は「ArduinoPLC」がありますが、これはハードが専用のものを購入してライセンス取得になるようなので・・・コスト高かも。
ハードが低価格なのは多分「ArduinoMEGA2560+OpenPLC」でしょうか・・・・
そのうちMEGAも確認したいと思っています。ついでにできればMEGA用のIOボードも・・・
「CODESYS」も触ってみる必要ありですネ。

                         <その2>に続きます・・・店主

「RaspberryPiPLC」のここまでのプロジェクトは下記ZIPファイルです・・・

https://yorozukosiraeya.eek.jp/DL/OpenPLC_Src1.zip