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つでパルス出力が出せる、というお話しでした。