プログラマブル表示器によるLAN接続
とある産業用機械(ターゲット)には「プログラマブル表示器」が搭載されている。
ターゲット内の各部の機構はPLC(シーケンサ)によって制御されており、更に、これらPLCを制御しているのが「プログラマブル表示器」内の制御プログラムである。
外部システム(つまり、私が開発するシステム)は、LAN接続された「プログラマブル表示器」にアクセスすることで、ターゲットの状態を把握することができる。
また、ターゲット1台ごとに一意のIPアドレスを割り当てることで、外部システムは複数のターゲットの状態を取得することができる。(1:Nの接続)
プログラマブル表示器へのアクセス
ターゲットに搭載されているプログラマブル表示器は、富士電機製のV8シリーズである。
(富士電機では「プログラマブル操作表示器」:PODと呼んでいる)
このPODに外部システムからアクセスする方法として、開発元である発紘電機から提供されているDLLを通じて、POD内のメモリを読み書きすることができる。(HKEtn20.dll、VCFAcs.dll)
これらのDLLの他にも、ヘッダファイル(HKEtn20h.h、VCFAcsh.h)やLibファイルも提供されているが、いずれにしても、C言語形式のエクスポート関数の呼び出しとなっている。
まとめると、
- 提供されているアクセス方法はWindowsベースの環境のみ
- 提供されているAPI(エクスポート関数)はC/C++言語ベースのみ
さて、昔はCやC++のプログラムを散々書いていたが、C#(.NET Framework)で開発するようになってからは、もうすっかりアンマネージ環境のプログラミングはできない体になってしまったw
(いや、今でもC/C++はちゃんと読み書きできるのだが、新規開発する気にはなれないだけである)
そこで、上記のDLL(HKEtn20.dll、VCFAcs.dll)をマネージ環境から呼び出すためのラッパーを作成して、提供されている全てのAPIをC#プログラムから安全に正しく実行できるようにした。
ラッパーDLLを作成する際に少しググったところ、それこそ世界中のプログラマが同じ問題を抱えていたようだ。
メモリの先頭アドレス(ポインタ)の扱いも面倒であったが、他にも、ファイル操作(ファイル一覧/ディレクトリ一覧の取得)なども面倒であった。
このラッパーDLLさえあれば、富士電機(発紘電機)のPODに対しては、ドンと来いwである。
(後で楽をするために、最初に、一回だけ、苦労をするのである)
関連記事:
0 件のコメント:
コメントを投稿