1

Linux用のC / C ++で一種のデーモン/サービスを実装することを考えています。これは、シェルを介して(linux-gpibライブラリを使用して)特定のgpibデバイスと通信します。アイデアは、デーモンがすべての既存のデバイスをスキャンし、各デバイスのファイル/パイプ/dev/gpib#-*(*指定された gpib バス上のアドレス) を作成するというものです。のような使い方になります/dev/com#。次に、コマンドラインに次のように入力できます。

echo "*IDN?" > /dev/gpib1-12

どちらが「*IDN?」を送信しますか? ボード 1 のデバイス 12 に文字列を接続します。これまでのところ、問題はありません...

問題は、デバイスからデータを取得したいときに始まります。類推的に機能させたいので、

cat /dev/gpib1-12

デバイスが言うべきことを書き出すでしょう...しかし、デバイスに送信したどのコマンドがデバイスに文字列(値)を返させ、どれが返させないのかわかりません。だから私のオプションは次のとおりです。

  1. デバイスに応答するものがあるかどうかを繰り返しチェック ( while-loop ) し、後で対応するパイプに送信します。
    -また-
  2. /dev/gpib#-*クライアント プログラムがパイプからの読み取りを試みる場合にのみ、デバイスにクエリを実行します。これは、「シグナル」と「待機」を通じて提供する必要があります。

明らかな理由 (パフォーマンスおよび/またはレイテンシーのハンディキャップ) により、ソリューション1を実装したくありません。他のことを行う方法はわかりませんが...オールマイティなLinuxで実装できるはずだと思いますが、どうすればよいでしょうか? 私はこれを読みましたが、関数のいくつかのスピンはselect()正しい方法だと思いますが、私の問題にそれを使用する方法がわかりません。私もこれに出くわしました。そこでは、男が似たようなことを行う方法を説明していますが、非常に異なっています(コードmosfet.c)。

問題は、パイプ/FIFO/ファイルの反対側から信号、待機、または割り込みを介して読み取ろうとする試みをすぐに検出して対応するにはどうすればよいかということです。

答えてくれてありがとう。



PS: ここは朝の 7 時半です(また眠れぬ夜です) 。 (ファイル I/O を介して個々のデバイスにアクセスする) ことは、linux-gpib ライブラリを介して可能であると尋ねています。お知らせください。linux-gpib のドキュメントと src を読みましたが、何も役に立ちませんでした。linux-gpib ライブラリが提供するものはすべて、C、Python などへのバインディングです。
PPS:パイプを使用する他の方法はありますか?

4

1 に答える 1

1

gpib デバイス用の優れた端末が必要な場合は、python (またはさらに優れた ipython) を使用できます。

linux-gpib には python ラッパーが付属しています (コードについては、こちらを参照してください)。そのため、シェルで次のように入力して python を開きますpython 。 python インタープリターでは、このようにデバイスと簡単に通信できます。

>>>import Gpib
>>>device = Gpib.Gpib(pad=2)

これにより、プライマリ アドレス 2 を持つ gpib デバイスへの接続が開きます。それと通信するには、次のようにします。

>>>device.write('*IDN?')
>>>device.read()
'HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0'

さらに単純化するには、プレーンな python の代わりに ipython を使用します。これにより、タブ補完などが可能になります。

于 2014-01-20T20:41:23.470 に答える