wiki:epics/timestamp

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 13 days ago Last modified on 11/08/24 17:46:13