2014年1月4日土曜日

色々な前提条件

このブログ内の記事全体に関わることを以下に挙げる。


プログラマブル表示器による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である。
(後で楽をするために、最初に、一回だけ、苦労をするのである)


関連記事:

2014年1月2日木曜日

概要

プラットフォームフリー


私のプロジェクトは、とある産業用機械をネットワークに接続して、その機械の状態を遠隔地から監視すると言う、要求・企画としては、ごく一般的な内容からスタートした。

その後、客先との打ち合わせ・ブレインストームなどを重ねて、要件定義をした。
その中で、私は以下の提案をした。

「Web(技術)ベースのシステムとして構築すれば、あらゆる場所のあらゆる端末からアクセス可能である」

つまり、Webブラウザーさえ搭載されている端末であればプラットフォームに依存しない、と言う意味になることを説明した。

私はこの「プラットフォームフリー」と言う考え方を客先に対して、

「Webブラウザーを通じてアクセス(表示)するので、 専用アプリを開発すること無く、iOSでも、Androidでも、Windowsでも動作する」

「PCでも、タブレットでも、スマートフォンでも動作する」

と解説した。

特に、客先にはポータブル機器(タブレットやスマートフォン)からのアクセスと言う点がウケたようであった。


メリット・デメリット


恐らく、このブログを参照している人は何らかの技術者だと思うが、上記の「専用アプリを開発しない」と言うポリシーを定義したことに注意して欲しい。

私は客先に対して、この「専用アプリを開発しない」ことのメリット・デメリットを以下のように説明した。
  • どのプラットフォームにおいても、専用アプリを用意すれば最大の視覚効果や操作性が得られる。
  • 専用アプリを用意する場合、プラットフォームの選択をどの様に判断するのか?
  • 仮に特定のプラットフォーム向けにシステムをリリースした場合、後に、他のプラットフォームへの対応が要求されるのは明らかである。
  • さらに、マルチプラットフォーム向けにそれぞれの専用アプリを用意した場合、システムのバージョンアップやメンテナンスなどの管理が大変である。
この時点で、私はPC(Windows)と、iOS(iPad、iPod、iPhone)と、Android(スマートフォン、タブレット)を視野に入れていたので、これらの最大公約数的に、Webシステムとして構築することを既に考えていた。

そこで、私は客先に対して、
「Webブラウザーからの操作は、専用アプリに比べて、視覚効果(GUI、およびGUIコントロール)や操作性(タッチ操作など)に劣る点もあるが、近年はHTML5と言う新しい技術によって状況は改善されている」
と説明した。

その後、簡単な実験やデモを通じて、このプロジェクトはWebベースのシステムとして開発することになった。

以後、このシステムの開発を通じて色々と解ったことを記録しようと思う。


関連記事: