Changes between Initial Version and Version 1 of epics/softIoc


Ignore:
Timestamp:
03/31/18 14:08:54 (7 years ago)
Author:
Takashi Obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/softIoc

    v1 v1  
     1= softIoc コマンドで簡単に ioc データベースをテストする =
     2
     3(KEKB佐々木さんからネタ提供。それにいくつかデータベース例を加えてwikiに掲載)
     4
     5簡単にレコードのテストをしたいときに便利。
     6seqencerを使う場合は makeBaseApp して application を作る必用があるが、
     7データベースの単体テストであれば "softIoc" コマンドがお手軽で便利。
     8dbLoadTemplateなどの検証にも使用可能。
     9
     10
     11== 使用例1 ==
     12dbファイルを用意する。例えば、単にカウントアップするレコードとして
     13{{{
     14record(calc,"test:count") {
     15    field(SCAN, ".1 second")
     16    field(INPA, "test:count.VAL")
     17    field(CALC, "A+1")
     18}
     19}}}
     20こんなファイルを作成して test.db として保存する。
     21
     22単純に使うならば、-dオプションでdbファイルを指定して実行するのみ。
     23{{{
     24$ softIoc -d test.db
     25Starting iocInit
     26############################################################################
     27## EPICS R3.15.5
     28## EPICS Base built Jan 24 2018
     29############################################################################
     30iocRun: All initialization complete
     31epics> dbl
     32test:count
     33epics>
     34epics> dbpr test:count
     35A: 44               ASG:                B: 0                C: 0
     36CALC: A+1           D: 0                DESC:               DISA: 0
     37DISP: 0             DISV: 1             E: 0                F: 0
     38G: 0                H: 0                I: 0                J: 0
     39K: 0                L: 0                NAME: test:count    SEVR: NO_ALARM
     40STAT: NO_ALARM      TPRO: 0             VAL: 45
     41epics>
     42}}}
     43
     44別の端末を開いて camonitor で確認
     45{{{
     46$ camonitor test:count
     47test:count                     2018-03-31 13:38:04.648396 82
     48test:count                     2018-03-31 13:38:05.649164 83
     49test:count                     2018-03-31 13:38:06.648305 84
     50test:count                     2018-03-31 13:38:07.648437 85
     51}}}
     52ちゃんと1秒ごとにカウントアップしている。
     53
     54
     55== コマンドのインストール場所、オプション ==
     56softIoc コマンドは、caget, caput などと同じフォルダにインストールされているので、確認。
     57{{{
     58$ which caget
     59/opt/epics/R315.5/base/bin/linux-x86_64/caget
     60$ which softIoc
     61/opt/epics/R315.5/base/bin/linux-x86_64/softIoc
     62}}}
     63
     64オプション類は -h で確認。
     65{{{
     66$ softIoc -h
     67Usage: softIoc [-D softIoc.dbd] [-h] [-S] [-a ascf]
     68        [-m macro=value,macro2=value2] [-d file.db]
     69        [-x prefix] [st.cmd]
     70Compiled-in path to softIoc.dbd is:
     71        /opt/epics/R315.5/base/dbd/softIoc.dbd
     72}}}
     73
     74
     75== 使用例2 ==
     76FLNK の使い方の例:count レコードのスキャン時間を 0.1 sec にして、sin とつなげる
     77{{{
     78record(calc,"test:count") {
     79    field(SCAN, ".1 second")
     80    field(INPA, "test:count.VAL")
     81    field(CALC, "A+1")
     82    field(FLNK, "test:sin1")
     83}
     84record(calc, "test:sin1") {
     85    field(SCAN, "Passive")
     86    field(INPA, "test:count.VAL")
     87    field(CALC, "sin(A/10.0)")
     88}
     89}}}
     90このようなレコードを作っておくと、磁石をsinで振ったり、あるいは単にGUIやプログラム(スクリプト)のテストを
     91したいときなどに便利です。
     92当然ですがハードリアルタイムOSでない場合は確実に動く保証はありませんし、"確実に動く" and/or "きれいな"sin波形を作りたいならば
     93ハードウェアベースで別途検討する必要があります.....が、実際のところこの程度でもテストには十分な場合が多いです。
     94例えばマグネット電源に出力する場合は calcOut レコードに変更すればより簡単に記述できるでしょう。
     95
     96
     97== 使用例3 ==
     98独自のdbdファイルを使いたいときには、-D オプションでdbdファイルを指定する。例えば SCAN 20 sec を作りたい場合を例とすると、
     99/opt/epics/R315.5/base/dbd/softIoc.dbdをコピーしてきて、menuScanを下のように編集して、custom.dbd として保存。
     100{{{
     101menu(menuScan) {
     102    choice(menuScanPassive, "Passive")
     103    choice(menuScanEvent, "Event")
     104    choice(menuScanI_O_Intr, "I/O Intr")
     105    choice(menuScan20_second, "20 second")  <------- これを追加する
     106    choice(menuScan10_second, "10 second")
     107    choice(menuScan5_second, "5 second")
     108    choice(menuScan2_second, "2 second")
     109    choice(menuScan1_second, "1 second")
     110    choice(menuScan_5_second, ".5 second")
     111    choice(menuScan_2_second, ".2 second")
     112    choice(menuScan_1_second, ".1 second")
     113}
     114}}}
     115
     116softIoc実行
     117{{{
     118$ softIoc -D custom.dbd -d test1.db
     119Starting iocInit
     120############################################################################
     121## EPICS R3.15.5
     122## EPICS Base built Jan 24 2018
     123############################################################################
     124iocRun: All initialization complete
     125epics> dbl
     126test:count
     127epics> dbpr test:count, 4
     128A: 1                ACKS: NO_ALARM      ACKT: YES           ADEL: 0
     129....
     130RPRO: 0             RSET: 0x7f333a9f2820                    SCAN: 20 second
     131....
     132}}}
     133確認
     134{{{
     135$ camonitor test:count
     136test:count                     2018-03-31 13:58:08.453467 1
     137test:count                     2018-03-31 13:58:28.454018 2
     138test:count                     2018-03-31 13:58:48.454025 3
     139test:count                     2018-03-31 13:59:08.453544 4
     140}}}