United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

PYTHON言語でオートメーション制御を: パート2

パート1では、ハードウェアのセットアップについて説明してきた。RevPiプロジェクトの特性は「オープン」なので、インターネットからいくらでも素材をダウンロードできる。しかし、この汎用性の裏返しで、プロジェクトの90%を占めるこれらのサードパーティ製部品をすべてインストールしてセットアップする必要がある。この記事では、私の友人のSven Sager氏が作成したライブラリ「REVPIMODIO」を使用してみよう。これでIOアクセスが非常に簡単に行える。さらに彼の「PEVPIPYPLC」ライブラリを使えばMQTTアクセスも簡単にできる。ある程度の忍耐が必要だが一歩ずつ進めていこう。

まず最初にRevPiのファームウェアをバックアップし、次に最新のファームウェアアップグレードを入手してインストールしよう(この記事を参照)。ここでは私の「ベイビー」(私がRevPi製品を設計し、ハードウェアを開発したので)で作業する際の、私のやり方とコツを紹介しよう。

私は、HDMIモニタとキーボードなしの「ヘッドレス」モードでデバイスを使用するのが好きだ。なので、12~24V(DC)電源と、LANスイッチにつながっているRJ45ネットワークケーブルだけを接続する。RevPi Coreは出荷時設定でDHCPモード(DHCPサーバー/スイッチから不明なIPを取得)になっているので、「advanced IP scanner」(こちらで無償ダウンロード)をパソコンで使用し、IPを特定する。

image0131_f5af640adcf3ed8358fc47cd6263aba965f0c3f2.jpg

今回のケースで取得したIPは192.168.0.241だった(ローカルネットワークに複数のRevPiがある場合は、[MAC]か[Name]を確認してほしい。MACと名前の番号部分はどちらもオレンジのフロントプレートに記載されている)。

次にWindows PCのPuTTY (こちらで無償ダウンロード)でRevPiにSSH接続する(ポート22に接続)。RevPiではSSHがデフォルトで有効になっているため、Linuxプロンプトが表示されるはずだ。

image015_bb86ee8f6f7c95e424434f6459b95eb173455153.jpg

RevPiのケースの側面に貼付されているラベルに記載のシェルユーザー名を使用する。デフォルトでは「pi」だ(Linuxは大文字と小文字を区別する)。パスワードは、デフォルトで、内部シリアル番号からハッシュアルゴリズムを使用して一意のものが生成される。パスワードもラベルに記載されている。デフォルトではRevPiのキーボードレイアウトはドイツ語である点に注意が必要だ。「z」と「y」の位置が英語キーボードの位置と入れ替わっている。

ログインするとLinuxプロンプトが表示される。私のRevPiでは次のようになった。

image017_73264d8e787a61092a539dd6f1e1685091f2d360.jpg

前述のSven Sager氏の両ツールは、KUNBUSリポジトリからインストールできる。これによりインストールは非常に簡単になる。シェルコマンド「sudo apt update」を入力してパッケージリストを最新にし、次に「sudo apt install python3-revpimodio2」を入力する。次に「sudo apt-get install revpipyload」でもう1つのツールをインストールする。

revpipyloadツールを使用すると、Python「PLC」をイーサネットからリモート制御できる。このツールはXML-RPC (「Extensible Markup Language Remote Procedure Call」)を使用するので、アプリの設定を編集して、RevPiのXML-RPCサーバーを有効にする必要がある。シェルコマンド「sudo nano /etc/revpipyload/revpipyload.conf」を入力し、セクション[XMLRPC]を編集して、「xmlrpc = 0」の行に「xmlrpc = 1」を上書きする。Linuxに不慣れな方向けの注意事項だが、これはGUIモードにする前のRevPiのコマンドラインエディタだ。WindowsのGUIで使えるマウスはまだ役に立たない。キーボードの矢印キーを使用して、編集する行に移動する必要がある。編集後はCtrl + Xキーを押してコマンドラインエディタを終了し、変更をファイルに保存が必要だ。

image019_d175a57bc99fc8a359e4b54127b885038b6b6566.jpg

RevPiのXML-RPCサーバーにアクセスするためのパーミッションを設定する必要がある。設定ファイル「/etc/revpipyload/aclxmlrpc.conf」でパーミッションレベルと併せてIPマスクも追加する必要がある。私の例では、パーミッションレベル4 (最高レベル)でWindows PCのIPを追加するので、シェルコマンド「sudo nano /etc/revpipyload/aclxmlrpc.conf」を入力し、下の画面の行を追加する。

image0211_174d563f78ecb92551751926e8416333a9e11903.jpg

Pythonソフトウェアを書いたりデバッグしたりするときにRevPiのGUIが必要になる。HDMIモニタ、USBマウス、USBキーボードを使用するか、パソコンからリモートデスクトップアクセスを使用する必要がある。前述のように私はRevPiをヘッドレスモードで使用するのが好きなので、シェルコマンド「sudo raspi-config」で、プリインストールされている「VNC service」を有効にする必要がある。

image0232_51c04bd8b9f6e253c8d0ed80ffae469093e69c51.jpg

カーソルを5番の[Interfacing Options]に動かし、Enterキーを押すと次のようになる。

image025_cdf4541bbec05325cca4b85e8ae1344063b69441.jpg

[P3 VNC]を選択して、Enterキーを押します。次の画面で[Yes]を選択してVNCを有効にする。すると、「VNC Server is enabled (VNC Serverが有効になりました)」というメッセージが表示される。

image027_8bf071f196c990df4fda56fc7c414fac50e172ca.jpg

RevPiがGUIモードで起動するようにしたいため、[OK]でこのメッセージを承認し、次に[3 Boot Options]を選択する。起動のサブメニューが表示されたら、[B1 Desktop/CLI]を選択し、次に[B4 Desktop Autologin]を選択する。

image029_db67175a786e7ef7e2699f87aaaec59d782c9ddf.jpgimage030_d797dabb78fe8c1d4f7e27c36b04e225b505b13d.png

raspi-configを終了するには、[Finish]を選択する必要がある。システムから再起動を求められたら、[yes]を選択する。

システムが再起動すると、SSH接続は失われるので、30秒後にPuTTYウィンドウの上部を右クリックして、[Restart Session]を選択する。

パソコンにもVNC Viewer (こちらで無償ダウンロード)をインストールする必要がある。このアプリケーションをインストールしてから起動、RevPiのIPをアドレスとして入力し、RevPiに接続する。すると、RevPiのデスクトップGUIが魔法のようにパソコンのウィンドウとして開く。image0321_718dbbaf548fc100f0a5482ffc927735fd960701.jpg

RevPiのIOシステム(ドライバ)の設定には、RevPiのIPをFirefoxで開き、ブラウザベースの「PiCtory」を使用できる。しかし、RevPiのWebサーバーは最初にログインが必要だ。このときのデフォルトユーザーは「pi」ではなく「admin」である点に注意してほしい。パスワードは変更していない限り同じだ。

セキュリティについて一言:

本番環境のシステムではこれらの設定を絶対に使用しないで!

一切のログインなしてGUIで起動するのは、実験システムでは問題ない。しかし、本番環境のシステムは、一意の強力なパスワードで保護する必要がある。また、インターネット及びアクセスポリシーに問題があるLANに接続されていない、又は内部Webサーバーをオフにしておく必要もある。今のところ、「PiCtory」を実行するためにWebサーバーが必要だ。.

image0341_e81b312a999a2871fa3294e3991deac4ed8b094f.jpg

image036_05ac8dfbad9920c19ceb0e266c04bf5de2fd52cd.jpg

[APPS]タブの[PiCtory]行の[START]をクリックすると、この設定ツールが起動する。PiCtoryの使い方の詳細については、RevPi Webページのチュートリアルを参照してほしい。ここでは私のシステムに必要な簡単な説明に留めておく。DINレールに取り付けたRevPi Core、DIO、AOIモジュールについて順番どおりに説明する。

  1. [Base Devices]リストから空のシステムのスロット「0」に[RevPi Core V1.2]をドラッグアンドドロップ
  2. [I/O Devices]からCoreの右の空スロットに[RevPi DIO]をドラッグアンドドロップ
  3. そしてDIOモジュールの右の空スロットに[RevPi AIO]をドラッグアンドドロップ

この時点でウィンドウとDINレールは次のようになる。

image038_58748898cfb93af17bd2a524542f5dad47bb4778.jpg

いくつかの設定値は調整が必要だ。Value Editorで編集するために、AIOモジュールをクリックして選択する。RTD1セクションまでスクロールして値を次のように変更する。

image040_a3c5d1cefb9a95eb254bc4c28c5c4a164bc6005f.jpg

私は較正済みの4線PT100センサを使用したので、スケーリング値(乗数、除数、オフセット)はデフォルト値のままにしてスケーリングを無視する。温度値は°C * 10がプロセスイメージに格納される(25.4°Cのときに254)。しかし、除数値10を使用して直接°C値を取得をすると0.1の位が失われる(システムはプロセスイメージ内で2バイト整数を使用するため、精度が低くなる)ため、おすすめしない。プロセスイメージ内の値が格納されるアドレスは「RTDValue_1」という名前だが、これを「Temp10」に変更する(°Cの乗数10を示すため)。Sven Sager氏のツールでは、MQTTを使用して報告すべき値にはすべてチェックマークが必要だ。そのため[Export]のチェックマークを付けなければならない。

image042_43f1050bdac150338714c4d64897254cb0617964.jpg

次にDIOモジュールの設定に進む。モジュールをクリックして選択してほしい。Value Editorのチェックマーク列の一番上にある[Export]を右クリックして、コンテキストメニューを開き、[Check NONE]をクリックして、すべての値の選択を解除する。

image044_ee261342b954d570e6027965e185e8fa120d4186.jpg

次にValue Editorを使用して、出力「PWM_1」を「PWM_heater1」に、「PWM_2」を「PWM_heater2」に名前を変更し、画面ダンプにあるように出力タイプを変更する。

image046_7d100d5e8617d6d6d35eb93c17b39f6463273a71.jpg

出力1と2は[Highside Switch]タイプ(デフォルト)に設定されている必要がある。[Push/Pull]タイプではない。後者はFETスイッチに使用する。一方は出力を値0に対応するGNDに接続し、もう一方は出力を値1に対応する正のI/O供給電圧(通常24V)に接続する。しかし、このモードでは出力あたり100mAの電流制限がある。一方[Highside Switch]モードでは、正のIO供給電圧からGNDに500mAの電流を流し、出力値を1に設定できる。出力は0か1かのバイナリ値しか使用しない。[PWN active]に設定した場合のみ、符号なし整数値「PWM_n」が使用される。出力をPWMアクティブに変更するには、[OutputPWMActive]の値を変更する必要がある。この値はビットコードになっている。このワードの各ビットが1つの出力に対応する。ビット0は出力1を意味し、ビット1は出力2を意味し、以下同様である。設定ワードの値は全ビット値の2^n (nは出力の数)の合計です。このケースではかなり簡単で、出力1 (ビット0)と出力2 (ビット1)をPWMにする必要がある。2^0 + 2^1 = 1+2 = 3なので、3を設定ワードに書く。[OutputPWMFrequency]は最小値の40Hzのままにする。PWM分解能が最大の1%になるためだ。このためプロセスイメージのPWM_heater位置に50と書き込むと、出力1のデューティサイクルは50%になる。たとえば、値が12ならオン時12%、オフ時88%になり、オンパルス3ms、オフパルス22msになる。

この設定を保存し、システムのドライバにロードする必要がある。メニューから[File]、[Save as Start-Config]を順にクリックする。次に[Tolls]メニューの[Reset Driver]をクリックし、設定をドライバにロードして有効化する。これで3つのモジュールのすべてのLEDが緑色に点灯するはずだ。

RevPiPyControlソフトウェアのWindows PC側のアプリケーション、「RevPi PLC Control」という名前のPythonツール(こちらで無償ダウンロード)については、すでにダウンロードとインストールが済んでいる。このツールを使用すると、RevPiでPythonスクリプトを保存して自動的に開始するのが簡単になる。プロセスイメージのすべての現在の値にアクセスするためのGUIツールとしても便利だ。このGUIから値を設定することもできる。

image048_7b4dd3cce742e19c66fd5f41dafe582a048f86bb.jpg

[Main]、[Connections…]を順に選択し、名前とIPを設定して新しい接続を作成する。[Port]はデフォルト値の55123のままにする。[Apply]をクリックすると、新しい接続が左側のリストに入る。次に[Save]をクリックしてこの接続を保存する。メッセージボックスが表示されるので、[Yes]をクリックして同意する。

image050_2ae3260a117080de8c8f0f083adb6eb5b5c32bb8.jpg

[Connect]をクリックすると、新しい接続がリストに表示される。

image052_4a9560af02fc8a65467b976aba2cebe7a40d8e55.jpg

新しい接続を選択すると、パソコンは直ちにRevPiに接続される。赤で表示されるメッセージ「FILE NOT FOUND」(ファイルが見つかりません)は無視する。まだRevPiにPython PLCプログラムが保存されていないというだけだ。[PLC watch mode]をクリックすると、現在のモジュール設定([Devices of RevPi])を確認できる。たとえば、[RevPi AIO]をクリックすると、プロセスイメージのすべての値がリスト表示される。

image054_561f1d9b5b9e4357919372dcc25a92dd82a861ca.jpg

[Temp10]の値は402だ。これは私がオフィスで40.2°Cで焼かれていることを意味する(冗談だ)。[RevPi DIO]をクリックすると次のリストが表示される。

image056_8b9d9746807bb5fcf8f2268f5bd7d5a51056ebb9.jpg

[Autorefresh values]、[Write values to RevPi]をクリックしておくと、[PWM_heater1]に25を入力しても物理的な出力は変わる。警告メッセージが表示されるが、何をやろうとしているのか分かっていれば、[OK]をクリックして、[PWM_heater]に25を入力し、出力1のデューティサイクルを25%にする。オシロスコープの表示は次のようになる。

image058_b7ad675174bcca66b45d9f521a8c3345a4fe7599.jpg

ここまで沢山のインストールと設定を行った。パート3のPythonプログラムに進む前に少し休憩しよう。見逃さないよう講読登録しておくといいだろう。

Volker de Haas started electronics and computing with a KIM1 and machine language in the 70s. Then FORTRAN, PASCAL, BASIC, C, MUMPS. Developed complex digital circuits and analogue electronics for neuroscience labs (and his MD grade). Later: database engineering, C++, C#, industrial hard- and software developer (transport, automotive, automation). Designed and constructed the open-source PLC / IPC "Revolution Pi". Now offering advanced development and exceptional exhibits.
DesignSpark Electrical Logolinkedin