※ ChatGPTを利用し、要約された質問です(原文:(VC++)シリアル通信について)
(VC++)シリアル通信について
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++でのプログラム作成は初めてです。
ソースに変な点が多々あるとは思います。
ご教授お願いします。
お礼
どちらの機能もすごく便利でした… VisualStudioを使っていても、宝の持ち腐れな気がしてきます。 前回の回答であったポートの件ですが、やはり真になっていなかったようです。 書いている最中に気づかないとはお恥ずかしい限りです… ありがとうございました。