OS:Windows7
開発環境:VisualStudio2010
言語:C++
機器:カードリーダ
接続:RS-232C
VisualStudio2010にて、シリアル通信を行うプログラムを作成しています。
VisualStudioのヘルプや、いくつかのWebページを参考に、送信を行うところまではできています。
しかし、受信ができているのか、もしくは受信した内容が表示できていないのか分かりませんが、受信が確認できません。
送信はカードリーダが動くので分かりやすいのですが、受信は表示できないと確認できないためこのような状態です。
カードリーダの仕様は、あるASCIIコードを送るとカードが送られ、エラーステイタスコードが返ってきます。正常にカードが送られた場合は、またASCIIコードを送ると、読み取ったカードの情報がでてきます。(シリアル通信をテストするプログラムでは送信受信共に成功しています。)
(送信)は、こちらが送ったもので、それ以外は受信した結果です。
---------------以下その時の結果---------------
3f 0d (送信)
30
10 45 30 31 32 30 30 38 0d (送信)
32 0d
33 59 0d
30 0d
31 59 0d
32 59 0d
33 0d
30 0d
31 0d
----------------------------------------------
C++のプログラムは以下の様になっています。
上記の結果でいうと、3f、0dを送り30を受け取るというところです。3f、0dでカードが送られ、30(正常終了)という結果を受け取ります。この結果をテキストボックスに表示したいと考えています。現在は、カードは送られるものの、30(もしくは他のエラーステイタスコード)という結果を表示することができません。
private: System::Void button_start_Click(System::Object^ sender, System::EventArgs^ e)
{
serialPort1->Open();
serialPort1->Write(x3f); //defineにて定義(中身は?[0x3f])
serialPort1->Write(x0d); //defineにて定義(中身はCR[0x0d])
serialPort1->Close();
}
delegate void SerialDataRecievedDelegate(String^ recvData);
private: void SerialDataRecieved(String^ recvData)
{
textBox1->Text = recvData; //確認するためにtextBox1に結果を表示
}
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
SerialDataRecievedDelegate^ dlgte = gcnew SerialDataRecievedDelegate( this, &CardReader::Form1::SerialDataRecieved );
String^ RecievedData = serialPort1->ReadExisting();
//1バイトずつ受信
if(serialPort1->IsOpen == true) //シリアルポートが開いているか確認
{
COMRevieveBuffer = COMRevieveBuffer + RecievedData; //受信バッファに追加
if(RecievedData == "\r" ) //改行コード検出
{
RecievedData = RecievedData + "\n";
COMRevieveBuffer = COMRevieveBuffer + RecievedData;
//受信した一行をテキストボックスに転送
this->Invoke(dlgte, COMRevieveBuffer);
COMRevieveBuffer = "";
}
//エコーを返す
serialPort1->Write(RecievedData);
}
}
C言語でのプログラム作成はしていたのですが、VisualStudioやC++でのプログラム作成は初めてです。
ソースに変な点が多々あるとは思います。
ご教授お願いします。
No.2ベストアンサー
- 回答日時:
>VisualStudioに動作確認できる機能がついているかもしれませんが、この機能を知らないため上記のような事をやってました…
ブレークポイント設定して止めるとか、
デバッグ出力使って「出力ウィンドウ」にメッセージを出すとか……。
どちらの機能もすごく便利でした…
VisualStudioを使っていても、宝の持ち腐れな気がしてきます。
前回の回答であったポートの件ですが、やはり真になっていなかったようです。
書いている最中に気づかないとはお恥ずかしい限りです…
ありがとうございました。
No.1
- 回答日時:
CLR…でしょうかね。
触っていないので細かいところは判りませんが……とりあえず気になったところを。
> serialPort1->Open();
> serialPort1->Write(x3f); //defineにて定義(中身は?[0x3f])
> serialPort1->Write(x0d); //defineにて定義(中身はCR[0x0d])
> serialPort1->Close();
ここでClose()していて、
> if(serialPort1->IsOpen == true) //シリアルポートが開いているか確認
のIsOpenは真になるんですか?
閉じてますよね?
回答ありがとうございます。
CLRですね。
もう職場ではないので試す事はできませんが…
どこまで動いているか確認するために、if文の中でMessageBoxを出そうとしたのですが、出ませんでした。おそらく、おっしゃられている通り、真になっていないんだと思います。
VisualStudioに動作確認できる機能がついているかもしれませんが、この機能を知らないため上記のような事をやってました…
明日早速試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- 所得税 電子税?のメールについて教えてください 8 2022/09/04 21:38
- その他(メールソフト・メールサービス) Thunderbirdのメール送信ができません 1 2022/10/28 16:54
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- その他(メールソフト・メールサービス) サンダーバードでメールが受信されない 10 2022/03/24 17:00
- カードローン・キャッシング 楽天カードの増額の申し込みについて 昨日、 楽天カード株式会社から→ 拝啓 平素は楽天カードをご利用 1 2022/03/23 10:34
- クレジットカード AMEXグリーンカードの発行について お世話になります。 今回AMEXグリーンカードを申し込んだとこ 2 2023/07/22 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
遅延確認応答について教えてく...
-
UDP受信時の通信異常検知について
-
赤外線センサーについて
-
(VC++)シリアル通信について
-
パソコンに詳しい方教えて下さ...
-
バッチファイルでディレクトリ...
-
ipadで社内ネットワークに接続
-
java.lang.NumberFormatExcepti...
-
Lhaplusが発したと、みられるエ...
-
Windows上のファイル操作の履歴...
-
エクスプローラで表示したファ...
-
en_US.UTF-8ロケールってどのPO...
-
別のフォルダにファイルを移動...
-
Zipファイルをエクセルに指定変...
-
ffastun.*って何ですか?
-
ICH5R→ICH5R (RAID0) マザー...
-
robocopyの失敗について
-
FFFTPでアップロードしたデータ...
-
指定ファイルをFTPで自動アップ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「送信者...
-
CRC-CCITTに関しての仕様とサン...
-
シリアル通信時のデータ受信方法
-
Excxel vba でYahoo API で住所...
-
recv関数の戻り値について
-
UDP受信時の通信異常検知について
-
ASP.NET C#でPOST受信
-
RS232cを用いた送信プログラム
-
VC++メッセージの送受信につい...
-
PC98で232c送信winndowで受信で...
-
TCPのプログラミングで質問…と...
-
VBのMSCommコントロールを使っ...
-
「TCPは全二重可能」の意味
-
DHCPOFFERの受信について
-
VB2010で、シリアル通信の方法...
-
msgrcv( )で領域破壊?
-
ネットワークでの受信バイト数
-
シリアル通信
おすすめ情報