wiki:epics/transferArray

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

--

transferArrayレコードについて

transferArrayとは?

subArrayを改良したレコードで、「あるwaveformの任意の範囲を、異なるwaveformの任意の位置にコピーする」機能をもつレコードです。
自身へは、コピーする内容が格納されます。
また、オプションで転送先waveformのコピーされた領域以降を0クリアすることも可能です。

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

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

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

サンプル.dbファイル

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

上記.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_registerRecordDeviceDriver.cpp derives from yourIoc.dbd
    yourIoc_SRCS += transferArrayRecord.c      ←追加
    yourIoc_SRCS += yourIoc_registerRecordDeviceDriver.cpp
    
  • <TOP>ディレクトリでmakeを実行します。

入手方法

ここからダウンロードできます。

Attachments (1)

Download all attachments as: .zip