前提・実現したいこと
VisualBasic.NET(2008)でRS-232Cのバイナリ通信をしています。
プロトコルはMODBUS RTUモード通信です。ある程度動作はしているのですが、よくわからない現象が発生して
しまったので、質問させてください。
発生している問題・エラーメッセージ
相手機器から送られたデータ内に0(NUL)があった場合、0データのみ除去した状態の受信バッファなって
しまいます。
例をあげると相手機器にバイナリで
<01>, <04>, <00>, <02>, <00>, <01>, <90>, <0A> を送信すると
相手機器は、<01>, <04>, <02>, <00>, <00>, <B9>, <30>を送信しています。
(この受信の内容はシンクロで確認済み 下記に画像があります)
しかしプログラム上で受信データを確認すると
<01>, <04>, <02>, <B9>, <30>となっていて、0データが2バイトなくなっています。
いろいろなケースで試しましたが、0データだけが消えているのは間違いないようです。
バイナリ通信の場合、何か0データに関する設定とかがあるのでしょうか?
ご教示頂ければと思います。
下記ソースコードは実際に動かしているプログラムの、関係していると思われる箇所の抜粋です。
該当のソースコード
VisualBasic.NET(2008)
1 2 Dim RcvCnt; 3 Dim bRcvBft(2000); 4 5 '================================================================================ 6 '== == 7 '== 通信イベントプロシージャ == 8 '== == 9 '================================================================================ 10 Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 11 12 Dim Cnt As Integer 13 Dim i As Integer 14 15 '---- バイナリーモード 16 Cnt = SerialPort1.BytesToRead 17 For i = RcvCnt To RcvCnt + Cnt - 1 18 bRcvBft(i) = SerialPort1.ReadByte 19 Next 20 RcvCnt = i 21 22 End Sub 23 24 '================================================================================ 25 '== == 26 '== 通信インターバル処理 (1ms) == 27 '== == 28 '================================================================================ 29 Private Sub tmrComm_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrComm.Tick 30 31 Dim Pos As Integer 32 Dim RcvDt As String 33 34 '---- バイナリーモード 35 If RcvCnt = 0 Then TimerCount(9) = 2 36 If TimerCount(9) > 0 Then Exit Sub 37 38 ' 2msの間データ受信がない 39 40 bRcvBuf = bRcvBft 41 RcvCount = RcvCnt 42 RcvCnt = 0 43 44 Call NetLogBin("Rcv: ", bRcvBuf, RcvCount) '--- 通信ログ処理 45 46 RcvDt = Bin2Hex(bRcvBuf, RcvCount) '---バイナリをHEXデータに変換 47 Call DataSet(1, RcvDt) '--- データ表示 48 49 ChkRcvDt = RcvBuf 50 51 End Sub 52 53
試したこと
下記URLのフリーソフトでも試してみましたが、私の結果と同じでした。
http://nonsoft.la.coocan.jp/Download/Rs232cTool/index.html
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー