
シリアル通信で10Byte受信するまで待ち続けたいのですが、0ByteでReadFileが抜けてしまいます。
ReadFileの最後のパラメタが、NULLならば第3パラメタの値まで待ち続けると思っていたのですが、なにか設定が足りないのでしょうか?
タイムアウト値は0にしています。(色々変えて見ましたが同じでした)
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb;
char* pszBuf="1234567890"; /* 書込・読込領域 */
hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ReadIntervalTimeout = 100;
dcb.ReadTotalTimeoutMultiplier = 0;
dcb.ReadTotalTimeoutConstant = 0;
dcb.WriteTotalTimeoutMultiplier = 10;
dcb.WriteTotalTimeoutConstant = 500;
SetCommState(hComm, &dcb); /* DCB を設定 */
DWORD dwRead; /* ポートから読み出したバイト数 */
ReadFile(hComm, pszBuf, 10, &dwRead, NULL);
No.1ベストアンサー
- 回答日時:
ReadFileが正常終了しているかどうかは確かめたでしょうか。
正常終了していない場合、GetLastErrorでエラーの原因を取得して調べることができます。また、提示されたプログラムコードは誤っておりコンパイルできません。せめてコンパイルくらいはできるコードを提示しましょう。
この回答への補足
早々のご回答ありがとうございます。
ReadFileは正常終了していますが、
ポートから読み出したバイト数は「0」です。
コンパイルエラーは、タイムアウト設定の処理を
コピーし忘れていました。
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb;
char* pszBuf="1234567890"; /* 書込・読込領域 */
hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb); /* DCB を設定 */
// タイムアウト設定
COMMTIMEOUTS to;
to.ReadIntervalTimeout = 0;
to.ReadTotalTimeoutMultiplier = 0;
to.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(hComm,&to);
DWORD dwRead; /* ポートから読み出したバイト数 */
DWORD dwErrors; /* エラー情報 */
COMSTAT ComStat; /* デバイスの状態 */
ClearCommError(hComm, &dwErrors, &ComStat);
ReadFile(hComm, pszBuf, 10, &dwRead, NULL);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(データベース) 放送大学のデータベースの講義を、興味本位で見ていたら気になることがありました。 講師が、null を 5 2022/04/21 17:06
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
このQ&Aを見た人はこんなQ&Aも見ています
-
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
WriteFile()でのデータ送信ができなくなる
C言語・C++・C#
-
シリアル通信の出力バッファと送信完了イベントについて
C言語・C++・C#
-
-
4
WaitCommEventのタイムアウトについて
C言語・C++・C#
-
5
シリアル通信プログラム(受信)について
C言語・C++・C#
-
6
シリアル通信で0x00を送信したいのですが。
C言語・C++・C#
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
RS232Cケーブル ストレートとクロスを見分ける方法
その他(パソコン・周辺機器)
-
9
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
10
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
11
ClearCommError呼び出し時のCE_OVERRUN対処策
C言語・C++・C#
-
12
VB2005でWin32APIを用いてRS-232CのRTS信号を、デ
Visual Basic(VBA)
-
13
ReadFileの読み込みエラーについて
C言語・C++・C#
-
14
シリアル通信 大きいサイズの受信処理
C言語・C++・C#
-
15
Linuxでのシリアル通信についてですが、受信のときにデータがずれた状態で送られてくることがあります
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
すべてのリビルド: 0 正常、 0 ...
-
ビープ音が鳴りません・・・
-
<math.h>ヘッダを入力している...
-
WindowsでのC と LinuxでのC...
-
FFTWでコンパイルができません。
-
c言語です コンパイルした時に...
-
C言語のグローバル変数の初期...
-
ビルダーとは何ですか?
-
コンパイル失敗と表示されまし...
-
サクラエディタとコンパイラ
-
共有ライブラリの内容確認について
-
VS 2010 のコンパイルオプション
-
C言語で作ったプログラムを他の...
-
vba コンパイル
-
#If VBA7 Thenに関して
-
64ビットのlinuxで32ビットメモ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
シリアル通信の受信待ちについて
-
ビープ音が鳴りません・・・
-
C#で char型とstring型の比較で...
-
c言語です コンパイルした時に...
-
共有ライブラリの内容確認について
-
すべてのリビルド: 0 正常、 0 ...
-
64ビットのlinuxで32ビットメモ...
-
C言語で作ったらWindowsでもMac...
-
MS-BASICの逆コンパイルについて
-
<math.h>ヘッダを入力している...
-
ヘッダーファイル『windows.h』...
-
プレコンパイルの意味を教えて...
-
Verilog_HDLでのdefineとifdef
-
[COBOL] ソースの復帰
-
gcc バージョン違いによるコン...
-
同じEXE・同じファイルで解析結...
おすすめ情報