Changes between Initial Version and Version 1 of epics/process_output


Ignore:
Timestamp:
03/20/18 16:41:28 (7 years ago)
Author:
Takashi Obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/process_output

    v1 v1  
     1= output レコードに関する Tips =
     2
     3=== 事例1:ao, bo などの値を、別のレコードに設定したい ===
     4ao, bo など, output 系のレコードを使って、別のレコードに値を設定したい
     5
     6解決方法1:Forward Link を使う
     7
     8例えば、設定したいレコード名を test:target とすると
     9{{{
     10record(ai, "test:target") {
     11    field(INP,  "")
     12    field(FLNK, "")
     13}
     14}}}
     15のような、単なる"アナログ値の入れ物"を考える。
     16
     17このレコードに対して、別レコードで計算した値や caput で設定した値などを設定したいことがある。
     18そこで ao レコードのOUTフィールドにレコード名を書くのだが、
     19単にOUTに書くだけでは値は設定されるものの、設定先が「プロセス」されないので
     20ターゲット値は更新されない。
     21そこで、Forward Link を使って「プロセス」するのが1つのやり方。
     22{{{
     23record(ao, "test:ao1") {
     24    field(OUT,  "test:target")
     25    field(DOL,  "")
     26    field(OMSL, "supervisory")
     27    field(FLNK, "test:target")
     28}
     29}}}
     30
     31解決方法2
     32いちいちリンクを設定すると複雑になる場合もある。そこでもう1つの方法は OUT リンクに PP (Process Passive)オプションを付けるやり方。
     33{{{
     34record(ao, "test:ao1") {
     35    field(OUT,  "test:target PP")
     36    field(DOL,  "")
     37    field(OMSL, "supervisory")
     38    field(FLNK, "")
     39}
     40}}}
     41
     42=== 事例2:calcoutの場合 ===
     43サンプルとして、「biレコードの値を反転した値をtargetに書き込む」ことを考える。
     44計算するだけならば単にcalcレコードだが、出力値を設定したいので calcout レコードを使う。
     45{{{
     46record(bi, "test:bi1") {
     47  field(ZNAM, "zero")
     48  field(ONAM, "one")
     49  field(FLNK, "test:calcinv")
     50}
     51record(calcout, "test:calcinv") {
     52  field(INPA, "test:bi1")
     53  field(CALC, "!A")
     54  field(OUT,  "test:target")
     55  field(FLNK, "test:target")
     56}
     57}}}
     58もちろん、事例1と同様にFLNKするかわりに OUT PP しても良い。
     59{{{
     60record(calcout, "test:calcinv") {
     61  field(INPA, "test:bi1")
     62  field(CALC, "!A")
     63  field(OUT,  "test:target PP")
     64  field(FLNK, "")
     65}
     66}}}
     67
     68
     69
     70
     71【おまけ】レコードプロセスに関してはao,boと同じ。calcout の場合は便利なオプションがある。それが OOPT (Output Execute Option) という項目。
     72この機能を使うと、「出力が1になったときだけプロセスする」とか、「1→0になったときだけプロセスする」などの操作が出来る。
     73詳しくは [https://wiki-ext.aps.anl.gov/epics/index.php/RRM_3-14 Record Reference Manual] に記載されており、
     74{{{
     75Every Time -- write output every time record is processed.
     76On Change -- write output every time VAL changes, i.e., every time the result of the expression changes.
     77When Zero -- when record is processed, write output if VAL is zero.
     78When Non-zero -- when record is processed, write output if VAL is non-zero.
     79Transition To Zero -- when record is processed, write output only if VAL is zero and last value was non-zero.
     80Transition To Non-zero -- when record is processed, write output only if VAL is non-zero and last value was zero.
     81}}}
     82というオプションがある。
     83これを使えば、「インターロック発生時になにかアクションを起こし、復帰しても自動ではリセットしない」のような
     84機能を簡単に実現できる。
     85
     86※ソフトウェアベースなので、あくまでも補助的な(利便性向上のための)インターロックに使用すべき