wiki:epics/streamdevice/waveform1

Version 2 (modified by obina, 11 years ago) (diff)

--

waveformレコードに値を入れたい

例1:オシロスコープ

あらかじめASCIIモードで転送するように設定。CURV?コマンドを送ると、数値のみをコンマ区切りで値を返す場合。 (こんな感じのレスポンスは楽に処理できます)

CURV?
19,21,19,20,19,20,19,20,19,18, .... ,19,19,20,20,19,19<LF>

解決方法

protocol file (sample.proto)

Terminator = LF;
getIDN {
    out "*IDN?";
    in "%39c";
    ExtraInput = Ignore;
}
getDATA {
    Separator = ",";   # データ区切りとしてコンマを使用
    out "CURV?";       # CURV? コマンドを送る
    in  "%d";          # integer データを入力。waveformレコードから呼ばれたときには%d変換が繰り返される。
}

database file (stream.db) NELM, FTVLを正しく設定しておく。 機器が返してくる配列数が不定の場合はNELMを大き目にとっておいて、プロセスした後でNORDをみてデータ数を判別する。

record(waveform, "obina:data_ch1")
{
    field(DESC, "get wave data")
    field(DTYP, "stream")
    field(SCAN, "Passive")
    field(INP,  "@sample.proto getDATA PS1")
    field(NELM, "10000")
    field(FTVL, "LONG")
}