tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: VB2010 シリアル受信通信 byte で上手くいかない
投稿日: 2017/08/14(Mon) 14:30
投稿者魔界の仮面弁士
> (元コードは 金澤ソフト設計 が提供している sample0008)
検索したら下記がヒットしました。これのことですよね?
次回からは URL も分かるように書いていただけると回答しやすいです。
http://www.kana-soft.com/tech/sample_0008.htm
http://www.kana-soft.com/tech/code/sample_0008.zip


さて、そのサンプルの 4 ページ目を見ると、
http://www.kana-soft.com/tech/sample_0008_4.htm
》 サンプルプログラムでは、文字列の受信なので、ReadExisting()メソッドを
》 利用しましたが、バイナリデータを受信する場合、Read()メソッドを利用します。
と書かれています。

しかしながら No11874 のコードを見る限り、Read に変更することなく、
引き続き ReadExisting を使っていました。ここに問題があるわけです。


今回受信する
> 無線機に FEFE66000600FD を変換したものをPortに書き込みます
は文字列ではなくバイナリですから、Char 型や String 型で読み書きするメンバーは
一切使用できません。


【使っても良いメンバー】
SerialPort1.BytesToRead プロパティ
SerialPort1.Read( Byte(), Integer, Integer ) メソッド
SerialPort1.ReadByte( ) メソッド
SerialPort1.Write( Byte(), Integer, Integer ) メソッド


【使ってはいけないメンバー】
SerialPort1.Read( Char(), Integer, Integer ) メソッド
SerialPort1.ReadChar( ) メソッド
SerialPort1.ReadExisting( ) メソッド
SerialPort1.ReadLine( ) メソッド
SerialPort1.ReadTo( String ) メソッド
SerialPort1.Write( String ) メソッド
SerialPort1.Write( Char(), Integer, Integer ) メソッド


電文データが「文字列」ではないため、下記も使ってはいけません。
> Delegate Sub Delegate_RcvDataToTextBox( data As String )
> LenX = Len(data)
> System.Text.Encoding.GetEncoding(932)
> Z = Asc(SData)
> SData = Mid(data, I + 1, 1)


受信したデータを解析する際も、String 型に変換したりはせず、
Byte 配列のまま取り扱うようにしてみてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。