wiki:epics/timestamp

Version 3 (modified by obina, 2 weeks ago) (diff)

--

IOC上でtimestampレコード

IOC上でタイムスタンプレコードを作成する方法について(三菱SC中村氏、帯名など)

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(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 を参照。