イメージ 1

イメージ 2

最近少しシリアルポートの列挙方法についていろいろと試していたが、どれが一番良いのかわからない。とりあえず2種類ほど試してはある。レジストリ情報からの列挙とserialPort->GetPortNames()の2つだ。今は固定のCOMポートでやっているが、汎用性を持たせるには現状のポート状態がいるからだ。とまずはうまくいったことから書いた。実はもう一つの方法を試しているが、うまくいっていないのがある。ManagementClassを使う方法だ。WMIを使うのだが、C++/CLIでは、なぜかうまく動かない。C#2010とVB2010では問題なく動く。ManagementClassの定義が呼び出せない状態だ。ということで、一旦保留とした。
今回は、今までより簡単な内容である。マウスホイールの周波数制御の部分を展開させてみた。先に書いたようにホイールの回転方向の値をラジオボタンで選択したステップに変えて周波数制御ステップを変えると言うことです。なぜこのようなことを行ったかというと実は理由があるのです。周波数を制御している無線機FT-1000MPのCATコントロールコマンド表上のコマンド群中の周波数制御コマンドでは10Hz単位のアップダウン、100KHzのアップダウン、1MHzのアップダウンしかないのです。ということでマウスホイールでの周波数ステップをうまく使い、ないところの1KHz、5KHz、10KHzのアップダウンを行ってみたわけです。特にSSBの復調には1KHzのアップダウンが意外と重宝します。(もう少し細かいほうが良いが。。。)内容的にはラジオボタンの使い方みたいなものです。あとは初期化ルーチンForm_Load(System::Object^ sender,System::EventArgs^ e){内にラジオボタンの1KHzが初期値として必ず設定される状態にしておくことも忘れないように一行追加しておきます。radioButton3->Checked=true;
コマンド表上の周波数制御は先のft-1000mpcomのファンクション化したサブルーチンを使いコマンドとパラメータを送るだけですみます。送った後は周波数を表示させるために周波数読み取りボタンをコールします。Button21_Click(sender,e);同様にファンクションを使ってFT-1000MPのVFO-AとVFO-Bの切り替えコマンドもつけました。ここいら変は単純に一方的な設定コマンド送出だけなので、ファンクションに設定して送るだけで簡単にできます。無線機のフィルター設定関係も同様にできることになります。
VisualC++2008Expressで行った読み取った周波数をハムログに送る部分も今回追加しました。コードは2008のものがそのまま問題なく使えます。そのほかに試してみたこととして周波数の読み取りコマンドをVFO-A とVFO-Bの2つを同時に読み取るコマンドを使い確認だけしてみました。先の表示周波数周波数読み取りはVFO-Aのみでしたが、次のコマンド
10,03,00,00,00,00 を送ると32バイトのデータでVFO-A、VFO-Bの周波数データの順番で戻ってきました。このコマンドでのパラメータ1が00では全データ読み出し、01ではメモリチャンネル番号読み出し、04では指定メモリチャンネル読み出し設定可能です。今までは02の表示データ読み出しで使用しています。03での2VFOデータの読み出しが可能なことが確認できました。プログラム上では32バイト読み取り最初の16バイトでのVFO-Aの周波数データのみを表示するようにしておきます。VFO-Bの周波数表示は今はできません。プログラムの周波数計算部をファンクション化して投げてやる必要があります。今回はデータの確認のみで対応は行いません。また今回周波数の変更の確認を行うことが多く短波ラジオの周波数帯で確認したりするので、ラジオを聴くためにAMのモードも追加しました。Hi。なんだかフォームが大きくなってきたので、一旦今までのフォームを終了して新たにFT-1000MPのコントロール用として作り直したい気がそろそろしてきた。そうなるとフィルタ選択とか送受信ボタンとかいろいろとレイアウトの検討がいる。もう少し考えてみるか? まず本日は終了。寝ます。