= Aloka ポータブルエリアモニタ MAR-783 制御方法 = == 接続 == RS-422が製品のデフォルトらしいが、今回の製品はRS-232C版なので、MOXAのEther-Serialコンバータで接続する。[[br]] * ケーブル: D-Sub 9pin クロス || baud rate || 9600 || || parity || even || || data bits || 7 || || stop bits || 2 || || flow ctrl || none || RS-422版をRS-232版へ変更するには、内部基板のコネクタを付け替えて、メニューから制御方法の設定を変更するだけでOK。 [[Image(Aloka_rs232.png)]] RS-422版は画像のJ4 RS422のコネクタにケーブルがつながっているので、J5 RS232に繋ぎ直す。[[br]] その後、フロントパネルから、システム設定モードに入って、RS OUTの設定をRS232Cに変更する。設定方法の詳細は[http://cerldev.kek.jp/trac/EpicsUsersJP/attachment/wiki/epics/streamdevice/Aloka_MAR_783/control/aloka_MAR783.pdff マニュアル]を参照。 == データフォーマット == データの送受信はバイナリコマンドで行う。[[br]] 詳しくは[http://cerldev.kek.jp/trac/EpicsUsersJP/attachment/wiki/epics/streamdevice/Aloka_MAR_783/control/aloka_MAR783.pdff マニュアル]の6章に書いてあるが、基本的には以下のフォーマットを実装するだけでOKみたい。 * 測定値要求コマンド 送信 || 項目名 || 型 || サイズ(byte) || 説明 || || STX || 文字列 || 1 || 0x02固定 || || コマンド || 文字列 || 2 || R0 || || ETX || 文字列 || 1 || 0x03固定 || 受信 || 項目名 || 型 || サイズ(byte) || 説明 || || STX || 文字列 || 1 || 0x02固定 || || コマンド || 文字列 || 2 || D0 || || 測定値1 || 文字列 || 4 || 測定値の小数点以下 || || 測定値2 || 文字列 || 1 || 測定値の10のべき乗 || || 状態コード || 文字列 || 1 || 状態コード || || ダミー || 文字列 || 1 || 0x31固定 || || ETX || 文字列 || 1 || 0x03固定 || 取得したデータは、(0.測定値1 * (10^測定値2^)) uSv/h となる。 例として 測定値1が "0998"、測定値2が "1" とすると、 0.0998 * 10^1^ = 0.998 uSv/h となる。 == サンプルスクリプト == {{{ #!/usr/bin/python import socket import struct, binascii host = '172.28.5.253' port = 4001 clientsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsock.connect((host,port)) sendVal = (0x02, 'R0', 0x03) ss = struct.Struct('b 2s b') ssp = ss.pack(*sendVal) print 'Send bin: ' + binascii.hexlify(ssp) clientsock.sendall(ssp) rcvp = clientsock.recv(1024) print 'Recv bin: ' + binascii.hexlify(rcvp) rs = struct.Struct('b 2s 4s c c c b') print 'Recv pack: ' + str(rs.unpack(rcvp)) clientsock.close() }}} このスクリプトを実行すると以下の様な結果が出力される。 {{{ [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303130363830363103 Recv pack: (2, 'D0', '1068', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303039353930363103 Recv pack: (2, 'D0', '0959', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303039353230363103 Recv pack: (2, 'D0', '0952', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303039343530363103 Recv pack: (2, 'D0', '0945', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303039333830363103 Recv pack: (2, 'D0', '0938', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303039333830363103 Recv pack: (2, 'D0', '0938', '0', '6', '1', 3) [michkawa@pfrproc4 test]$ ./testClient.py Send bin: 02523003 Recv bin: 0244303037333230363103 Recv pack: (2, 'D0', '0732', '0', '6', '1', 3) }}}