Changes between Initial Version and Version 1 of epics/process_output


Ignore:
Timestamp:
03/20/18 16:41:28 (6 years ago)
Author:
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※ソフトウェアベースなので、あくまでも補助的な(利便性向上のための)インターロックに使用すべき