EPICS中のコマンドに関する備忘録¶
データベースファイル(.db ) について¶
構成¶
データベースファイル(.db)の構成は、以下の通り.
record( ai, "epics:temperature" ) { field( DESC, "temperature of water" ) field( DTYP, "stream" ) field( INP , "@temperature.proto getTemperature PS1" ) field( SCAN, "I/O Intr" ) }
構成の規約としては以下、
ひとつの.db 中に データ単位:レコード(record)が複数定義され、
レコードは、属性:フィールド(field)を複数持ち、
フィールドごとに、一つの値(文字列)が割り当てられている.
レコード(record)¶
レコードタイプの例については以下参照.
ai, ao, bi, bo
stringin, stringout, longin, longout
etc.
詳細は、 EPICS Record Reference を参照のこと.
EPICS Record Reference ( https://epics.anl.gov/base/R7-0/6-docs/RecordReference.html )
フィールド(field)¶
field( var1, var2 ) の形を取り、var1に属性のタイプを、var2に値を書き込む.
属性のタイプとしては、例えば以下がある.
属性のタイプ |
説明 |
例 |
---|---|---|
DESC |
フィールドの説明情報、DESCription |
temperature of water |
DTYP |
レコードのデータ型、Data TYPe |
stream |
INP |
入力値の取得規約、どうやって入力するか.INPut |
@temperature.proto getTemperature PS1 |
SCAN |
入出力頻度・タイミング.SCAN |
I/O Intr |
stream型のINP, OUTについての記述は次の通り.
INP/OUT = "(使用するプロトコル名) (プロトコル中の入力に使用する関数名) (プロトコルに渡す変数名)"
ここで、プロトコルに渡す変数名は、IOCが把握しているものにする. TCP/IPやシリアルの値を用いる場合、ポートやデバイスへの紐付けを "st.cmd" に記載するはず である.
(e.g.1) drvAsynIPPortConfigure( "web", "www.google.co.jp:80",0,0,0 ) (e.g.2) drvAsynSerialPortConfigure( "PS1", "/dev/ttyACM0" )
それぞれ、 "web"に"www.google.co.jp:80"、
"PS1"に "/dev/ttyACM0" を割り当てており、 .dbファイルは、プロトコルにこれを渡し、プロトコルに従ってデータを取得、書込する.
プロトコルファイル(.proto)について¶
通信規約を規定する関数を定義する.例を示す.
Terminator = CR LF; putval{ out "%s"; in "%d"; }
ここでは、入出力のデータ区切り: "Terminator" と、データの取扱: "puvVal関数" が記載されている.
"CR LF" は "Carriage Return Line Feed" (キャリッジ・リターン、ライン・フィード).( つまり"rn")
putval関数は、与えられた引数を フォーマット "%s" (文字列型)で出力する.
例えば、シリアルポートから、文字列"RD 1rn"のようなバイト型文字列が送信されてきた場合(RS-232C通信のようなASCIIのコマンド)、ch1の値をint型として返す.
初期化スクリプト(st.cmd)に関して¶
追記事項について¶
以下の事項などを追記し、 st.cmd を作成する.
StreamDeviceを使用する場合、protocolsディレクトリの位置を記載する.
epicsEnvSet( "STREAM_PROTOCOL_PATH", ".:../../protocols" )
初期化時にロードするデータベースファイルを記載する.
dbLoadRecords( "db/temperature.db", "user=epics" )
"user=epics" は .dbファイル内部で規定されている $(user)に値を与える事が可能.
ethernetケーブルなどの、ハードウェアを使用する場合は、設定を記載する.
(e.g.1) drvAsynIPPortConfigure( "web", "www.google.co.jp:80",0,0,0 ) or (e.g.2 l.1) drvAsynSerialPortConfigure( "PS1", "/dev/ttyACM0" ) (e.g.2 l.2) asynSetOption ("PS1", 0, "baud", "19200")
命令を表にまとめておく.(Sphinxのcsv-table都合でカンマは/に置換.)¶
'式' |
'説明 |
---|---|
'epicsEnvSet( "環境変数名"/"値" )' |
'環境変数をセットする. (e.g.) epicsEnvSet( "STREAM_PROTOCOL_PATH"/ ".:../../protocols" )' |
'dbLoadRecords( ".dbファイル名"/"キーワード類" )' |
'.dbファイルを読み込む.(e.g.) dbLoadRecords( "db/temperature.db"/ "user=epics" )' |
'drvAsynIPPortConfigure( "変数名"/"IPアドレス:ポート番号"/0/0/0 )' |
'TCP/IP通信のアドレス、ポート情報を変数に割り当てる (e.g.) drvAsynIPPortConfigure( "web"/"www.google.co.jp:80"/0/0/0 )' |
'drvAsynSerialPortConfigure( "変数名"/ "シリアルデバイス名" )' |
'シリアルポート番号を変数に割り当てる.(e.g.) drvAsynSerialPortConfigure( "PS1"/ "/dev/ttyACM0" )' |