のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:123,531,737人
911,637,138頁
昨日:4,530人
5,106頁
今日:401人
487頁
最近の注目
人気の最安値情報

    Digital Oscilloscope TDS3000B

    テクトロニクス(Tektoronix)社製のDigital Oscilloscope TDS3000Bに搭載されている e*scopeというHTTPサーバー機能を用いてリモートコントロールを するための解説ページです。#br

     
    • オシロスコープ側のIP設定と動作確認
    • Oscilloscope-PC間のコマンド通信について
    • トリガ待ち
    • 波形データの取得
    • 内部形式の変換
    • Javaでの実装例
    • 動作実験のときの便利なTools
    • Reference
    <pre>

    <pre>

    svn co https://sea-mew.jp/svn/xoops/project/TDS3000B

    </pre>

    Page Top

    オシロスコープ側のIP設定と動作確認

    Utility、IO設定、イーサネット設定で設定できるはずです。#br 分からなければReferenceにあるManualを参照してください。#br ネットワークの設定項目の詳細は使用するネットワークの管理者に聞いてください。#br

     

    動作確認は適当なブラウザでhttp://IPAddressOfOscilloscope/で直接e*scope機能を使って操作できます。#br 普段実験に使うぐらいならこちらで十分なのですが、#br 長時間測定で統計を貯めたい場合は以下で説明するプログラムを用いたほうが簡単かと思います。

    Page Top

    Oscilloscope-PC間のコマンド通信について

    e*scopeはHTTPサーバーであるためHTTP(1.1 or 1.0)を用います。#br HTTPの詳細についてはReferenceを参照にしてください。#br

     

    ReferenceのProgrammer ManualにTDS3000Bで使えるコマンドが載っているので参照してください。#br TDS3000Bのコマンドを実行するには、GETメソッドを用いてクエリの形で送ります。#br ブラウザでhttp://OscilloInetAddress/?command=queryを開くのと同じです。#br queryはURL Encodeをかけなければいけません。これの詳細もReferenceに載せておきました。#br

     

    HTTP, URL Encodeの二つを処理しなければいけないので、#br 両方ともデフォルトで使えるJavaを用いて実装するのが一番楽だと思います。#br

     
    <pre>

    <pre>

      public String sendCommand(String cmd) throws IOException{
       URL url = new URL("http", hostname, "/?command=" + URLEncoder.encode(cmd, "US-ASCII"));
       HttpURLConnection connect = (HttpURLConnection)url.openConnection();
       connect.setRequestProperty("connection", "close");
       
       BufferedReader reader = new BufferedReader(new InputStreamReader(connect.getInputStream()));
       String line = reader.readLine();
       reader.close();
       
       return line;
       }

    </pre> こんな感じで実装すればいいと思います。#br String mode = sendCommand("ACQuire:STOPAfter?");とすると Data Taking Modeが取得できるはずです。#br Refarenceにあるコマンドは大体これで実行できるはずです。#br

    Page Top

    トリガ待ち

    Single Sequenceモードでは、トリガを待ち信号を1回だけ測定します。#br このモードのときRun or Stopという状態をコマンドAcquire:State?で取得できます。#br 基本的にはこれを用いてソフトウェア上で信号を待ちます。#br

     

    マニュアルにはシンクロするモードがあるのですが、 うまく動作しなかったり反応が遅かったりで今回は用いていません。#br

     

    コマンドを発行し続けるとCPUに付加がかかりすぎるのでsleepさせてあげる必要があります。#br Javaの場合はjava.lang.Threadクラスのsleepを用います。#br これはmsecで眠らせることができます。#br Cの場合もsecのsleep、nsecのnsleepがあります。#br

     

    あとはStateがStopになるまでループさせておけば完成です。

    Page Top

    波形データの取得

    <pre>

    <pre>

       POST /getwmf.isf HTTP/1.1\r\n
       Host: hostaddress\r\n
       Connection: close\r\n
       \r\n\
       command=select:ch1 on\r\n
       command=save:waveform:fileformat internal\r\n
       wfmsend=Get\r\n

    </pre>

    以上のようなHTTPリクエストを送ることによって波形データを取得することができるみたいです。#br なおPOSTメソッドの時は特にエンコードする必要はないのでリクエストはそこそこ簡単にできます。#br

     

    command=select:ch1 onのところを変えることで違うチャンネルの波形データを取得することができます。#br 波形データの種類は内部形式、カンマ区切りCSV形式とMathcad形式があります。#br Mathcad形式は扱いづらいのでやめるとして、バイナリの内部形式とテキストのCSV形式になりますが、 CSV形式ではデータサイズが大きすぎる且つ変換に時間がかかるためかひとつ送るのに30秒近くかかったりします。#br ということで内部形式が一番いいと思われます。こちらは転送時間は0.5秒くらいになります。#br

    Page Top

    内部形式の変換

    バイナリファイルをそのまま読める人は少ないので、 よく使われている解析ツールROOTで扱えるようにしておきます。#br

     

    Waveformに一番適したクラスはTGraphであろうということでこれに変換するものを作ります。#br 変換するためのC++クラスCOscilloとそれを使ったコンバータを用意しておきました。#br

    convert.cxxを適当に改良して個人の環境で使いやすいように書き換えてください。#br 簡単なC++のプログラムなので問題なく改良できると思われます。#br ROOTを使ったコンパイルは少々やっかいなのでMakefileも作成しておきました。#br

     

    ちなみにCOscilloクラス単体でもデータを取ってくることができますが、#br HTTPレスポンスの実装が適当なのでうまく取得できないことがあるかもしれません。#br

     

    Programmer ManualのWFMPREとCURVEの項目をみればバイナリ形式のフォーマットが大体分かると思います。#br

    Page Top

    ハードコピー(Oscilloscopeの画面)の取得

    TDS3000Bで用いている画像形式はPNG(Portable Network Graphics)と呼ばれるデータ形式です。#br GIFの代わりになるようにと制定された規格なので古すぎるWork Stationでは見れないかも知れませんが、#br 普段使っているようなWindows, Linux等では問題なく対応しています。#br デフォルトでZip圧縮されているので、フロッピーへのハードコピーにもこの形式がいいと思います。#br

     

    取得するにはIPAddress_Image.pngだと思われます。(まだ実験してないです)

    Page Top

    Javaでの実装例

    ソースコード#br コンパイルにはJavac JOscillo.java、実行にはJava JOscilloとします。#br

    <pre>

    <pre>

      //------  main  -----//
       public static void main(String[] argv){
       JOscillo oscillo = new JOscillo("osillo ip address");
       
       try{
           oscillo.setSingleSequence();
           
           for(int i=0; i>5; i++){
           if(oscillo.isStateStop()) oscillo.setStateRun();
               oscillo.waitTrigger(10000); // [msec]
           String filename = "test" + i + ".isf";
               oscillo.saveToFile(filename, "CH1");
           System.out.println("save to " + filename);
           }
       }catch(IOException e){
           System.out.println(e);
       }

    </pre>

    これはトリガを待って5回データを読み込みます。出力されるデータはTDS3000Bのバイナリファイルです。#br

    Page Top

    動作実験のときの便利なTools

    • B#br
       テキストファイル以外のものを総称してバイナリファイルと呼んでいますが、#br
       これらは普通のエディターで開いても何がなんだか分からなくなります。#br
       そこでデータを16進数で表示するバイナリエディタと呼ばれる種類のツールで見ます。#br
       Linuxではodを-t xCオプションあたりで使うといい感じです。#br
       Windowsではfoxbinというプログラムが軽くていいです。
    • B#br
       ネットワークの通信パケットを傍受してそれを見るためのソフトです。#br
       これを使えば実際に動いているアプリケーションの通信プロトコルを読み取って#br
       それから独自の自動制御用のプログラムに転用できます。#br
       仕様書を見てもよく分からないときはWindows上で動かして通信プロトコルを調べることで、#br
       Linux上で動くプログラムの作成の参考に役に立ちます。#br
       普通のプロトコルの勉強にもかなり役に立ちます。
    Page Top

    Reference

    B#br

    B

    B

    B


    トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
    Counter: 1073, today: 1, yesterday: 0
    初版日時: 2007-05-26 (土) 03:15:01
    最終更新: 2007-05-26 (土) 03:15:01 (JST) (3849d) by