同期の取り方(STB?)に付いて
- 1 名前: GPIB初心者Z 投稿日:2006/06/27(火) 11:06 ID:XqIDw6Yw
- 測定器制御プログラムをVB6.0で作成しています
GPIBで制御コマンドは送れており、一応問題無く動作はしています
でも、動作時間短縮の為に、ステータスバイトを
用いてみたいのですが、GPIBに付いてあまりよくわかってません
ステータスバイトを読み込むためには、どいのでしょうか?
測定器にコマンドを送るのとは違うんですか?(*STB?とかではないの?)
詳しい板とかの紹介だけでも有難いです
宜しくお願いします
- 2 名前: 匿名488 投稿日:2006/06/27(火) 11:16 ID:???
- 488.2 のコマンドのことでしょうか?
488.2 ならステータスの読み取りはクエリ(末尾が?)を出して、
データの引き取りをする形でしょうから、
測定器にコマンドを送ったり、
データを引き取ったりするのと同じです。
高速化とどうつながるのかいまいち不明ですが、
ホストからのポーリングをやめて、SRQ を使いたい、
ということでしょうか?
- 3 名前: GPIB初心者Z 投稿日:2006/06/27(火) 11:44 ID:Q.RPj1H.
- >488.2 のコマンドのことでしょうか?
古いスペクトラムアナライザを制御してます
きっと、「488.2」何だと思います(小生、なんか勘違いしてますかね?)
一応、「488-1978標準装備」となってます
測定の為に必要な設定を行い、一定のスリープを設けて、
その後に、クエリーコマンドで測定データを取得しています
最初の設定で、スイープ開始を指示しており、スイープが
終了した後でないと、正しいデータを取得できないのです
現状の一定スリープではなく、スペクトラムアナライザの
ステータスバイトに割り当ててある、「スイープ終了標示ビット」を
確認してから、クエリーを実行したいです
- 4 名前: ka 投稿日:2006/06/28(水) 11:00 ID:gMVuIvtA
- 488.2は488上で動作する標準コマンド(*IDN?とか*STB?)を指します。
したがって、488対応と488.2対応は異なります。
ややこしいのがステータスバイトの取得方法で、488では
スペアナが発行するサービスリクエスト(SRQ)に対してPCが
シリアルポーリングという手段で取得する方法が主流でしたが、
488.2では*STB?というクエリコマンドでの取得も可能になりました。
まずスペアナの取説を見て、前者なのか、後者なのかを調べてください
(前者のような気がしますが)。
前者ですと、PCにシリアルポーリングを行わせなくてはならないので、
お使いのGP-IBボードの取説からシリアルポーリングの実行方法と、
それで受け取ったステータスバイトの取得方法を調べてください。
スペアナによっては、サービスリクエスト(SRQ)の発生を許可させる
コマンドを送る必要もあるかもしれません。
VB上で以上の動作をおこなう方法については私はわからないので
他の人にお願いしますが、上記の内容やお使いのGP-IBボードが
わからないと、これ以上のアドバイスは無理かと思われます。
- 5 名前: 匿名488 投稿日:2006/06/28(水) 11:50 ID:???
- *IDN? で返事が返って来る機器なら ka さんのおっしゃる
後者になるかとおもいます。
488.1 は主に GPIB バスの物理仕様と状態遷移などのとりきめです。(e.g. Ethernet + IP,RS232C + SLIP)
488.2 は 488.1 で決められたバスでどんなデータを流すかのとりきめです (e.g. http, smtp)
488.2 は元は 488.1 で決められたバス上での実装が前提でしたが、
仕様自身は物理層に縛られないつくりなので、
同様のコマンドを使って 232C や Ethernet,IP で通信を行うことが可能で、
そのような実装の計測器があまた存在しています。
(いまはそちらの方が主流になりつつあるかもしれません)
- 6 名前: GPIB初心者Z 投稿日:2006/06/29(木) 09:27 ID:gLwiWzWU
- 皆様、ご回答ありがとうございます
結局、私が知りたいことは、488.2の仕様に付いてだと
認識できました
「*IDN?」は使用できています
かなり古い計測器でして、プログラミングマニュアルは廃却してしまった状態です
ちなみにLabViewでのポーリング制御は上手く出来ています
(新しい機種用を改造してます)
今となっては、書籍・WEBともに情報が少なくなってますよね・・・
- 7 名前: マニク◆Jy2pR/5Y 投稿日:2006/06/29(木) 09:39 ID:FYrJYM5.
- 要するにこういう手順でやればいいのでは。一応VISA風に書きます。
' STBチェック
Dim stb as Integer
WHILE stb AND (チェックしたいビット)
vs = viReadSTB( vi, &stb)
WEND
vs = viWrite( vi, "クエリ?", hoge, hoge)
vs = viRead( vi, hoge, hoge)
ちなみに、viReadSTB(= シリアルポーリング)の代わりに*STB?クエリ
とそのレスポンス読み込みを使うことも出来ますが、速度効率は
シリアルポーリングよりも悪いです。
シリアルポーリングの関数が何なのかは使っているGPIBライブラリ
で違ってくるので、そのあたりはライブラリのマニュアルを見てね。
- 8 名前: マニク◆Jy2pR/5Y 投稿日:2006/06/29(木) 09:41 ID:kJMBwo.s
- WHILE文の条件が逆さだった。ゴメソ。
こっちが正しい。
DO
vs = viReadSTB( vi, &stb)
LOOP UNTIL stb AND (チェックしたいビット)
新着レスの表示