デバイス制御に使用される 8 ビットのデジタル出力ボードがあります。各外部デバイスは 1 ビットを必要とし、異なるアプリケーションによって制御されます。クラス ライブラリと、8 ビット ポートを管理するドライバーをエンベロープするクラス DigitalOutputPort (VB 2010) を作成しました。各デバイス アプリケーションはこのクラスを使用して、独自のインスタンスを作成します。
デジタル出力ポートのビットを設定するには、そのポートにバイトを書き込む必要があります。このバイトは、8 ビットすべてをまとめたビット マスクです。ビット番号 0 - 1 - 2 を HIGH に設定するには、次のように書き込む必要があります。ポートで 7、8 ビットすべてを HIGH に設定するには、256 を書き込む必要があります...
1 つのアプリケーションのみがクラスを使用する場合、すべて正常に動作します。しかし、2 つのアプリケーションがそのポートに独自のビットを設定したい場合、問題が発生します。他のアプリケーションによって設定されたすべてのビットの現在の値がわからないためです (ドライバーにはそのような機能はありません)。もちろん、1 つのビットを変更することもできません。他のすべてを変更せずに(現在のビットマスクがわからない場合)
通常、これは 2 つのアプリケーション間でデータを共有する典型的なケースのように見えます。私の最初のアイデアは、ポートの現在の値を、すべてのアプリケーションがアクセスして読み取ることができるディスク上のファイルに書き込むことでした。しかし、この単純な問題には重すぎるようです。さらに、パフォーマンスと信頼性の問題も発生する可能性があります。
次に、クラスで共有フィールド (プロパティ) を使用することについて考えました。共有フィールドは、クラスのすべてのインスタンス間でその値を保持しますが、異なるアプリケーションのインスタンス間でも同じですか? この最後の点に関する詳細情報が見つかりません。同じテストを行う必要があります。
3 番目の方法は、クラス DigitalOutputPort のインスタンスを 1 つだけ作成し、すべてのアプリケーションに対して 1 つだけ作成することです。それを必要とする最初のアプリケーションがオブジェクトを作成すると、他のすべてのアプリケーションはすでに作成されたオブジェクトを使用します。私はこの方法が他の方法よりも好きですが、それができるかどうか、またどのようにできるかはわかりません。
あなたの意見では、どちらが正しいアプローチであるべきですか?
返信ありがとうございます。