• 締切済み

シリアル通信

プログラム初心者なんですけど、C++Builder4でシリアル通信(送信・受信)をおこないたいのですが、方法を教えて下さい。内容が複雑なようなら良い参考例や方法がのっている本やホームページを知っていたら教えて下さい。宜しくお願いします。

みんなの回答

  • prome
  • ベストアンサー率32% (64/196)
回答No.2

C++Builderは使ってないんですが、Delphiなら使っています。 Delphiは標準でシリアルコンポーネントが付いてないので、私はTMS Softwareの「TMS Async32」というのを使っています。C++Builder4,5,6とDelphi4,5,6,7対応です。 使い方はデモのソースを見ればわかると思います。 下記URLより「TMS Async32 v.1.1」です。

参考URL:
http://www.torry.net/modems.htm
natsumidesu
質問者

お礼

回答有難う御座います。参考にさせてもらいます。

回答No.1

ちょっと古い本ですが、これが王道ではないかと思います。 Windows95通信プログラミング Microsoft programming series アスキー出版  或いは、フリーやシェアウエアで通信コンポーネントのようなものがあるだろうから、それを使うとか・・・

参考URL:
http://www.amazon.co.jp/exec/obidos/ASIN/4756119115/qid=1065604636/sr=1-12/ref=sr_1_2_12/250-4305769-8835446
natsumidesu
質問者

お礼

回答有難う御座いました。参考にさせてもらいます。

関連するQ&A

  • linuxのシェル上でシリアル通信したい

    linuxのシェル上でシリアル通信(RS232C)したいのですが 送信するのは、 echo "msg" /dev/tty0 で、できるのですが、 受信方法がわかりません。 知っておられる方、教えて下さい。

  • VB2010で、シリアル通信の方法を教えてください。

    VB2010で、シリアル通信の方法を教えてください。 ツールボックスの「Serial Port」を使っています。 送信までは難なくできたのですが、受信が旨くいきません。 参考にしたサイトは、 http://msdn.microsoft.com/ja-jp/library/cc720852.aspx です。 これを実行すると、受信が出来ないだけでなく、フリーズしてしまいます。 どうやったら、受信できるのでしょうか?

  • PICのシリアル通信のWIN_APIプログラムについて

    PICとPCとのシリアル通信の WIN_APIプログラムについてどなたかご存知の方は教えてください. 現状,API関数を用いて,シリアル通信をできるようにプログラムを作成したのですが,送信はできるのですが,受信データが"C0"をPICから送付しているのに,"FFFFFFFC0"と受信されてしまいます. 先の"FFFFFFF"をとるにはどうしたらいいでしょうか? 現状:受信プログラム // シリアルポートに対する書き込み(PICに送信命令) WriteFile(hCom, w_com_Buf,lstrlen(w_com_Buf), &n, 0 ); // シリアルポートに対する読み込み ReadFile(hCom, s_com_Buf,1, &n, 0 ); mikroC上のUSARTターミナルでは送受信は適正で, 上記のプログラマで 送信はPIC側で受信していることは7SEGを使って確認しています. しかし,PC側では, s_com_Buf[0]には,"C0"が入ったり,"FFFFFFC0"が入ったりします. PICは現状,多チャンネルAD変換をしているため, 送信に対する受信データのやり取りができなくて困っています. どなたか先生教えてください.

  • シリアル通信について

    VB6にてシリアル通信プログラムを作成しましたが、データが受信できません。 ハイパーターミナルなら受信できて、一度ハイパーターミナルを使用すると、作成したプログラムでもデータが受信できるようになります。(再起動するとまたハイパーターミナルを使用するまで受信できません) 自作プログラムでなにか処理がたりないのでしょうか?

  • シリアル通信のデータ欠けについて

    シリアル通信のデータ欠けについて教えてください。 WindowsXP上でシリアル通信「115200bps、8、None(ODD、EVEN)、1」の設定で、1ms毎に12バイトの送受信を行っているのですが、1分ほど受信すると、データ欠けが発生します。 受信プログラムはこの問題が発覚してから、受信したデータを変数にバッファリングし、保存ボタンを押してから、ログファイルへ保存するシンプルなプログラムを作成し、確認しています。 「切り分けた内容」 1、57600bpsでも発生する 2、VB6、VisualStudio2008 C#で作成したツール及びフリーソフト(SerialDebugger)でも、データ欠けが発生する 3、RS232Cラインモニタ(キャロちゃん)で確認すると、データ欠けは発生していないので、受信側の問題と判断しています。 4、送信間隔を50msと遅くしても発生する 5、RS232C及び、USB変換したものどちらでも発生する 6、9600bpsでは、発生しない(同じデータ数での判断) 7、ケーブル長は1mほど ちなみに通信時間に余裕が無い為、チェックサムやハンドシェイクなどの機能は、入れられません。 一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生するのが当たり前なのでしょうか?

  • C++Builder6.0でのシリアル通信

    つい先日より、C++Borland6.0を用いて、シリアル通信で外部機器とのやりとりを行なえるものを作成することになりました。 これまで、VBでのシリアル通信は行なったことがあるのですが…同様に考えていたのですがC言語が初心者なためまったくと言っていいほど今回のものはわかりません。 そこで、色々なサイトを探した結果、文字数&送信文字を限定すれば送信でき、受信バイト数を限定すればできるものが出来上がりました。(サイトのものをほぼそのまま活用している感じですけど) しかし、 1、ボタン1を押すと「Edit1に書かれているものに<CR><LF>を加えたものを送信したい」 2、ボタン2を押すと「Edit2に書かれているものに<CR><LF>を加えたものを送信したい」(1と2は、送信バイト数が違うため、送信バイト数で引っかかる) 3、「受信文字数は、受信バイト数を指定ではなく全てを受信したい」 4、「受信したものを<CR><LF>で分けたい」 などになるとさっぱりできません。 「?Ver<CR><LF>」と送ると「*.**<CR><LF>」と外部機器から返ってきて、 「?PARAMETER<CR><LF>」と送ると「PARAMETER 1=***<CR><LF>PARAMETER 2=***<CR><LF>PARAMETER 3=***<CR><LF>OK<LF>」と外部機器から返ってくるとします。 現在のソースは回答1,2に書きます。ボタン1を押すと送信され、受信されたものをメモに加えられるというものになっています。 これを、上に書かれているような4つの機能を加えたものにしたいのですが…。 (?PARAMETERに関しては送信文字数が合わずにできなかったため、ソースに記入しておりません。また、通信設定に関しては省略しております) ご教授くださる方おりましたらよろしくお願いします。

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • pic 同士のシリアル通信

    picから別のpicにシリアル通信でデータを送ることは可能なのでしょうか? また、出来るとしたらどのようなプログラムになるでしょうか? 上記質問に追記です。 送信側はtxピン、受信側はrxピンという接続で可能でしょうか?

  • シリアル通信の通信・検証方法とは?

    Visual C++ 6.0(MFC)でプログラミングを行っています. VB 6.0でPCから値を入力し,PICへRS232Cケーブルを用いて値を送り,モータコントロールするプログラムは既に存在しており,現在はVBで書かれていた部分(インターフェイス部)をVC++に書き換えようとしています. サンプルプログラムを参考にシリアル通信に関するVC++のプログラムは完成し,PCからモータの制御を行おうと思ったのですが,うまくいきません. こういった際,どこに問題があるのかを検証したいのですがどうすればいいでしょうか? 現状, 1,シリアル通信ができていない 2,シリアル通信はできているが,PICへ値がうまく格納されていない 3,それ以外 問題があるのは分かるのですが,プログラマーのほうに原因がフィードバックされないため困っています. 明確な答えでなくても,アドバイスのようなものがいただけたら幸いです.

  • (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++でのプログラム作成は初めてです。 ソースに変な点が多々あるとは思います。 ご教授お願いします。

専門家に質問してみよう