01/06/12 改訂
*太字はキーワード Device DeviceName デバイス名 NameTable NameTabl_name= name_1:val_1,name_2:val_2...; ネームテーブル EfastTable Efast_name=name_1,name_2.....; Efastテーブル SrqHandler Handler_name param_name; SrqHandlerテーブル TimeOut Time; TimeOut設定 EOS EndOfString; EOS設定
IoType IO Type; IO Type設定
%%C言語コード
%{
C言語コード
}%
ParamTable { パラメータテーブル
param_name1 {
rec = ai,
type = read,
.
...
}
param_name2 {
rec = bi,
type = read,
.
...
}
}
%%C言語コード
%{
C言語コード
}%
構文規則
例に使用しているのはTek2430オシロスコープです。
devnameGpib.gt 上記のようにnameにGpib機器の名前など任意の名称を付ける。 拡張子はgt 例 devTek2430Gpib.gt
基本的にファイル名のnameに付けた名称を付ける。 必ず、書き出しはアルファベットで始めてください。 例 Device Tek2430ネームテーブル
ネームテーブルは上記に示す通り,ネームテーブル名(NameTabl_Name),NAMEフィールドの文字列(name_n),文字列に対応するVALフィールドの値(val_n)から構成されている。val_nは省略ができ,記述しない時は,name_nに対して左から順に0〜nの数値が割り当てられる。
NameTable NameTabl_Name = name_1:0,name_2:1; と NameTable NameTabl_Name = name_1,name_2; は同じ表現となる。 例 NameTable VoltRange="CH1 VOLTS:2E-3":2,"CH1 VOLTS:5E-3":5,"CH1 VOLTS:1E-2":10; NameTable OffOn = off, on;Efastテーブル
EfastTable Efast_name=name_1,name_2.....; Efastテーブルは上記に示す通り,Efastテーブル名(Efast_Name),変換 文字列(name_n)から構成されている。 Efast I/O オペレーションにおけるデータの流れを以下に示す。○インプット
commandフィールドに登録されたコマンドが機器に送られ、データが読み返される読み返されたデータは、EFAST テーブルに登録された0番目の文字列から比較され、一致した文字列のインデックスがレコードの RVAL フィールドに入れられる。文字列の比較は左から右へ、EFAST テーブルに登録された文字数のみ行われる。例えば機器から読み返されるデータが、"OFF;XOFF;960"、"ON;XOFF;960" の場合、文字列の違いは "OFF" と "ON" だけなので、EFAST テーブルへの記述を以下のようにすれば、文字列の比較にかかる時間が短縮できる。
例 EfastTable OffOn = "OFF", "ON"; "OFF;XOFF;960"が読み返されるとレコードには、値"0"が入る。 "ON;XOFF;960"が読み返されるとレコードには、値"1"が入る。○アウトプット
VAL フィールドが EFAST テーブルへのインデックスとなり、機器に送られるコマンド(文字列)が選ばれる。EFAST テーブルに記述された文字列は変換されることなく、そのまま機器に送られる。
例 EfastTable OffOn = "OFF", "ON"; 値"0"を出力すると、Gpib機器に"OFF"が送られる。 値"1"を出力すると、Gpib機器に"ON"が送られる。SrqHandlerテーブル
SrqHandler Handler_name param_name;
Handler_nameには、関数名を指定します。
param_nameには、直接Srqが発生した時、実行するパラメータ名
TimeOut設定
GPIB機器へコマンドを発行した時のタイムアウトの時間を設定する。
通常は、設定の必要は有りませんが、レスポンスが遅いGPIB機器にアクセスするときには、設定が必要です。
TIME OUTのメッセージが出ている時には、変更してください。
単位はティクスで60で約1秒です。
デフォルトは[\nに設定されています。
EOS設定
GPIB機器から返送されるデータのEOSを設定する。
デフォルトは[\n]に設定されています。
EOSが異なる機器に対してのみ使用します。
IoType設定
GPIBインターフェースのタイプを記述する。
.dbdファイルに出力されるデバイスタイプに変更を加える時使用します。
デフォルトは[GPIB_IO]に設定されています。
パラメータテーブル
GPIB 機器に送るコマンドや読み取るデータに対する処理などをパラメータ・テーブルに記述する。そのフォーマット及び、各フィールドの説明を以下に示す。
| Para | mTable { | ||
| param_na | me { | パラメータテーブルネーム | |
| rec=..., | レコードタイプ | ||
| type=..., | GPIB I/Oオペレーションタイプ | ||
| pri=..., | プライオリティ | ||
| comman=..., | GPIBコマンド | ||
| rsp=..., | レスポンスエラーメッセージのバッファサイズ | ||
| leng=..., | READ,WRITEデータバッファサイズ | ||
| conv=..., | READオペレーション時のデータ変換フォーマット又は、データ変換関数名 | ||
| param1=..., | 変換関数への引き数1(整数) | ||
| param2=..., | 変換関数への引き数2(整数) | ||
| param3=..., | 変換関数への引き数3(文字列) | ||
| efast=..., | Efastテーブル名 | ||
| name=..., | ネームテーブル名 | ||
| comp=... | 現時点では未使用 | ||
| } | |||
| } |
recフィールド
使用するレコードタイプを指定する。
現在は、AI,AO,BI,BO,SI,SO,LI,LO,MBBI,MBBO,WFがサポートされている。
*WF(WaveForm)レコードを使用する時は、データ変換関数を記述する必要がある。
typeフィールド
GPIB I/O オペレーション・タイプ。READ、WRITE、CMD などがある。
○READ
1)commandフィールドに登録されたコマンドが機器に送られ、データが読み返される。
2)機器から読み込まれたデータは dpvt.msg バッファに入れられる。
3)入力データ(dpvt.msg バッファ)からレコードの VAL フィールドへの変換
書式の変換仕様は convフィールド に指定する。
◎convフィールドに変換関数を設定した場合
VAL フィールドへの変換は convフィールドで指定されるファンクション・ポインタが用いられる。そのとき、引き数として
param1param2、param3の3つのフィールドが使用できる。各フィールドの型はそれぞれ
int、int、char * である。ファンクション・ポインタで示される関数の宣言は以下のように行う。vaid
convフィールド( struct gpibDpvt *dpvt, int param1, int param2, char *(param3)
) {・・・}一番目の引き数 struct gpibDpvt *dpvt は、GPIB アドレスなどレコードの情報が格納されている構造体へのポインタであるので、変更してはならない。
○WRITE
1)(通常)レコードの VAL フィールドを参照して機器に送られるコマンドが作られる。
書式の変換仕様は convフィールド に指定する。
◎convフィールドに変換関数を設定した場合
convフィールドで指定されるファンクションポインタが用いられる。GPIBREAD
と同じく、引き数に param1, param2, param3 の3つフィールドが使用できる。
各フィールドの型はそれぞれ int、int、char * である。ファンクション・ポインタで示される関数の宣言は以下のように行う。vaid
convフィールド( struct gpibDpvt *dpvt, int param1, int param2, char *(param3)
) {・・・ }一番目の引き数 struct gpibDpvt *dpvt は、GPIB アドレスなどレコードの情報が格納されている構造体へのポインタであるので、変更してはならない。
2)1)で作られたコマンド dpvt.msg が機器に送られる。
○CMD
1)commandフィールドに登録されたコマンドが機器に送られる。
○CNTL
1)GPIB ATN ラインをアサートし、commandフィールドに登録されたコマンドを機器に送る。
そのあと、ATN ラインをデ・アサートする。
○SOFT
I/O オペレーションは行わず変換ルーチンを呼び出す。変換ルーチンは convフィール
ドで指定され、引き数に param1, param2, param3 の3つのフィールドが使用できる。各
フィールドの型はそれぞれ int、int、char である。ファンクション・ポインタで示され
る関数 の宣言は以下のように行う。vaid convフィールド( struct gpibDpvt *dpvt,
int param1フィールド, int param2フィールド, char *(param3フィールド) )
{・・・}一番目の引き数 struct gpibDpvt *dpvt は、GPIB アドレスなどレコードの情報が格納さ
れている構造体へのポインタであるので、変更してはならない。
SOFT の場合必ず convフィールドを指定しなければならない。
○READW
READW を使うときは SrqHndlerテーブルを登録しなければならない。
1)commandフィールドに登録されたコマンドが機器に送られる。
2)機器からの SRQ 割り込みを待つ。
3)割り込みが入ると機器からデータが読み込まれ、読み込まれたデータは
dpvt.msg バッファに入れられる。
6)入力データ(dpvt.msg バッファ)からレコードの VAL フィールドへの変換
書式の変換仕様は convフィールド に指定する。
◎convフィールドに変換関数を設定した場合
convフィールドで示されるファンクション・ポインタが用いられる。そのとき、引き数として
param1, param2, param3の3つのフィールドが使用できる。各フィールドの型はそれぞれ
int、int、char である。ファンクション・ポインタで示され る関数の宣言は以下のように行う。vaid
convフィールド( struct gpibDpvt *dpvt, int param1, int param2, char *(param3)
) {・・・ }一番目の引き数 struct gpibDpvt *dpvt は、GPIB アドレスなどレコードの情報が格納されている構造体へのポインタであるので、変更してはならない。
○EFASTO
EFASTO はレコード・タイプが BO、MBBO のときのみ使用される。
1)EFAST テーブルのインデックスがレコードの VAL 値であるコマンド(efastフィールド[VAL])
が機器に送られる。
○EFASTI
EFASTI はレコード・タイプが BI、MBBI のときのみ使用される。
1)commandフィールドに登録されたコマンドが機器に送られ、データが読み返される。
2)機器から読み返されたデータは、dpvt.msg バッファに入れられる。
3)入力データ(dpvt.msg バッファ)と EFAST テーブルの要素が比較される。
4)3)で一致した EFAST テーブル要素のインデックスがレコードの VAL
フィールドに入れられる。
注)convフィールドは 未記入にしなければならない。
○EFASTW
EFASTW はレコード・タイプが BI、MBBI のときのみ使用される。EFASTW を使うと
きは SrqHndlerテーブルを登録しなければならない。
1)commandフィールドに登録されたコマンドが機器に送られる。
2)機器からの SRQ 割り込みを待つ。
4)割り込みが入ると機器からデータが読み込まれ、読み込まれたデータは
dpvt.msg バッファに入れられる。
6)入力データ(dpvt.msg バッファ)と EFAST テーブルの要素が比較される。
7)6)で一致した EFAST テーブル要素のインデックスがレコードの VAL
フィール ドに入れられる。
注)convフィールドは 未記入にしなければならない。
priフィールド
GPIB ドライバが実行されるときのプライオリティ。HIGH か LOW のどちらかで登録
しなければならない。
デフォルトはLOW
commandフィールド
機器に送られる文字列(コマンド)の指定。
WRITEオペレーションの時は、C言語のprintf文のフォーマットを使用する事で入力データをWRITEコマンドに変換して機器に送る。
rspフィールド
write オペレーション時のレスポンス・エラー・メッセージに使用される
dpvt.rsp バッファ・サイズ。
デフォルトは0
lengフィールド
機器への書き込みまたは読み込みのデータに使用される dpvt.msg バッファ・サイズ。
デフォルトは32
convフィールド
READオペレーションの時に使用(WRITEオペレーションのフォーマットはcommandフィールドに指定)
書式変換の指定、又は、データ変換関数の関数名。
convフィールドは、主に書式変換の指定として使用される。データ変換関数名として使用する場合は、予め、C言語を用いて関数を記述する必要がある。
書式変換の指定の仕方は、C言語のprintf文などのフォーマットの記述と同じ。
convフィールドの指定において、変換するレコード・タイプの VAL フィールドのデータ型に注意する必要がある。例えば、Analog
Input レコードは倍精度の浮動小数点型で あるので、convフィールドには "%f"
ではなく、"%lf" を指定しなければならない。
書式変換の時には必ず "(ダブルコーテーション)で囲む。
データ変換関数名として使用する時はダブルコーテーションは、必要ない。
param1フィールド
convフィールドで変換関数を使用した場合に変換関数へ渡される引き数となる(int
型)。
param2フィールド
convフィールドで変換関数を使用した場合に変換関数へ渡される引き数となる(int
型)。
param3フィールド
convフィールドで変換関数を使用した場合に変換関数へ渡される引き数となる(char
* 型)。
efastフィールド
EFAST テーブル名。
レコード・タイプが BI、MBBI のときのみ使用
nameフィールド
ネーム・テーブル名。
レコード・タイプが BI、MBBI のときのみ使用
compフィールド
このフィールドは現時点では未使用。
*パラメータテーブルの各フィールドには、レコードタイプ(recフィールド)ごとに、デフォルトが設定されているので必要なフィールドのみ設定を行う。
デフォルトは以下の表に示す。
Device XxTek2430
NameTable offOn="OFF":0,"ON":1;
EfastTable debOffOn="DEBUG OFF","DEBUG ON";
ParamTable {
"CH1 READ"{
rec=ai,
command="CH1? VOL",
conv="CH1 VOLTS:%lf"
}
"CH1 WRITE"{
rec=ao,
command="CH1 VOL:%.lf"
}
"DEBUG STAT"{
rec=bi,
command="DEB?",
efast=debOffOn,
name=offOn
}
"DEBUG STAT SET"{
rec=bo,
efast=debOffOn,
name=offOn
}
CH1 READを実行するとコマンド"CH1? VOL"がGpib機器に送られデータが読み返され フォーマット"CH1 VOLTS:%lf"で表示される。
CH1 WRITE
入力された数値データがコマンド"CH1 VOL:%.lf"に変換されてGpib機器に送られる。
1を入力すると"CH1 VOL:1"が出力される。
DEBUG STAT
DEBUG STATを実行するとコマンド"DEB?"がGpib機器に送られ現在のデバックステータスの状態が読み返される。その時、ステータスは文字列で返されEfaastテーブルと比 較されて"DEBUG OFF"の時は、0,"DEBUG ON"の時は、1の値となる。更にName テーブルが指定されているので、0の時は、OFF,1の時は、ONと表示される。
DEBUG STAT SET
0を入力するとEfastテーブルによって"DEBUG OFF"、1の時は"DEBUG ON"に変換さ れてコマンドとして、Gpib機器に送られOFF,ONの切り替えが行われる。
| AI | レコード | |
| recフィールド | ai | |
| command フィールド | GpibREADコマンド | |
| AO | レコード | |
| recフィールド | ao | |
| command フィールド | GpibWRITEコマンドフォーマット | |
| BI | レコード | |
| recフィールド | bi | |
| commandフィールド | GpibREADコマンド | |
| efast フィールド | 読み込まれる文字列を記述しておいたEfastTable名を記入 | |
| nameフィールド | 記述しておいたNameTable名を記入(省略可能) | |
| BO | レコード | |
| recフィールド | bo | |
| efast フィールド | 出力時に変換する文字列を記述しておいたEfastTable名を記入 | |
| nameフィールド | 記述しておいたNameTable名を記入(省略可能) | |
| SI | レコード | |
| recフィールド | si | |
| commandフィールド | GpibREADコマンド | |
| SO | レコード | |
| recフィールド | so | |
| LI | レコード | |
| recフィールド | li | |
| commandフィールド | GpibREADコマンド | |
| LO | レコード | |
| recフィールド | lo | |
| command フィールド | GpibWRITEコマンドフォーマット | |
| MB | BIレコード | |
| recフィールド | mbbi | |
| command フィールド | GpibREADコマンド | |
| efast フィールド | 読み込まれる文字列を記述しておいたEfastTable名を記入 | |
| nameフィールド | 記述しておいたNameTable名を記入(省略可能) | |
| MB | BOレコード | |
| recフィールド | mbbo | |
| efast フィールド | 出力時に変換する文字列を記述しておいたEfastTable名を記入 | |
| nameフィールド | 記述しておいたNameTable名を記入(省略可能) | |
| WF | レコード | |
| recフィールド | wf | |
| commandフィールド | GpibREADコマンド | |
| convフィールド | データ変換関数 *C言語で記述が必要 |
1)Makefileに新しいデバイスサポートのコンパイルの定義を記述する。
例
| ファイル名.o: | $(SRC)/ファイル名.gt |
| $(MAKE_GPIB) |
例
/*** COMMAND LIST ***/
| No. | 0 | SI | status read |
| No. | 1 | SO | status write |
| No. | 2 | BO | trigger off |
| No. | 3 | BI | trigger on |
status writeコマンドを使用するときは、SOレコードを使いGpibコマンドの指定は1となります。
R3.13のコンパイル方法
1)デバイス登録を行う為srcディレクトリにあるxxxInclude.dbdファイルに次の一行を追加する。
include ファイル名.dbd
2)同じくMakefile.Vxに新しいデバイスサポートのコンパイルの定義を記述する。
LIBOBJS += ファイル名.o
3)gmakeを行いコンパイルする。
R3.12の登録方法
EPICSのワークディレクトリの下にcat_asciiディレクトリが有ることを確認する。
cat_asciiディレクトリが無いときは、作成する。
cat_asciiにdevSup.asciiファイルがある事を確認する。
devSup.asciiがない時は、EPICSのワークディレクトリの下のbase/src/asciiからコピーする。
devSup.asciiに登録する内容を以下に示します。
record type link type device support name module name/description(GPIB)
record type: デバイス・サポートのレコード型。
link type: デバイスが使用するインターフェイス型。
GPIBの時は、GPIB_IOを指定
device support name: 登録するデバイス・サポート名。 "devDeviceNameGpib"
DeviceNameの所には、GDLのデバイス名で指定した名前の前にレコードタイプを付けて記入する。レコードタイプの頭文字は大文字で記入する。
module name/description: レコードの DTYP フィールド名。
データベースを作成する時に、デバイスタイプを指定する時に使用される。
例
GDLのデバイス名にTek2430を登録し、aiレコードを使用する場合
"ai" GPIB_IO "devAiTek2430Gpib" "Tek2430"
devSup.asciiの登録が終了したらEPICSのワークディレクトリでmakesdrを実行する。
makesdrが正常に終了すると、default.dctsdrとdefault.sdrSumファイルが更新され新しいデバイスが登録される。
dctを使用してデータベースを作成している場合データベースを作成しているディレクトリに有るdefault.dctsdrとdefault.sdrSumのリンクを張り直す必要が有ります。
データベース
レコードに GPIB を使用する場合、DTYP フィールドに devSup.ascii で登録した
module name/description を指定し、OUT/INP フィールドに次のように指定する。
GPIB_IO: #L0 A16 @1
#Lx: GPIB コントローラのリンク・ナンバ。同一クレート内に同じ GPIB
コントローラが複数台ある場合にコントローラの指定を行う。1つの場合は0を指定
Ax: GPIB アドレス。
@x: GPIB デバイス・サポートで登録したパラメータ・テーブルのパラメータ番号。コンパイル時に作成されたコマンドリストを参照
R3.13の登録方法
R31.3ではコンパイルの指定の時にデバイス登録の記述を行いgmakeを行うことによってデバイス登録されます。
データベースを作成する時にDTYPフィールドに指定するデバイスタイプはGDLの中で指定したデバイス名となります。その他の指定はR3.12と同様です。