今まではマイコン内でF9PからのバイナリーデータをASCIIデータ変換していたのですが、VB.NETでpgmを作れるようになって、
RTK MovingBaseモードでのモニタープログラム作り始めました。
(VB.NETシリアル受信の基本Pgmの作り方は、こちらのページです。
■ソースコードGIST ”NAV-PVT_RELPOSNED_binTest_rev001.vb”
上記基本Pgmソースから変更を加えながら作っていくので自分に合ったpgm作れます。
https://gist.github.com/dj1711572002/c5c063351db05f4892ed7b33d04466b5
未だ、デバッグ動作中なので完全動作しないソースですので部分的にご参考にしてください。
①バイナリー受信の方法
VB.NETでシリアル受信の多くは、ASCIIデータ受信ですが
F9P MovingBaseモードの場合バイナリーで受信します。
今までのASCII受信は
ReceivedData = SerialPort1.ReadLine ‘データを受信します |
でしたが、バイナリー受信では
Dim arrByte As Byte() = New Byte(SerialPort1.BytesToRead – 1) {}’バイナリー配列定義 SerialPort1.Read(arrByte, 0, arrByte.GetLength(0)) ‘バイナリ受信 ReceivedData = BitConverter.ToString(arrByte) ‘ & vbCrLf’バイナリ配列をString変換 |
一旦バイナリー配列arrByteでread受信してからString変換してます。
bitconverterを使うとStringは、”B5-62-01-07″とデリミターが”-“になります。
②PVTとRELPOSNEDの検出と切り取り
UBXコードのNAV-PVTとNAV-RELPOSNEDのフレーム仕様表は記事最後に掲載してあります。
UBX-NAV-PVTのヘッダー部 | B5,62,01,7C |
UBX-NAV-RELPOSNEDのヘッダー部 | B5,62,01,3C |
■受信データString sdataから上記ヘッダを探して切り取ります。
●検出するコマンド
IndexOfを使ってヘッダーがsdataの何番目から始まるのかを検出します。
無ければマイナスがでてきます。参考サイトはおなじみdobon.net様
startIndex = sdata.IndexOf(“B5-62-01-07”) |
startIndex = sdata.IndexOf(“B5-62-01-3C”) |
●切り取りコマンド
substringを使います。参考サイトはおなじみdobon.net様
上記でindexOfで開始番号が判っているのでそれを使います。
PVTは、100バイトですが、デリミタ”-“がついてるので”XX-”3倍の
300文字に最後のデリミタが無いので299文字を切り取ります。
strPVT = sdata.Substring(startIndex, 299) ‘PVT 100bytex3=300 最後のデリミタが無いから299 |
strPVT=B5-62-01-07-5C-00-30-30-CC-14-E4-07-0C-0A-00-37-08-37-15-00-00-00-55-0C-FC-FF-03-83-EA-1A-1E-60-39-52-E5-63-94-15-BE-CF-09-00-7B-40-09-00-0E-00-00-00-0C-00-00-00-E3-FF-FF-FF-02-00-00-00-01-00-00-00-1D-00-00-00-30-AE-E7-00-4A-00-00-00-38-E6-91-00-7D-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-C3-95 |
RELPOSNEDは、72バイトですが、デリミタ”-“がついてるので”XX-”3倍の216文字に最後のデリミタが無いので215文字を切り取ります。
strRELP = sdata.Substring(startIndex, 215) ‘ RELP 72bytex3=216 最後のデリミタが無いから215 |
strRELP=B5-62-01-3C-40-00-01-00-00-00-30-30-CC-14-05-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-BE-A8-A1-01-00-00-00-00-40-AE-C3-01-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-43-01-01-00-00-00-00-00-37-01-00-00-84-CC |
■ヘッダー以降でデータが尻切れエラー回避のための
if文をいれてあります。
If startIndex >= 0 And sdata.Length >= 299 Then ‘PVT299文字以上あるか? |
If startIndex >= 0 And sdata.Length >= 215 Then’RELPOSNED215文字以上あるか? |
■受信時刻と1回の受信バイト数の検証
125msecレートでの測位なので、データも125msec間隔で入ってくるはずですが、たくさんあるので、受信タイミングとバイナリーなのでバラバラと入ってくる可能性があるので、受信時間と1回のバイト文字数をモニターしてログしました。
●時刻の測定はStopWatchを使ってます。参考はおなじみdobon.net様
ログはdebug.printで出力windowに記録してコピーしてTextEditorへペーストしてます。
●ログ表の見方
PVT_time:PVTを検出した時刻msec
RELPOSNED_time:RELPOSNEDを検出した時刻msec
sdata:受信データstring
slen=受信データ文字数
start=PVT,RELPOSNEDのヘッダ開始位置index
len=slen
1:初めのうちの受信データ
受信1回目PVT受信0msecからRELPOSNEDは、1msecで連続した1つの受信データ803文字に含まれていた
受信2回目~7回目までRTCM3データが入ってきているが読み飛ばしている
受信8回目PVT受信78msecと短くて、受信データ299文字とPVT分のみ受信
受信9回目RELPOSNED受信86msecと8msecほどPVTより遅れて受信データ263文字でRELPOSNED分のみ受信
slen=803sdata(1)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91-B5-62-02-32-08-00-02-04-00-00-00- ————–PVT_time=0 PVT:start=240len=803 strPVT=B5-62-01-07-5C-00-B4-1A-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-CA-7F-C9-1D-03-83-EA-1A-1F-60-39-52-E4-63-94-15-C3-CF-09-00-80-40-09-00-0E-00-00-00-0C-00-00-00-07-00-00-00-05-00-00-00-0F-00-00-00-09-00-00-00-30-AE-E7-00-56-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-D6-D3 ————–RELPOSNED_time=1 RELPOSNED:start=540len=803 strRELP=B5-62-01-3C-40-00-01-00-00-00-B4-1A-CC-14-05-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-66-49-A1-01-00-00-00-00-1B-A7-F9-06-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-18-01-01-00-00-00-00-00-37-01-00-00-1F-D9 slen=0sdata(2)= slen=0sdata(3)= slen=47sdata(4)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=47sdata(5)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28 slen=47sdata(6)=B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C slen=95sdata(7)=B5-62-02-32-08-00-02-04-00-00-00-00-49-04-8F-50-B5-62-02-32-08-00-02-04-00-00-00-00-CE-04-14-5A slen=299sdata(8)=B5-62-01-07-5C-00-31-1B-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-B6-D8-3C-25-03-83-EA-1A-1F-60-39-52-E4-63-94-15-C4-CF-09-00-81-40-09-00-0E-00-00-00-0C-00-00-00-01-00-00-00-05-00-00-00-08-00-00-00-05-00-00-00-30-AE-E7-00-53-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-02-6B ————–PVT_time=78 PVT:start=0len=299 strPVT=B5-62-01-07-5C-00-31-1B-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-B6-D8-3C-25-03-83-EA-1A-1F-60-39-52-E4-63-94-15-C4-CF-09-00-81-40-09-00-0E-00-00-00-0C-00-00-00-01-00-00-00-05-00-00-00-08-00-00-00-05-00-00-00-30-AE-E7-00-53-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-02-6B slen=263sdata(9)=B5-62-01-3C-40-00-01-00-00-00-31-1B-CC-14-04-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-B2-F7-A0-01-00-00-00-00-60-A0-F1-0A-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-F8-00-01-00-00-00-00-00-37-01-00-00-AE-24-B5-62-02-32-08-00-02-04-00-00-00-00-E8-0F-39-99 ————–RELPOSNED_time=86 RELPOSNED:start=0len=263 strRELP=B5-62-01-3C-40-00-01-00-00-00-31-1B-CC-14-04-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-B2-F7-A0-01-00-00-00-00-60-A0-F1-0A-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-F8-00-01-00-00-00-00-00-37-01-00-00-AE-24 slen=47sdata(10)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=95sdata(11)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28-B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C |
2:以後の受信
毎回受信データ数がばらついていますが、ヘッダを検出したデータセット内で全データ含まれていて、途中で尻切れになる事件は発生してません。
slen=47sdata(10)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=95sdata(11)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28-B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C slen=659sdata(12)=B5-62-02-32-08-00-02-04-00-00-00-00-49-04-8F-50-B5-62-02-32-08-00-02-04-00-00-00-00- ————–PVT_time=231 PVT:start=96len=659 strPVT=B5-62-01-07-5C-00-AE-1B-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-A2-31-B0-2C-03-83-EA-1A-1F-60-39-52-E4-63-94-15-C2-CF-09-00-7F-40-09-00-0E-00-00-00-0C-00-00-00-19-00-00-00-FF-FF-FF-FF-11-00-00-00-19-00-00-00-30-AE-E7-00-57-00-00-00-74-40-AE-00-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-92-3A ————–RELPOSNED_time=232 RELPOSNED:start=396len=659 strRELP=B5-62-01-3C-40-00-01-00-00-00-AE-1B-CC-14-05-00-00-00-A9-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-10-37-A1-01-00-00-00-00-15-FD-FA-13-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-B8-00-01-00-00-00-00-00-37-01-00-00-AE-00 slen=0sdata(13)= slen=47sdata(14)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=47sdata(15)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28 slen=47sdata(16)=B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C slen=95sdata(17)=B5-62-02-32-08-00-02-04-00-00-00-00-49-04-8F-50-B5-62-02-32-08-00-02-04-00-00-00-00-CE-04-14-5A slen=563sdata(18)=B5-62-01-07-5C-00-2B-1C-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-8E-8A-23-34-03-83- ————–PVT_time=357 PVT:start=0len=563 strPVT=B5-62-01-07-5C-00-2B-1C-CC-14-E4-07-0C-0A-00-37-02-37-15-00-00-00-8E-8A-23-34-03-83-EA-1A-1E-60-39-52-E4-63-94-15-C6-CF-09-00-82-40-09-00-0E-00-00-00-0C-00-00-00-F2-FF-FF-FF-03-00-00-00-08-00-00-00-0E-00-00-00-30-AE-E7-00-43-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-64-9B ————–RELPOSNED_time=361 RELPOSNED:start=300len=563 strRELP=B5-62-01-3C-40-00-01-00-00-00-2B-1C-CC-14-04-00-00-00-A9-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-C4-F7-A0-01-00-00-00-00-61-EC-DD-23-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-41-00-01-00-00-00-00-00-37-01-00-00-55-D0 slen=803sdata(19)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91-B5-62-02-32-08-00-02-04-00-00-00-00- ————–PVT_time=367 PVT:start=240len=803 strPVT=B5-62-01-07-5C-00-A8-1C-CC-14-E4-07-0C-0A-00-37-03-37-15-00-00-00-7B-19-FC-FF-03-83-EA-1A-1E-60-39-52-E5-63-94-15-B9-CF-09-00-75-40-09-00-0E-00-00-00-0D-00-00-00-12-00-00-00-06-00-00-00-0C-00-00-00-13-00-00-00-30-AE-E7-00-53-00-00-00-20-A5-FD-00-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-B0-25 ————–RELPOSNED_time=368 RELPOSNED:start=588len=803 strRELP=B5-62-01-3C-40-00-01-00-00-00-A8-1C-CC-14-05-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-20-8E-A1-01-00-00-00-00-36-AB-CE-03-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-31-01-01-00-00-00-00-00-37-01-00-00-1E-B9 slen=0sdata(20)= slen=0sdata(21)= slen=47sdata(22)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=47sdata(23)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28 slen=47sdata(24)=B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C slen=95sdata(25)=B5-62-02-32-08-00-02-04-00-00-00-00-49-04-8F-50-B5-62-02-32-08-00-02-04-00-00-00-00-CE-04-14-5A slen=299sdata(26)=B5-62-01-07-5C-00-25-1D-CC-14-E4-07-0C-0A-00-37-03-37-15-00-00-00-66-72-6F-07-03-83-EA-1A-1E-60-39-52-E5-63-94-15-BA-CF-09-00-76-40-09-00-0E-00-00-00-0E-00-00-00-03-00-00-00-FD-FF-FF-FF-0C-00-00-00-04-00-00-00-30-AE-E7-00-57-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-43-C3 ————–PVT_time=458 PVT:start=0len=299 strPVT=B5-62-01-07-5C-00-25-1D-CC-14-E4-07-0C-0A-00-37-03-37-15-00-00-00-66-72-6F-07-03-83-EA-1A-1E-60-39-52-E5-63-94-15-BA-CF-09-00-76-40-09-00-0E-00-00-00-0E-00-00-00-03-00-00-00-FD-FF-FF-FF-0C-00-00-00-04-00-00-00-30-AE-E7-00-57-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-43-C3 slen=215sdata(27)=B5-62-01-3C-40-00-01-00-00-00-25-1D-CC-14-05-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-46-C5-A1-01-00-00-00-00-4C-9D-D8-14-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-B5-00-01-00-00-00-00-00-37-01-00-00-9F-DD ————–RELPOSNED_time=460 RELPOSNED:start=0len=215strRELP=B5-62-01-3C-40-00-01-00-00-00-25-1D-CC-14-05-00-00-00-AA-FF-FF-FF-FF-FF-FF-FF-57-00-00-00-46-C5-A1-01-00-00-00-00-4C-9D-D8-14-64-00-00-00-64-00-00-00-64-00-00-00-64-00-00-00-B5-00-01-00-00-00-00-00-37-01-00-00-9F-DD slen=47sdata(28)=B5-62-02-32-08-00-02-04-00-00-00-00-E8-0F-39-99 slen=47sdata(29)=B5-62-02-32-08-00-02-02-01-00-00-00-E8-0F-38-91 slen=47sdata(30)=B5-62-02-32-08-00-02-04-00-00-00-00-35-04-7B-28 slen=47sdata(31)=B5-62-02-32-08-00-02-04-00-00-00-00-3F-04-85-3C slen=47sdata(32)=B5-62-02-32-08-00-02-04-00-00-00-00-49-04-8F-50 slen=47sdata(33)=B5-62-02-32-08-00-02-04-00-00-00-00-CE-04-14-5A slen=299sdata(34)=B5-62-01-07-5C-00-A2-1D-CC-14-E4-07-0C-0A-00-37-03-37-15-00-00-00-52-CB-E2-0E-03-83-EA-1A-1E-60-39-52-E5-63-94-15-B7-CF-09-00-73-40-09-00-0E-00-00-00-0E-00-00-00-0F-00-00-00-0E-00-00-00-16-00-00-00-14-00-00-00-30-AE-E7-00-51-00-00-00-80-A8-12-01-8F-00-00-00-6C-18-42-3E-00-00-00-00-00-00-00-00-AD-B5 ————–PVT_time=582 |
●以後
DGVにバイナリー文字ログを入れるのと、実数データとして計算してDGVに表示する機能と
実数データの計算を取捨選択できるチェックボックス群を付け加えて
CSVファイルにログする機能も追加していきます。
それが終わったら次のシリーズで、歩行用のグラフィック表示などもしたいです。
※1 PVT B5-62-01-07-5C
NAV-PVT_frameRELPOSNED_frame