- ベストアンサー
シリアル通信の通信・検証方法とは?
Visual C++ 6.0(MFC)でプログラミングを行っています. VB 6.0でPCから値を入力し,PICへRS232Cケーブルを用いて値を送り,モータコントロールするプログラムは既に存在しており,現在はVBで書かれていた部分(インターフェイス部)をVC++に書き換えようとしています. サンプルプログラムを参考にシリアル通信に関するVC++のプログラムは完成し,PCからモータの制御を行おうと思ったのですが,うまくいきません. こういった際,どこに問題があるのかを検証したいのですがどうすればいいでしょうか? 現状, 1,シリアル通信ができていない 2,シリアル通信はできているが,PICへ値がうまく格納されていない 3,それ以外 問題があるのは分かるのですが,プログラマーのほうに原因がフィードバックされないため困っています. 明確な答えでなくても,アドバイスのようなものがいただけたら幸いです.
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
まず、シリアル通信が正しく動作しているかどうか確認してみましょう。 動作を確認するには次のような方法があります。 ○ループバックテスト まずはPC側のプログラムが正しく動作しているか確認します。 1.PIC側のRS-232Cケーブルを抜いて、TXDとRXDを短絡します。 2.続いてPC側のプログラムから適当なデータを送信します。 3.送信したものと同じデータを受信できれば、PC側のシリアル通信が正しく動作していると言えます。 (参考)http://whzat.dyns.net/shoko3/USB-Serial_Bridge/index.html 上記URLにある「自己診断プラグ」を作っておくと便利です。 ○エコーバックテスト 続いて、PIC側のプログラムがデータを正しく受信できているか確認します。 1.PIC側では、シリアル通信で受信したデータをそのまま送信するプログラムを用意し、PCとPICを通信ケーブルで接続します。 2.ループバックテストをクリアしたPC側プログラムから適当なデータを送信します。 3.送信したものと同じデータを受信できれば、PIC側で正しくデータを受信できていることが確認できます。 > 1,シリアル通信ができていない > 2,シリアル通信はできているが,PICへ値がうまく格納されていない > 3,それ以外 ループバックテストとエコーバックテストで、上記の1、2まで確認できますが、3については非常に高い確率でPIC側のプログラムに問題でしょう。 ところで、モータと言っているのはDCモータですか、それともRC用サーボモータ?
その他の回答 (4)
- richardo
- ベストアンサー率20% (11/53)
オシロでTXD端子に何かしらの波形が出る事を確認する。 TXDは出力とは限らない。モデムのTXDは入力になります。 それは電話回線に出て行く方向がTXDだからです。 そのため、ケーブルにはストレートとクロスが有ります。 それで、相手装置と電気的な入出力を確認します。 RTS,CTS信号も確認します。これらを使わない方法も有りますが、使っているときはイネーブルにしないとハード的に通信できません。 次に他のパソコンのハイパーターミナルで受信します。 文字でないデータを見るには、次の方法を使います。 ハイパーターミナルの「テキストのキャプチャ」を使えばファイルに書き込んでくれます。そのファイルをバイナリデータとしてエディタで見ます。 ハイパーターミナルで、モータを制御してみます。長い命令だったら、「テキストファイルの送信」を使います。 この方法で動かなかったら、プログラムでいくら頑張っても動きません。
- BLK314
- ベストアンサー率55% (84/152)
No.2さんのようにプロトコル・アナライザーで解析するのが 常道であると考えます。 しかし、プロトコル・アナライザーが用意できない場合もあるでしょう。 そんな場合、 ハイパーターミナル等の端末で確認されることを 考えてみてはいかがでしょうか? Vistaではハイパーターミナルがありませんので、 オンライン・ソフトで探されては如何でしょうか? 端末かモーターを操作できれば、VCアプリ側の問題ですし、 端末でも操作できなければ、(ケーブル等も含め) ハード側の問題となります。 当然のことですが、 PCとPIC側でボーレート、パリティ等の設定が合致している必要があります。 念のため、確認なさってはいかがでしょうか?
- SilverThaw
- ベストアンサー率32% (260/806)
>プログラマーのほうに原因がフィードバックされないため困っています. やることはNo.1氏の書いている通り、問題点の切り分けです。 可能であれば、PCとPICの間にプロトコルアナライザーを入れて通信データを確認します。 これで、「通信しているかどうか」「通信内容が正しいかどうか」は確認できます。 通信していなかったり、内容が間違っていればプログラムのほうが疑えますので、それぞれ使用しているモジュールのI/Fやデータやプロトコルの設定などが正しいか確認することになります。
- precog
- ベストアンサー率22% (966/4314)
まったく動いてないのに完成したというのが不思議なんですけど、、、 デバッグのやり方って話なら、 1.原因の切り分け (インターフェース部分を観測し、どちらが間違っているか判定する) 2.原因になっているモジュールをデバッグする しかないです。 ファンクションコールしている部分を担当してるなら、検証はハードウェアレベルでやるなり、リダイレクト出来るならリダイレクトするなりですね。 元々動いてるソフトがあるなら、それと全く同じ出力が得られていればいいわけですよね?
お礼
ありがとうございます.検証方法が全く思いつかなかったため,ループバックテスト,エコーバックテストを行い検証していこうと思います.他の皆さんもありがとうございました.
補足
DCモータです.モータコントロールに関するプログラム及び回路は業者によるものなので問題はありません.