このブログはもともとcimetrix.comに掲載されていました。
お使いの機器のコンポーネント向けに複雑なドライバを開発する必要がありますか?CIMControlFramework™Communicator Frameworkがこれを実現する方法をぜひご覧ください。
CCFコミュニケーターフレームワークとは何ですか?
コミュニケーター・フレームワークは、CCFとデバイス間の接続をカプセル化することで、ハードウェアとの間で送受信される低レベルなメッセージ処理を簡素化します。
例えば、制御ソフトウェアとハードウェアデバイス間の接続方法を考えてみましょう。ASCIIシリアル接続には、TCPを使用したソケット接続、デバイスとの間で送受信される複数のメッセージを処理するマルチスレッド機構、コマンドとその応答を同期させるロジック、およびその他の複数の機能が必要です。これらを一から開発するのは膨大な作業となります。
代替手段として、CCFはこれらすべてを迅速に実現するための組み込みASCIIシリアル接続クラスを提供します。このクラスを使用するだけで、コンポーネントへのASCIIシリアル接続を簡単に作成できます。
コミュニケーターフレームワークの具体的な役割は何ですか?
機器内の各コンポーネントまたはデバイスは、その指定された機能を実行するための一連のコマンドと応答を提供します。コミュニケーターフレームワークには、これらのコマンドを処理するトランザクションクラスが含まれており、特定のデバイスへの各コマンドはトランザクションとして実装されます。
ロードポートに対するクランプ動作のケースを考えてみましょう。関連するコマンドは「LOCK」となる可能性があります。では、CCF開発者として、このコマンドをロードポートドライバに実装するためのタスクは何でしょうか。
最初のステップは、ロードポート用のトランザクションクラスを作成することです。このクラスは基底クラスであるCCF Transactionクラスを継承する必要があります。以下に「Clamp」トランザクションを作成する例を示します。

この例では、ClampTransactionクラスはClampコマンドを属性として受け取ります。基底クラスへの属性として渡されたコマンドは、ASCIIシリアル接続を介してデバイスに送信されます。
次のステップは、コマンドを送信しデバイスからの応答を受信するためのCommunicatorクラスを実装することです。以下のサンプルコードを参照してください。

CCF製品にはLoadPortクラスが含まれています。ここでは、トランザクションを実行するためにASCIIシリアル接続でCommunicatorクラスを初期化します。

クランプ動作が必要な場合、CCFはLoadPortのClamp関数を呼び出してクランプを実行します。ハードウェアへのコマンド送信には、直前に初期化したCommunicatorオブジェクトを使用します。コマンド送信や応答受信の処理を記述していない点に注意してください。これはCommunicatorの役割です。ハードウェアへのコマンド送信は、以下に示すようにCommunicator基底クラスのPerformTransaction関数を呼び出すことで行います。

信じられないかもしれませんが…これで完了です!ドライバ内のごくわずかなコード行でデバイスにコマンドを送信しました。では、デバイスからの応答をどのように処理するのでしょうか?見てみましょう。
各デバイスは、そのデバイスの製造元に応じて、コマンドセットに対する異なる応答を実装します。これには、確認応答、データ項目、様々なタイプのイベントなどが含まれる場合があります。 したがって、コミュニケーターがデバイスから応答を受信するたびに、子クラスの抽象メソッドを呼び出して応答を解析します。CCF開発者は、応答の種類を判断し、トランザクションが正常に完了したかどうかを判定し、その結果に基づいてコミュニケーターへの応答方法を決定する必要があります。
以下の例は、デバイスからの応答を解析する方法を示しています。

最後に、ハードウェアからのイベントをどのように処理すればよいでしょうか?上記のコードから、応答のタイプがイベントであることを示す方法がわかります。この場合、その子クラスでイベントを処理するために別の抽象メソッドが呼び出されます。CCF開発者は、以下に示すように自身のコードでこれを処理できます。

以上です。上記のコード断片は、Clampトランザクションを含む基本的なロードポートドライバの例を示しています。デバイス向けに追加コマンドを実装するには、単にトランザクションを追加し、機器コントローラからそれらを呼び出せばよいです。Communicator Frameworkがデバイスとの通信の残りを処理します。