9月号特別企画「ラズパイでPLC」 第6章 OpenPLC のインストールやWi-Fi ルータ化プログラムを ラズベリー・パイで動かす

前章:第4章 リレーによる1 ビット記憶回路を例に初めてのラダー・プログラム
https://interface.cqpub.co.jp/raspi-plc-2020-09-2/

 本章では,第5章で入力したリレーを用いた1ビットの記憶保持プログラムをラズベリー・パイで実行する方法について紹介します.

写真1 準備…Raspbian を立ち上げる際にキーボードと液晶ディ
スプレイを接続した


<流れ>
・ラズベリー・パイにOSやOpenPLC Runtimeをインストール
・OpenPLCの動作確認
・ラズベリー・パイのWi-Fiルータ化
・PCからラズベリー・パイに転送するプログラムを作成
・ラズベリー・パイに転送

ラズパイにOSやOpenPLC Runtimeをインストール

● RaspbianとWin32 Disk Imagerをインストール

 最初に,ラズベリー・パイに基本ソフトウェアのRaspbianをインストールします.Raspbianの立ち上げの具体的な手順は多くのウェブなどで紹介されているので,ここでは簡単に解説します.筆者が使用したのは,2019-04-08-Raspbian-stretchというバージョンです.このバージョンは執筆時点で既に2つほど前のバージョンになっています.
 まずは,ファイルをウェブ注1からダウンロードしてインストールします.このウェブの下の,2019-04-08-Raspbian-stretch.zipをダウンロードして解凍します.解凍した4Gバイトほどのイメージ・ファイルを,Win32 Disk Imager注2というソフトウェアを使ってmicroSDカードに焼きます.筆者は手近にあった32GバイトのSDカードを使いました.確認はしていませんが,最低8Gバイト程度あれば動くと思います.

▶注意…SDカードに書き込むときは他のデバイスは外す

 microSDカードに書き込むときは間違いを避けるためにターゲットのmicroSDカード以外のUSBメモリなどは全て外しておいた方がよいと思います.筆者は同時に挿していた別のUSBメモリの中身をパーにしてしまったので,ご注意ください.

● Raspbianの立ち上げ手順

 Raspbianの立ち上げに際し,筆者は写真1のようにキーボードと液晶ディスプレイを接続しました.今回は最後にラズベリー・パイをWi-Fiルータとして立ち上げ直すのですが,その際にRaspbianの立ち上げやOpenPLCのダウンロードを同じWi-Fiで行っている場合,これらに使ったもともと(外部)のWi-Fiルータとの接続を切断したりと煩雑な作業をしなければなりません.慣れない方はSSHなど文字ベースではなく,GUIのほうが間違いが少ないと思います.
 図1はRaspbianの立ち上げの手順を簡単に示したものです.初心者の方がここでつまずいて機会を逸してしまうのも残念なので,解説を入れておきます.
 有線LANでネットにアクセスできる場合は関係ないですが,Wi-Fiでネットワーク・アクセスしなければならない場合は,⑧でWi-Fiをつないでネットワーク・アクセスを確立しておいた方がよいと思います.
 一通り初期設定を終えてRaspbianを立ち上げた後,OpenPLC Runtimeのインストール作業に移ります.

注1:http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-04-09/
注2:ダウンロードURL.
https://sourceforge.net/projects/win32iskimager/

<パソコンでの作業>

①http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-04-09/ からダウンロードした
RaspbianのZipファイルを解凍してイメージ・ファイルを得る
②ダウンロードしたイメージ・ファイルを,Disk Imagerを使ってmicroSDカードに書き込む
< ラズベリー・パイでの作業>
③microSDカードをラズベリー・パイ3B+または4に挿して,ディスプレイ,キーボード,マウス,ACアダプタを接続して
電源を入れる
④初期画面はそのまま[Next]ボタンを押す
⑤国地域設定はJapanとJananese,Tokyoを選択
⑥ログイン・パスワードは空白のまま[Next]ボタンを押す
⑦Set Up Screen 画面では,そのまま[Next]ボタンを押す
⑧Select WiFi Network では接続先SSIDとパスワードを入力する
⑨Update Softwareは[Skip]ボタンを押す
⑩LXTerminalで,sudo raspi-configを実行して,Advansed Options → Expand File System…でファイル・システムを拡張する

図1 ラズベリー・パイにRaspbianを導入する手順

図3 ラズベリー・パイ上でChromium を起動しOpenPLC
サーバに接続
起動したChromiumに127.0.0.1:8080を入力して表示

● OpenPLC Runtime のインストール

 ここからはしばらくLXTerminalでの作業になります.作業の流れを図3に示します.

▶ラズベリー・パイ4を使用する場合の対応

 ラズベリー・パイ4を使用する場合は,ラズベリー・パイ3用に作ったmicroSDカードをそのまま挿しても起動しません.そこで,図1の①において,「http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2020-02-14/」を選択します.その後,図1②以降の手順,図2の手順を最後まで実行します.ここまででWi-FiルータやOpenPLCサーバは動きますが,このままではラズベリー・パイ4のGPIOは動きません.また,入出力も全く動作しないので下記のコマンドを実行し,WiringPi注3の最新版をオンラインでインストールします.

cd /tmp
wget https://project-downloads.
drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

インストールが終わったら,
GPIO -V

を実行してバージョンの確認ができます.バージョンがV2.52以降であればOKです.これで再起動するとGPIOが動作するようになります.
 なお,ラズベリー・パイ3で構築したmicroSDカードはラズベリー・パイ4上では動きませんが,ラズベリー・パイ4上で上記のように構築したWiringPiの最新版をインストールしたmicroSDカードは,そのままラズベリー・パイ3やラズベリー・ゼロに挿しても動作します.

注3:WiringPiのウェブ・サイト.
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b

<ラズベリー・パイ上で>
①LXTerminalを立ち上げる
<以下,LXTerminal上で>
②Raspbianのシステムを最新にする
sudo apt-get update
sudo apt-get upgrade
③git コマンドをインストールする
apt-get install git
④OpenPLC をダウンロードする
git clone https://github.com/thiagoralves/
OpenPLC_v3.git
⑤OpenPLCをインストールする
cd OpenPLC_v3
./install.sh rpi
⑥インストールが終わったら必ずリブートする
sudo reboot

図2 OpenPLC Runtimeのインストール手順

OpenPLCサーバの動作確認

● ラズパイ上でOpenPLCサーバが動いているか確認

 確認は,ローカル環境でRaspbianにバンドルされているブラウザのChromiumを使って行います.手順を以下に示します.

▶ 1,Chromiumを起動する

 ショートカットを起動してChromiumを起動します.

▶ 2,IPアドレスを入力してサーバに接続

 127.0.0.1:8080と入力し,OpenPLCサーバに接続します.この中のIPアドレス,127.0.0.1は自分自身(Raspbianが走っているラズベリー・パイ)を指すアドレスで,8080はOpenPLCサーバのポート番号です.これらを,127.0.0.1:8080として呼び出すと自分自身(Raspbian)のOpenPLC サーバをブラウザが呼び出して表示します.

▶ 3,ユーザ名とパスワードを入力

 サーバの呼び出しが成功すると,ログイン窓が表示されます.デフォルトのユーザ名「openplc」とデフォルトのパスワード「openplc」と入力してloginをクリックします.

▶ 4,Dashboardの表示を確認

 最後にサーバのDashboardが表示されるのを確認します(図3).ここまで進めば,サーバは正常にインストールされています.確認作業はここまでです.本番はOpenPLC Editorが入っているパソコンからこのサーバに接続してプログラムの転送や各種設定を行います.

ラズパイのWi-Fi ルータ化

● パソコンと直につながるのがメリット

 ラズベリー・パイをWi-Fiルータ化すると,パソコンから直接ラズベリー・パイに接続できます.屋外で作業を行う場合に重宝します.また,ラズベリー・パイのWi-FiルータにSSHで接続して,Raspbianの変更なども簡単にできるので使ってみると意外と便利です.さらに,

・接続はパソコンのWi-Fiアイコンをクリックして,表示される一覧の中の名前をクリックするだけ.
・呼び出し用のアドレスも192.168.XXXX.1(XXXXは事前に決める任意の数字)なので忘れることも少ない.
・ラズベリー・パイを複数台OpenPLCとして使う場合は,ルータ名をOpenPlc1,OpenPlc2などとすることで,それぞれを簡単に識別できる.
といったメリットもあります.

● 4 つの設定ファイルを作成/編集する

 Wi-Fiルータ化はOpenPLCをインストールする際に使った,LXTerminalで行います.この手順を図4に示します.筆者はnanoエディタを使用しましたが,使い慣れたものがあれば,適宜読み替えてください.
 簡単に内容を説明すると,dnsmasqとhostapdという2つのサーバを導入することと,4つの設定ファイル(リスト1〜リスト4)を編集することです.編集内容は,4つのファイル合わせて20行程度です.合計で1時間もあれば完了できる作業だと思います.
dhcpcd.conf(リスト1)とhostapd(リスト3)は,元ファイルに書き加えます.
dnsmasq.conf(リスト2)は元ファイルをリネームして,新たに作成します.
hostapd.conf(リスト4)はもともとファイルがないので新たに作成します.

①dnsmasqとhostapdをインストールする
sudo apt-get install dnsmasq hostapd
②それぞれのサーバを止める
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
③/etc/dhcpcd.conf をdhcpcd.conf.org にコピーし,
dhcpcd.conf を編集する
cd /etc
sudo cp dhcpcd.conf dhcpcd.conf.org
sudo nano dhcpcd.conf
→リスト1 のようにdhcpcd.conf を編集する
④/etc/dnsmasq.conf をdnsmasq.conf.org に
名前を変更し新たにdnsmasq.conf を作り編集する
cd /etc
sudo mv dnsmasq.conf dnsmasq.conf.org
sudo nano dnsmasq.conf
→リスト2 のようにdnsmasq.conf を編集する
⑤/etc/default/hostapd をhostapd.org にコピーし
編集して1 行追加する
cd /etc/default
sudo cp hostapd hostapd.org
sudo nano hostapd
→リスト3 のようにhostapd を編集する
⑥/etc/hostapd/hostapd.conf を編集して作る
cd /etc/hostapd
sudo nano hostapd.conf
→リスト4 のようにhostapd.conf を編集する
⑦Wi-Fi 接続を確認して他のルータとつながっている場合は 切断する(その際にWi-Fi をOFF にしない)
⑧サーバを起動する
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasq
⑨システムを再起動する

図4(1) ラズベリー・パイをWi-Fi ルータ化する手順

● 外部ルータとの接続を切ってWi-Fi接続を確認する

 作業が終わったらWi-Fi接続を確認し,外部のルータと接続しているようなら切断します.このときに切断するのは外部ルータとの接続だけです.Wi-FiそのものをOFFしてはいけません.
 次に図4の⑧のようにサーバを1つ1つ起動していきます.このときに,エラー表示(failureやerror)が出なければ正常です.エラー表示が出るようであれば編集したファイルに間違いがないかよく確認します.
 また,Wi-FiがOFFになっていないことも確認します.

● Wi-Fiルータを認識しないときの対処法

 Wi-Fiルータの設定をして再起動や電源による立上げを繰り返すと,Wi-Fiルータの識別名(OpenPlc1やOpenPlc4など)がターミナル用パソコンのWi-Fi一覧に見えたり見えなかったりする,という現象を示しました.
 そのような個体は,Raspbianが立ち上がった後にWi-FiをOFFからONにすると安定してWi-Fi一覧に表示されますが,もしラズベリー・パイの電源を繰り返し入れ直したときにWi-Fi一覧に見えたり見えなかったりする場合は,以下の手順で/etcの中身を変更します.
1, /etcの中にリスト5のようなWifiRestart.shを作ります.
2, ターミナル上で“crontab -e”でcrontabの設定を編集します.初回は編集に使用するエディタの一覧が出るので,使い慣れたエディタを選択すると設定が表示されます.ちなみに,筆者はnanoエディタを使用しています.
3, 図5に示すようにcrontab設定の最下行に以下を記述します.記述後は,ファイルを保存してエディタを閉じます.
@reboot sh /etc/WifiRestart.sh

図5 Wi-Fi ルータを認識しないときの対処法
crontab 設定の最下行に1 行記述して保存しエディタを閉じる

リスト1 Wi-Fiルータ化で編集するファイル1(dhcpcd.conf)…最後2行を追加する

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
#追加
interface wlan0
static ip_address=192.168.100.1/24

Wi-Fi ルータのゲートウェイ・アドレス.アドレスが不都合な場合は下線の100を0〜255の範囲で変更する

リスト2 Wi-Fiルータ化で編集するファイル2(dnsmasq.conf)…元ファイルをリネームして新たな2行記述

interface=wlan0
dhcp-range=192.168.100.2,192.168.100.40,255.255.255.0,24h

192.168.100.2〜40をルータが,それぞれに割り当てる.
dhcpcd.confでIPアドレスを変更した場合は100をdhcpcd.confと同じにする

リスト3 Wi-Fiルータ化で編集するファイル3(hostapd)…中ほどの下線1行を追加する

# Defaults for hostapd initscript

#
#DAEMON_CONF=””
DAEMON_CONF=/etc/hostapd/hostapd.conf #追加
# Additional daemon options to be appended tohostapd command:-

#
#DAEMON_OPTS=””

リスト4 Wi-Fi ルータ化で編集するファイル4(hostapd.conf)…元ファイルがないため新しく12 行記述

interface=wlan0
driver=nl80211
ssid=OpenPlc1
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=OpenPlc1

OpenPlc1:Wi-Fiルータ名,wpa_passphraseはパスワード.複数台のラズベリー・パイを使用する場合はそれぞれ固有のものに書き換える.パスワードは半角英数と半角-,半角_ が使える.文字列長さは最低8文字

リスト5 WifiRestart.shの中身

sleep 5
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
sleep 5
sudo systemctl start hostapd
sudo systemctl start dnsmasq

ラズパイにアクセスして設定を変更する

 既に動作しているラズベリー・パイのOpenPLCサーバに,外部のパソコンからIP接続でアクセスして設定などを行います.IPアドレスは,筆者の場合ラズベリー・パイのWi-Fiルータに接続するので192.168.100.1を使った解説となりますが,それぞれ各自のIP アドレスに読み替えてください.

● OpenPLCサーバにログインしPLCを設定する手順

▶ 1,ラズパイの起動

 まずは,ラズベリー・パイを起動します.

▶ 2,Wi-Fi一覧からルータ名を探して接続

hostapd.conf(リスト4)のSSIDで設定したWi-Fiルータ名を探して接続します.接続がラズベリー・パイのWi-Fiルータの場合は,Wi-Fiルータ名の一覧から,hostapd.confのSSIDで指定したルータ名を選び接続をクリックします.
パスワードは同じくhostapd.confのwpa_passphraseで設定したものです.

▶ 3,ブラウザを使ってサーバを呼び出す

 Wi-FiまたはLANの接続が確立したらブラウザを立ち上げて,ブラウザにIPアドレス[Wi-Fiルータの場合はdhcpcd.conf(リスト1)のstatic ip_addressで指定したもの]とポート番号を,192.168.100.1:8080のように(: コロン)で区切って指定すると,OpenPLCサーバのログイン窓が表示されます.ユーザ名とパスワードは,動作確認のときと同じ「openplc」です[図6(a)].

▶ 4,Dashboard画面が表示されるのを確認

 ログインが成功すると図6(b)のようなDashboard画面が表示されます.Dashboard画面はラダー・プログラムが走行中か否かをRunとStoppedという表示で表します.また,Runに関するログを画面下のエリアに表示します.このログは[copy logs]ボタンをクリックするとクリップボードにコピーできます.

▶ 5,使用するハードウェアを選択する

 画面左のHardwareをクリックして図6(c)のHardware画面を表示させて,OpenPLCに使うPLCの設定をします.具体的には,画面右中ほどにあるOpenPLC Hardware Layerのドロップ・ダウンをクリックして,ラズベリー・パイを選択し,画面下の[Save Changes]ボタンをクリックすると,コンパイル作業が始まります.

▶ 6,Dashboard画面に戻る

 コンパイルが無事に終了したら[Goto Dashboard]ボタンを押してDashboard画面に戻ります.この後,念のためにもう1度Hardware画面に戻ってドロップ・ダウンにラズベリー・パイが表示されていることを確認します.
ここまでで外部パソコンからラズベリー・パイ上のサーバにアクセスして設定を変更することができました.

図6 外部からOpenPLC サーバにアクセスしてPLC を設定する
手順

1ビット記憶保持プログラムをラズパイに転送する

 第5章でOpenPLC Editorに入力したリレーの1ビット記憶保持プログラムをラズベリー・パイに転送して走らせます.OpenPLC Runtimeがターゲット上で走れば,ラダー・プログラムを転送して実行させることができるようになります.転送するにはまず,ラダー・プログラムをコンパイルして転送用のファイルを作る必要があります.

● 手順

▶1,ラダー・プログラムをコンパイルして転送用のファイルを作る

 図7(a)のようにOpenPLC Editorにtest1のプロジェクトを読み込んでツール・バーのコンパイル・ボタンをクリックしてtest1を転送用にコンパイルします.コンパイルが始まる前には,ファイル・ダイアログでファイル名を要求されます.ファイル名は任意ですがここでは,混乱を避けるためにtest1とします.
 コンパイルが成功するとtest1プロジェクト・フォルダの中にtest1.stというファイルができます.

▶ 2,転送するファイルを指定

 コンパイルが完了したらOpenPLCサーバのProgramのファイル選択ボタンで転送ファイルを選択します[図7(b)].転送の際には,OpenPLCのサーバでこのtest1.stというファイルを指定して転送を行うことになります.
 図7(c)のようにOpenPLCサーバにプログラムを複数登録することもできます.登録されているプログラム名をクリックするとプログラム・インフォメーション画面が表示されます.ここで,[Reload Program]ボタンをクリックすると実行プログラムを選択されているものに変更できます.[Remove Program]ボタンをクリックすると選択されているプログラムを削除できます.

▶ 3,転送する

 転送前に,図7(d)の画面で登録名を半角英数文字で指定する必要があります.また,Descriptionの欄にプログラムの説明を書くことができます.ここには日本語を使うことができます.説明が不要ならば空白でも構いません.
次に,[Upload Program]ボタンで転送を開始します.転送中は,コンパイル経過が表示されコンパイルが成功した場合は最下行に,「successful」の表示が出ます.そこで,[Go to Dashboard]ボタンをクリックすることでDashboard画面に戻ります.

図7 ラダー・プログラムをラズベリー・パイに転送する手順

● Start/Stop PLCボタンでプログラムのRun/Stopを制御する

 プログラムのRunとStopの切り替えは,図8(a)のように[Start/Stop PLC]ボタンをクリックすることで行います.
 このボタンはRunningの間は[StopPLC]表示になり,Stopの間は[Start PLC]表示になります.プログラムのRunningやStopの状態は図8(a)のようにDashboard画面で確認ができます.
 Dashboard画面には現在選択されているプログラムとその説明(Description),そして実行時間が表示されます.また,プログラムを実行している間はMonitoringに表示を切り替えるとリレーや変数,入力などプログラムで使っているもののモニタができます[図8(b)].特に 入力の状態は,簡単なダミー・プログラムを作成し実行することで,アナログ入力を含めた状態がモニタできるので,しきい値を決めたりするために活用できます.

● ラズパイ起動時Runを有効にする方法

 以上でパソコン上のブラウザからプログラムを走らせることはできましたが,このままではラズベリー・パイを立ち上げ直したらプログラムは停止してしまいます.そこで,サーバの設定でラズベリー・パイのスタート時にプログラムが走るように設定を変更します.設定の変更は,図9のようにSettings画面に入り,「Start OpenPLC in Run mode」にチェックを入れて[Save Changes]ボタンをクリックしてSettings画面を抜けます.
 Start OpenPLC in Run modeでRunning状態のラダー・プログラムは,モニタリングしようとしても何も表示されないことがあります.このようなときは,いったんプログラムを止めてProgramsに入り,モニタリングしたいプログラムをクリックして[ReloadProgram]ボタンでプログラムをリロードしてからプログラムをRunしてください.

図9 起動時Run を有効にするにはSettings 画面に入る手順

図8 転送したラダー・プログラムを実行する

▪参考文献▪
(1) RaspberryPiでルーターを自作し無線AP化,@wannabe.
https://qiita.com/wannabe/items/a66c4549e4a11491f9d5

今関 雅敬(Interface2020年9月号 pp.136-142より転載)