タイトル : 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 配列のまま取り扱うようにしてみてください。 |