VC++にチャレンジ       

  AVRとPCの対話にDelphiを使ってきましたがすでにサポートがなくなって新しいOSでは使うことができません。大きなプログラムを書くことはありませんがAVRにUSB経由でコマンドを送ったり、AVRからデータを受け取るためにPCのウインドウを使いたくなります。
vc++が無償で評価版として使えるようなのでどこまで進めるかは疑問ですが少しづつ勉強してみようと考えました。すぐに忘れますので日々のメモを書くことにします



2012.08.16
周波数カウンタの表示プログラムを作ってみる→改造
起動から表示までの手間を減らしました。 ポートの検索 と 選択/開始 の2回のクリックで計測が始まります。
使い勝手が良くなったと自画自賛しています。



2012.08.15
周波数カウンタの表示プログラムを作ってみる
この周波数カウンタは計測値と時刻の設定はTeraTeamで行うように作りましたがVC++のプログラムで表示できないかといろいろ模索してみました。
ハードウエアをリセットして数字の”1”を送れば”f= 1 234 567 Hz 15:12:40 ”の文字列を送出する仕様にしてありますから、@接続中のCOMポートを検索すること、Aカウンタ接続ポートへ”1”を書き込むこと と 続けて送られる周波数・時刻の文字列を受け取り表示することを考えました。

webを調べるうちに関係するプログラムをコンソールアプリで発見しましたので試行錯誤を繰り返しながらフォームに移して不十分ながら周波数を目で確認出来るだけのものができました。














←(追記)DoEvents()から戻った時には読み取りループをパスしてかつ、breakでループを終了することによってエラーメッセージが出なくなりました。


COMポートの読み取りは当初はコンソールアプリで見つけたのですが後になって"SerialPort"というコンポーネントに気づきましたのでそれを利用しています。
時間がかかったのは、周波数表示イベントでは連続してデータを受信するのですがDelphiでも経験したようにそのイベントが終了するまで結果が表示されません。ループで読みだしても測定値は見えないので意味がありません。いろいろ調べるうちに Update() という関数があることを知りました。これで連続して1秒毎に送られてくるデータを更新して見ることができました。次に困った点は、読み取り・表示イベントでデータを表示している限りボタンのクリックを検知しないということです。これによってひとたび動き出せばポートクローズボタンも終了の×印ボタンも効かなくなりますから終了することも出来ません。マルチスレッドの技法を使うのが便利とのことですがどうすれば良いのか理解できる報告は探し得ませんでした。掲示板でお願いしたところVBでは DoEvents() 関数を使えばよいと教えていただきwebを調べるとVC++にも Application::DoEvents() があってこれをループのなかに書き込んでおくとループを中断してボタン操作を検知してくれることがわかりました。これでポートクローズやプログラム終了ができるようになったのですがクローズボタンを二度クリックしないと(正確には一度目はどこをクリックしても良い)結果が現れない上に図のようなエラーメッセージが出てきます。これはDoEvents()のあとクローズされているにもかかわらずループに戻ってデータをポートから読み出そうとしているためのようです。フラグを設定して戻った時に読まないようにするとメッセージは出ないのですが終了後もゴミが残るらしくプログラムの再コンパイルもできなくなってしまします。エラー処理を適切にすれば出てこないのでしょうがまだその技術には届いていません。
参考までにソースファイルを置きますが、研究中で多くのゴミも残しています。

五里霧中、悪戦苦闘で調べましたが、ヘルプの不親切なことは初心者は立入禁止みたいに感じます。専門用語の羅列で用例が具体的でないので極めてわかりにくいと感じています。今さらDelphiのヘルプのできを感心します。
VC++でしたかったUSBのCOMポートの読み書きの基礎がわかりましたのでこの何日間の苦労は意味があったと思っています。




2012.07.28
VC++のダウンロードとインストール
 マイクロソフトのサイトからVisual C++ 2010 Express をダウンロードして指定通りのインストールをしました。

初めてのプログラム
 IDEを起動して「新しいプロジェクト」を選択して、「windows フォーム アプリケーション」を選びます。名前はとりあえず test1 として、プログラムの置き場所はできるだけ簡単な場所として C:\vc++prg\ を指定しました。
プログラム作成画面では ツールボックス と プロパティ_ウインドウ を起動しておくと右端の縦のバーにマウスを移動するだけでそれぞれのウインドウが現れるので便利です。
 初めてのプログラムですから まず、ボタンとラベルを使います。ツールボックスでクリックしてform上でクリックするとコントロールを配置できます。button1とlabel1はそのままの名で使いました。
配置したForm上のボタン1をダブルクリックするとcpp編集画面が現れてクリックイベントの場所にカーソルが現れますからそこに
 label1->Text="こんにちは\r\nはじめまして";
と書きました。

続けてテキストボックスとlabel2とボタンを追加して、ボタン2を押すとlabel1に空白を書き、ボタン3を押すとテキストボックスの内容がlabel2へ移動するプログラムを書いて初めてのプログラムを終了しました。
予約語が大文字と小文字の混用であり大・小文字を区別するので覚えるのに苦労しそうだと思うこと、コントロールのプロパティはドットではなくて「マイナスと不等号」が面倒だと思うこと、これらの記述時にコンテキストメニューが現れないところが使いにくいかと思うところです。








inserted by FC2 system