SCPIスクリプトの例
このスクリプトは、エイリアスを使用してN6705Cパワーアナライザーに接続します。接続のためのdefaultChannel
は2
に設定されます。デフォルトでは、すべてのコマンドはそのチャンネルにアドレス指定されてデバイスに送信されます。
その後、スクリプトはリピートループを使用して電圧をさまざまな値に設定し、実際に測定された電圧を取得します。最後に、設定された電圧と実際の電圧との間の差についての情報を表示します。
スクリプトはtell
ブロックを使用して、デバイスと通信するスクリプトの部分を囲みます。これは、reset
やsetValue
のようなすべてのデバイス関連のコマンドがデバイスに送信されることを意味します。
tell
ブロック内のSenseTalkコマンドは通常どおり機能し続けます。技術的には、それらもpowerAnalyzer
オブジェクトに送信されますが、そのオブジェクトはput
やinsert
コマンドを実装していないため、コマンドは通常通りエンジンに渡されます。
スクリプトの各行の説明については、スクリプト例の解析セクションを参照してください。
スクリプト例:
set powerAnalyzer to visaDevice ("N6705CPower")
set powerAnalyzer’s defaultChannel to 2
tell powerAnalyzer
reset
setValue output, on
repeat with testVoltage = 3300 millivolts to 4.4 volts stepping by 100 millivolts
setValue voltage, testVoltage
query "measure voltage"
put value(it) volts into measuredVolts
put ABS(measuredVolts - testVoltage) into difference
convert difference to microvolts
insert difference into allDifferences
put !"Set voltage to [[testVoltage]] Actual measured was [[measuredVolts]] (difference [[difference]])"
end repeat
setValue output, off
end tell
put
put "Differences: " & allDifferences sorted
put
put "Average: " & average of allDifferences
put "Median: " & median of allDifferences
スクリプト例の解析
あなた自身のスクリプトを書くための手助けとして、以下にSCPIスクリプト例のmd 機能についての行ごとの説明を提供します。
set powerAnalyzer to visaDevice ("N6705CPower")
powerAnalyzer
をVisaDevice
オブジェクトとして確立します。これは、計器とのすべての通信に使用されます。
set powerAnalyzer’s defaultChannel to 2
デバイスのdefaultChannel
を設定すると、setValue
またはquery
呼び出しを使用してデバイスに指向されたすべてのコマンドがこのチャンネルを使用します。これにより、これらの関数の使用が簡素化され、効率化されます。必要に応じて、例えばon channel 3
のように、個々の呼び出しを別のチャンネルに指向させることもできます。
tell powerAnalyzer
tell
ブロック内に行を囲むことで、end tell
文まで、reset
、setValue
、query
などのすべての呼び出しがpowerAnalyzer
オブジェクトに向けられ、それを名前付けする必要がなくなります。これによりスクリプトが大幅に簡素化されます。
reset
*RST
リセットコマンドをpowerAnalyzer
オブジェクトに送信します。
setValue output, on
チャンネル2の電源出力をオンにするために、スクリプトはOUTPUT
SCPIコマンドをパラメータ値on
と共にpowerAnalyzer
オブジェクトに送信します。
引用符なしの場合、output
という変数がある場合、SenseTalkはその変数の値を使用します。この場合のようにoutput
という変数がない場合、代わりに"output"
が使用されます。
repeat with testVoltage = 3300 millivolts to 4.4 volts stepping by 100 millivolts
リピートループは、変数testVoltage
を3.3ボルト(3,300ミリボルト)から3.4ボルト、3.5ボルト、等から4.4ボルトまでの各値に設定します。このステートメントは、テストおよび計測デバイスを扱うための2つの有用なSenseTalk機能を示しています:
- 単位付き値の使用
- 計算で異なる互換性のある単位を混合する能力。この場合、ボルトとミリボルトです。
setValue voltage, testVoltage
パラメータ値がtestVoltage
の現在の値と等しいVOLTAGE
SCPIコマンドをpowerAnalyzer
オブジェクトに送信します。output
と同様に、単語"voltage"
は引用符で表示されることがあります。
query "measure voltage"
MEASURE:VOLTAGE?
SCPIコマンドをpowerAnalyzer
オブジェクトに送信します。query
は関数としてではなく、コマンドとして呼び出されるため、デバイスから返される測定値は自動的に変数it
に格納されます。
put value(it) volts into measuredVolts
このコマンドは2つの重要なことを行います。それはvalue
関数を呼び出してそれを単純な数値文字列に変換します。なぜなら、通常デバイスから科学表記のテキスト文字列として返されるからです。例えば:"+1.000000E+01"
。
SenseTalkは必要に応じて数字の 単純な文字列表現をその数値値に自動的に変換しますが、科学表記の値についてはこれを行いません。
次に、デバイスから返される値が電圧を表すため、ステートメントはvolts
を値の単位として割り当てます。これにより、スクリプトの後続のコマンドはSenseTalkの単位変換と計算能力を活用することができます。また、単位の不整合エラーを防ぐことができます。例えば、ボmd ルトとアンペアを足そうとすると、SenseTalkは例外をスローします。
put ABS(measuredVolts - testVoltage) into difference
測定された電圧と設定電圧の差の絶対値を変数difference
に割り当てます。
convert difference to microvolts
変数difference
をボルトの単位からマイクロボルトに変換します。これは、差が小さいため、この出力に対してより読みやすい形式です。
insert difference into allDifferences
値の差をリストに挿入します。リピートループが終了した後、各testVoltage
の測定された差を含むリストになります。
put !"Set voltage to [[testVoltage]] Actual measured was [[measuredVolts]] (difference [[difference]])"
現在のtestVoltage
に対するメッセージを表示します。これには以下が表示されます:
- テスト電圧
- 測定電圧
- 2つの測定値の差
文字列の前の!
は、文字列内のダブルスクエアブラケット内の各表現がその値に置き換えられることを意味します。
反復を終了します
各testVoltage
のリピートループの終了です。
setValue output, off
チャネル2の電源出力をオフ にするため、スクリプトはパラメータ値off
でOUTPUT
SCPIコマンドをpowerAnalyzer
オブジェクトに送信します。
end tell
powerAnalyzer
オブジェクトへのメッセージ指示のtell
ブロックの終了です。
put
put "Differences: " & allDifferences sorted
put
put "Average: " & average of allDifferences
put "Median: " & median of allDifferences
これらは、電圧の測定差に関する情報を報告するメッセージを表示します。