SIerの皆様へ CAO概要

CAO概要

CAO

CAOとは、Controller Access Objectの略で、クライアントアプリケーションに対してデバイスにアクセスするためのインターフェースを提供する「標準プログラムインターフェース」です。通常、CAOは、CAOエンジンとCAOプロバイダを指します。

CAOアーキテクチャ
CAOアーキテクチャ

上図に示すように、PC上のORiN2プログラムは三つの階層に分けられます。

一つ目は、CAOアプリケーション部で、CAOエンジンから提供される標準プログラムインターフェースを活用して、各デバイスの違いを意識することなく (※1) クライアントアプリケーションを開発することができます。また、このクライアントアプリケーションは、同時に複数動作させることが可能です。

二つ目は、CAOエンジン部で、標準プログラムインターフェースと共通の機能を提供します。クライアントアプリケーションに対して標準プログラムインターフェースを提供し、さらにプロバイダの管理機能や非同期処理などを共通の機能として提供します。

三つ目は、CAOプロバイダ部で、デバイス向けインターフェースを持ち、メーカーごとの違いを吸収するモジュールです。このプロバイダは、デバイス向けのインターフェースを実装しただけではなく、CAOに新しい機能を追加する柔軟な拡張性を提供します。

後述するCAPやCRDは、それぞれプロバイダを利用することでその機能を実現しています。

※1) 通信デバイスやプロトコル (アルゴリズム) でのアクセスについて意識する必要はありませんが、デバイスが持つ情報については意識する必要があります。

CAOエンジン

CAOエンジンは、ORiNの中核となるEXEタイプのCOMコンポーネントです。クライアントアプリケーションとCAOプロバイダの間に存在し、双方のデータやコマンドの仲介を担います。クライアントアプリケーションは常にCAOエンジンとリンクを行い、クライアントの要求に応じてCAOエンジンが必要なCAOプロバイダとリンクを行います。クライアントアプリケーション⇔CAOエンジン⇔CAOプロバイダ 間のリンクは、分散オブジェクト技術であるDCOMまたはCORBAの仕様であるため、プロセスやPC、またはインターネットを越えて行うことができます。
また、この機能によってクライアントアプリケーションは、簡単にリモートアクセスや負荷分散を行うことができます。

  • CAOプロバイダの管理
  • オブジェクトコレクションの管理
  • メッセージプールによる非同期処理(イベント処理)
  • メッセージのオブジェクト化によるコンテキスト管理
  • オブジェクトの事前登録(CAOモデル)
  • ダイナミックバインディングによるAPIの動的変更
  • CRDファイルによる静的情報マージ処理
  • リモートエンジンの接続

ORiN2 SDKに含まれるCAOエンジンやCAOプロバイダの“実装”はDCOMで行われていますが、ORiN2の仕様ではCORBAでも問題ありません。ORiN2 SDKには、CORBA版のIDLファイルも含まれています。

CAOプロバイダ

CAOプロバイダは、クライアントアプリケーションの要求に応じてCAOエンジンから動的に呼ばれます。CAOエンジンのアドインとして動作する仕組みになっており、DLLタイプのCOMコンポーネントとして実装されています。

CAOプロバイダは、クライアントアプリケーションから直接アクセスされることはなく、CAOエンジンや他のCAOプロバイダからしか呼ばれないため、ユーザーはCAOプロバイダがもつインターフェース仕様を意識する必要はありません。

CAOプロバイダは、ORiN2 SDKに含まれるプロバイダ作成ウィザードによって作成することができ、CAOエンジンに対して常に同じインターフェースIDを持ちます。 (クラスIDは個々のプロバイダでユニークです。) そのため、CAOエンジンにとってリンクするCAOプロバイダが異なっても全く同じ呼び出しができます。この仕組みによってCAOプロバイダはCAOエンジンに対してアドインとして機能できます。

CAOプロバイダには、デバイス型、データ共有型、ユーティリティ型、ゲートウェイ型など、多くのタイプが存在します。デバイス型は、実際の機器と接続しCAOエンジンに対して機器の通信仕様の差異を吸収するように実装されています。標準的なCAOプロバイダはこのタイプに該当します。データ共有型は、アプリケーション間でデータを共有するタイプで、共有メモリのプロバイダやXMLにアクセスするCRDプロバイダがあります。ゲートウェイ型は、ORiN以外の他規格との接続を行いデータやコマンドの橋渡しをするタイプで、OPC Foundation が策定したOPCと接続するプロバイダやORiN version1の仕様RAOと接続するプロバイダなどがあります。

それ以外にも実装次第であらゆるタイプのプロバイダを作成することができます。例えば、仮想機器型タイプのプロバイダを活用すると、実際の機器と接続せずにソフトウェアのみで対象機器の動作をエミュレートできるため、システム導入前の事前検証が可能になります。

CAOオブジェクトモデル

CAOオブジェクトモデル

CAOオブジェクトモデルは、ORiN2が対象としている各種機器が持つ揮発性リソースと不揮発性リソースの二種類を抽象化したものです。揮発性リソースはメッセージやコマンドを指し、CaoMessageやCaoCommandオブジェクトが対応します。不揮発性リソースはコントローラ、変数、ファイル、タスク、ロボット、拡張カードを指し、CaoController、CaoVariable、CaoFile、CaoTask、CaoRobot、CaoExtensionオブジェクトがそれぞれ対応します。
また、CAOエンジンはCaoEngineオブジェクト、CAOエンジンの状態に関する情報はCaoEngineStatusオブジェクト、コントローラを配置する作業空間にはCaoWorkspaceオブジェクトが対応します。その他のオブジェクトとして、複数のCAOオブジェクトをまとめて管理するコレクションオブジェクトがあります。

CAOオブジェクトモデル

ORiN2が対象としている各種機器には、プル型 (ストア型) とプッシュ型 (イベント型) があります。プル型デバイスは、値を格納する領域を機器内部に持ち、外部からの要求に応じて値を返します。プッシュ型デバイスは、任意のタイミングで機器内部から外部に値を送り出します。
ORiN2では、プッシュ型デバイスの対応としてCaoControllerオブジェクトのOnMessageイベントにCaoMessageオブジェクトを渡すことで、機器から送られた情報をクライアントプログラムで取得できるようにしています。または動作モード指定により、CAOエンジンが機器から送られた情報をCaoMessageオブジェクトに格納して、そのオブジェクトをキューに貯め、任意のタイミングでクライアントプログラムへ情報を渡すこともできます。

本サイトでは、CAOアプリケーション=
ORiNアプリケーション、CAOエンジン=ORiNエンジン、CAOプロバイダ=ORiNプロバイダと表記しています。