プロトコル解析
プロトコル †
ボーレートは38400bpsです。
8bitフルに使うので、ターミナルソフトでの操作は難しいです。
以下の説明では、
クレードル上のUSBとカードをつなぐ機器を「リーダ」と呼びます。
カード本体を「デバイス」と呼びます。
注意事項
現物合わせで作っていますので、ファームウェアが更新された場合は正しく動かない可能性があります。
また、異常なコマンドを送ってしまう恐れもあります。その場合は機器が使用できなくなる場合や正常に動作しなくなる場合があるかもしれません。それらの損害について当方は責任を持ちませんので、ご了承の上、参考にしてください。
メーカーから開示された情報ではないので、メーカーに問い合わせないでください。
パケットの基本構造 †
複数バイトの数値はビッグエンディアンです。
- 開始記号 1byte
7B - 通信対象 1byte
リーダが対象のときは38で、デバイスが対象のときは3Cのようです。 - データ長 1byte
パケット長-3です。1バイトです。そのため長いレスポンスは分割して取得するようになっています。 - 通信方向 4byte
リーダのコマンド(38)の場合、PCからリーダは00 00 00 01
リーダーからPCは01 00 00 00。
デバイスのコマンド(3C)の場合は、00 01 00 01 です。 - コマンド 1byte
リーダのコマンドは、リザルトも同じコマンドで返ってきます。
デバイスのコマンドは、最下位ビットが0の場合は、PCから機器、1の場合は機器からPCです。 - データ 不定長
デバイスのコマンドは、2byte目も使うことがあります。 - チェックサム 1byte
開始記号からチェックサムまでのバイト毎の総和の下8bitが0になります。 - 終端記号 1byte
7D
以下の説明では、コマンド、データのみを挙げることがあります。
7Bから始まっているときはパケット全体を表しています。
定期的なデータ通信 †
接続すると、何もしなくても、指定間隔(デフォルト 5 秒)で情報を送ってきます。
7B 開始記号 38 機器 20 データ長 00 01 固定 00 01 固定 41 4D コマンド。 41 4Dが定期的に送られてくるデータです。 00 01 グループID? 22 B8 ユーザID xx xx xx xx xx xx xx xx xx xx デバイスのシリアル番号 xx xx xx xx 累積の線量。0.1μSV単位 xx xx xx xx 現在の線量。0.1μSV/h単位 04 00 xx チェックサム 7D 終了記号
これで、線量は分かります。機器の表示は0.01μSV単位で表示できますが、通信で取得できるのは0.1μSV単位です。ログの記録も0.1μSV単位です。
デバイスのデータ取得・設定 †
その他の設定にはもう少し手順が必要です。
まず接続のための情報を取得します。
7B 38 07 00 00 00 01 3A 0B 7D
すると、
7B 38 EB 00 01 00 00 0A FD FD で始まるリザルトが返ってきます。
リザルトの中身を一箇所1に変えて、コマンド3Bで送り返します。
7B 38 EB 00 00 00 01 3B FD FD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 2E 30 2E 30 2E 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 31 2E 30 30 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 xx xx xx xx xx xx xx xx xx xx 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 <= ここを1に 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 xx チェックサム 7D
送ると、リーダからは、
7B 38 07 00 01 00 00 3B 0A 7D
が返ってきます。
この後、7B 3Cから始まるコードを受け付けるようになります。これでデバイスの情報が取得できます。
自分で送らなくても、純正ツールで接続したあとは使える状態が維持されていますので、それを利用することもできます。
例えば、
7B 3C 08 00 01 00 01 20 20 FF 7D
で、デバイスのシリアル番号が取得できます。
ログ取得 †
ログ取得にはいくつか方法がありますが、全取得できればいいので、それだけに対応します。
まずログのバイナリサイズを取得します。
7B 3C 08 00 01 00 01 20 83 9C 7D
で取得します。
7B 3C 0C 00 01 00 01 21 83 xx xx xx xx サイズ xx チェックサム 7D
が返ってきます。
次に実際のログを取得します。
7B 3C 0A 00 01 00 01 20 84 xx xx 0からの番号 xx チェックサム 7D
で取得します。一度に全部送られてくるわけではないので、カウントを増やしながら全データを取得します。
リザルトは、
7B 3C xx 長さ 00 01 00 01 21 84 xx 0なら継続、1なら終了 xx xx 番号 データ本体 xx チェックサム 7D
です。
終了になるまで、データ本体を繋げます。
データは、
・ログ概要
・ログ本体
がログ数だけ繰り返して入っています。
ログ概要
FD FD 45
30 xx xx xx xx シリアル前半
01 01 00 20 4D 80 01 00 00 00 00 00 28 00 68 61
0B 05 0F 01 07 2E 開始時刻
0B 05 0F 01 12 22 終了時刻
00 3C サンプル採取間隔
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04
00 00 00 0A サンプル数
01 01 00 00 05 18 01 00
30 xx xx 4E xx シリアル後半
01 00 00 00 22 1F 1B 16 12 A0 0B 04 1D 17 1C
00 00 1F 40 アラーム設定値
00 00 27 10 警報しきい値
05 F5 E0 FF しきい値オーバー
30
ログ本体は、累積値のデータがuint32で記録されています。
最初のログは、開始時間+サンプル採取間隔です。
ログ消去 †
コマンド 22 88 FF
7B 3C 09 00 01 00 01 22 88 FF 95 7D
で消せます。
成功すると、リザルト 23 88
7B 3C 08 00 01 00 01 23 88 94 7D
が返ってきます。
時刻設定 †
7B 3C 0E 00 01 00 01 22 42 0B 05 12 02 00 2A 年月日時分秒 xx 7D
リザルトは
7B 3C 08 00 01 00 01 23 42 DA 7D
で返ってきます。
積算量リセット †
7B 3C 08 00 01 00 01 60 5F 80 7D
を送ります。
リザルトは、
7B 3C 08 00 01 00 01 61 5F 7F 7D
です。
その他 †
シリアル番号取得
20 20
リザルト
21 20 10byte シリアル番号
60 81
リザルト
61 81 2byte ユーザID 00 03 00 01 2byte データ間隔 0e 10 0e 10 00 00 00 00
20 33
リザルト
21 33 1byte 出荷年-2000 1byte 出荷月 1byte 出荷日 1byte 出荷時 1byte 出荷分
20 3d
リザルト
21 3d 1byte 有効期間 年 1byte 有効期間 月 1byte 有効期間 日
60 5c
リザルト
61 5c 00 00 パスワード?
60 87
リザルト
61 87 4byte 800 4byte 10000
60 89
リザルト
61 89 2byte 滞在時間アラーム% * 10 2byte 分*10
60 83
リザルト
61 83 4byte 800 4byte 10000 4byte 800 4byte 10000
60 5a
リザルト
61 5a 04
20 25
リザルト
21 25 00 00 00 01
60 80
リザルト
61 80 'M' 10byte 'V' 4byte 20 01 04 EC