投稿者 daive  (社会人) 投稿日時 2015/8/14 13:49:17
簡単に書くと、こんな感じですが(ポーリング型)
各処理を、どの様に&どの様な、イベント処理とするか、ポーリング処理とするかで、
考え方が、変わる部分が発生します。
(vb.net timer 高精度)
VB.NETは、イベント駆動型ですので、ポーリング処理は出来るだけ避けて、
イベント、インターバルタイマーでの処理などを、考えます。

COM受信待ち(ポーリング的処理の場合)
① ↓
データ受信待ち(受信イベント待ち)
  ↓
1Byte目なら
 タイムアウト値セット
  ↓
タイムアウトチェック(何処で、どの様にタイムアウトチェックするか)
必要に応じて規定bytes目チェック
必要に応じてSTX / ETX チェック、データ受信チェックで行っても良い。
必要に応じてEOT チェック、データ受信チェックで行っても良い。
  ↓
 ①へ
各チェック項目を、内部ステータスや、
デバッグ情報出力、画面表示としておくと、
解りやすい。

電文受信チェックメイン(ポーリング的処理の場合)
   ↓
データ受信チェック(受信完了チェック、電文チェック、BCCチェック、タイムアウトチェック等)
  ↓
OKなら、ACK送信
NGなら、NAK送信
   ↓
ACKであればの、処理、EOT受信処理
NAKであればの、処理、EOT受信処理
   ↓
受信処理終了
(イベント型に書き直すのは、どの様に、どうするか、⇒状態遷移、ステートマシーン)

タイムアウトであれば、
タイムアウト処理
  NAKか、受捨てにするかどうかは、要件次第

パリティーエラー処理
  NAKか、受捨てにするかどうかは、要件次第

オーバーフロー処理
  NAKか、受捨てにするかどうかは、要件次第
 端末機器側が、電源ON/OFF時に不正データを送信する機器かどうかの
 確認が必要です。


検索ワード
通信 bcc 計算
通信 チェックサム 計算
bccの計算方法は、ネット検索した結果と異なる場合もあります。
基本的考え方は同じでも、実際の計算値は、現物合わせだったりします。
⇒EXCELなどで、検証ルーチンを作るのが簡単だったりします。

 >伝送方式:調歩同期式
 >伝送速度:9600bps
>伝送コード:ASCII
>データビット:8bit
>パリティチェック:なし
>ストップビット:1bit
との事ですから、1ビット当たり=1/9600秒でデータの送受信ができる事になります。
スタートビット:1ビット
 データビット :8ビット
 パリティビット:なし
 ストップビット:1ビット
 より、1キャラクタ当り、10ビット:10/9600秒で、1キャラクタの送受信が
可能という事になります。
 1キャラクタ当り、1ms強 
タイムアウト時間等は、この値を元に、最短通信間隔を加味して、決定します。
つまり、理屈上は、
 100キャラクタ:100ms強で受信できるはずだが、
 相手の都合もあるので、必ずしも、100ms強ではない。
という事です。
タイムアウト値は、可変設定にしておくか、設定ファイルとするのが普通。