[KEKB Bunch Feedback Group]

林栄精器株式会社製Octal 100MHz visual scaler用EPICS Device Support(Japanese)


by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ

警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。


If you need contact with the author, please E-mail makoto.tobiyama@kek.jp.
目次

1.はじめに

RPV-100は、8チャンネル入力のスケーラーモジュールです。VME1幅で、P1コネクタのみ使用します。
林栄精器殿の製品情報

2.VMEバスレジスタ

RPV-100ボードのI/Oマップは以下の通りです。
AddressR/W0x0F0x0E0x0D0x0C0x0B0x0A0x090x080x070x060x050x040x030x020x010x00
0x*000RCH0 上位データ
0x*002RCH0 下位データ
0x*004RCH1 上位データ
0x*006RCH1 下位データ
0x*008RCH2 上位データ
0x*00ARCH2 下位データ
0x*00CRCH3 上位データ
0x*00ERCH3 下位データ
0x*010RCH4 上位データ
0x*012RCH4 下位データ
0x*014RCH5 上位データ
0x*016RCH5 下位データ
0x*018RCH6 上位データ
0x*01ARCH6 下位データ
0x*01CRCH7 上位データ
0x*01ERCH7 下位データ
0x*020-0x0FCN/A Not Used
0x*0FEWN/AReset
0x*100-0x*1FERWRAM for Video
さて、ここで「あれ、スタートとかストップは無いの?」とお気づきのアナタ。そうです。ないんです!いや、他人が設計したものはよく検討してから買わなければダメですね。。。

3.EPICS環境

本デバイスサポートは、EPICS R313用に開発したものです。EPICSそのものに対する説明、入門出家入道遁世については専門家に帰依するなり、コントロールグループのページをご参照なさるなり勝手になさってください。動作はPPC750で確認しています。

4.コードの概要

コードを以下に示します。

初期化ルーチン

このデバイスサポートはショート特権用なのでバスrequestは
if (sysBusToLocalAdrs(VME_AM_SUP_SHORT_IO,(char *)Base_IO,(char **)&p) == ERROR)
	{
		logMsg("VME RPV100: cannot find A16 address space\n");
		return(ERROR);
	}

BCDから10進への変換

変換用のfunctionを用意して、変換します。ああ面倒くさい。。。

static unsigned long bcdtodec(unsigned short a)
{
  unsigned long result;

  result =
    (a >>15)*8000 +
    ((a >>14)& 0x1) * 4000 +
    ((a >>13)& 0x1) * 2000 +
    ((a >>12)& 0x1) * 1000 +
    ((a >>11)& 0x1) * 800 +
    ((a >>10)& 0x1) * 400 +
    ((a >> 9)& 0x1) * 200 +
    ((a >> 8)& 0x1) * 100 +
    ((a >> 7)& 0x1) * 80 +
    ((a >> 6)& 0x1) * 40 +
    ((a >> 5)& 0x1) * 20 +
    ((a >> 4)& 0x1) * 10 +
    ((a >> 3)& 0x1) *  8 +
    ((a >> 2)& 0x1) *  4 +
    ((a >> 1)& 0x1) *  2 +
    ((a & 0x1));

  return result;
}
で、実際のread_longinの中では

  switch(plongin->inp.value.vmeio.signal){
  case 0: /* ch 0*/
    plongin->val = bcdtodec(cards[cardN].card->ch0up)*10000+bcdtodec(cards[cardN].card->ch0dn);
    break;
の様にします。

デバイスタイプ定義

dbdファイルの中で次のように定義します。
device(longin,VME_IO,devLiRPV100,"RPV100")
device(mbboDirect,VME_IO,devMbboRPV100,"RPV100")
初期化ファイルはdevRPV100nfigで、ベースアドレスが0x8800とすると、

devRPV100Config(1,0x8800)

の様に指定します。

5.EPICSデータベースサンプル

データベース例はここにあります。特になんの変哲もないデータベースなので説明は省略します。

6.スタートアップファイルサンプル

1枚のRPV-100ボードを使用する時のスタートアップファイル(の関係部分)は次のようになります。
dbLoadRecords("fbppcApp/Db/FB_RPV100.db","USER=FBH:TMP , CHAN=C0")

devRPV100Config(1,0x8800)

iocInit

7.おわりに

VME Octal 100MHz visual scaler RPV-100のEPICSデバイスサポートおよびデータベースについて紹介しました。
Makoto Tobiyama
8/Jul/2005

Return to FB Home Page...