wiki:epics/pulse-output

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

--

小ネタ:パルス出力を出したい

機器制御をするとき、ON/OFFのレベル出力を出すときにはbinary output レコードが便利ですが、 場合によってはパルス出力を出したいことがあります。 以前には、

bo (set 1) -> TaskDely record (watchdog record) ->bo (set 0)

みたいなレコードリンクを作ったこともありました。が、あるとき Record Reference Manual をみてみると、bo レコードにはHIGHフィールドがあって、

HIGH    Seconds to Hold High  FLOAT

などと書いてあることに気づいた( https://wiki-ext.aps.anl.gov/epics/index.php/RRM_3-14_Binary_Output

テストレコードを作成

record(bo, "obina:pulse") {
  field("DESC", "binary output")
  field("ONAM", "ON")
  field("ZNAM", "OFF")
  field("HIGH", "0.2")
}

camonitorで測定しながら値を1にセットする、caput obina:pulse 1

obina:pulse                    2012-06-18 17:46:07.046824 ON
obina:pulse                    2012-06-18 17:46:07.244182 OFF
obina:pulse                    2012-06-18 17:46:22.543104 ON
obina:pulse                    2012-06-18 17:46:22.740631 OFF

ちゃんと設定通り0.2秒後にON→OFFになっている。 (普通のLinuxなのでリアルタイムの正確性はない。Tickの分だけ遅れるのも当然。) 目的によっては十分だろう。

ディレイ値はランタイムで変更可能なので、 caput obina:pulse.HIGH 10.0 と設定してみる。

obina:pulse                    2012-06-18 17:46:47.725375 ON
obina:pulse                    2012-06-18 17:46:57.723736 OFF

特に問題無し。ちゃんとAsyncで動いているので、10秒のあいだ他の制御をブロックすることもありません。

レコードリンクを使わなくとも、これ1つでパルス出力が出せる、というお話しでした。