【RTK2021】VB.NETでRTKモニター作りその1<バイナリ受信,切取り,時刻測定>

今まではマイコン内で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倍の
3
00文字に最後のデリミタが無いので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_frame
RELPOSNED_frame

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です