• 締切済み

VC++.NETを使用したRS232c通信プログラム

RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。

みんなの回答

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.3

>rs.Read_CRLF(w,100)を成功か失敗が調べるコードにすると >いうのはTrueかFalseを返すようにするということですか? もともとのコードがそうなっているでしょう? 自分で改変したなら、全部のコード出さないと、どこがどう間違っているかコメントしようがないよ。

osilver9
質問者

補足

返事を頂いたのに長い間返事が返せなくてスイマセンでした。 rs.Read_CRLF(w,100)のコードなんですが初期状態から変更はしていなく以下に示すコードのままです。↓ bool RS232c::Read_CRLF(char* Buff,int NumberOfCharactersToRead){ for(int i=0;i<NumberOfCharactersToRead;i++){ Buff[i]='\0'; } char buf[10]=""; char beChar=0x00; bool flag=TRUE; int c=0; while((!(buf[0]==0x0A && beChar==0x0D)) && c<NumberOfCharactersToRead && isLink()){ buf[0]=0x00; if(0==ReadFile(m_hComm,buf,1, &size,NULL)){ flag=FALSE; }else{ flag=TRUE; } if(buf[0]!=0x00 && flag){ if(c>1) beChar=Buff[c-1]; Buff[c++]=buf[0]; }else{ return FALSE; } } return TRUE; }

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.2

rs.Connect();//ポートcom5と接続を開始する bool Connect(char* PortNmae, //ポート名を指定します COM1 COM2など、初期値はCOM1 明らかに、接続失敗してますね。

osilver9
質問者

補足

返事ありがとうございます。ポートの初期値はcom5に変更して、ボーレート、ストップビット、パリティなどもハイパーターミナルで成功した設定値に変更はしています。書いていなくてすいませんm(_ _)m

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.1

まず、rs.Connect()の返値を調べて、コネクトに成功しているかどうか判断する必要あり。 ボーレート、パリティなど通信プロトコルが一致していないと、コネクトは成功しない。 rs.Read_CRLF(w,100)も同様に、成功か失敗が調べるコードにすべき。

osilver9
質問者

補足

返事ありがとうございます。ポートの初期値はcom5に変更して、ボーレート、ストップビット、パリティなどもハイパーターミナルで成功した設定値に変更はしています。書いていなくてすいませんm(_ _)m ポート名:COM5 ボーレート:115200 ストップビット:1bit バイトサイズ:8bit パリティ:なし 受信送信時のタイムアウト:初期値 わからないことだらけで恐縮なんですが、rs.Read_CRLF(w,100)を成功か失敗が調べるコードにするというのはTrueかFalseを返すようにするということですか?

関連するQ&A

専門家に質問してみよう