Visual StudioからTektronixオシロスコープを管理する

このようなタスクに遭遇することはめったにありませんが、これが発生した場合、「ダウンロードするもの」、「どこで見つけるか」、「どのように機能しますか?」 。 ボードをテストするための自動スタンドの開発の一環として、同様の問題がありました。 それを解決する過程で、多くの問題が発生しました。問題の幅が狭いため、これについての十分な情報がインターネット上にありません。 この記事では、Visual Studioからテクトロニクスのオシロスコープを使用して作業を開始するための主なポイントについて詳しく説明します。



まず、 TekVISAドライバーをダウンロードしてインストールする必要があります(登録する必要があります。そうしないと、必要なドライバーをダウンロードできません)。



TekVISAドライバーをインストールしたら、C:\ Windows \ assemblyディレクトリに移動する必要があります。 これは、作業に必要なTekVISANet.dllライブラリが置かれる場所です。 次に、ライブラリをプロジェクトに追加し(プロジェクト>参照の追加...>参照...)、...これで完了です!



そして、すべてがとてもシンプルに思えます! しかし、この奇跡の図書館がどこに保存されたかを理解するために、半日が費やされました。 結局のところ、理由の声に従って、あなたはそれを完全に異なるディレクトリ、例えばC:\ Program Files(x86)\ IVI FoundationまたはC:\ Program Files(x86)\ Tektronixで見つけることを期待しています。



オシロスコープとの対話は可能な限り簡単です。 たとえば、次のコードを使用すると、デバイスに接続してその識別データを読み取ることができます。



using System; using System.Collections; using TekVISANet; namespace TekVISAExample { class Program { static void Main(string[] args) { string response; ArrayList resources = new ArrayList(); VISA tekVISA = new VISA(); tekVISA.FindResources("?*", out resources); Console.WriteLine("RESOURCES:"); foreach (string s in resources) Console.WriteLine(s); tekVISA.Open(resources[0].ToString()); tekVISA.Write("*IDN?"); bool status = tekVISA.Read(out response); if (status) Console.WriteLine("IDN (device information): {0}", response); Console.ReadKey(); } } }
      
      





出力:

リソース:

USB0 :: 0x0699 :: 0x0376 :: C011053 :: INSTR

ASRL7 :: INSTR

ASRL8 :: INSTR

IDN(デバイス情報):

TEKTRONIX、MSO2012、C011053、CF:91.1CT FV:v1.52 DPO2COMP:V1.00



デバイスと通信するには、SCPI(プログラマブル計測器の標準コマンド)コマンドを使用します。 sdphca.ucsd.edu/Lab_Equip_Manuals/SCPI-99.pdfでそれらに慣れることができます。 ただし、すべてのデバイスには異なる設定と機能があるため、特定のデバイスに特に適用されるSCPIコマンドのセットを見つける必要があります。 原則として、それらはProgrammer Manualデバイスにあります。



Tektronixオシロスコープ用のOpenChoice Desktop無料アプリケーションをダウンロードすることもできます。 ダウンロードしてインストールしたら、デバイスをコンピューター(USB)に接続し、アプリケーションを起動し、[設定の取得と送信]タブに移動して、[設定の取得]ボタンをクリックする必要があります。 現在の設定でデバイスをセットアップするために使用可能なすべてのコマンドが画面に表示されます。



例1. 2番目のチャネルからのRMS値の測定:



 using System; using System.Collections; using TekVISANet; namespace TekVISAExample { class Program { private const string OSCILLOSCOPE = "USB0::0x0699::0x0376::C011053::INSTR"; static void Main(string[] args) { VISA tekVISA = new VISA(); ArrayList resources = new ArrayList(); tekVISA.FindResources("?*", out resources); bool opened = false; if (resources.Contains(OSCILLOSCOPE)) opened = tekVISA.Open(OSCILLOSCOPE); if (opened) { ///  2 tekVISA.Write("CH2:COUPLING AC"); tekVISA.Write("CH2:SCALE 20.000E-3"); tekVISA.Write("CH2:BANDWIDTH 20.000E+6"); ///   ? tekVISA.Write("MEASUREMENT:MEAS1:TYPE RMS"); tekVISA.Write("MEASUREMENT:MEAS1:SOURCE1 CH2"); tekVISA.Write("MEASUREMENT:MEAS1:STATE ON"); ///    RMS tekVISA.Write("MEASUREMENT:MEAS1:VALUE?"); string response = ""; ///  tekVISA.Read(out response); Console.WriteLine("RMS CH2 VALUE: {0}", response); } Console.ReadKey(); } }
      
      





例2.さらに使用するために、.csvファイルに保存されたポイントの形式で波形を取得します。



 using System; using System.Linq; using System.Collections; using System.Globalization; using TekVISANet; using System.Threading; namespace TekVISAExample { class Program { private const string OSCILLOSCOPE = "USB::0x0699::0x0376::C011053::INSTR"; static void Main(string[] args) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); VISA tekVISA = new VISA(); ArrayList resources = new ArrayList(); tekVISA.FindResources("?*", out resources); bool opened = false; if (resources.Contains(OSCILLOSCOPE)) opened = tekVISA.Open(OSCILLOSCOPE); if (opened) { NumberStyles styles = NumberStyles.AllowExponent | NumberStyles.Number; string response = ""; tekVISA.Write("DATA:SOU CH2"); tekVISA.Write("DATA:WIDTH 1"); tekVISA.Write("DATA:ENC ASCII"); tekVISA.Write("DATA:STOP 5208"); tekVISA.Query("WFMPRE:YMULT?", out response); response = response.Replace(":WFMPRE:YMULT ", ""); float ymult = float.Parse(response, styles); tekVISA.Query("WFMPRE:YZERO?", out response); response = response.Replace(":WFMPRE:YZERO ", ""); float yzero = float.Parse(response, styles); tekVISA.Query("WFMPRE:YOFF?", out response); response = response.Replace(":WFMPRE:YOFF ", ""); float yoff = float.Parse(response, styles); tekVISA.Query("WFMPRE:XINCR?", out response); response = response.Replace(":WFMPRE:XINCR ", ""); float xincr = float.Parse(response, styles); tekVISA.Write("CURVE?"); tekVISA.Read(out response); response = response.Replace(":CURVE ", ""); sbyte[] rawwave = response.Split(',').Select(n => Convert.ToSByte(n)).ToArray(); float[] wave = new float[rawwave.Count()]; for (int j = 0; j < rawwave.Count(); j++) wave[j] = (rawwave[j] - yoff) * ymult + yzero; System.IO.StreamWriter file = new System.IO.StreamWriter("waveform.csv"); file.WriteLine("V,S"); for (int j = 0; j < wave.Count(); j++) { float timepoint = j * xincr; file.WriteLine(wave[j].ToString() + "," + timepoint.ToString()); } file.Close(); tekVISA.Close(); } Console.ReadKey(); } } }
      
      






All Articles