投稿者 YUU  (社会人) 投稿日時 2015/8/19 22:24:32
今回の投稿で長々と質問、ご迷惑をおかけしてすみませんでした。

結論としてデータ受信に成功しました。原因は機器側の設定ミスになります。

設定については私が行っているわけではなく、オンラインで確認することのできない環境の為リアルタイムでの確認ができず現状に至ったわけです。(データ送信がOFFに・・・)

ハンドシェイクだのPG側の制御に関してまったく関係のない箇所が問題でした。

>フローコントロールは(ハンドシェイク)、本当に必要なことですか?
今回、初のシリアル通信制御とのことでハンドシェイクでの制御を行う事を前提に考えてきました。
データがデータなだけに正確性に欠けるわけにはいかない為としていたのですが正直データ量もそれほどでもないので必要なかったかもしれません。

データを受信できたことで新たな問題点に行き当たりました。

流れとしては↓です。

<機器>                                  <アプリ>

<STX>テキスト<ETX><BCC> → アプリケーション受信
       <ACK>または<NAK>  ←
       <EOT>             →

文末である<ETX>を取得できたのですが<BCC>の処理に手を焼いております。

チェックサム 計算が必要なのは分かったのですが伝文にて付与される<BCC>を取得する方法に悩まされております。


            'シリアルポートのバッファーの読み込み
            Dim strReceived As String = Me.SerialPort.ReadExisting
            Dim Inp As String = String.Empty
            
            'ここで何らしかの方法でチェックサム計算?
            Dim BCC ・・・

            If String.IsNullOrEmpty(strReceived) = False Then

                For i As Integer = 1 To Len(strReceived)

                    Inp = Mid(strReceived, i, 1)

                    Select Case Inp
                        Case Chr(&H2)  '電文始まり<STX>  
                        
                        Case BCC
                                
                                 'ここでの正否で処理を行う?

    End Select

↑が現在のコードです。省略はしていますが大まかにはこのような感じです。
<BCC>については仕様書にて「テキストの先頭文字からETXまでの文字単位での排他論理和で1バイトのバイナリで構成」とされているので最初のデータ取得時に計算させ定義させるのが定石でしょうか?。

そうであればCaseにて処理が可能で正否の判定もできるかと考えております。

チェックサム計算の際にはどのように処理を運ぶものなのでしょうか?