昨年末から自分の無線機IC-7851をPCとUSBによるシリアル接続でデータ取得とリモート制御ができるC#によるアプリケーションのプラミングにはまっている。しかしカチコチンの還暦ジジイの脳ミソは、オブジェクト指向プラミングの用語を拒絶しており依然理解は深まらず。対峙していると眠くなってしまう状態である。それでも毎日使っているとあれやこれやと問題を感じたりやってみたいことが出てくるのだ。バージョン管理はまったくしていないけれども現在のものは当初のものからかなり変わってしまった。
IC7851RC
ラジオボタンをやめた。
ラジオボタンは、複数の選択肢から単選択する場合とても便利なボタンではあるけれども選択対象が多くなると全て並べる必要がありフォーム上の限られたスペースではごちゃごちゃしてくる。という理由で全ての機能選択ボタンをノーマルなボタンに変更した。プログラミング上は、少々面倒ではあるけれども一つのボタンで複数の機能を選択可能にした。例えば[BK-IN] は、無線機の操作ボタン同様OFF > SEMI > FULLとクリックする都度循環する。RF Powerは全てのボタンが5段階変化する。例えば 200W > 190W > 180W > 170W > 160W となる。段階に応じてボタンの色も変化する仕様になっている。
RF GAINとDRIVE
無線機のGAINつまみが二重になっているように一つのTrackBarでRFとDriveのゲインコントロールができる。その切り替えは、Label Textの”RF GAIN”または”DRIVE”をクリックすること切り替わる。めったに操作しないのでこれでいい。AF GAINは同様にLabel AF GAINをクリックすることでMuteとその解除ができる仕様に変更した。
SCOPEの操作ボタン追加
IC-7851のバンドスコープの操作でよく使うボタンを追加した。実際の無線機では、SPANとEDGEは一つのボタンだけれどもこれでは分離した。FIXはCENTERとクリックごとに切り替わる。FIXにするとEDGEボタン有効、SPANボタン無効、CENTERになるとSPANボタン有効、EDGEボタン無効という仕様である。SPLITをONにするとFIXがCENTERに切り替わる仕様にもなっている。
メモリー実装
無線機にメモリーは実装されているけれどもほとんど使ったことがない。それは、操作が面倒だしそもそもメモした対象が判らなくなってしまう。そこでで対象周波数と電波型式にコールサインを併記したメモを積み上げるようにした。最初は、Stack<T>を使ってPush, Pop, Peekでそれをやっていたがいろいろと面倒でこのような処理は不向きと感じた。代わりにList<T>を使ってみた。list.Add(S)で配列要素が追加してlist.RemoveAt(n)で配列要素が削除できるのはかなり便利である。list.Insert(s)とか.list.AddRange(n1,n2)のようなものも使えるようだけれど今回は使い道はない。ともかく通常の配列同様の参照ができるのでStackよりListの方がこのようなメモリー管理には向いている。通常の配列で同じことをするのはかなり面倒である。記録できる数は無制限にしているが実際にはそんなに多く記録しないので問題ない。
各ボタンの動作仕様
[VFO▶] ・・・ 無線機の周波数とモードを取得してMemoのTextboxにその周波数を表示、コールサイン記入用のReadOnlyを無効にして記入可能にする。
[WRITE]・・・ [VFO▶]ボタンクリックで有効になる。クリックすると記録が実行される。但しコールサイン記入用TextBoxに何か記入されていないと無効。
[ERASE]・・・選択されているメモを消去する。
[SYNC]・・・メモ内容表示変更に合わせて無線機の周波数とモードが同期される。クリックされてない状態ではメモ内容が表示されるだけ。
[▶VFO]・・・選択表示されているメモ内容で無線機の周波数とモードを変更する。
NumericUpDownスピンボタン・・・メモリー番号表示、UpDownボタンクリックでメモリー番号が変わり該当番号のメモ内容が表示される。
ARRL International DX Contest CWで実際にこの機能を使ってみたけれどもなかなか便利。今までは、周波数とコールサインをそこいらの紙に書いてやっていたことが簡単にできるようになった。自画自賛なのである。
コメント