同期処理でシリアル通信するプログラムを作成しています。
受信するデータなのですが、動的にサイズが変わります。
ただし、受信するデータの最大長は決まっていますので、第3引数に最大サイズを入れています。
以下、受信する処理のソースコード。
ReadFile(m_hComm, pbyData, MAX_SIZE, (DWORD*)pnRealLen, NULL);
// 第1引数: COMハンドル
// 第2引数: 受信データのバッファ
// 第3引数: 受信する最大バイト数
// 第4引数: 受信したバイト数のバッファ
ほとんどの場合、最大サイズ以下のデータが送られてくるため、
ReadFileでは、指定したTimeoutの時間分過ぎてからTimeoutして受信完了、
となっていまいます。
どのようにしたらTimeoutせずに、受信完了とできるのでしょうか?
ご教授お願い致します。
私も長さが可変するシリアル通信をやったことありますが
現行のOSのAPIなら、ReadFileEx使って、行います。
それも受信長は、受信する最小サイズで。
ただ、何かコマンドを送信(要求)してから受信するので
あれば、受信長が特定できますので、その長さを待てばよ
く、受信してもないと解らない場合は、その長さが解る処
まで一旦受信し、判断して不足分を再度読みだす。
昨今はCPUも非常に高速でシリアル通信デバイスの受信
バッファも多い場合(PCIバスに挿すボード等の場合)
1バイト受信を繰り返して、所定の長さを受信させるよう
なアルゴリズム組みます。
C言語ならそう処理時間を気にせずにできるんじゃ〜ない
ですか?
同時8chでもやりましたんで、できますヨ!
以上。参考まで
完全に受信データ長が不明な場合は1Byte受信しかありません。
ヘッダー部に可変部のByte数が記述されている構造の場合は、
まず、ヘッダー部を固定サイズで受信後、可変部をヘッダーに
記述されているサイズ分受信する。で良いでしょう。
ツイート | ![]() |