第 1 章 コマンド概要

1.1 受信・送信プロトコル

メッセージ
    RS-232Cで受信・送信されるデータをメッセージといいます。
    以下にメッセージの種類を示します。


    メッセージにはコントローラから機器に送信するプログラムメッセージ
    と、機器からコントローラに送信する応答メッセージがあります。
    プログラムメッセージはコマンド・プログラムメッセージと
    クエリ・プログラムメッセージに分けることができます。

   ・コマンド・プログラムメッセージは機器の設定、リセットなどの機器を
    制御する命令です。
   ・クエリ・プログラムメッセージは動作結果、測定結果、あるいは機器の
    設定状態を問い合わせる命令です。
   ・応答メッセージはクエリ・プログラムメッセージに対する応答です。
    応答メッセージはクエリ・プログラムメッセージを受信し、構文を
    チェックした時点で作成されます。

コマンド・シンタックス
    これから、コマンドおよびクエリ・プログラムメッセージを総称して
    コマンドと呼びます。(コマンドは、HIOKI固有のSCPI言語です)
    コマンドは大文字・小文字・その混合のいずれの場合も受け付けます。

    コマンド名は、実行しようとする機能にできるだけ近いものが選ばれて
    います。
    そのほとんどのコマンド名は短縮可能です。
    コマンド名そのものを”ロングフォーム”といい,短縮したものを
    “ショートフォーム”といいます。
    本取扱説明では、ショートフォームの部分を大文字で、小文字まで含めた
    部分をロングフォームとして記述しています。
    また、本体からの応答メッセージは、大文字のロングフォームで
    返されます。

    例 DISPlay は
       DISPがショートフォーム
       DISPLAYがロングフォームとなります。
      DISPLAY、DISP のどちらでも受け付けますが、
      DISPLA、DISPL、DIS ではエラーとなります。

コマンド・プログラム・ヘッダ
    コマンドには必ずヘッダが必要です。ヘッダは、そのコマンドがどんな
    機能を持つかを示します。
    ヘッダには、単純コマンド型、複合コマンド型、共通コマンド型の3種類
    のヘッダ形式があります。

クエリ・プログラム・ヘッダ
    機器のコマンドに対する動作結果や設定を問い合わせるために使用します。
    プログラム・ヘッダの後に“?”をつけるとクエリとして認識されます。
    ヘッダの構成はコマンド・プログラム・ヘッダと同様であり、“?”が
    常に最後のコマンドに付きます。前記の3タイプのコマンド形式のいずれ
    にもクエリは存在します。

応答メッセージ
    クエリに対する応答メッセージは、プログラムメッセージと同様にヘッダ
    部(なくすこともできます)とデータ部からなり、原則としてそのクエリ
    に対応するプログラムメッセージのフォーマットと同様のフォーマットで
    出力します。

ターミネータとセパレータ
   (1)メッセージターミネータ
    1回のメッセージ転送の区切りを表し、ターミネータ自身はメッセージに
    含まれません。
    メッセージターミネータは、デリミタを設定してください。
    (本体取扱説明書参照→「13.2 RS-232C設定」)

   (2)メッセージ単位セパレータ
    セミコロン“;”はメッセージ単位セパレータとして使用され、1行に複数
    のメッセージを記述したい場合に使用します。

   (3)ヘッダ・セパレータ
    ヘッダとデータを持つメッセージにおいて、ヘッダとデータを分離する
    ヘッダセパレータとして、スペース“_”を使用します。スペース“_”は、
    説明上使用していますが、実際のプログラムは表示しません。

   (4)データ・セパレータ
    コンマ","は複数のデータ間を区切るデータセパレータとして使用します。

コマンド・ツリー
    複数の複合コマンド型のメッセージを記述する場合の規則として、
    セミコロン(メッセージ単位セパレータ)の次のヘッダにコロン(:)が
    付いていない場合、そのヘッダは直前のメッセージの中の最後のコロン
    より前のヘッダに引き続いているものとみなします。
    これはUNIXやMS-DOSのディレクトリ構造におけるカレント・ディレクトリ
    の概念に相当し、この直前のヘッダをカレント・パスと呼ぶことにします。
    例1
       :CONF:TDIV 1.E-3;:CONF:SHOT 15
    例2
       :CONF:TDIV 1.E-3;SHOT 15

    例1と例2は、TIME/DIVを1ms、記録長を15DIVに設定するメッセージです。
    例1では、セミコロンの次にコロンがあるため、カレント・パスはルートに
    なります。従って次のコマンド検索はルートからおこないます。
    例2では、":CONF:TDIV 1.E-3"でカレント・パスが":CONF"になっているの
    で、"SHOT"の前の":CONF:"を省略できます。
    コマンドの先端にあるコロン(:)は、コマンドの検索をルートから行う
    ことを表します。

データ形式
    データ形式として、文字データ、10進数値データ、文字列データを使用
    します。
   ○ 文字データ
    (1)先頭文字は、必ず英文字とします。
    (2)先頭以外の文字は、英文字、数字、およびアンダースコア(_)だけを
      含みます。
    (3)英文字は、送信側は大文字だけですが、受信側は大文字、小文字の両方
      を許容します。
     
   ○ 10進数値データ
    10進数の数値データ表現は、次に示すNR形式を使用します。
    NR形式は、NR1からNR3の3種類であり、それぞれ符号つき数値、符号なし
    数値の両方を受け付けます。
    符号のない数値は、正の数と判断します。
    また、数値の精度が8807/8808/8807-50/8808-50の取扱い範囲を越えた場合は、
    四捨五入を行います。

    以上の3種類の形式を全て含む形式をNRf形式と呼びます。
    受信時は数値データをNRf形式で受け付けますが、送信時はNR1〜NR3の
    いずれかを、コマンドごとに指定して、送信します。
   ○ 文字列データ
    文字列データは、前後をクォーテーション・マークで囲みます。
    (1)8ビットASCII文字からなるデータです。
    (2)本体で扱えない文字は、スペースに置き換わります。
    (3)クォーテーションマークとして、送信側はダブル・クォート(")だけ
      ですが、受信側はダブル・クォートとシングル・クォート(')の両方
      を受け付けます。

1.2 ステータスバイトとイベントレジスタ

ステータス・バイト
    ステータスバイト各ビットは、そのビットに対応するイベント・レジスタ
    のサマリ(論理和)となっています。
    ステータスバイト、標準イベント・ステータス・レジスタ、イベント・
    ステータス・レジスタ0の値の読み出しが可能です。

ステータスバイトの各ビット
ビット7 未使用:0
ビット6 未使用:0
ビット5(ESB) イベント・サマリビット
標準イベント・ステータス・レジスタのサマリを表します。
ビット4(MAV) メッセージアベイラブル
出力キューにメッセージがあることを示します。
ビット3 未使用:0
ビット2 未使用:0
ビット1 未使用:0
ビット0(ESB0)イベント・サマリ・ビット0
イベント・ステータス・レジスタ0のサマリを表します。

    ステータスバイトの読み出しは以下のコマンドを使用します。

    ステータスバイトの読み出し             *STB?
       
標準イベント・ステータス・レジスタ(SESR)
    このレジスタのサマリがステータス・バイトのビット5にセットされます。
   ○ 標準イベント・ステータス・レジスタの内容がクリアされるのは、以下の
    場合です。
    1.*CLSコマンドを受信
    2.*ESR?クエリで内容が読み出されたとき
    3.電源が再投入されたとき

標準イベント・ステータス・レジスタの各ビット
ビット7(PON) 電源再投入
最後にこのレジスタが読み出されてから、電源が切断されたことがある。
ビット6(URQ) ユーザ・リクエスト:未使用
ビット5(CME) コマンドエラー
受信したコマンドに誤りがある。文法上の誤り、意味上の誤り
ビット4(EXE) 実行エラー
機器が実行中のコマンドに誤りがある。
レンジ・エラー、モード・エラー
ビット3(DDE) 機器に依存したエラー
コマンドエラー、クエリエラー、実行エラー以外の
原因でコマンドが実行できなかった。
ビット2(QYE) クエリエラー
キューが空、データ喪失(キューのオーバーフロー)
ビット1 コントローラ権の要求(使用しない)未使用:0
ビット0(OPC) 動作の完了
*OPCコマンドに対してのみセットされる。

    標準イベント・ステータス・レジスタの読み出しは、以下のコマンドを
    使用します。
    標準イベント・ステータス・レジスタの読み出し    *ESR?

イベント・ステータス・レジスタ0(ESR0)
    このレジスタのサマリがステータス・バイトのビット0にセットされます。
   ○ イベント・ステータス・レジスタ0がクリアされるのは以下の場合です。
    1.*CLSコマンド受信
    2.:ESR0?クエリで内容が読み出されたとき
    3.電源が再投入されたとき

イベント・ステータス・レジスタ0の各ビット
ビット7 未使用:0
ビット6 未使用:0
ビット5 パラメータ演算終了
ビット4 未使用:0
ビット3 プリンタ動作終了(プリント、コピー出力終了時)
ビット2 トリガ待ち終了(トリガがかかるとセットされる)
ビット1 START処理終了(STOPするとセットされる)
ビット0 RS-232Cに関係しないエラー、プリンタのエラーなど

    イベント・ステータス・レジスタ0の読み出しは以下のコマンドを
    使用します。
    イベント・ステータス・レジスタ0の読み出し     :ESR0?

ステータス・バイトデータ構造


1.3入力バッファと出力キュー
   (1)入力バッファ
    入力バッファとして2048バイト持っています。
    受信したメッセージは、ここに入力され、順次実行されます。
    ただし、:ABORTコマンドは受信した時点で実行されます。
   (2)出力キュー
    出力キューとして2048バイト持っています。
    応答メッセージは、ここにためられ、コントローラから読み出されます。
    応答メッセージが2048バイトを超えた場合は、クエリ・エラーとなります。

    出力キューがクリアされるのは、以下の場合です。

    1.コントローラが読み出したとき
    2.デバイス・クリア
    3.電源再投入
    4.次のメッセージの受信

1.4 その他の項目

1.4.1 RS-232Cについて

RS-232Cエラー
   (1)パリティ・エラー
    パリティ・ビットの方式は、偶数パリティ、奇数パリティ、パリティなしが
    あります。
    偶数パリティと奇数パリティは、"1"の個数を偶数または奇数にすることに
    より通信エラーを検出します。
    受信時にパリティが違っているとパリティ・エラーを起こします。
   (2)フレーミング・エラー
    スタート・ビットから数えてストップ・ビットの位置が“L"の場合、
    フレーミング・エラーとなります。
    原因1:伝送速度、パリティ、ストップ・ビットなどのパラメータがあって
        いない。
    原因2:ノイズの影響
   (3)オーバーラン・エラー
    通信コントローラは、受信に関してダブル・バッファになっています。
    (1ビットずつ受信するシフト・バッファ、CPUが読み出すための
     受信データ・バッファ)
    受信バッファにデータがある状態で、それをCPUが読み取らないうちに、
    シフト・レジスタの次の1キャラクタの受信が完了した時に起こるエラー
    です。データが受信データ・バッファに上書きされるため、直前のデータは
    失われます。
    原因1:伝送速度が速すぎる
    原因2:割込み禁止の時間が長すぎる箇所がある。
    原因3:上位の割り込みが実行される時間が長すぎるため、受信割り込み
        に割り当てられる時間が少ない。
 
フロー制御
    RS-232Cそのものは決められた伝送速度でデータをやり取りすることはでき
    ますが、CPUの処理能力がそれに追いつかない時、前に受信したデータの上
    に新しい受信データが上書きされてしまう場合があります。
    こうならないためには、受信側バッファからデータがあふれる前に、受信側
    が送信側に対して送信を中断させる信号を何らかの手段で伝える必要があり
    ます。これをフロー制御といい、ハードウェア・ハンドシェーク、
    ソフトウェア・ハンドシェークがあります。
   (1)ハードウェア・ハンドシェーク
    信号線のRTS(RS)、CTS(CS)をON、OFFすることによりフロー制御を行う。
    1.受信時
      入力バッファが3/4を超えたとき、RTS=Lowにする
      入力バッファが1/4を以下になったとき、RTS=Hiにする
    2.送信時
      CTS=Lowで、データ送信中断
      CTS=Hiで、データ送信
   (2)ソフトウェア・ハンドシェーク
    Xon、Xoffコードを送信することによりフロー制御を行う。
    1.受信時
      入力バッファが3/4を超えたとき、D3(13H)を送信する
      入力バッファが1/4を以下になったとき、D1(11H)を送信する
    2.送信時
      D3(13H)受信で、データ送信中断
      D1(11H)受信で、データ送信
      注:バッファサイズ
        a. 入力バッファ:2048byte
        b. 出力キュー:2048byte