はじめまして。
コマンドラインから実行可能なRS232C通信プログラムを
Cで作成しています。
ハイパーターミナルからCOM2に文字を出力して
ReadFileで取得した文字列を画面にはき出すというだけの
「Hello,World!」のような簡単なプログラムなのですが
ReadFileの動作結果に思うようなものが得られず困っています。
お知恵をお貸しください。
読込結果がおかしいのです。
リターンキー以外は何を入力しても「7F」が返ってきてしまいます
(リターンキー入力の場合も正常値ではありません)。
また、入力も無視されたり、認識されたりで動作も不安定です。
ReadFile自体のエラーは発生しません。
よろしくお願いいたします。
Borland C++ Compiler 5.5
Windows2000(実際に動作させたいのはWin95上です)
以下、コードです。
DWORD dwErrors; // エラー情報
COMSTAT ComStat; // デバイスの状態
DWORD dwCount; //受信データのバイト数
DWORD dwRead; // ポートから読み出したバイト数
unsigned char pszBuf[30];// 受信バッファ
while(1){
ClearCommError(hComm, &dwErrors, &ComStat);
dwCount = ComStat.cbInQue;
if (0 >= dwCount) continue;
memset(pszBuf,'\0',sizeof(pszBuf));
if (ReadFile(hComm, pszBuf, dwCount, &dwRead, NULL)){
if (dwRead > 0) {
if (pszBuf[0] == '\r') break;
printf("%%s : %s\n",pszBuf);
}else{
break;
}
}
}
No.2ベストアンサー
- 回答日時:
訂正します
while(1){
success = ReadFile(hComm, &c, 1, &dwRead, 0);
if(!success){
printf("ReadFileでエラー発生\n");
break;
}
if(dwRead == 0){
continue;
}else if(c == 13){
printf("\n");
break;
}else{
purintf("%0x ", c);
}
}
解答ありがとうございました。
(お礼はこちらにつけさせていただきました。)
解答を拝見する前に原因がわかりました。
穴があったら入りたいような凡ミスでした
構造体に設定する値を間違えていました。
dcb.BaudRate = BAUD_9600;
ではなく、
dcb.BaudRate = 9600;
にしなくてはいけませんでした。
お騒がせしてしまい、申し訳ありません。
重ねてお礼申し上げます。
No.1
- 回答日時:
1文字1文字取得して下記のようにしたらうまくいくでしょうか?
DWORD dwCount; //受信データのバイト数
DWORD dwRead; // ポートから読み出したバイト数
char pszBuf[30];// 受信バッファ
BOOL success;
char c;
while(1){
success = ReadFile(hComm, &c, 1, &dwRead, 0);
if(!success){
printf("ReadFileでエラー発生\n");
break;
}
if(c == 13){
printf("\n");
break;
}else{
purintf("%0x ", c);
}
}
また、受信しているバイト数を得るところを下記のようにしてみればどうでしょうか?
ZeroMemory(&ComStat, sizeof(ComStat));
ClearCommError(hComm, &dwErrors, &ComStat);
dwCount = ComStat.cbInQue;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsock recvでデータの取得方法
-
RS232C通信(PC⇔PLC)
-
ClearCommError呼び出し時のCE_...
-
WinsockAPIのrecvfromの受信デ...
-
Linuxでのシリアル通信について...
-
winsockの動作について。
-
「スイッチングハブのバッファ...
-
VB2005でWin32APIを用いてRS-23...
-
rs232cでの受信データ(mscomm)...
-
Macターミナルで実行中のプログ...
-
逆コンパイルと逆アセンブルの...
-
緯度、経度の 10進法と 60進法...
-
イラストレーターCS4のシリアル...
-
C言語で、メモリを解放しないで...
-
【C言語】再帰が時間がかかる...
-
Excelでのセル内容の高速消去方法
-
バックグラウンドのプロセスの...
-
API関数 GetExitCodeProcess
-
3のつく数字と3の倍数のみを表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsockでソケット通信の開発を...
-
socket: recvはいつ,どれだけ...
-
SocketのSend関数でのCLOSEの検...
-
シリアル通信の出力バッファと...
-
WriteFile()でのデータ送信がで...
-
RS232C通信(PC⇔PLC)
-
シリアルポート通信
-
ソケット通信内 read関数について
-
Linuxでのシリアル通信について...
-
SerialPortのDataReceivedイベ...
-
「スイッチングハブのバッファ...
-
RS-232Cでバイナリデータを受信...
-
Connection reset by peer
-
UDP処理のエラーについて
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
winsockの動作について。
-
シリアル通信 大きいサイズの...
-
VB2010 シリアル受信した情報を...
おすすめ情報