Visual C++ 6.0(MFC)でプログラミングを行っています.

VB 6.0でPCから値を入力し,PICへRS232Cケーブルを用いて値を送り,モータコントロールするプログラムは既に存在しており,現在はVBで書かれていた部分(インターフェイス部)をVC++に書き換えようとしています.

サンプルプログラムを参考にシリアル通信に関するVC++のプログラムは完成し,PCからモータの制御を行おうと思ったのですが,うまくいきません.

こういった際,どこに問題があるのかを検証したいのですがどうすればいいでしょうか?

現状,
1,シリアル通信ができていない
2,シリアル通信はできているが,PICへ値がうまく格納されていない
3,それ以外

問題があるのは分かるのですが,プログラマーのほうに原因がフィードバックされないため困っています.

明確な答えでなくても,アドバイスのようなものがいただけたら幸いです.

このQ&Aに関連する最新のQ&A

A 回答 (5件)

まず、シリアル通信が正しく動作しているかどうか確認してみましょう。


動作を確認するには次のような方法があります。

○ループバックテスト
 まずはPC側のプログラムが正しく動作しているか確認します。
1.PIC側のRS-232Cケーブルを抜いて、TXDとRXDを短絡します。
2.続いてPC側のプログラムから適当なデータを送信します。
3.送信したものと同じデータを受信できれば、PC側のシリアル通信が正しく動作していると言えます。
(参考)http://whzat.dyns.net/shoko3/USB-Serial_Bridge/i …
 上記URLにある「自己診断プラグ」を作っておくと便利です。

○エコーバックテスト
 続いて、PIC側のプログラムがデータを正しく受信できているか確認します。
1.PIC側では、シリアル通信で受信したデータをそのまま送信するプログラムを用意し、PCとPICを通信ケーブルで接続します。
2.ループバックテストをクリアしたPC側プログラムから適当なデータを送信します。
3.送信したものと同じデータを受信できれば、PIC側で正しくデータを受信できていることが確認できます。

> 1,シリアル通信ができていない
> 2,シリアル通信はできているが,PICへ値がうまく格納されていない
> 3,それ以外

ループバックテストとエコーバックテストで、上記の1、2まで確認できますが、3については非常に高い確率でPIC側のプログラムに問題でしょう。

ところで、モータと言っているのはDCモータですか、それともRC用サーボモータ?

この回答への補足

DCモータです.モータコントロールに関するプログラム及び回路は業者によるものなので問題はありません.

補足日時:2009/05/29 10:57
    • good
    • 0
この回答へのお礼

ありがとうございます.検証方法が全く思いつかなかったため,ループバックテスト,エコーバックテストを行い検証していこうと思います.他の皆さんもありがとうございました.

お礼日時:2009/05/29 12:29

 オシロでTXD端子に何かしらの波形が出る事を確認する。


 TXDは出力とは限らない。モデムのTXDは入力になります。
 それは電話回線に出て行く方向がTXDだからです。
 そのため、ケーブルにはストレートとクロスが有ります。
 それで、相手装置と電気的な入出力を確認します。

 RTS,CTS信号も確認します。これらを使わない方法も有りますが、使っているときはイネーブルにしないとハード的に通信できません。

 次に他のパソコンのハイパーターミナルで受信します。
 文字でないデータを見るには、次の方法を使います。
 ハイパーターミナルの「テキストのキャプチャ」を使えばファイルに書き込んでくれます。そのファイルをバイナリデータとしてエディタで見ます。

 ハイパーターミナルで、モータを制御してみます。長い命令だったら、「テキストファイルの送信」を使います。
この方法で動かなかったら、プログラムでいくら頑張っても動きません。
    • good
    • 0

No.2さんのようにプロトコル・アナライザーで解析するのが


常道であると考えます。
しかし、プロトコル・アナライザーが用意できない場合もあるでしょう。
そんな場合、
ハイパーターミナル等の端末で確認されることを
考えてみてはいかがでしょうか?
Vistaではハイパーターミナルがありませんので、
オンライン・ソフトで探されては如何でしょうか?

端末かモーターを操作できれば、VCアプリ側の問題ですし、
端末でも操作できなければ、(ケーブル等も含め)
ハード側の問題となります。

当然のことですが、
PCとPIC側でボーレート、パリティ等の設定が合致している必要があります。
念のため、確認なさってはいかがでしょうか?
    • good
    • 0

>プログラマーのほうに原因がフィードバックされないため困っています.


やることはNo.1氏の書いている通り、問題点の切り分けです。

可能であれば、PCとPICの間にプロトコルアナライザーを入れて通信データを確認します。
これで、「通信しているかどうか」「通信内容が正しいかどうか」は確認できます。
通信していなかったり、内容が間違っていればプログラムのほうが疑えますので、それぞれ使用しているモジュールのI/Fやデータやプロトコルの設定などが正しいか確認することになります。
    • good
    • 0

まったく動いてないのに完成したというのが不思議なんですけど、、、



デバッグのやり方って話なら、
1.原因の切り分け (インターフェース部分を観測し、どちらが間違っているか判定する)
2.原因になっているモジュールをデバッグする

しかないです。
ファンクションコールしている部分を担当してるなら、検証はハードウェアレベルでやるなり、リダイレクト出来るならリダイレクトするなりですね。

元々動いてるソフトがあるなら、それと全く同じ出力が得られていればいいわけですよね?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qecho_chung マイクだけにエコーをかける

echo_chungというソフトを使ってマイクだけにエコーをかけたいのですが、
「水おいしいです。」さんのサイトにのっているマイクのみにエコーをかける仕方が、
ニコ生のかんたん放送の設定を使ってだったので、

FMEを使ってマイクのみにエコーをかけることができるでしょうか?

出来るのでしたらその方法を教えてください、おねがいします。

PC Windows7 T451/46DR
I/F UA-1G
マイク XM-8500

Aベストアンサー

こちらでもまたお会いしましたね。

「echo_chung マイクだけにエコーをかける」というタイトルでの質問としては、「出来ません」が回答になります。

FMEだから出来ないのではなく、質問者さんの環境が1Gを使った擬似ステミキ配線(PC側からのBGMを配線で1Gに繋ぐやり方をしている場合)方式であるとマイクだけにかけるということが出来ないのです。

マイクだけにかけられる前提は、「マイク」と「ステレオミキサー」が別デバイスとして録音デバイス欄にある場合だけです(PCのデフォルトのデバイスにマイク+ステミキがある場合やX-Fi Goのようにマイクと再生リダイレクトがある場合などです)、

1Gでの擬似ステミキでは録音デバイスとして使っているのは1Gの一つだけのはずなのでマイクのみは不可能です。

ただ、オケにも一緒にエコーがかかっていいならば1Gでの擬似ステミキでも可能です。

echo_chungのInput側を1Gに指定してOutputをPCデフォルトのスピーカーに選べばいけるはずです、
ただしループが生じるやり方ですからエコー音量を上げるとしてハウリングが発生するはずです。

echo_chungは広告ソフトを入れようとするとか書いてあるので試していませんが、フリーソフトのカラオケエコーなどと同じようなものなら単なるディレイでしかないのでクオリティーは期待しないほうが良いかと思います。

フリーのソフトでやる場合にはVSTリバーブを超えるようなクオリティーのものはまず存在しないと思った方が良いかと思いますよ。

では。

こちらでもまたお会いしましたね。

「echo_chung マイクだけにエコーをかける」というタイトルでの質問としては、「出来ません」が回答になります。

FMEだから出来ないのではなく、質問者さんの環境が1Gを使った擬似ステミキ配線(PC側からのBGMを配線で1Gに繋ぐやり方をしている場合)方式であるとマイクだけにかけるということが出来ないのです。

マイクだけにかけられる前提は、「マイク」と「ステレオミキサー」が別デバイスとして録音デバイス欄にある場合だけです(PCのデフォルトのデバイスにマイク+ス...続きを読む

QVC++5.0とVC++6.0の違いは?

何がどう変わったんでしょうか?
なんとなく使っているだけなのでぜんぜんわかりません。

簡単にんでいいんで思いつくことを書いてもらえるだけでもうれしいです。


よろしくお願いいたします。

Aベストアンサー

MFCのバージョンが違います。MFCのリファレンスを見れば6で増えた機能が分かります。

例えばブラウザを簡単に作れるCHtmlViewは6でないと使えません。

QPseudo Echo(スード・エコー)の"Listening"という

Pseudo Echo(スード・エコー)の"Listening"という曲についてお尋ねします。
この曲の、1987年ごろに『ノース・ショア』と言う映画に使われていたバージョンを探しています。
元々は1980年の初頭にリリースされた曲なのですが映画のために録り直したようです。
この映画のサントラはリリースされていないようです。
何か情報をお持ちの方がいらっしゃったら教えてください!!

http://www.youtube.com/watch?v=rnWoKLVCp2I

Aベストアンサー

懐かしいなぁ…アリゾナサーファーですね。

どのシーンでどのようなアレンジであるか確認できないのですが、
劇中、シンセ系のアレンジでまとめられていたのでこちらはどうでしょうか?
http://www.youtube.com/watch?v=YvGBKkpJ4K8
どこのシーンで流れていたとか、何分くらいのところだとかが解れば詰められると思います。

サントラはこちら
http://www.imdb.com/title/tt0093648/soundtrack

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む

Q心エコーの結果について

30代主婦、透析歴1年半です。
心エコーの結果について教えてください。
検査報告書に

「LAの後ろにhigh echo?!もあり、そのcheckもかねてCTも一法か」
「LCCはっきり見えず」

と書かれています。
どんな意味なのか教えてください。

よろしくお願いします。

Aベストアンサー

心臓は4つの部屋に分かれております。
4つの部屋とは
「右房・・right atrium」
「左房・・left artium」
「右室・・right ventricle」
「左室・・left ventricle」です
全身を廻ってきた血液は右房に入り、三尖弁を通り右室に入ります。右室に入った血液は肺動脈を通り肺に入ります。
肺でガス交換を行い、左房に入ります。左房に入った血液は僧帽弁を通り左室に入ります。左室に入った血液は全身に廻ります。
ご質問のLAとは左房です、この後ろ側に音波を反射する場所があります。その音波を反射する場所の精密検査も含めCTを行なうことも選択支の一つではないでしょうか。
と言うことです。CTとは放射線による断層撮影でコンピユーター断層撮影法です。これは部位を5ミリとか1センチとかの幅に水平に輪切りにして見る撮影法です。ですのでこの方法だと、より詳しく診断することが出来ます。

QVC++6.0とVB6.0の開発方法

どうかよろしくお願いします。
早速ですが私は今大学院生であり、大学院を中退してしまった先輩の開発したアプリケーションを改造したいと考えています。しかし、そのアプリに関して説明書が無く、自分でソースコードを解読し、改造しなければなりません。

アプリは起動するとエクスプローラのような画面になり、フォルダを選択してその中のファイルの設定項目に数値を入力し、メニューバーから「実行開始」を選択すると、ある現象のシミュレーション結果を出力する、といったソフトです。
その先輩はVisual Studio 6.0を用いて、VC++6.0とVB6.0で開発しており、(多分)全てのソースコードは残っています。たまにバグが出ますが、アプリもちゃんと動きます。

私は、こういったソフト開発はVisual Studio .NET 2002を用いてVC++.netでダイアログベースのMFCアプリケーションを作ったことならあるのですが、Visual Studio 6.0は使ったことが無く、VC++6.0とVB6.0の異なる言語でひとつのアプリを作ったことは未経験です。

現在、ソースコードと格闘中ですが、.NET 2002で開発したときの拡張子slnファイルが拡張子dswに該当するということと、おそらく先輩はアルゴリズム計算部分はVCで書いて、GUIの方はVBで書いたということくらいしか分かっていません。また、アプリのソースコードが入っているフォルダには[bin][src][include][lib][vb]といったフォルダがあり、[src]の下層にはまたソースコードが大量に入ったフォルダがあり、[bin]にはバイナリファイル、実行exeファイルが大量に入っています。[vb]にはVBで記述されたソースらしきものが入っています。

以上が背景なのですが、ソフトに詳しい方に幾つか質問させてください。
(1)このソフトを改造したいとすれば、具体的にどういう手順で改造すればよいですか?
(2)VCの方はdswファイルについてビルドすればコンパイルされ、[bin]にexeが出来る?のですが、VBの方はコンパイル出来ません。なぜでしょうか?
(3)このような異なる大量なexeファイルを、ひとつのアプリケーションとして構築するのはどうすれば良いのですか?これらのexeファイルは一つ一つがモジュール?であり、それらを結合する…といった理解でいいのでしょうか?
(4)このVisual Studio 6.0で作られたソースを、現在フリーでダウンロードできるVisual Studio 2008 Express Editionに移行して改造することは、容易にできるでしょうか?

他にもたくさん疑問はあるのですが、とりあえず以上4つの疑問にお答え頂ける方がおりましたらご教授下さい。

どうかよろしくお願いします。
早速ですが私は今大学院生であり、大学院を中退してしまった先輩の開発したアプリケーションを改造したいと考えています。しかし、そのアプリに関して説明書が無く、自分でソースコードを解読し、改造しなければなりません。

アプリは起動するとエクスプローラのような画面になり、フォルダを選択してその中のファイルの設定項目に数値を入力し、メニューバーから「実行開始」を選択すると、ある現象のシミュレーション結果を出力する、といったソフトです。
その先輩はVisual ...続きを読む

Aベストアンサー

> (1)これらのソースを全て読んで理解したところで、ソフト開発の手法、exeの結びつけ方が分からないとどうにもならないと思うので質問させて頂きました。ご教授頂けると助かります。

おそらくはVBで書かれたメインとなるexeから他のUIを持たないexeを起動しているのでしょう。"exeの結びつけ方"はそこにあります。

> (2)説明が足りませんでした。vbの方はdllファイルが幾つもあります。
そもそもvcとvbを混在させる方法というのはどういう手法があるのでしょうか。何故vcとvbを使い分ける必要があったのかも気になります。vbの方が画面の仕様を記述し易かったからでしょうか

VBの方が画面デザインなどのUI絡みがVC++よりは圧倒的に楽ですから。
それらDLLのソースも揃っていますか? 移植となれば全ソースが揃っていないことにはかなりの困難が予想されます。

> (3)異なるexeが50個近く生成されます。...この大量のexeをどう結合しているのか検討がつきません。

それこそソースを読まないと。

-- ともかくも、全ソースがそろっていて、再構築可能か(欠けてるものがないか)を検証するところからではないかしら。

> (1)これらのソースを全て読んで理解したところで、ソフト開発の手法、exeの結びつけ方が分からないとどうにもならないと思うので質問させて頂きました。ご教授頂けると助かります。

おそらくはVBで書かれたメインとなるexeから他のUIを持たないexeを起動しているのでしょう。"exeの結びつけ方"はそこにあります。

> (2)説明が足りませんでした。vbの方はdllファイルが幾つもあります。
そもそもvcとvbを混在させる方法というのはどういう手法があるのでしょうか。何故vcとvbを使い分ける必要があったのか...続きを読む

Qtelnetのリモートエコー

こんにちは。ご存知の方いらっしゃいましたら教えて下さい。宜しくお願いします。

Telnetにて通信処理をしていて、その際のリモートエコーをOFFにしたいのですが、どのような処理(設定?)をすればOFFになるのでしょうか?
ネゴシエーション部分でIAC DON'T ECHO(255 254 1)と投げても変化はないようです。

説明不足な点は補足させていただきますので、宜しくお願いします。

Aベストアンサー

お使いのターミナルがわからないですが
私が試した物(Unix,Linux,Windows)については
再現しませんでした。通信中のコマンド全てで
起きるって事ですよね?
正直あまり見た事ない現象です。

打ち込んだコマンドを表示するかしないかはその
ターミナルエミュレータの実装依存なので
どうしょうもない場合もありますが、親切な
ものであればon/offの機能がついてるのもあります。
VeraTarm等
そうした物に変えてみるのも手だと思います。

ちなみに試したものはgnome-terminal,xterm,Kterm,
VeraTarmです。質問から察するにプログラミングで
通信するというかんじでしたら余計な出力は/dev/null
行きにしたほうが早いかもしれませんね。

QVC++2005 VC++6.0で使えた関数がつかえない?(たとえば、GetModuleFileNameとか、、)

VC++超超初心者です。

いままであったVC++6.0で利用できていた、VC++2005で
GetModuleFileNameができなくなりました。
(利用できないことなんて、ないと思いますが、、、)

何か宣言とかinclude文とか必要なのでしょうか。

すみませんが、よろしくお願いします。

Aベストアンサー

VC++2005無料版にはPlatformSDKが別になっているのでそのままでは使えません
別にPlatformSDKをインストールしてVC++2005の設定を変える必要があります
VC++2008では無料版にもSDKが付属しています

QECHO(エコー)について

Aモード、Bモード、Mモードというのはどう違うのですか?
各モードの詳細を教えて下さい。
よろしくお願いいたします。m(__)m

Aベストアンサー

 言葉では説明しにくいけど、
  Aモード(amplitude-mode)は、超音波が反射して受信される時刻を示す時間軸上(深さ)にエコーの強さをそれに応じた電圧波形で表す(分かりにくいけど横軸に距離(深さ)、縦軸に振幅が表示される)モードで、一般にいう超音波像みたいに断層像が現れるんじゃないんです。例えば、深さ3cmのところに超音波を反射する物があると、横軸の3cmにあたるところに、ある電圧波形があらわれます。(言葉で説明すると分かりにくいけど、実際のものを見ればすぐに理解できるよ。)
  Bモード(brightness-mode)は、一般に超音波画像と呼ばれるもので、超音波ビームを走査しながら得られる反射信号を画面上で輝度変調して超音波断層像を得るもの。
  Mモード(motion-mode)は、心臓みたいな運動する対象物の時間的な位置変化を表示する方法で、例えば、心臓に超音波ビームをあてると心臓は拍動しているので画面上にはsinカーブみたいなのが画面上と画面下に2本(心臓の振動子に近い側と振動子から遠い側の運動が2本のカーブとして)あらわれる。
  その他にCモード(continuous-modeだったかな・・・)なんてのもあって、一定の深さにおける断面をBモードのように表示するのもあるよ。あまり見かけないけど。

 言葉では説明しにくいけど、
  Aモード(amplitude-mode)は、超音波が反射して受信される時刻を示す時間軸上(深さ)にエコーの強さをそれに応じた電圧波形で表す(分かりにくいけど横軸に距離(深さ)、縦軸に振幅が表示される)モードで、一般にいう超音波像みたいに断層像が現れるんじゃないんです。例えば、深さ3cmのところに超音波を反射する物があると、横軸の3cmにあたるところに、ある電圧波形があらわれます。(言葉で説明すると分かりにくいけど、実際のものを見ればすぐに理解できるよ。...続きを読む

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報