mirror of
https://github.com/n5ac/mmvari.git
synced 2025-12-06 04:12:03 +01:00
1022 lines
44 KiB
Plaintext
1022 lines
44 KiB
Plaintext
「MMVARI操作マニュアル」
|
||
初版 2004/JAN/18 JE3HHT 森 誠
|
||
改定 2010/OCT/01 JE3HHT 森 誠
|
||
|
||
==========
|
||
◎はじめに
|
||
==========
|
||
まず「プロジェクトについて」をお読みください。このプログラムの目的について記載してあります。
|
||
|
||
このドキュメントは未だメモのようなものですが、このプログラムはマウスを移動するだけで最下段ステータスバーに簡単な解説が表示されますので、そちらのほうも参照して頂ければと思います。
|
||
|
||
==========
|
||
◎変調方式
|
||
==========
|
||
MMVARIで利用できる変調方式を以下に示します。メイン画面左上のTXOFFボタンのすぐ下に選択する場所があります。
|
||
- GMSK 通常はこれを使います。
|
||
- FSK V/UHF用(Rigのドリフトや送受のfズレが大きい場合これを使う)
|
||
- BPSK MBCS文字に関してWINPSK/Jと互換性がありません。VariJAは注意して下さい。
|
||
- bpsk HALPSK, WINPSK/Jと互換性がありますが、従来のSTD-VARICODE
|
||
なので、このプロジェクトの実験はできません。
|
||
- qpsk HALPSK, WINPSK/Jと互換性がありますが、従来のSTD-VARICODE
|
||
なので、このプロジェクトの実験はできません。
|
||
- rtty このモードはおまけです。標準のBAUDOTコード(5単位コード)
|
||
だけ実装してあり、伝送文字はアルファベット(大文字)と数字、
|
||
一部の記号に限られます。
|
||
- mfsk MFSK16を実装してあります。伝送コードはMFSK-VARICODEです。
|
||
|
||
※PSKは帯域を抑えるために振幅成分があります。オーバードライブに注意して下さい。
|
||
(スピーチプロセッサは使用しないように)
|
||
|
||
※PSKでは伝送速度(Speed)によって以下の名称が一般的に使われています。
|
||
PSK31 31.25Bps
|
||
PSK63 62.5Bps
|
||
PSK125 125.0Bps
|
||
PSK250 250.0Bps
|
||
|
||
※MMVARIに搭載されているRTTYの仕様を以下に示します。
|
||
- シフト幅は170Hz (±85Hz)
|
||
(マクロコマンド<%TxShift=...>, <%RxShift=...>で変更可)
|
||
- キャリア周波数は中心周波数
|
||
- RTTY-LはLSB用(標準)、RTTY-UはUSB用(リバース)
|
||
- 伝送コードはBAUDOT(5単位,S-BELL)のみ
|
||
- UOS(受信側)はデフォルトでON
|
||
(マクロコマンド<%UOS=ON/OFF/ONOFF>で変更可)
|
||
- TxUOS(送信側)は常にON
|
||
- Diddleは常にON (デフォルトはLTR)
|
||
(マクロコマンド<%DIDDLE=BLK/LTR>でコード変更可)
|
||
- 送信はAFSK(サウンド出力)のみ
|
||
|
||
※MMVARIでのmfsk実装仕様
|
||
mfsk16 mfsk8 mfsk31 mfsk32 mfsk64 mfsk11 mfsk22
|
||
Symbol baudrate 15.625 7.8125 31.25 31.25 62.5 10.767 21.533
|
||
Tones 16 32 8 16 16 16 16
|
||
Tone space(Hz) 15.625 7.8125 31.25 31.25 62.5 10.767 21.533
|
||
MAX FREQ shift(Hz) 234.375 242.1875 218.75 468.75 937.5 161.499 322.988
|
||
Transmission speed(bps) 31.25 19.53125 46.875 62.5 125.0 21.533 43.066
|
||
Viterbi NASA K=7, R=1/2
|
||
Interleaver Diagonal interleaver
|
||
VARICODE MFSK standard
|
||
|
||
type Speed 実際の変調速度
|
||
mfsk4 3.9063 (3.90625 baud, 32 tones)
|
||
mfsk8 7.8125 (7.8125 baud, 32 tones)
|
||
mfsk11 10.767 (10.7666015625 baud, 16 tones)
|
||
mfsk16 15.625 (15.625 baud, 16 tones)
|
||
mfsk22 21.533 (21.533203125 baud, 16 tones)
|
||
mfsk31 31.25 (31.25 baud, 8 tones)
|
||
mfsk32 32.0 (31.25 baud, 16 tones)
|
||
mfsk64 62.5 (62.5 baud, 16 tones)
|
||
|
||
======================
|
||
◎周波数を合わせる方法
|
||
======================
|
||
スペクトラムまたはウォータフォールを見て、受信したい信号の中心の部分をクリックすると、その周波数が受信キャリア周波数に設定されます。この時、スペクトラムまたはウォータフォールのレンジは1Kまたは2Kにしておくと合わせ易いと思います。受信機のダイアルで合わせることもできますが、この方法は慣れるまで少し難しいかも知れません。
|
||
|
||
GMSK, FSK, BPSK, bpskは、無線機のヘテロダイン(LSBまたはUSB)はいずれで運用しても構いません。rttyの場合はrtty-L(=LSB)またはrtty-U(=USB)で無線機のヘテロダインと合わして運用して下さい。
|
||
|
||
※mfskはデフォルトでは信号の帯の端(mfskのベーストーン周波数, LSB=右端, USB=左端)をクリックします。「MMVARI設定画面」の「受信」タブで「MFSKを中心周波数で取り扱う」のチェックを付けている場合は信号の帯の中心をクリックします。いずれの場合でも、mfsk-LはLSB用、mfsk-UはUSB用です。rttyと同様、無線機のヘテロダインと合わせて運用して下さい。
|
||
|
||
=====
|
||
◎BPF
|
||
=====
|
||
可能ならば(お使いのPCの速度が許すなら)最も狭い帯域を選択しておきます。特に40mで運用する場合はQRMが激しいので、できるだけ狭くしておいたほうがFBです。
|
||
|
||
=====
|
||
◎ATC
|
||
=====
|
||
ATCは(Automatic Timing Control)の略で、受信した信号のタイミングから受信同期タイミングを生成する際に、そのタイミング周期を自動的に調整(計測)する機能です。通常はONにしておきます。この機能についてはクロック補正の項も参照して下さい。
|
||
|
||
※MMTTYのATC(Automatic Threshold Control)とは性質がまったく異なります。混乱しないように...
|
||
|
||
※MMVARIではATCで同期が取れない場合でも、文字のデコードに関してはかなり頑張ります。しかしbpskモードの場合は、タイミングズレに厳しいソフトもありますので、自局の送信信号のタイミングを正確に合わせることは重要です。相手局からタイミングズレによる文字化けを指摘された場合は、クロック補正の項を参照して下さい。
|
||
|
||
================
|
||
◎受信画面の操作
|
||
================
|
||
受信画面に表示された文字をマウスでクリックすると、ログに取り込むことができます。左クリックの場合、コールサイン、RSTは自動判定で取り込まれますが、それ以外はポップアップメニューを表示し、ログのいずれの項目に取り込むかを選択する動作になります。右クリックの場合、すべての場合にポップアップメニューを表示します。
|
||
|
||
右側のスクロールバーで受信画面は自由にスクロールできます。記憶しているテキストは最新の1024行です。
|
||
|
||
================
|
||
◎送信画面の操作
|
||
================
|
||
送信画面には、次に送信する文章をあからじめ準備しておくことができます。送信中はカーソル位置までの文字が送信されます。
|
||
|
||
==================
|
||
◎送受信の切り替え
|
||
==================
|
||
メイン画面左上の「TX」(またはF12キー)ボタンを押すと送信状態になります。もう一度「TX」ボタンを押すと受信状態に戻ります(この場合、送信画面に存在する未送出の文字はすべて送出される)。
|
||
|
||
「TXOFF」(またはPAUSEキー)ボタンは強制的な受信への切り替えです。送信画面に未送出の文字が存在するかどうかに関係なく、ただちに受信に切り替えます。いわゆるスクランブル機能ですので、通常のQSO中には使う必要はないと思います。
|
||
|
||
※デフォルトで「TXOFF」にはPAUSEキーが割り当てられています。IME操作でPAUSEキーを使う場合、「MMVARI設定画面」送信タブで、別のキーを割り当てると良いでしょう。
|
||
|
||
==============
|
||
◎マクロボタン
|
||
==============
|
||
MMVARIには144個のマクロボタンが存在し、メインウインドウの下側にカレントページのボタンが表示されています。カレントページはマクロボタンの右端にある上下矢印ボタンで変更できます。一度に表示するボタンの数(段数)は表示メニューで変更できます。
|
||
個々のマクロボタンは左クリックで「呼び出し」操作、右クリックで「登録(編集)」操作を行います。またファンクションキーによっても呼び出すことができます。
|
||
|
||
MMVARIのマクロ文は、文字列の置換、動作の制御、条件展開などの機能が実装されています。右クリック-ボタン編集画面の「マクロ」ボタンを押すと利用可能なマクロコマンドの一覧が表示されます。また「条件文」ボタンを押すと利用可能な条件命令の一覧が表示されます。
|
||
|
||
以下にマクロ文についてヒントを示します。
|
||
|
||
1.予備知識
|
||
~~~~~~~~~~
|
||
ボタン編集画面で登録(編集)した内容をマクロ文と呼びます。そのマクロを実行した結果の送信文を展開文と呼びます。したがって展開文には<%TX>などのマクロコマンドは含まれません。
|
||
MMVARIでは常にボタンを押したときに展開文が作成され、MMTTYのような遅延展開(変調時に展開)はサポートしません。例えば<%HisRST>コマンド含むマクロを実行する場合、先にログパネルのHisを確定させておく必要があります。
|
||
|
||
マクロコマンドはおおまかに次の2種類に分類できます。
|
||
文字展開コマンド <%HisCall>, <%HisRST>など文字列を展開するもの
|
||
制御コマンド <%TX>, <%NETON>など動作を制御するもの
|
||
|
||
2.コマンドの配置位置と効果
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
展開した文字列が実際に送信されるのは伝送速度によって遅れますので、常に制御コマンドが先に実行されます。
|
||
ただし<%RX>コマンドや<%TX>コマンドは、マクロ文内のどこに配置しても同じように実行されます。例えば、以下の3つのマクロ文はいずれも同じ実行結果になります(送信に切り替えた後、VVV123を送信して受信に戻る)。
|
||
<%TX>VVV<%RX>123
|
||
<%TX><%RX>VVV123
|
||
VVV<%TX><%RX>123
|
||
|
||
また<%MoveTop>、<%MoveEnd>コマンドは制御コマンドですが、展開文との順序関係を維持する特別なコマンドです。例えば以下のマクロ文は、現在のカーソル位置に関係なく常に未送信文字の先頭に展開文を挿入した後カーソルを最後に移動します。
|
||
|
||
<%MoveTop><%HisCall> de <%MyCall> 途中でQRMがありました
|
||
<%MoveEnd>
|
||
|
||
※マクロコマンドよりも条件展開が先に実行されます。条件が偽になるブロックに記述されているすべてのマクロコマンドや文字列は存在しないのと同じです。条件展開については本項の(8)を参照して下さい。
|
||
|
||
3.展開文の挿入位置
|
||
~~~~~~~~~~~~~~~~~~
|
||
基本的にはマクロボタンを押した時のカーソル位置に展開文が挿入されます。ただしマクロ文に<%RX>コマンドを含む場合は、<%MoveEnd>コマンドが存在しなくても、自動的に送信画面の最後の位置にカーソルを移動してから、その展開文が追加されます。
|
||
|
||
4.CWID
|
||
~~~~~~
|
||
展開文がCWIDだけの場合、CWIDのみが送信されます。CWIDとテキストが混在する場合、その順序でCWIDと変調信号がそれぞれ送信されます。したがって変調信号を送信後、CWIDを送信してそのまま受信に戻りたい場合、CWIDの後ろにキャリッジリターンを入れないようにします。編集画面ではキャリッジリターンの有無が判りにくいので、例えば以下のように<%EOF>を定義するのが確実な方法です。
|
||
|
||
<%TX>TNX AGN 73, SK...<%CWID><%RX><%EOF>
|
||
|
||
以下に<%CWID=...>内に記述する特殊の文字とCW符号の関係を示します。
|
||
@ AS
|
||
: SK (VA)
|
||
; AR
|
||
= BT
|
||
] KN
|
||
|
||
5.送信画面の自動消去
|
||
~~~~~~~~~~~~~~~~~~~~
|
||
受信に戻った際に送信画面を自動的に消去したい場合、以下のように、<%AutoClear>コマンドをマクロ文に含めてください。
|
||
|
||
BTU <%HisCall> de <%MyCall> KN
|
||
<%RX><%AutoClear>
|
||
|
||
※TXOFFで送信をキャンセルした場合、送信画面の自動消去は働きません。
|
||
|
||
6.繰り返し送信
|
||
~~~~~~~~~~~~~~
|
||
マクロ文内に<%RepeatTX=...>コマンドが存在すると、その展開文を自動的に繰り返し送信することができます。<%RepeatTX=...>コマンドには<%TX>、<%RX>コマンドの動作が含まれているので、これらのコマンドを定義する必要はありません(定義しても結果は変わらない)。
|
||
設定する時間は繰り返しの際の受信時間で単位はmsです。例えば5秒間受信したい場合は、<%RepeatTX=5000>を定義します。
|
||
|
||
※繰り返し送信中はそのボタンが押し込まれた状態になります。そのボタンをもう一度押すか、または別のマクロボタンを押すと繰り返し送信はキャンセルされます。
|
||
|
||
※スペクトラム、ウォーターフォール、受信画面、送信画面、TXOFFボタンをクリックしても、繰り返し送信はキャンセルされます。
|
||
|
||
※スケルチを監視して繰り返し送信を自動的に停止させるには、以下のようなマクロ文を使います。
|
||
#define ReceiveTime 5000
|
||
#if !IsSQ
|
||
<%RepeatTX=ReceiveTime><%ClearTXW>
|
||
CQ CQ CQ de <%MyCall> <%MyCall> <%MyCall> pse (<%VARITYPE>) K
|
||
#endif
|
||
|
||
|
||
※送信を行わずにマクロを繰り返し実行したい場合は、<%Repeat=...>コマンドを使います。例えば次のマクロ文は文字列"CQ"を受信するとメッセージボックスを表示します。
|
||
|
||
#define _CaptureString CQ
|
||
#if !IsRepeat
|
||
#macro <%SetCaptureLimit>
|
||
#endif
|
||
#if IsCaptureText(<%String=_CaptureString>)
|
||
#macro <%Message="<%String=_CaptureString>" was detected>
|
||
#else
|
||
#macro <%Repeat=1000>
|
||
#endif
|
||
|
||
|
||
7.プログラムの実行
|
||
~~~~~~~~~~~~~~~~~~
|
||
<%Execute=...>コマンドを実行すると、任意のプログラムを実行することができます。パラメータの部分は、プログラム名とそのアーギュメントで構成される文字列です。
|
||
|
||
別のサウンドカードプログラムを実行する場合、先に<%Suspend>コマンドを実行してMMVARIが占有しているサウンドカードとCOMポートを解放しておきます。以下のマクロ文は私のシステムにインストールされているMMSSTVを起動する例です。
|
||
|
||
<%Suspend><%Execute=C:\MMSSTV\MMSSTV.exe>
|
||
|
||
MMVARIを終了させてMMSSTVに切り替えるには、
|
||
|
||
<%Suspend><%Execute=C:\MMSSTV\MMSSTV.exe><%Exit>
|
||
|
||
と記述します。
|
||
|
||
※プログラム名にフォルダ名を含むフルパス名を指定するとWindowsのPATH設定に関係なくそのプログラムを実行できます。
|
||
※MMVARIをアクティブにするとサスペンドの解除を試みます。
|
||
|
||
8.条件展開
|
||
~~~~~~~~~~
|
||
マクロ文では条件展開を使うこともできます。条件展開とマクロコマンドを組み合わせると状況判断を伴うプログラムを作成することができます。条件展開の構文を以下に示します。
|
||
|
||
#if test1 条件ブロックを開始
|
||
| <-- test1が真の時にここが展開
|
||
#elseif test2 別の条件をテスト
|
||
| <-- test1が偽でtest2が真の時にここが展開
|
||
#else 残りすべての条件で真
|
||
| <-- 上記以外の時にここが展開
|
||
#endif 条件ブロックを終了
|
||
|
||
条件展開は次の規則に従います。
|
||
|
||
1)条件ブロックは#ifで開始し#endifで終了しなければならない。
|
||
2)条件命令(#ifなど)とそのアーギュメント(test1など)は1行に記述し
|
||
他のマクロコマンド等は同じ行に記述してはいけない。
|
||
3)#elseifおよび#elseは省略できる。
|
||
4)条件ブロック内の条件ブロックは64レベルまでネスト(入れ子に)できる。
|
||
5)アーギュメントの先頭に<!>を記述してテスト結果の真偽を反転できる。
|
||
例: #if !IsCall Callボックスに文字が存在しない時に真
|
||
6)アーギュメントは次の3種類に分類できる。
|
||
Is... 単項条件
|
||
Str... 文字列条件
|
||
Val... 数値条件
|
||
|
||
7)単項条件(Is...)は、それだけで真偽を得ることができる。
|
||
|
||
8)文字列条件(Str...)および数値条件(Val...)は、次の演算子を記述して
|
||
値の大小関係により真偽を得る。
|
||
== 等しい時に真 < 小さい時に真
|
||
!= 異なる時に真 >= 以上の時に真
|
||
> 大きい時に真 <= 以下の時に真
|
||
>> 文字列を含む場合に真(文字列条件の場合のみ)
|
||
例:#if ValFreq >= 144 144MHz以上の時に真
|
||
#if StrMacro(<%HisQTH>) >> 大阪
|
||
QTHに「大阪」を含む場合に真
|
||
9)条件は<&&>または<||>を記述して複合できる。
|
||
例:#if IsNET && IsAFC NETとAFCが両方ONの時に真
|
||
#if IsNET || IsAFC NETとAFCのいずれかがONの時に真
|
||
|
||
例えば次のマクロ文では、ログパネルのCallボックスに文字が存在する時だけ相手局を呼び出します。
|
||
|
||
#if IsCall
|
||
<%TX><%RX>
|
||
<%HisCall> <%HisCall> de <%MyCall> <%MyCall> pse k
|
||
#endif
|
||
|
||
次のマクロ文は、相手局と自分のエンティティを比較して異なる言語のメッセージを送信します。
|
||
|
||
<%TX>
|
||
#if IsLocal
|
||
まいどです。コール有難うございます。
|
||
#else
|
||
Hello, Thanks for your call.
|
||
#endif
|
||
|
||
次のマクロ文は、運用周波数によって変調方式を選択しCQを送信します。
|
||
|
||
#if ValFreq >= 144
|
||
<%MODE=FSK><%SkipCR>
|
||
#else
|
||
<%MODE=GMSK><%SkipCR>
|
||
#endif
|
||
<%TX>
|
||
CQ CQ CQ de <%MyCall> <%MyCall> <%MyCall> pse (<%VARITYPE>) k
|
||
<%RX>
|
||
|
||
次のマクロ文は文字列入力ウインドウをオープンし、そこで入力された文字列をCWで送信する例です。
|
||
|
||
#macro <%IME=OFF>
|
||
#if StrMacro(<%Input=Input CW text>)
|
||
<%TX><%RX><%CWID=<%Input$>><%EOF>
|
||
#endif
|
||
|
||
スペクトラムまたはウォータフォールを右クリックすると表示されるポップアップメニューの「AS(CW)を送信」には、次のマクロ文がそのまま実装されています。このマクロ文では送信画面ページを切り替えることにより、送信画面で現在編集中の文書を失わないでASを送信できるようにプログラムされています。
|
||
|
||
<%DisableCR>
|
||
#if !IsTX
|
||
<%AutoNET><%AutoReturn>
|
||
#if ValPage!=4
|
||
<%Page=4>
|
||
#else
|
||
<%Page=3>
|
||
#endif
|
||
<%ClearTXW>
|
||
#endif
|
||
<%TX><%CWID=@><%RX><%EOF>
|
||
|
||
9.文字列変数
|
||
~~~~~~~~~~~~
|
||
マクロ文では文字列変数を使うこともできます。文字列変数は#defineで定義し、<%String=名前>コマンドで参照できます。また条件文のアーギュメントやマクロコマンドのパラメータとしても使用できます。
|
||
|
||
#define命令の構文を以下に示します。
|
||
#define Name String
|
||
|
||
Nameは先頭の文字が数字以外の文字で始まる任意の名前です。Stringは任意の文字列で、マクロコマンドや他の文字列変数を記述しても構いません。
|
||
|
||
例 : #define Greetings まいどです...
|
||
#define NowSpeed <%BAUD>
|
||
#define ImaSpeed NowSpeed
|
||
|
||
※#define命令で定義できる変数の個数に制限はありません。同じ名前に再定義する場合は、新しい文字列に置き換わります。
|
||
※変数はマクロ間でグローバルです。したがって別のマクロボタンで定義した変数を参照することができます。
|
||
※プログラムを終了するとすべての変数の内容は失われます。
|
||
※#define命令はパス1で実行されます。
|
||
|
||
次のマクロ文はWX情報を展開する例です。この例では最初に一度WXの文字列を入力すれば、次からはその文字列が(入力ウインドウを表示せずに)展開されます。
|
||
|
||
#if !IsDefined(TodayWX) || !StrMacro(<%String=TodayWX>)
|
||
#define TodayWX <%Input=WXを入力>
|
||
#endif
|
||
#if StrMacro(<%String=TodayWX>)
|
||
本日のお天気は、<%String=TodayWX>です。
|
||
#endif
|
||
|
||
次のマクロ文はマクロ文内でよく変更する箇所を、先頭に集めて定義した例です。
|
||
|
||
#define Boundary 14
|
||
#define MyRIG FT1000MP(50W)
|
||
#define MyLANT Vertical(7m)
|
||
#define MyHANT Magnetic loop(90cm)
|
||
#if ValFreq < Boundary
|
||
#define MyANT MyLANT
|
||
#else
|
||
#define MyANT MyHANT
|
||
#endif
|
||
私のリグは<%String=MyRIG>、アンテナは<%String=MyANT>です。
|
||
|
||
次のマクロ文はNoteに記録しているJCC番号から運用場所のQTHを展開する例です。
|
||
|
||
#define QTH_HOME 大阪府高槻市
|
||
#define QTH_25006 大阪府三島郡
|
||
#define QTH_2701 兵庫県神戸市
|
||
#if StrNote >> 25006
|
||
#define MyQTH QTH_25006
|
||
#elseif StrNote >> 2701
|
||
#define MyQTH QTH_2701
|
||
#else
|
||
#define MyQTH QTH_HOME
|
||
#endif
|
||
私の現在のQTHは、<%String=MyQTH>です。
|
||
|
||
10.書式変換と計算式
|
||
~~~~~~~~~~~~~~~~~~~
|
||
<%Format=...>コマンドは書式指定による文字列変換と計算式の演算を同時に行うことができるマクロコマンドです。以下に構文を示します。
|
||
<%Format=書式,演算式>
|
||
|
||
--- 書式 ----
|
||
C言語のprintf(...)の書式変換を完全に模倣します。書式変換の形式は次の通りです。[]内の記号は省略することができます。
|
||
|
||
%[-][#][0][w][.p]TYP
|
||
|
||
- 左詰めを指定します。
|
||
0 フィールド幅を埋めるだけの0が出力値に付けられます。
|
||
w 指定された最小文字数を出力バッファにコピーします。
|
||
.p 指定された最小桁数を出力バッファにコピーします。
|
||
TYP 以下の特別な文字で展開方法を指定します。
|
||
|
||
TYP 変数の型 展開
|
||
c 文字 1文字
|
||
s 文字列 指定された文字数の文字列
|
||
d 整数 符号付き10進整数
|
||
i 整数 符号付き10進整数
|
||
o 整数 符号なし8進整数
|
||
u 整数 符号なし10進整数
|
||
x 整数 符号なし16進整数(a,b,c,d,e,f を使用)
|
||
X 整数 符号なし16進整数(A,B,C,D,E,F を使用)
|
||
f 浮動小数点数 符号付きの [-]dddd.dddd 形式の値
|
||
e 浮動小数点数 符号付きの [-]d.dddd または e[+/-]ddd の値
|
||
g 浮動小数点数 符号付きの e または f 形式の値
|
||
E 浮動小数点数 e と同じで指数部を表す記号はEになる
|
||
G 浮動小数点数 g と同じで指数部を表す記号はEになる
|
||
|
||
--- 演算式 ---
|
||
演算式の変数として、数値、マクロコマンド、文字列変数が指定できます。マクロコマンドおよび文字列変数を演算する場合は、その展開結果を数値化します。利用できる演算子は次の通りです。
|
||
+ 加算
|
||
- 減算
|
||
* 乗算
|
||
/ 除算
|
||
% 剰余算
|
||
& AND
|
||
| OR
|
||
演算の優先順位は一般的な数学の規則が適用され、また括弧記号()で演算の優先順位を変更できます。
|
||
10 + 20 * 30 = 610
|
||
(10 + 20) * 30 = 900
|
||
|
||
--- 例 ---
|
||
<%BAUD=<%Format=%f,<%BAUD>*2>>
|
||
ボーレートを現在の倍の値に設定します。
|
||
<%Format=%c,<%Skip$=1,<%HisRST>>>
|
||
HisRSTの2文字目の文字を展開します。(579 -> 7)
|
||
<%TxCarrier=<%Format=%d,<%RxCarrier>+100>>
|
||
送信キャリア周波数を受信キャリア周波数より100Hz高く設定します。
|
||
|
||
11.ポップアップメニュー
|
||
~~~~~~~~~~~~~~~~~~~~~~~
|
||
マクロ文では任意のポップアップメニューを作成することもできます。ポップアップメニューを使うと使用するマクロボタンの数を少なくできます。
|
||
|
||
ポップアップメニューは<%Menu=....>または、<%MenuB=...>コマンドで表示されます。選択されたメニューの文字列を得るには<%Input$>コマンドを使います。また選択されたメニューのインデクッス番号を条件子ValMenuでテストすることもできます。
|
||
|
||
メニュー項目はカンマ(,)で区切ります。1つの項目の文字列内にカンマが存在する場合はその文字列をダブル(")で括ります。文字列にはマクロを記述することもできます。メニュー項目の数に制限はありません。
|
||
<%Menu=Menu1, Menu2, Menu3, Menu4, ...>
|
||
<%MenuB=Index, Menu1, Menu2, Menu3, Menu4, ...>
|
||
|
||
※<%MenuB=...>コマンドはマーク付きメニューを表示し、指定したIndex(1~)の項目の左側に黒丸が表示されます。
|
||
|
||
メニュー内にセパレータを記述する場合は、マイナス(-)だけをその項目の文字列として記述します。アクセスキーを設定する場合は、その文字の前にアンパサンド(&)を前置します。
|
||
<%Menu=Menu&1, Menu&2, -, Menu&3, Menu&4, ...>
|
||
<%MenuB=Index1, Menu&1, Menu&2, -, Index2, Menu&3, Menu&4, ...>
|
||
|
||
次のマクロ文はファイナルメッセージのメニューを表示し、選択された文字列を送信ウインドウに展開します。
|
||
<%Menu=<%DearName>まいどおおきに..., ほなさいなら..., "TNX AGN <%DearName>, 73..."><%Input$>
|
||
|
||
メニューのインデックス番号(1~)で動作を選択する場合、次のマクロ文のように条件子ValMenuを使います。この際、条件展開がパス1で実行されるので、<%Menu=...>も同じパスで実行されるように#macroを前置します。
|
||
|
||
#macro <%Menu=&73 CU SK, &TU SK EE, &SU, &EE>
|
||
#if ValMenu==1
|
||
<%TX><%RX><%CWID=73CU:><%EOF>
|
||
#elseif ValMenu==2
|
||
<%TX><%RX><%CWID=TU:EE><%EOF>
|
||
#elseif ValMenu==3
|
||
<%TX><%RX><%CWID=SU><%EOF>
|
||
#elseif ValMenu==4
|
||
<%TX><%RX><%CWID=EE><%EOF>
|
||
#endif
|
||
|
||
※ポップアップメニューの選択がキャンセルされた場合、<%Input$>にはヌル文字列が入り、ValMenuは0を返します。
|
||
※メニュー内にセパレータを定義しても、セパレータが選択されることはありません。またValMenuのインデックス番号はそのセパレータを含みません。
|
||
|
||
|
||
12.マクロでのリグコントロール
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
MMVARIはマクロコマンドでのリグコントロールをサポートします。リグコントロールで使用する主なマクロコマンドを以下に示します。
|
||
<%RadioKHz> VFOポーリングの周波数を得ます。
|
||
<%RadioKHz=...> VFOの周波数を設定します。
|
||
<%RadioMode> Rigのモードを得ます。
|
||
<%RadioMode=...> Rigのモードを設定します。
|
||
<%RadioOut=...> Rigに任意のコマンドを送信します。
|
||
#if IsRadioLSB Rigのヘテロダインをテストします。
|
||
|
||
これらのコマンドは主にLAN経由でのリモート運用のために実装してありますが、Rig直結の場合でも便利な場合があります。
|
||
|
||
※これらのマクロを使用するには、少なくともリグコントロールのポート設定が完了していなければなりません。リグコントロールのポート設定がされていない場合、これらのマクロコマンドは無視されます。
|
||
※<RadioKHz>および<%RadioMode>でVFO周波数やモードを得るには、通常はVFOポーリングも設定している必要があります。しかし<%RadioKHz=...>および<%RadioMode=...>でRigに周波数やモードを設定すると、VFOポーリングを設定していなくても、その設定した値を返します。
|
||
|
||
<%RadioKHz=RigType,RigFreq(KHz)>
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
このコマンドは、RigのVFO周波数を設定します。サポートするRigTypeは以下の7種類です。
|
||
RigType Rigの種類
|
||
YAESU-VU FT847, FT736, ...etc
|
||
YAESU-HF FT1000MP, FT920,...etc
|
||
YAESU-NEW FT9000, FT2000, etc.
|
||
CI-V ICOM
|
||
CI-V4 ICOM (4 byte command)
|
||
KENWOOD KENWOOD
|
||
JST245 JRC JST245
|
||
|
||
※RigTypeがCI-Vの周波数設定は100MHz未満でも5バイトコマンドを送信します。もし旨く制御できない場合はRigTypeにCI-V4を使用して下さい。この場合4バイトコマンドを送信します。
|
||
|
||
次のマクロ文は、入力ウインドウを表示し、Rigの周波数を設定します。
|
||
#define _Rig YAESU-HF
|
||
#macro <%IME=OFF>
|
||
#if StrMacro(<%Input=Input VFO FREQ(KHz)>)
|
||
#if IsRadioLSB
|
||
#macro <%RadioKHz=_Rig,<%Input$>+<%RxCarrier>*0.001>
|
||
#else
|
||
#macro <%RadioKHz=_Rig,<%Input$>-<%RxCarrier>*0.001>
|
||
#endif
|
||
#endif
|
||
|
||
次のマクロ文は、メニューを表示し、Rigの周波数を設定します。
|
||
#define _Rig YAESU-VU
|
||
#macro <%Menu=7028.5,10141.5,14072.5,18102.5,21072.5,28072.5>
|
||
#if ValMenu
|
||
#if IsRadioLSB
|
||
#macro <%RadioKHz=_Rig,<%Input$>+<%RxCarrier>*0.001>
|
||
#else
|
||
#macro <%RadioKHz=_Rig,<%Input$>-<%RxCarrier>*0.001>
|
||
#endif
|
||
#endif
|
||
|
||
次のマクロ文は、RigのVFOを500Hzアップします。
|
||
#define _Rig JST245
|
||
#macro <%RadioKHz=_Rig,<%RadioKHz>+0.5>
|
||
|
||
次のマクロ文は現在の受信キャリア周波数を強制的に1750Hzにし、RigのVFO周波数をそこに合わせます(低いトーン周波数で運用するのを防止するために使います)。
|
||
#define _Tone 1750
|
||
#define _Rig CI-V
|
||
#define _OffKHz <%Format=%f,(<%RxCarrier>-_Tone)*0.001>
|
||
#if IsRadioLSB
|
||
#macro <%RadioKHz=_Rig,<%RadioKHz>-_OffKHz>
|
||
#else
|
||
#macro <%RadioKHz=_Rig,<%RadioKHz>+_OffKHz>
|
||
#endif
|
||
#macro <%RxCarrier=_Tone>
|
||
|
||
<%RadioMode=RigType,RigMode>
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
このコマンドは、Rigのモードを設定します。サポートするRigTypeは<%RadioKHz=...>と同じです。RigModeは以下の名前を受け付けます。
|
||
LSB, USB, CW, AM, FM, RTTY, PACKET
|
||
|
||
例: <%RadioMode=KENWOOD,LSB>
|
||
|
||
※Rigによって使用できないモードがあります。また特殊なモードを設定する場合は<%RadioOut=...>でラジオコマンドを直接出力して下さい。
|
||
|
||
次のマクロ文は、選択メニューを表示し、Rigのモードを設定します。
|
||
#define _Rig YAESU-VU
|
||
#define _t_Mode LSB,USB,CW,AM,FM,RTTY,PACKET
|
||
#macro <%MenuB="<%Table=<%RadioMode>,_t_Mode>",_t_Mode>
|
||
#if ValMenu
|
||
#macro <%RadioMode=_Rig,<%Input$>>
|
||
#endif
|
||
|
||
<%RadioOut=文字列>
|
||
~~~~~~~~~~~~~~~~~~
|
||
このコマンドは、Rigに任意のラジオコマンドを送信します。あらゆるRigに対して有効です。文字列には以下の特別なキーワードを使って$00~$FFのすべてのデータを送信できます。
|
||
\$##... ##=00-FF, 送信する複数バイトを16進数で定義する
|
||
(例:\$FE55AA -> $FE,$55,$AA)
|
||
xxを表記してICOM CI-VのRigアドレスに変換できます。
|
||
\x## ##=00-FF, 送信する1バイトを16進数で定義する
|
||
(例:\xFE\x55\xAA -> $FE, $55, $AA)
|
||
\w## ##=00-99, ディレイ時間を10ms単位の10進数で定義する
|
||
(例:\w05 -> wait 50ms)
|
||
\r キャリッジリターンを送信する
|
||
\n ラインフィードを送信する
|
||
\c.... 以降はすべてコメント
|
||
\\ '\'文字を送信する
|
||
その他 その文字列をそのまま送信する
|
||
|
||
※ラジオコマンドはRigによって異なります。Rigのマニュアルを参照して下さい。
|
||
|
||
[例]
|
||
YAESU FT1000MPのVFO-Aのフィルタを500Hzにします。
|
||
<%RadioOut=\$020000008C>
|
||
ICOM IC-706のVFO A-Bを切り替えます。
|
||
<%RadioOut=\$FEFExxE007BOFD>
|
||
KENWOODのVFO-Bの周波数を14.073MHzに設定します。
|
||
<%RadioOut=FB00014073000;>
|
||
YAESU FT847のモードをCW(W)にします。
|
||
(<%RadioMode=YAESU-VU,CW>ではCW(N)が設定されます)
|
||
<%RadioOut=\$0200000007>
|
||
|
||
#if IsRadioLSB
|
||
~~~~~~~~~~~~~~
|
||
リグのヘテロダイン状態をテストします。周波数オフセット計算を行う場合に使用します。MMVARIはすべてのRigで次のように判定します。
|
||
真偽 Rigのモード
|
||
TRUE LSB,RTTY,PACKET
|
||
FALSE その他のモード
|
||
|
||
通常この条件命令を使う場合は、リグコントロールでVFOポーリングを設定し、「モードによる周波数補正」を設定しておかなければなりません。しかしVFOポーリングを設定していない場合でも、<%RadioMode=...>でモードを設定すれば、その設定したモードで真偽を返します。
|
||
|
||
※RigのモードがLSB/USB以外の場合、Rigによってはヘテロダインを正しく認識できない場合があります。
|
||
※Rigの本来のモードを得るには<%RadioMode>マクロを使います。
|
||
|
||
|
||
13.イベントマクロ
|
||
~~~~~~~~~~~~~~~~~
|
||
イベントマクロは、特定のイベントを検出した時に実行される特別なマクロです。以下のようなイベントが準備されています。
|
||
OnTimer 約1秒間隔で繰り返し実行されます。
|
||
OnPTT PTT状態が変化した時に実行されます。
|
||
OnQSO QSOボタン状態が変化した時に実行されます。
|
||
OnFind HisCallがセットされた時に実行されます。
|
||
OnBand ログパネルのバンドが変更された時に実行されます。
|
||
OnStart MMVARIの起動時に1回だけ実行されます。
|
||
OnExit MMVARIの終了時に1回だけ実行されます。
|
||
OnMode 変調方式が変更された時に実行されます。
|
||
OnSpeed 伝送速度が変更された時に実行されます。
|
||
OnClick 受信画面の文字列をクリックした時に実行されます。
|
||
OnFFTScale FFTスケール(縦軸)を変更した時に実行されます。
|
||
|
||
[イベントマクロの設定]
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
イベントマクロは、「MMVARI設定画面」の「送信」タブのイベントマクロで編集することができます(編集するイベントを選択し、「編集」ボタンを押します)。またすべてのイベントマクロは、そのマクロ文をクリアすることにより、実行を停止することができます。
|
||
|
||
次のマクロ文はOnTimerイベントマクロに記述し、AFC検出周波数をウォータフォールに表示します。
|
||
<%WaterMsg=4,<%AFCFrequency>Hz>
|
||
|
||
次のマクロ文はOnQSOイベントマクロに記述し、QSOボタンを押した時に受信画面にステータスを表示する例です(受信画面のステータスは受信ログにも記録されます)。
|
||
#if IsQSO
|
||
#macro <%RxStatus=LogON <%HisCall> on <%BAND>/<%MODE>>
|
||
#else
|
||
#macro <%RxStatus=LogOFF <%HisCall>>
|
||
#endif
|
||
|
||
次のマクロ文はOnModeイベントマクロに記述し、変調方式を変更した時に自動的にマクロボタンページを切り替えます。
|
||
#if StrMode>>rtty
|
||
#macro <%SeekTop><%SeekNext>
|
||
#else
|
||
#macro <%SeekTop>
|
||
#endif
|
||
|
||
[マクロコマンドによるイベントマクロの設定]
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
すべてのイベントマクロは、次のようなマクロコマンドで他のマクロからその本文を設定することもできます。
|
||
<%OnTimer=...>
|
||
<%OnPTT=...>
|
||
<%OnQSO=...>
|
||
<%OnFind=...>
|
||
<%OnBand=...>
|
||
<%OnStart=...>
|
||
<%OnExit=...>
|
||
<%OnMode=...>
|
||
<%OnSpeed=...>
|
||
<%OnClick=...>
|
||
<%OnFFTScale=...>
|
||
|
||
次のマクロ文は別のマクロボタンに記述し、OnTimerイベントマクロにマクロ文を設定する例です。
|
||
<%OnTimer=<%WaterMsg=4,<%AFCFrequency>Hz>>
|
||
|
||
複数行のマクロ文を設定するには、次のように文の改行を\r\nで記述します。
|
||
<%OnTimer=#if IsSQ\r\n#macro <%WaterMsg=4,<%AFCFrequency>Hz>\r\n#endif>
|
||
|
||
次のマクロ文はメニュー選択によりOnTimerイベントマクロの動作を切り替えます(このマクロ文はマクロボタンに定義します)。
|
||
|
||
#macro <%Menu=AFC, Metric(MFSK), RadioMode, WaterNoise, UTC, Local, -, Stop>
|
||
#if ValMenu == 1
|
||
#macro <%OnTimer=<%WaterMsg=4,<%AFCFrequency>Hz>>
|
||
#elseif ValMenu == 2
|
||
#macro <%OnTimer=<%WaterMsg=4,<%MetricMFSK>>>
|
||
#elseif ValMenu == 3
|
||
#macro <%OnTimer=<%WaterMsg=4,<%RadioMode>>>
|
||
#elseif ValMenu == 4
|
||
#macro <%OnTimer=<%WaterMsg=4,<%WaterNoise>dB>>
|
||
#elseif ValMenu == 5
|
||
#macro <%OnTimer=<%WaterMsg=4,<%UTIME>z>>
|
||
#elseif ValMenu == 6
|
||
#macro <%OnTimer=<%WaterMsg=4,<%LTIME>>>
|
||
#elseif ValMenu == 7
|
||
#macro <%OnTimer=>
|
||
#endif
|
||
|
||
次のマクロ文はイベントマクロの編集メニューを作成した例です(このマクロ文はマクロボタンに定義します)。
|
||
|
||
#macro <%Menu=<%Events>>
|
||
#if ValMenu
|
||
#macro <%EditMacro=<%Input$>>
|
||
#endif
|
||
|
||
|
||
14.プロシジャー
|
||
~~~~~~~~~~~~~~~
|
||
MMVARIはプロシジャー呼び出し機能を備えています。マクロ文内の頻繁にコーディングする部分をあらかじめプロシジャーに定義し、マクロ文内の任意の場所で何回でも呼び出して実行することができます。定義するプロシジャーの数に制限はありません。プロシジャーは拡張メニューのハンドラとしても使うことができます。
|
||
|
||
[プロシジャーの定義]
|
||
~~~~~~~~~~~~~~~~~~~~
|
||
#proc ~ #endpまでの行がプロシジャーとして定義されます。
|
||
|
||
#proc Name Dummy1, Dummy2...
|
||
|
|
||
#endp
|
||
|
||
Nameは先頭が数字以外で始まるプロシジャーの名前です。
|
||
Dummy1、Dummy2...は、ダミーと呼ばれるプロシジャー内だけで有効なシンボルです。プロシジャー内のダミーと同じ文字列は、呼び出し時に指定するアーギュメントに置き換えられます。ダミーは省略することができます。1つのプロシジャーに定義できるダミーは最大64個です。
|
||
|
||
プロシジャーの定義の例
|
||
#proc Slider @Title, @Command, @Min, @Max, @Step, @NumScales
|
||
<%DisableCR>
|
||
#macro <%Slider=@Title, <%@Command>, @Min, @Max, @Step, @NumScales>
|
||
#if StrMacro(<%Input$>)
|
||
<%@Command=<%Input$>>
|
||
#endif
|
||
#endp
|
||
|
||
※ プロシジャーの定義中には、そのブロック内のすべての行は評価されません。それらが評価されるのは、そのプロシジャーが呼び出された時です。
|
||
|
||
※ ダミーは単純な文字列の置き換えです。したがってダミーの名前を長くするか、または@記号を名前に前置するなどして、予想外の文字列の置き換えを防止するのは良いアイデアです。
|
||
|
||
※ 定義したプロシジャーはMMVARIを終了するまで有効です。したがってOnStartイベントマクロ内にプロシジャーを定義しておくと、すべてのマクロ文内からそのプロシジャーを呼び出すことができます。また同じ名前のプロシジャーを再定義した場合は後で定義した内容が有効になります。
|
||
|
||
|
||
[プロシジャーの呼び出し]
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
<%CallProc=Name,Arg1,Arg2...>マクロコマンドで呼び出します。
|
||
Nameは#procで定義した名前です。
|
||
Arg1、Arg2...は、#procで定義されているダミーを、これらのアーギュメントで置き換えます。ダミーとアーギュメントの数が一致しない場合、余分なダミーはすべてヌル文字列に置き換えられ、余分なアーギュメントはすべて無視されます。
|
||
|
||
プロシジャーの呼び出しの例
|
||
<%CallProc=Slider, CW speed, CWSpeed, 10, 40>
|
||
<%CallProc=Slider, Digital output level, DigitalLevel, 1024, 32768, 1024>
|
||
<%CallProc=Slider, Play back speed, PlayBackSpeed, 1, 20>
|
||
|
||
※ プロシジャーはパス1で定義されます。プロシジャーの呼び出し<%CallProc=...>は通常はパス2で実行されるため、マクロ文内でプロシジャーの定義が後に記述されていても構いません。しかし#macro命令で<%CallProc=...>を実行する場合(パス1で実行される)は、そのプロシジャーの定義を先に記述しておかなければなりません。
|
||
|
||
※ プロシジャーの再帰呼び出し(リカーシブコール)は許されますが、ネスト数が多くなるとスタックオーバーフローになります。無限ループに注意して下さい。以下に再帰呼び出しの簡単な例を示します。
|
||
|
||
<%DisableCR>
|
||
<%CallProc=Repeat, 3, CQ CQ CQ de <%MyCall> <%MyCall> <%MyCall><%CR>>
|
||
<%BS> pse k...<%CR>
|
||
|
||
#proc Repeat @N, @Text
|
||
<%DisableCR>
|
||
#define _RepCount <%Format=%d,@N-1>
|
||
#if _RepCount >= 0
|
||
@Text
|
||
<%CallProc=Repeat, _RepCount, @Text>
|
||
#endif
|
||
#endp
|
||
|
||
※ <%CallProc=...>を<%DebugProc=...>に置き換えると、送信画面にプロシジャーをそのまま展開します。これによってダミーの文字列の置き換えが正しく行われているかどうかを確認することができます。
|
||
|
||
[拡張メニューハンドラ]
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
実はプロシジャーは拡張メニューのハンドラとして利用する場合にその真価を発揮します。拡張メニューを使うと、MMVARIのメインメニューやポップアップメニューを自分の好みで自由に拡張できます。拡張メニューは<%AddMenu=...>や<%InsertMenu=...>マクロコマンドで作成します。
|
||
|
||
<%AddMenu=Name, Caption, Procedure, Arg1, Arg2...>
|
||
<%InsertMenu=Name, InsPos, Caption, Procedure, Arg1, Arg2...>
|
||
|
||
Name: メニューの名前, アクセスキー(&x)またはインデックス(1~)
|
||
InsPos: 挿入位置のキャプション, アクセスキー(&x)またはインデックス(1~)
|
||
Caption: メニューのキャプション, アクセスキー(&x)またはインデックス(1~)
|
||
Procedure: ハンドラプロシジャーの名前
|
||
Arg: ハンドラプロシジャーに渡すアーギュメント(省略可)
|
||
|
||
以下に簡単な拡張メニューの作成とそのハンドラプロシジャーの例を示します。通常このようなマクロ文はOnStartイベントマクロ内に記述しておきます。
|
||
|
||
<%DisableCR>
|
||
#define _Name 拡張(&X)
|
||
<%AddMenu=_Name, CWの速度(&C)..., Slider, CWの速度, CWSpeed, 10, 40>
|
||
<%AddMenu=_Name, デジタル出力レベル(&D)..., Slider, デジタル出力レベル, DigitalLevel, 1024, 32768, 1024>
|
||
<%AddMenu=_Name, ->
|
||
<%AddMenu=_Name, CQ DX(&1) (リピート), OnCQDXClick, 1, 3, 3, 4000>
|
||
<%AddMenu=_Name, CQ DX(&3) (リピート), OnCQDXClick, 3, 3, 3, 5000>
|
||
|
||
#proc OnCQDXClick @Nline, @Ncq, @Ncall, @Interval
|
||
<%DisableCR><%ClearTXW><%AutoClear><%TX><%RX>
|
||
<%RepeatText=@Nline,<%RepeatText=@Ncq,CQ DX<%SP>>de<%RepeatText=@Ncall,<%SP><%MyCall>><%CR>>
|
||
<%BS><%SP>pse DX k<%CR><%RepeatTX=@Interval>
|
||
#endp
|
||
|
||
#proc Slider @Title, @Command, @Min, @Max, @Step, @NumScales
|
||
<%DisableCR>
|
||
#macro <%Slider=@Title, <%@Command>, @Min, @Max, @Step, @NumScales>
|
||
#if StrMacro(<%Input$>)
|
||
<%@Command=<%Input$>>
|
||
#endif
|
||
#endp
|
||
|
||
※ 追加した拡張メニューのタイトルをクリックした場合、暗黙で以下のハンドラプロシジャーが呼び出されます(このハンドラプロシジャーの定義は必須ではありません)。
|
||
On$xxxClick xxx = メニューの名前 (例: On$拡張(&X)Click)
|
||
※ メニューにアクセスキーを設定すると、すべてのメニューコマンド(<%DoMenu=...>, <%DeleteMenu=...>, <%AddMenu=...>など)でアクセスキーでメニューを特定できるようになります。同一メニュー内でアクセスキーが重複しないように注意して下さい。
|
||
|
||
<%AddMenu=...>や<%InsertMenu=...>は既存のメニューに項目を追加したり、既存のメニュー項目の動作をオーバーライドすることもできます。既存のメニューは名前やキャプションで指定するよりは、アクセスキーやインデックスで指定するほうが簡単です。以下に例を示します。
|
||
|
||
<%DisableCR>
|
||
#if !IsDefined(_fShellHelp)
|
||
#define _fShellHelp 0
|
||
#endif
|
||
<%AddMenu=&E, ->
|
||
<%AddMenu=&E, AS(CW)マクロの編集(&A)..., OnCommand, <%EditMacro=AS(CW)>>
|
||
<%AddMenu=&E, OnStart イベントの編集(&O)..., OnCommand, <%OnStart>>
|
||
<%InsertMenu=&O, &B, デジタル出力レベル(&D)..., Slider, デジタル出力レベル, DigitalLevel, 1024, 32768, 1024>
|
||
<%InsertMenu=&O, &B, ->
|
||
<%AddMenu=&H, &P, OnShellEdit, project.txt, e, 1>
|
||
<%AddMenu=&H, &O, OnShellEdit, mmvari.txt, e, 1>
|
||
<%AddMenu=&H, &S, OnShellEdit, Samples.txt, , 3>
|
||
<%AddMenu=&H, &H, OnShellEdit, history.txt, e, 1>
|
||
<%InsertMenu=&H, &D, シェルの標準エディタを使う(&U), InvRegVal, _fShellHelp>
|
||
<%InsertMenu=&H, &D, ->
|
||
|
||
#proc On$&HelpClick
|
||
<%DisableCR><%CheckMenu=&H, &U, _fShellHelp>
|
||
#endp
|
||
|
||
#proc OnCommand @Command
|
||
<%DisableCR>@Command
|
||
#endp
|
||
|
||
#proc OnInvVal @Value
|
||
<%DisableCR>
|
||
#DEFINE @Value <%Inv=@Value>
|
||
#endp
|
||
|
||
#proc OnShellEdit @File, @Prifix, @Flag
|
||
<%DisableCR>
|
||
#if IsEnglish
|
||
#define _FileName <%Folder>@Prifix@File
|
||
#else
|
||
#define _FileName <%Folder>@File
|
||
#endif
|
||
#if _fShellHelp
|
||
<%Shell=_FileName>
|
||
#else
|
||
<%EditFile=_FileName, @Flag>
|
||
#endif
|
||
#endp
|
||
|
||
#proc Slider @Title, @Command, @Min, @Max, @Step, @NumScales
|
||
<%DisableCR>
|
||
#macro <%Slider=@Title, <%@Command>, @Min, @Max, @Step, @NumScales>
|
||
#if StrMacro(<%Input$>)
|
||
<%@Command=<%Input$>>
|
||
#endif
|
||
#endp
|
||
|
||
※ 既存のポップアップメニューは以下の名前で定義されています。
|
||
|
||
PopWATER スペクトラム、ウォーターフォールで右クリックした時のメニュー
|
||
PopSQ レベルインディケータ上で右クリックした時のメニュー
|
||
PopRXW 受信画面で右クリックした時のメニュー
|
||
PopRX 受信画面の文字上で右クリックした時のメニュー
|
||
PopTX 送信画面で右クリックした時のメニュー
|
||
PopPAGE ステータスバーのPage枠で右クリックした時のメニュー
|
||
PopCHARSET ステータスバーの言語種別欄で右クリックした時のメニュー
|
||
PopCALLS CallBox右横のボタンを押した時のメニュー
|
||
|
||
※ サブメニューを持つメニュー項目はオーバーライドできません。
|
||
※ メニューを挿入するとインデックス番号は変化します。既存のメニューはアクセスキーで指定するほうが良いでしょう。
|
||
※ 既存のメニューのタイトルをクリックした場合、暗黙で以下のハンドラプロシジャーが呼び出されます(これらのハンドラプロシジャーの定義は必須ではありません)。
|
||
On$&FileClick, On$&EditClick, On$&ViewClick, On$&OptionsClick,
|
||
OnRadio&CommandClick, On$&HelpClick
|
||
※ 既存のポップアップメニューがポップアップした場合、暗黙で以下のハンドラプロシジャーが呼び出されます(これらのハンドラプロシジャーの定義は必須ではありません)。
|
||
On$PopWATERClick, On$PopSQClick, On$PopRXWClick, On$PopRXClick,
|
||
On$PopTXClick, On$PopPAGEClick, On$PopCHARASETClick, On$PopCALLSClick,
|
||
|
||
|
||
[反復ブロック]
|
||
~~~~~~~~~~~~~~
|
||
#repeat~#endpまでを反復ブロックと呼びます。反復ブロックは特別なプロシジャーとして定義されます。そして#endp命令をデコードした直後にそのプロシジャーを式の回数だけ繰り返し呼び出します(反復ブロック内のマクロ文はパス1で実行されます)。式の結果が0の場合反復ブロックは実行されません。
|
||
#repeat 式
|
||
|
|
||
#endp
|
||
|
||
※ 反復ブロック内では、反復回数=$repeatと、カウンタ(1~)=$counterという2つのダミーが暗黙に定義されます。
|
||
|
||
#repeat 3
|
||
CQ CQ CQ de <%MyCall> <%MyCall> <%MyCall> (<%Format=%d, 1 + $repeat - $counter>)
|
||
#endp
|
||
|
||
※ 反復ブロックがネストしている場合、$repeatと$counterは、ブロックの内側と外側で区別されます。
|
||
|
||
#repeat 3
|
||
<%DisableCR>Outside=($counter/$repeat)[
|
||
#repeat 2
|
||
<%DisableCR>
|
||
#if $counter > 1
|
||
,
|
||
#endif
|
||
Inside=($counter/$repeat)
|
||
#endp
|
||
]<%CR>
|
||
#endp
|
||
|
||
|
||
======================
|
||
◎サウンドプレーバック
|
||
======================
|
||
「MMARI設定画面」の「受信」タブの「サウンドプレーバックを有効にする」をONにすると、メイン画面左上に60/30/15のボタンが表示されます。これらのボタンを押すと、サウンドプレーバックを実行します。
|
||
|
||
60 60秒前からプレーバック
|
||
30 30秒前からプレーバック
|
||
15 15秒前からプレーバック
|
||
|
||
サウンドプレーバックは次のような場合に使います。
|
||
- 誰かに呼ばれたが、AFCが間に合わずコールサインが判らない
|
||
- 誰かが出ていたが、モード切り替えが間に合わずコールサインが判らない
|
||
|
||
サウンドプレーバックを使うと、同じ信号を何度も受信しなおす事ができます。例えばmfskのようなAFCの応答が遅いモードでは、fズレしている局の短いコールを受信しても復調できない場合があります。しかしサウンドプレーバックをそのまま1回または2回実行することにより、AFCが継続的に働き復調できるようになります。
|
||
|
||
「サウンドプレーバックを有効にする」の右側に表示されるスライダを使って、サウンドプレーバックの速度をx1~x20の範囲で設定できます。CPUパワーが不足している場合は速くしてもその通りの再生速度が得られず、プレーバックが終了するまで他の操作ができなくなる場合があります。デフォルトはx5(15秒のサウンドを3秒で再生)です。
|
||
|
||
サウンドプレーバックは常に最新の受信サウンド60秒分をPCM形式でメモリに保存しています。例えばサウンドカードクロック11025Hzの場合は約1.3MBのメモリを使います。
|
||
|
||
|
||
================
|
||
◎サウンドカード
|
||
================
|
||
サウンドカードについては、「設定画面」その他タブに設定項目があります。
|
||
|
||
(1)Fifo - RX
|
||
~~~~~~~~~~~~
|
||
受信サウンドが頻繁に途切れる場合、数値を大きくして下さい。
|
||
|
||
(2)Fifo - TX
|
||
~~~~~~~~~~~~
|
||
送信サウンドが頻繁に途切れる場合、数値を大きくして下さい。しかしあまり大きくするとキー操作に対して送信音の遅れが大きくなります。
|
||
|
||
(3)DeviceID
|
||
~~~~~~~~~~~
|
||
複数のサウンドカードがインストールされている場合、そのDeviceID(0から順番で割り当てられている)を設定して下さい。-1はデフォルトのカードを使うことを意味しています。
|
||
サウンドデバイスとしてMMTTY、MMSSTV用のカスタムサウンドを選択することもできます。カスタムサウンドを利用する場合はmmwファイルをMMVARIがインストールされているフォルダ内にコピーして下さい(DeviceIDの一覧にその名前が表示されるのでそれを選択します)。
|
||
|
||
※送受で異なるカードを使用する場合は、0,1のように受信、送信の順でDeviceIDをカンマで区切って設定します。
|
||
|
||
※カスタムサウンドの詳細はMMTTY/MMSSTV用のカスタムサウンドのサンプル「MM-WaveLink」パッケージ内の「JReadme.txt」および「JMMW.txt」を参照して下さい。
|
||
|
||
(4)処理の優先順位
|
||
~~~~~~~~~~~~~~~~~
|
||
送受信サウンドが途切れがちな場合、優先順位を高くすると改善する場合があります。
|
||
|
||
(5)入力チャンネル
|
||
~~~~~~~~~~~~~~~~~
|
||
サウンドカード入力をモノラル、またはステレオのどのチャンネルから行うかを設定します。出力はステレオが選択されていても、常に左右両方に出力されます。
|
||
|
||
(6)Clock - RX
|
||
~~~~~~~~~~~~~
|
||
受信サンプリング周波数を設定します。現状のMMVARIは次のクロック系をサポートします。デフォルトは11025Hz系です。
|
||
|
||
11025Hz系 サウンドカード標準周波数の1つ。すべてのカードで動作する。
|
||
12000Hz系 すべてのカードで動作する訳ではないが、
|
||
TxOffset(送受での周波数ズレ)が発生しない可能性が高い。
|
||
6000Hz系 すべてのカードで動作する訳ではないがCPU負荷は軽い。
|
||
8000Hz系 特にメリットなし。
|
||
18000Hz系 特にメリットなし。
|
||
22050Hz系 サウンドカード標準周波数の1つ。特にメリットなし。
|
||
24000Hz系 特にメリットなし。
|
||
44100Hz系 サウンドカード標準周波数の1つ。特にメリットなし。
|
||
48000Hz系 光デジタルI/F用。
|
||
|
||
※11100Hzの選択が一覧に存在しますが、この周波数は11025Hz系クロックのクロックズレを補正した(代表的な...)値の1つで、サウンドカードは11025Hz系で動作します。
|
||
|
||
※遅いパソコンで動作させる場合は、6000Hz系クロックを選択されると良いかも知れません。
|
||
|
||
※8000Hz系はFFT点数の関係で、スペクトラムおよびウォータフォールの表示が少し遅くなります。
|
||
|
||
(7)Clock - TxOffset
|
||
~~~~~~~~~~~~~~~~~~~
|
||
送信サンプリング周波数を、RX値に対するオフセット値で設定します。送受で周波数がズレる場合にこの値を設定する必要があります。詳細は「クロック補正」を参照して下さい。
|
||
|
||
送信サンプリング周波数 = RX + TxOffset [Hz]
|
||
|
||
==============
|
||
◎クロック補正
|
||
==============
|
||
サウンドカードのクロックズレについてはSSTVのように神経を使う必要はありません。しかし送受で大きくズレている場合、送信キャリア周波数と受信キャリア周波数が一致しなくなり不便ですし、タイミング(ボーレート)のズレも発生してしまいます。
|
||
|
||
※MMVARIのクロック補正とは、「設定画面」その他タブの左下部分にあるClock-RX値とTxOffset値の2つの値を設定する操作です。この2つの値さえ正しく設定すれば、あらゆるサウンドカードのクロックズレに完全に対応することができます。
|
||
|
||
1.MMSSTVを利用する場合
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
MMSSTVのクロック値およびTxOffset値は、MMVARIにそのまま適用できます。したがって正しい方法で校正したMMSSTVの値をそのままMMVARIに設定するのが最も簡単で正確な方法です。この場合、これ以降の操作は一切必要ありません。
|
||
|
||
※MMSSTVの「自動傾き調整」をOFFにし、送受信の画像がいずれも傾かない状態になっている場合に限り、MMSSTVは正しく校正されていると言えます。
|
||
|
||
2.まず受信クロックを合わせる
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
オプションメニューの「サウンドカードのクロック校正」を選択すると、「サウンドカードの受信クロック値の校正」画面が表示されますので、その画面に表示されている手順を実行します。この校正操作には現在、東アジア地域全般で受信可能なBPM標準電波放送を利用します。
|
||
|
||
この画面では受信クロック(Clock-RX)値しか校正できません。TxOffset値の校正については次の項(3)を参照して下さい。
|
||
|
||
3.TxOffsetの校正
|
||
~~~~~~~~~~~~~~~~
|
||
「設定画面」送信タブを開き、「外部ループバック(衛星通信用)」を選択し、サウンドカードの入力と出力を線で接続します。要は自分が送信した信号をサウンドカードを経由して自分で受信できるようにすれば良いので、線で接続しなくてもサウンド入力ボリュームの調整画面を開き、入力を「ライン」から「ステレオミキサー」または「モノラルミキサー」に変更しても構いません。
|
||
|
||
MMVARIメイン画面で、以下の操作を行います。
|
||
|
||
1) NET=OFF, AFC=ON, ATC=ON
|
||
2) 送信画面をクリア(アイドル信号が最も計測条件が良いため)
|
||
3) TXボタンを押し送信状態にする(Rigの電源は切っておくこと)
|
||
4) スペクトラムで受信周波数を合わせる
|
||
(サウンドカードにTxOffsetが存在する場合、必ず送受で周波数がズレます)
|
||
|
||
この状態で十分に時間が経過すると、ATCタイミングの値の変化が落ち着きますので、ATCタイミングの枠の部分にマウスを移動し、そのとき最下段ステータスバーに表示されるRxOffset[Hz]を現在のTxOffset[Hz]から減算します。
|
||
|
||
新しいTxOffset = 現在のTxOffset - RxOffset [Hz]
|
||
|
||
例えば、現在のTxOffsetが0で、RxOffsetが-74.40と表示された場合は、74.40を新しいTxOffset値にします。
|
||
|
||
TxOffsetを設定した後、もう一度送信してみて、送受での周波数のズレや、ATCタイミングの大きなズレがない事を確認しておくと良いでしょう。SSTVでは精度を得るために上記の操作を2回繰り返しますが、MMVARIではその必要はありません。
|
||
|
||
以上で校正操作は終了です。最後に「設定画面」送信タブを開き、「内部ループバック」に戻しておきます。
|
||
|
||
4.TxOffsetの簡易校正
|
||
~~~~~~~~~~~~~~~~~~~~
|
||
(3)をやるのがメンドウな場合は、とりあえずTxOffsetを0にして送信し、相手局から十分に時間が経過した後のATCタイミングのズレ(RxOffset[Hz])を教えてもらって、その符号を逆にした値を自分のTxOffsetに設定しても構いません。もちろんこの場合、相手局の受信クロックが概ね正確である事が確認されている必要があります。
|
||
|
||
================
|
||
◎VARICODEの名称
|
||
================
|
||
MMVARIでは便宜上以下のようにVARICODEの名称を定義しており、<%VARITYPE>マクロコマンドでは以下の表記が自動的に展開されます。
|
||
|
||
VariSTD 標準(PSK31)のVARICODE(256種類)
|
||
VariMFSK 標準(MFSK)のVARICODE(256種類)
|
||
VariJA 日本語用VARICODE(12160種類)
|
||
VariHL 韓国語用VARICODE(24448種類)
|
||
VariBV 中国語(BV)用VARICODE(24448種類)
|
||
VariBY 中国語(BY)用VARICODE(24448種類)
|
||
|
||
従来方式---標準VARICODEでMBCSを2文字連結で伝送する方式---の場合、受信画面で選択されている言語に従って、"VariSTD/JA", "VariSTD/HL"のように表記します。以下に変調方式と<%VARITYPE>の関係を示します。
|
||
|
||
GMSK VariJA, VariHL, VariBV, VariBY
|
||
FSK VariJA, VariHL, VariBV, VariBY
|
||
BPSK VariJA, VariHL, VariBV, VariBY
|
||
bpsk VariSTD/JA, VariSTD/HL, VariSTD/BV, VariSTD/BY
|
||
mfsk VariMFSK/JA, VariMFSK/HL, VariMFSK/BV, VariMFSK/BY
|
||
|
||
※受信画面で選択されている言語によって<%VARITYPE>は異なります。またSBCS言語が選択されている場合、いずれの変調方式でも"VariSTD"または"VariMFSK"になります。
|
||
|
||
※bpskの場合の"VariSTD/JA"という表記は一般的ではありませんので、たとえば以下のマクロ文のように単に"Japanese"と展開すると良いかも知れません。
|
||
|
||
RRR <%HisCall> de <%MyCall>
|
||
#if IsLocal
|
||
#if StrVARITYPE == STD/JA
|
||
--- Japanese ---
|
||
#else
|
||
--- <%VARITYPE> ---
|
||
#endif
|
||
#endif
|
||
|
||
73, Mako JE3HHT
|