質問にタイトルを付ける方法がわかりませんが、最初に頭に浮かんだのは、この「マルチデバイスソフトウェア」のことです。
私は電子工学の学生で、計測器の制御に興味があります。この目的で C# を使用し、C# フォーム アプリケーションの基本的な知識を持っていること。また、IVI Foundation によって開発された「SCPI Commands」という標準コマンド セットがあります。これは計測器制御の簡単なアプローチであり、完全に機能する計測器制御システムの SCPI コードを書くことはできません。ここで「ドライバー」が役割を果たします。ほとんどのメーカーは、製品の購入時にデバイス ドライバーを提供しています。このドライバー ファイルを使用すると、完全に機能し、応答性の高いソフトウェアを作成できます。また、独自のニーズに合わせて独自のドライバーを開発することもできます。しかし、SCPI はすべての種類の計測器の標準ですが、いくつかのマルチ コマンドが問題を引き起こし始めています。たとえば、A ブランドのコードを書いたが、そのコードは B ブランドでは機能しない」
主な目標は、複数の同軸ケーブルのケーブル損失計算ソフトウェアを作成することです。このタスクを実行するには、スペクトラム アナライザと RF 信号発生器を使用する必要があります。数台のスペクトル アナライザーと多数の信号発生器が使用されています。
1 つのプログラムで、すべてのデバイスを制御する必要があります。これは私の問題です。
すべてのスペクトラム アナライザと信号発生器で機能する応答性の高いソフトウェアを作成したいと考えています。どうやってやるの ?まず、各デバイスのドライバーを作成できると思います。メイン プログラムは、プロンプトなどでユーザーに尋ねることで正しいドライバーを選択します。しかし、これを達成する方法がわかりません。次に、デバイスの組み合わせごとにソフトウェアの主要部分を作成し、その部分を .txt ファイルと共に実行時にメイン ソフトウェアに含めることができます。私はこれが初心者のアプローチであることを知っていますが、手間をかけずにこれを行うことができると思います. そして、私は最初のアプローチについて何も知りません。3 番目に、プログラム内のデバイスごとにすべてのデバイスのコマンドを記述し、if 条件を使用してケースを選択することができます。またはスイッチケース構造。他のオプションでこれを行うことができない場合、これが唯一の方法です。
私がアマチュアのソフトウェア開発者であるため、問題を正確に説明できないため、ここまでは理解できないかもしれません。
信号発生器があるとします。周波数 10 MHZ を選択します。これはアジレントの 33120A です。コンピュータでこれを実現するには、このコマンドをデバイスに送信する必要があります。
SOUR:FREQ 10 MHZ
この後、デバイスは周波数を 10 MHZ に設定します。別のメーカーの信号発生器があり、このデバイスでまったく同じことを達成するには、これを送る必要があると仮定しましょう。
SENS:FREQ 10 MHZ
この 2 つは同じことを実行しますが、SOUR と SENS の部分はデバイスに依存します。
C# でプログラムを作成するには、API を使用してデバイスと通信します。GPIB プロトコルを使用する場合、API の名前は NI488.2 です。RS232を使えばVISA APIなどを使えます。ちなみにプロトコルはGPIBです。GPIB では、ラッパーを使用して SCPI コマンドを C# 環境に簡単に統合します。たとえば、GPIB ライブラリを参照に追加した後、これを使用して C# フォーム インターフェイス経由でコマンドを送信できます。
ibwrt("SOUR:FREQ 10 MHZ", "SOUR:FREQ 10 MHZ".Length);
今、私は私の最大の問題に来ました。コードのこの部分を作成して、応答性の高いプログラムを作成するにはどうすればよいですか? たとえば、Agilent Signal Generator と Rohde&Schwarz スペクトラム アナライザを使用するオペレータ。別のオペレーターは、IFR Signal Generator と HP Spectrum Analyzer を使用しています。しかし、彼らは同じソフトウェアを使用しています。IFR信号発生器は、操作に「SENS:FREQ」を使用する場合があります。
操作を開始する前に、プロンプトがポップアップしてデバイスのドライバーを要求することがあります。知らない。これらが最初に頭に浮かびました。しかし、あなたが私だったら、どうやってこれを達成しますか? オプションを選択する場合は、その方法を教えてください。私はこれで立ち往生しています。現在、プログラムには約 2000 行のコードがあります。「ibwrt」はプログラムの唯一の部分ではなく、「SENS:FREQ」でもありません... 他のタスクには「SENS:BAND:RES」、「INIT:CONT」などもあります。これは重要ではありません。
私が正しく伝えることができなかったことを知っているので、私の質問を理解していただければ幸いです。
問題について質問がある場合は、お気軽にコメントしてください。
ありがとう。
TL;DR
C# Forms インターフェイスを介して各デバイスにコマンドを送信する必要があります。つまり、デバイスには特別なコマンドがあり、デバイスごとにソフトウェアを作成するのではなく、ユーザーの選択ですべてのデバイスを制御できる 1 つのソフトウェアを作成する必要があります。