ものづくりやろう!
2023年6月1日掲載
もうかれこれIC-7300を5年以上使っています。雨の日も風の日もほぼ毎日電源を入れているので多少装置にガタが来ています。少し前から「VOX/BK-IN」スイッチが少し凹んできました。横から見ると凹んでることはわかっていたのですが何も症状は出ていませんでした。
ところが最近は、このスイッチがたまに言うことを聞かないことがあります。スイッチを押してもBK-INにならない症状が出てきました。このような時にはつい、「よしスイッチを自分で交換してやろう!」という気持ちになってしまいます。しかし、以前リグ内の時計用ボタン電池を交換しようとしてはんだ付けに失敗してパターンをはがしてしまい、以後無線機のスイッチを入れると毎回無線機が0時に起床するという状態になってしまったいやな思い出がよみがえります。「スイッチ自分で交換しよう」いう心の訴えと「いやまた失敗するぞ、ちょっと待て! 修理に出そう!」という自制心でシーソーを漕いでしまいます。
せめて2、3か所故障があれば修理に出そうと割り切れるのですが、スイッチ1か所で修理に出すのも無銭家としては気が引けます。さてスイッチ交換が唯一の解決策ではないので、別の対応策を考えました。
ネットを探してみると有償・無償で無線機の制御ソフトが何種類か見受けられますので、ハードがダメになってきたとしてもソフトがあるのですからソフトで対応すればいいのではと思いますが、私としては下図(図1)のようにIC-7300の下に、周波数切り換えボタン(ボタンでなくてもタッチパネルでもいいのですが)が並んだ顔を持っているハードウェアの制御器があればいいなと思い始めました。
図1 リグ制御器でIC-7300を制御
制御ソフトのRS-BA1も購入したのですがパソコンをいちいち立ち上げる必要があるため、受信だけのときにはパソコンを立ち上げずに聞いていることが多いわたしのような種族にとっては、パソコンの電源を入れずにマイコンだけで制御する図1のハードウェアソリューションは魅力に感じます。
図1のIC-7300の下をもう一度見てください。「壊れかけの「VOX/BK-IN」スイッチの制御ができる」、「IC-7300で画面を2回押さなければならないバンド変更やモード変更、等をプッシュスイッチでできる」のです。このボックスの中にマイコンを入れて、「スイッチ類からマイコン経由でIC-7300と接続し」、「スイッチの情報を読み取ってマイコンからIC-7300に制御コマンドを送る」というリグ制御器です。「よし作ろう!」。しかし・・・
早速作ろうという気持ちにもなりましたが、リグ制御ソフトのことをあまり知りません。そこで、今回はリグ制御を勉強するために簡単なリグ制御ソフトを作ることにしました。最終目的は、「このソフトで作った機能をマイコンでハード化」することで、このソフト制作はハードを作る前のソフト勉強の成果という位置づけです。
リグ制御ソフトの制作にあたっては超手抜きをしました。それは、コマンドベースの「rigctl」というリグ制御ソフトにリグの制御を任せ、ボタンなどのGUIをEXCEL VBAで作り、EXCEL VBAで作ったボタンを押すとrigctlのコマンドが動いて無線機を制御するという、オリジナル制御ソフト覆い隠し作戦で、ソフトの開発をおこないました。
ただ、このリグ制御器を構想するにあたり懸案事項がありました。それは、現在IC-7300にHamlogなどのソフトがすでにつながっていますので、2台目の制御装置がつなぐことができるのだろうかという懸念でした。2台制御できるのかなと心配になりましたので調べてみました。すると月刊FB News上に「IC-7300でリグコントロールとCW/RTTYキーイングを両立させる」(2019年7月号 JN4JGK/3 難波正憲氏著)の記事があり、その中に「IC-7300には通信ポートが2ポートある」と書かれていました。IC-7300に2台のパソコンをつなげるとの記事ですので(ほかに解決方法はあるようですが)、「PC」と「故障しつつあるスイッチの持つ機能やバンド変更機能を持たせたリグ制御器」の両方をIC-7300につなげることが出来そうだという記事ですのでやる気がでてきました。
「CI-V」、ICOMのホームページからIC-7300関係の取扱説明書をダウンロードするときに「補足説明書資料」として見られた方も多いと思います。これがCI-Vによるシリアル通信のプロトコルを説明している資料です。IC-705やその他の製品にもCI-Vの補足説明書があります。
図2 補足説明書(CI-V)
一応、この資料に沿ってコマンドを叩けば無線機の周波数や動作をPCから行えるということは知っていましたので、この取扱説明書をダウンロードはしたものの、「自分で制御ソフトを作らないし、作ることもないだろう」とスルーを決め込んでいました。今回はちょっと真面目にこの取扱説明書を見てみました。
まず「CI-V」という言葉ですが、「Communication Interface-V」の略で、無線機や受信機をパソコンから操作するためのアイコム独自のプロトコルです。パソコンからコマンドを送信して無線機の設定を変えたり状態を読み込んだりすることができます。
CI-Vでは、コントロール時に送るコマンドやサブコマンドの基本的な形(基本フォーマット)がきめられています。取扱説明書の2ページには、パソコンから無線機に送るコマンドの形が書かれています(図3)。このフォーマットによると、パソコンから無線機に送る制御コードと無線機からパソコンに送られてくるコードがあることがわかります。いずれもプリアンブル「FEFE」とポストアンプル「FD」の間に、アドレス情報、コマンド、データを指定の形式で送る書式です。
プリアンブル、ポストアンブルという用語が書かれていますが、プリアンブルは「デジタル通信で受信側に“これからデータが送られてくる”ことを知らせるためにデータ本体に先立って送信される決まったパターンのビット列のこと」で、CI-Vのプロトコルでは16進数の「FEFE」です。「F」は、ビット列で表すと「1111」、「E」は「1110」です。ポストアンブルはデータの後に送られてくるビット列のことで、CI-Vのプロトコルでは16進数の「FD」です。
図3 CI-V基本フォーマット(「IC-7300/IC-7300M/IC-7300S補足説明書」より)
コマンドの一覧は取扱説明書の3ページから8ページにかけて書かれています。たくさんありますね。
このうち周波数を設定するコマンドは3ページに書かれています(表4)。
表4 コマンド例(「IC-7300/IC-7300M/IC-7300S補足説明書」より)
これだけではイメージがわきませんので、「無線機の周波数を設定するコマンド」等を例に見ていきます。
例1 無線機の周波数を設定するコマンド
無線機の周波数を設定するコマンドは、表4によるとコマンド「05」です。「03」のコマンドは「表示周波数の読み込み」と書かれているので、これは無線機の周波数情報をパソコンに読み込むコマンドです。動作欄に「P.9参照」と記載ありますが、それが図5の書式のことです。
図5 周波数の設定(「IC-7300/IC-7300M/IC-7300S補足説明書」より)
これらの情報からコマンド、サブコマンド、データ部がどのようになるのか見てみます。
例えば無線機の周波数を7.012345MHzに設定するためには
・基本プロトコルは図3からつぎのようになります。
FE FE 94 E0 XX XX XX XX XX XX XX FD
・周波数設定コマンドは「05」、サブコマンドはありませんので抜きます。
FE FE 94 E0 05 XX XX XX XX XX FD
・周波数情報は図5から5バイトの情報で与える約束ですので、7.012345MHzを図5の書式に並べて、次のようなコードになります。
FE FE 94 E0 05 45 23 01 07 00 FD
これをCOMポートに送ります。
私の家のIC-7300はパソコンのCOM5ポートにつながっていますので、上のコードを通信ソフトで送ります。このパソコンには、以前「Serial Port Monitor」という通信ソフトをインストールしていましたので、このソフトを使用して上のコードを送ってみました。
「Serial Port Monitor」の説明は省略しますが、図6のようにPort, Baurate, Databitsなどの通信の基本情報を設定し、コマンドを入れます。この時、送る情報が16進データであるのでデータ入力欄の下にある「Hex」を設定することを忘れないようにします。コマンド列を入力して「Send」ボタンをクリックすると、設定が間違っていなければIC-7300の周波数が指定の値(701234Hz)になります(写真7)。
なお、「FE FE 90 E0 ・・・」と送るところを「FE FE 90 00 ・・・」と送りましたが動きました。ネット上のサンプルで00になっていましたのでやってみた次第です。なぜ「00」でも可能なのかはわかりません。
図6 「Serial Port Monitor」を使った制御コードの送出
写真7 コマンド送出後のIC-7300画面
例2 無線機に設定されている周波数を読み取るコマンド
このコマンドは、無線機の情報を読み取るコマンドで、基本プロトコルは次のようになります。
FE FE E0 94 XX XX XX XX XX XX XX FD
周波数を読み取るコマンドは「03」で。サブコマンドはありませんので次のようになります。
FE FE E0 94 03 FD
このコマンドをSerial Port Monitorで送ってみました。結果は、周波数情報がかえってきませんでした(赤枠)。そこでコマンドの「E0」を「00」に変えて送ってみました。結果は図8のように「00」に変えたものだけが返ってきました(緑枠)。理由はわかりません(後日調べることにしました)。
図8 コマンドに対する応答データ
赤枠: FE FE E0 94 03 FD と質問コマンドを送って返信データが来ない。
緑枠: FE FE 00 94 03 FD と質問コマンドを送って返信データ(周波数)が07023310(Hz)と送られてきた。
例3 無線機をOFFにするコマンド
表9 電源OFFコマンド「18」
このコマンドは、表9のように「18 00」です。実際のコマンドコードを書きます。
FE FE 94 00 18 00 FD
コマンドを送出すると、無線機の電源がOFFになりました。
rigctlは無線機を操作するプログラムです。このプログラムはオープンソースの無線機操作ライブラリHamlibの中に含まれています。WindowsやLinuxで動作します。
Windows上で動かす場合は、次のURLからダウンロードしてインストールします。
・「Ham Radio Control Library」のHP: https://hamlib.github.io/
・https://github.com/Hamlib/Hamlib/releases/download/4.5.5/hamlib-w32-4.5.5.exe
なお次に説明しますEXCELのマクロではこのrigctrlを使用します。rigctlの場所をEXCELのセルの中に記載しますので、できるだけインストールするフォルダ名には空白がないフォルダにインストールしておいてください。デフォルトでは「Program Files」と空白が入っている場所です。ちなみに私は、「tools」というフォルダにプログラムをインストールするようにしていますので、「e:\tools\hamlib\bin」にインストールしています。
rigctlのコマンドの一覧は、次のURLに記載されています。
https://www.mankier.com/1/rigctl#Commands
図10 rigctl コマンド一覧の一部
図10はrigctlのヘルプ( rigctl -h )により表示されたrigctlで使用できる命令の一部です。
例えば、例1、例2、例3に記載した、周波数設定コマンド、周波数読み込みコマンド、電源OFFコマンドをrigctlで書くと次のようになります。
3件のコマンドを順番にコンソール画面から入力・実行した結果が図11です。
図11 rigctl を使った①周波数設定、②周波数情報、③電源OFF コマンドの実行結果
図11の2件目のコマンド( rigctl -m 3073 -s 19200 -r COM5 f )は無線機の設定周波数の問い合わせコマンドです。この問い合わせに対して「7016000」(Hz)と回答がかえってきています。CI-Vプロトコルをそのまま入力した場合の回答は、プリアンブルや周波数データ、ポストアンブルが入り混じった「fe fe 00 94 00 00 60 01 07 00 fd」という形でかえって来るので、この中から周波数成分を抜き出して並べ替える必要がありますが、rigctlでは結果が私たちに見やすい「7016000」という形に整形して画面に表示してくれます。またコマンドも「05」や「03」といった数値ではなく、周波数設定はコマンド「 F 7016000 」といったようにできるだけ手間をかけなくても済む形で入力するようになっています。ただし、まだコマンドを表から参照したり覚えていなければ使えないような形式になっています。
rigctlは「telnet」や「Serial Port Monitor」といったプログラムから命令を打つことに比べると少しは便利ですが、コマンドを覚えていないと使いづらい面があります。そこでボタンなどのGUIを備えたソフトからrigctlを動かせれば、コマンドを覚えていなくてもボタン一つで周波数設定やリグ情報の読み込み・表示が楽になります。私は日頃からEXCELのボタン等のGUIを使って手抜きのプログラムを作成しています。今回もEXCELのお世話になることにしました。
rigctlをEXCELで使用するにはどうすればいいのでしょうか。
rigctlはコマンドベースでコンソールから実行しますが、EXCELにもコンソールからのコマンドを実行するコマンドが準備されています。また、rigctlの周波数問い合わせコマンドのように、「rigctl -m 3073 -s 19200 -r COM5 f」を実行するとコンソールに実行結果が表示されます。この結果をEXCELに取り込むコマンドがEXCELには準備されています。
このような命令を使えば、次のような利点があります(もちろん欠点もあります)。
・EXCEL VBAでボタンやテキストボックスなどのGUI部品を配置できる。
・rigctlのような既存の有用なソフトをEXCELで作成したボタンで実行させることができる。
・rigctlの出力結果をEXCEL側で加工できる。
・リグ制御をEXCELで新たにつくるよりは既存のrigctlをEXCELで実行させることでプログラム開発を短時間で行うことができる。
「はじめに」で記述しましたように、最終目的はハードウェアの製作ですので、ソフトは短時間で開発したいので、EXCELにはGUI環境の提供とrigctlが出力する結果の処理、rigctlには無線機の制御と設定値入手処理、と両プログラムの役割を分担させてプログラムを作成しました。
このようにrigctlをEXCELで包み込んだオブラートプログラムの画面が図12です。
図12 簡易リグ制御ソフト(制御部)
このプログラムを動かす前に、通信環境、rigctlのパス情報等を設定する必要があります。これを設定するのが環境設定部です。どちらもEXCELの同じsheet上に配置してあります。
IC-7300の機器番号というのがありますが、これはrigctlソフトでIC-7300を制御するときに使用する番号です。IC-7300では3078番、IC-9700は3081番、IC-705は3085番です。これらの番号はプロンプト画面で
rigctl -la
とコマンドを打つとrigctlで使用できる無線機の型番一覧が表示されます。
図13 簡易リグ制御ソフト(環境設定部)
・リグ設定コマンドの実装例
rigctlをEXCELで実行するコードは次のようなものです。
リスト14 EXCELによるリグ設定コマンドの実装例
(このリストは一部省略しましたので、実行するとエラーがでます。概要を説明するためのリストです)
このサブルーチンを使って制御ができます。例えばリグの周波数を7010000Hzに設定するためには
Call execmd( “F 7010000”) ;
と別の場所からこのサブルーチンを呼び出します。するとサブルーチンの中で
execCommand = “rigctl.exe -m 3073 -s 19200 -r com5 F 7010000”
となり、rigctlの周波数設定コマンドの文字列ができあがります。さらに
wsh.Run(command:=exeCommand ,・・・)
とRunコマンドを実行することで、コンソールでrigctlコマンドを叩いたのと同じように実行されます。
・リグ情報問い合わせコマンドの実装例
rigcntコマンドで周波数設定を質問するような、質問結果がコンソールに表示されるコマンドの処理です。次のコードを実行すると、コンソールコマンドを実行し、その後コンソールコマンドではコンソール上に表示されていた質問結果をEXCELの変数に取り込むことができます。問い合わせのコマンドを実行すると一瞬コンソールウィンドウが表示されますが、Execコマンドを利用している場合はコンソールウィンドウを見えないようにすることはできないようです。
リスト15 EXCELによるリグ情報問い合わせコマンドの実装例
次のコマンドは、リスト15のサブルーチンをつかうためのコード例です。
Cells(2,2) = readstatus("f")
このコードを実行すると、execCommandという変数に次の文字列がはいります。
execCommand = “rigctl.exe -m 3073 -s 19200 -r com5 f ”
この文字列は現在リグに設定されている周波数を問い合わせるコマンドです。コマンド実行して得られる結果(リグから周波数が回答される)はCells(2,2)に、すなわちセルB2に格納されます。
このプログラムはリグ制御器を作るためのソフト検証を目的につくりました。未完成の部分もありますが、もし使っていただける方がありましたらここからダウンロードしてください。自由に改変・拡散していただいて結構です。ウィルスは植え込んでありませんので(笑)。
使用にあたっては、事前に図13の環境設定を必ず行って「事前設定」ボタンを押して、一度セーブしてください。
また、IC-705をこのソフトで動かしたい場合は機種番号欄に3085を入力して事前設定ボタンを押してください。IC-7300とIC-705でしか試しておりませんのでその他の機種については動かないかもしれません。動かない場合はすみませんが自己解決でお願いいたします。
EXCEL VBAを用いてIC-7300用のリグ制御ソフトを作成しました。これはあくまでもハードウェア版を作る前の学習プロトタイプとして作成しました。次は図1のようなハードウェアの制御器を完成させたいと思います。来月号で報告できるかわかりませんが、製作頑張ってみます。
ものづくりやろう! バックナンバー
アマチュア無線関連機関/団体
各総合通信局/総合通信事務所
アマチュア無線機器メーカー(JAIA会員)
©2024 月刊FBニュース編集部 All Rights Reserved.