IOC上でtimestampレコード
IOC上でタイムスタンプレコードを作成する方法について(三菱SC中村氏、帯名など)。このようなレコードをつくって scan 1 sec で運用しておくと、IOCの時刻が常に表示できます。死活監視にも便利。
record(stringin, "$(user):timestamp") { field(DESC, "Current time and date") field(DTYP, "Soft Timestamp") field(INP, "@%Y-%m-%d %H:%M:%S.%03f") field(SCAN, "1 second") }
上記の例のように、DTYP フィールド を "Soft Timestamp" とします。 INP フィールドに表示したい時刻の書式を指定します。 (一般的な strftime の書式が使えると思います) SCAN フィールドに "1 second" を指定すれば、毎秒更新のタイムスタンプのレ コードとなります。
追記:マクロ展開について
上の例を記述したファイルを、例えばts.dbというファイルに保存したとすれば、
dbLoadRecords("db/ts.db","user=iocname")
と記述すれば、実行時に展開されて iocname:timestamp というレコード名になる。
値が更新された時刻を知りたい
2024/11/08追記。もともとあるIOCの中ではなく、別のIOCからレコードの値が更新された 時刻を確認したいときは TSEL というフィールドが活用できます。 以下のようなレコードをつくれば、指定したPVのタイムスタンプを 文字列として取得できます。
record(stringin, "${user}:ts") { field(DTYP, "Soft Timestamp") field(TSEL, "${target_pv_name}.TIME CP") field(INP, "@%Y-%m-%d %H:%M:%S.%03f") }
詳細は https://epics-base.github.io/epics-base/dbCommonRecord.html の"Miscellaneous Fields" → TSEL を参照。
Last modified 6 weeks ago
Last modified on 11/08/24 17:46:13