wiki:epics/transferArray

Version 6 (modified by hig-iitk, 5 years ago) (diff)

--

transferArrayレコードについて

transferArrayとは

waveformをベースにしたレコードで、あるレコードの任意の範囲を、異なるレコードの任意位置に転送する機能をもつレコードです。
自身の内容は、基本的に転送する領域と同じ内容になります。
また、オプションの指定で、転送領域以降を0クリアすることも可能です。

transferArrayレコードの使用方法について

waveformに対して追加されるパラメータフィールドは下表の通りです。

FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
OUT出力先のレコードOUTLINKYes0NoNoN/ANo
TASI転送元の要素番号ULONGYes0YesNoNoNo
TADI転送先の要素番号ULONGYes0YesNoNoNo
TATC転送する要素数ULONGYes0YesNoNoNo
TAZFZero-fillフラグULONGYes0YesNoNoNo
  • OUTフィールドで、転送先のレコードを指定します。
  • TASIフィールドで、転送元レコードのどこから転送を開始するかを、要素番号で指定します。指定は0オリジンですので、先頭の要素であれば、0を指定します。転送元レコードの要素数を超える値を指定することはできません。指定するとエラーとなり転送は行われません。
  • TADIフィールドで、転送先レコードのどこに転送するかを、要素番号で指定します。TASIフィールドと同様に0オリジンでの指定になります。転送先レコードの要素数を超える値を指定することはできません。指定するとエラーとなり転送は行われません。
  • TATCフィールドで、転送する要素数を指定します。転送元レコードや転送先レコードの領域を超えるような転送数を指定した場合、超えた分を無視して可能な分だけ転送を行います。この場合、レコードにLINK_ALARM/ALARM_MINORがセットされます。

サンプル.dbファイル

record(waveform, "hig-iitk:src") {
    field(NELM, "10")
    field(FTVL, "LONG")
}
record(waveform, "hig-iitk:dst") {
    field(NELM, "10")
    field(FTVL, "LONG")
}
record(transferArray, "hig-iitk:ta") {
    field(NELM, "10")
    field(FTVL, "LONG")
    field(INP,  "hig-iitk:src")
    field(OUT,  "hig-iitk:dst")
    field(TASI, "0")
    field(TADI, "0")
    field(TATC, "5")
    field(TAZF, "0")
}

上記.dbファイルでhig-iitk:taをプロセスした場合の動作イメージ
transferArray動作イメージ01

make方法

  • makeBaseApp.plで作成された<TOP>/yourIocApp/src/Makefileを編集します。
    #----------------------------------------
    #  ADD MACRO DEFINITIONS AFTER THIS LINE
    #=============================
    DBDINC += transferArrayRecord              ←追加
    
    <中略>
    
    # yourIoc.dbd will be made up from these files:
    yourIoc_DBD += base.dbd
    yourIoc_DBD += transferArrayRecord.dbd     ←追加
    yourIoc_DBD += devTransferArrayRecord.dbd  ←追加
    
    <中略>
    
    # yourIoc_registerRecordDeviceDriver.cpp derives from yourIoc.dbd
    yourIoc_SRCS += transferArrayRecord.c      ←追加
    yourIoc_SRCS += devTransferArrayRecord.c   ←追加
    yourIoc_SRCS += yourIoc_registerRecordDeviceDriver.cpp
    
  • <TOP>ディレクトリでmakeを実行します。

Attachments (1)

Download all attachments as: .zip