wiki:epics/graphtec/GL820_ioc

Version 5 (modified by michkawa, 6 years ago) (diff)

--

GRAPHTEC GL820(GL840)用EPICS IOC

この情報は、昔書いたwikiを転載し加筆したものですので、情報が古いかもしれません。ご注意ください。

作成当初は、通信プロトコルのマニュアルがメーカーWeb等に存在しなかったので、GL820本体のデータ表示用Web画面を解析してデータを分離するpythonスクリプトで対応していた。
メーカーに問い合わせたところ通信マニュアルが入手できたので、asynPortDriverを使ってIOCを再構築した。

現在は、GL-820は廃番で、後継機のGL-840になっている。
GL-840での動作検証を行って、同じIOC(コマンド)で動作することを確認した。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 注意 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GL-840 のファームウェアをver.1.32にアップデートしたところ、データフォーマットが変更されたようで、現在のIOCでは通信できない状態になっています。
現在、修正中ですので、しばらくお待ちください。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 注意 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

通信プロトコル

制御コマンド自体はGPIB形式なのだが出力される一部のデータがバイナリなので、streamdeviceではなくasynPortDriverを使うことにした。
制御コマンド用のポート番号は 8023 でコネクションは1つだけとイーサネット共通取り扱い説明書に記載されていた。

今回実装するコマンドは、最低限必要な各チャネルの測定係数(単位)/モードと瞬時値を取得するコマンドだけにしておく。値の設定や保存してあるバッファを取得するコマンドもあるが今回は割愛。

コマンド 説明
:MEAS:OUTP:ONE? 瞬時値取得
:AMP:CHxx:INP? チャネル毎の入力状態取得
:AMP:CHxx:RANG? チャネル毎のモードと係数取得

各コマンドの戻り値は、データ受信関連仕様書(GL220_820).pdfに記載されているが、今回使用するデータフォーマットを記述しておく。
(注)データ受信関連仕様書(GL220_820).pdfが公開不可とのことです。

受信データフォーマット

瞬時値データの戻り値はバイナリ、それ以外はASCII文字列。

瞬時値データ(:MEAS:OUTP:ONE?)

データの受信フォーマットは以下のようになる。
2byteデータ(binary)はbig endian

データ byte数 説明
#6 2 ASCII ヘッダ #6 固定文字列 
****** 6 ASCII データ長 
CH1 アナログデータ 2 SHORT CH1 データ
:
CH20 アナログデータ 2 SHORT CH20 データ
パルス1~4データ1~2 16 SHORT[2][4] パルスデータ(使用しない)
ロジックデータ 2 SHORT ロジックデータ(使用しない)
アラームデータ1 2 SHORT CH1~10アラームデータ(使用しない)
アラームデータ2 2 SHORT CH11~20アラームデータ(使用しない)
アラームデータ(ロジック・パルス) 2 SHORT ロジック・パルスのアラームデータ(使用しない)
アラーム出力データ 2 SHORT アラーム出力データ(使用しない)
ステータス 2 SHORT データ状態(使用しない)

今回、受信データで使用するのはCH1~20までのアナログデータのみで、アラームやパルス、ロジックのデータは使用しない。
CHデータ数は、HW本体のCH数によって変動するらしいが、CH数を増やしたHWがないため、今回は20CH固定で作成した。
今後、多CHのHWを使用する場合には、ソースコードを修正する必要がある。
CH数は、drvGL820_Cmnd.h の PORT_COUNT として定義しているので、ここだけの修正でsrc側はOKのはず。

入力チャネル状態取得(:AMP:CHxx:INP?)

入力チャネル状態は :AMP:CHxx:INP? で取得している。
戻り値としては、

受信文字列 データ種別 係数
DC 電圧 :AMP:CHxx:RANG?で取得
TEMP 温度 0.1固定
RH 湿度 DC1Vと同じ
OFF 接続なし

DCの場合には、:AMP:CHxx:RANG?でレンジを取得して、各チャネルデータ値の係数とする。

アンプ設定取得(:AMP:CHxx:RANG?)

DCのレンジ文字列と各チャネルデータの関係は、

文字列 整数部 小数部 
20MV 1 1000000
50MV 4 100000
100MV 2 100000
200MV 1 100000
500MV 4 10000
1V 2 10000
2V 1 10000
5V 4 1000
10V 2 1000
20V 1 1000
1-5V 2 1000
50V 4 100

換算式は、

V = (chData / int) * dec

   V:      電圧
   chData: 生データ(SHORT)
   int:    整数部
   dec:    小数部

となっている。

IOC

IOCのソースコードを置いておきますので、興味のある方はダウンロードしてご使用ください。

attachment:GraphtecGL820_asynport.tar.gz

Attachments (5)

Download all attachments as: .zip