Open12

TECH: Raspberry PiにOPC-UAサーバを立てる

toitoy8toitoy8

Raspberry Pi上にOPC-UAサーバを立てたい。
最終的にはOPC-UAサーバを介して、EtherCAT Slave Deviceに接続する。

toitoy8toitoy8
  • CODESYS OPC-UA Raspberry Pi Server

http://soup01.com/ja/2020/08/09/codesys-opcuaserver/
絵つきで手順をキレイに書いてくれてる。
ただ、Authentication Settingsはログイン情報入れないとラズパイサーバにつながらない(Raspberry Piのver.のせい?)
古いLinux掘り返すの大変だから、新しいver.でできる方法探したほうが近道かも。
GVLの使い方初めて知った。
(ただ結局変数の階層一緒だからGVLで定義するのが良いのかわからない)

  • CODESYS IDE, download page

https://linx.jp/?s=&post_type=download&download_cat=codesys&type_name=&product_name=CODESYS
CODESYSのIDEは最終的にPatch3を当てた。
runtimeはBusterなら4.2.0で良いけど、Bullseyeだと4.4.0以上でないと動かない。
(実際には一時的にラズパイサーバにつながるんだけど、すぐに接続が切れる現象になる)

https://store.codesys.com/en/codesys-control-for-raspberry-pi-mc-sl.html
4.4.0のダウンロードはここから。

toitoy8toitoy8

CODESYS決め打ちになっちゃってるけど、EtherCAT Masterを作るのがしんどかったのでPLCに頼ることにした。
IDEもruntimeパッケージも基本は無料。
runtimeは通常使用時で2h、フィールドバス使用時は30minの時限式。
解放するにはライセンスキーが必要。
個人利用ライセンス50€=7,000円、商用利用ライセンス100€=14,000円。
ライセンスだけ買うと、ラズパイが壊れた時に無効になる?
ラズパイだし、ドングルキーにライセンスインストールしたほうが安全そう?

toitoy8toitoy8

pythonのfreeopcuaでOPC-UAサーバを立てる、だとOPC-UAサーバは立てられるけどEtherCATを解決できない。
CODESYSはEthreCAT通信が可能でありながらOPC-UAサーバも立てられる。
クライアント側はfreeopcuaで良い。

接続イメージはこんな感じ。

Raspberry PiがEtherCAT Master。
物理層はLAN。
細かい制御しなければ、ラズパイはただEtherCATを中継してくれれば良いだけ。

toitoy8toitoy8
  • ラズパイサーバ側Certification発行の仕方

https://misoji-engineer.com/archives/opc-ua-security.html
なぜかCertificationの発行がないとログインできない。
暗号化通信Noneで接続してるのに。。。

toitoy8toitoy8

OPC-UAサーバの構築は簡単だった。
OPC-UAの変数定義するためのオブジェクト持ってきて、サーバ有効にするためのチェックボックスONするだけ。
クライアントソフト側からラズパイサーバ上に定義した変数がOPC-UAサーバ経由で読み取ることができた。

EtherCATにも定義したアドレスにOPC-UA経由で書き込んだ値をパスするだけで書き込めた。

はまったのは、

  • ラズパイのディストリビューションとランタイムのバージョンの組み合わせ
  • ラズパイサーバの証明書発行しないとサーバログインできない
  • インストーラの進捗バーが全く進まなくて不安になる

これぐらいかな。
全部で2日ぐらい使ってしまったけど。。。
はまると時間溶けるし、ブラウザのタブの数がやばくなる。

toitoy8toitoy8

CODESYS IDEを日本代理店のLINXからダウンロードすると、Start upガイドがついてくる。
けっこう親切に書かれていて、Exampleの導入の仕方もフォローしてくれている(ver.違うと実行できないんだけど、アップグレードの仕方も書いてくれている)。
いくらラズパイといえど、CODESYS IDE基本無料だしruntimeも時限式だけどお試しできるし儲かってるのか(失礼)?
CODESYS自体はPLC, OSにruntime載せて動かすってのが基本スタイルぽいから、ハードウェアに載せてなんぼなのでってことかな。

toitoy8toitoy8
  • CODESYS内記述言語

ソフトウェアPLCというからには、一通りそろっている。
電気回路的な思考で行くならLDで良い。
スルーさせるだけのつもりなので、アセンブラ的なILでも良いかも。
BASICライクで行くならSTか。
https://qiita.com/soup01/items/aee7799827590fed1737
SFC、FBDは面白そうだったら手を出してみよう、という感触。

toitoy8toitoy8

とりあえずCODESYSにSlave DeviceのESIファイルをインストールしてEtherCATは動かせたけど、ENIファイルが作成できない。
あまりよくわかってないけど、Slave 1 ESI + Slave 2 ESI + ... = ENIファイルみたいな感じで、全体のEtherCATネットワークをxmlで記述したのがENIファイルだろうか。

toitoy8toitoy8

CPUのアドレスには接続したらデフォルト設定で自動的にマッピングされるから、あとはネットワーク情報ぐらいを付加したファイルというところかなー。