|
マクロを使うとCALSAT32の自動運転ができるようになる
CALST32にはマクロ機能が実装されていて、決められた文法にしたがって動作手順を記述し実行することによって、衛星の切り替え、アンテナやリグのコントロールなどが行えます。 また、マクロを実行する日時を設定することが出来るので夜中に衛星からのデータを無人で取得するなど、応用次第で様々な動作を行うことが可能です。
マクロ機能の基本的な動作は、フォーム上にあるボタンをマクロ文に書かれた順番どおりに自動的に押していく動作を行います。 自動的に押す動作は日時の指定がない場合には1秒ごとに実行され、日時の指定がある場合には指定時間まで実行を待機し、指定時間に達すると実行します。
また、条件によって実行の順番を変更したい場合があります。 これを実現するために比較式を書くことが出来、比較結果により分岐処理を行います。 分岐のために、ラベル名を設定し、分岐先ラベル名を記述します。
このほかに、CALST32の動作中の値(たとえば方位や仰角)を 問い合わせたり、一時的に保存する変数やこれらを使った演算機能、メインフォーム以外のフォームの表示・非表示の制御など、いろいろな機能をもっています。
CALST32をインストールするとインストールしたディレクトリーに "MACRO.TXT" があります。 そこにはサンプルのマクロが記述されていますが、各自の必要な動作を指定するマクロ文に書き換えて使用します。 マクロの実行はメインフォームにある "まくろ" ボタンを押すことで実行されます。 実行中はポインター、ラベル、コマンド、オブジェクト、アドレス、実行日時、変数の値などを表示するフォームが表示され、実行の状況を確認することが出来ます。
マクロ文の構成 ・マクロ文は、ラベル名、コマンド名、フォーム名、ボタン名、演算式、分岐先ラベル名、コマンド実行日時から構成される。 ・ラベル名、コマンド名、フォーム名、ボタン名、比較式、分岐先ラベル名、コマンド実行日時の区切りは半角スペース文字とする。 ・先頭の1文字が半角文字 ’である場合にはコメント行と見なす。また空白行は無視される。 ・行の途中に半角文字 ’がある場合にはそれ以降をコメントと見なす。
ラベル文 ラベル文は行の先頭から半角文字 :までと解釈する。
コマンド名 コマンド名にはつぎのものがあり、半角大文字で記述する。(アルファベット順) !X= , !Y= , !Z= 演算式の結果を変数に代入する CLICK ボタン名で指定したフォーム上のボタンを押した動作を行う END マクロ行の最終行を示し、実行を終了する(END以降は無視される) EXIT マクロ行の途中で実行を中断してマクロ処理を抜け出す GOTO 分岐先ラベルに制御を移す GOSUB サブルーチンに実行を移す HIDE フォーム名で指定したフォームを非表示にする IF 比較式を評価して、真であれば分岐先ラベルに制御を移す NOP ポインターを1つ進める RETURN サブルーチンの実行を抜ける SHOW フォーム名で指定したフォームを表示する
(例) SHOW frmSatSelect CLICK Sat1 CLICK A-3 HIDE frmSatSelect END
フォーム名とボタン名 フォーム名と実行可能なボタンの名前はつぎのとおり。
frmMain (CALSAT32メインフォーム) Sat1,Sat2,Sat3,Sat4,Sat5,Sat6(衛星タイトル) ToolBar00, ToolBar01, ToolBar02, ToolBar03, ToolBar04, ToolBar05 (ツールバーのユーザー定義ボタン00〜05)
frmSatSelect(衛星の選択フォーム) A-1,A-2,A-3,A-4,A-5,A-6 (直接衛星グループと番号を指定) B-1,B-2,B-3,B-4,B-5,B-6 ・ Y-1,Y-2,Y-3,Y-4,Y-5,Y-6 Z-1,Z-2,Z-3,Z-4,Z-5,Z-6
frmFT847(FT847制御パネル) FT847PortSet COM ポートのオープン FT847ControlCat FT847との通信開始 FT847ControlSat ビーコンモードとサテライトモードの切り替え FT847ControlPtt 送受信の切り替え FT847LinkFreq SATINFO.TXTに記述された周波数等の取り込み FT847LinkConv SATINFO.TXTに記述されたコンバータ情報の取り込み FT847TrackNor 順へテロダインモードでトラッキング FT847TrackRev 逆へテロダインモードでトラッキング FT847TrackDop ドップラーシフトの自動補正
frmIC820(IC820制御パネル) IC820PortSet COMポートのオープン IC820ControlCiv IC820との通信開始 IC820ControlSat ビーコンモードとサテライトモードの切り替え IC820LinkFreq SATINFO.TXTに記述された周波数等の取り込み IC820LinkConv SATINFO.TXTに記述されたコンバータ情報の取り込み IC820TrackNor 順へテロダインモードでトラッキング IC820TrackRev 逆へテロダインモードでトラッキング IC820TrackDop ドップラーシフトの自動補正
frmIC910(IC910制御パネル) IC910PortSet COMポートのオープン IC910ControlCiv IC910との通信開始 IC910ControlSat ビーコンモードとサテライトモードの切り替え IC910LinkFreq SATINFO.TXTに記述された周波数等の取り込み IC910LinkConv SATINFO.TXTに記述されたコンバータ情報の取り込み IC910TrackNor 順へテロダインモードでトラッキング IC910TrackRev 逆へテロダインモードでトラッキング IC910TrackDop ドップラーシフトの自動補正
frmTS2000(TS2000制御パネル) TS2000PortSet COMポートのオープン TS2000ControlPc TS2000との通信開始 TS2000ControlSat ビーコンモードとサテライトモードの切り替え TS2000ControlPtt 送受信の切り替え TS2000LinkFreq SATINFO.TXTに記述された周波数等の取り込み TS2000LinkConv SATINFO.TXTに記述されたコンバータ情報の取り込み TS2000TrackNor 順へテロダインモードでトラッキング TS2000TrackRev 逆へテロダインモードでトラッキング TS2000TrackDop ドップラーシフトの自動補正
frmRotator(アンテナ制御パネル) RotatorAuto 自動追尾 RotatorAutoFlipMode 自動追尾(フリップモード) RotatorManual 自動追尾停止 RotatorPreset1 プリセット1 RotatorPreset2 プリセット2 RotatorPreset3 プリセット3
演算式 演算式は(クエリ値 演算子 値)、(変数 演算子 値)、(クエリ値)、(値)で記述します。
・クエリ値にはつぎのものがあります。 SatAzimuth? 衛星の方位 SatElevation? 衛星の仰角 SatRange? 観測点と衛星の距離 SatRangeRate? 観測点と衛星の距離変化 SatSquintAngle? 観測点の視線方向からの衛星アンテナ指向性のずれ SatMa? 平均近点離角 SatRev? 周回数 Now? 現在の日付と時刻
・演算子にはつぎのものがあります。 +,-,*,/,=,>,<,>=,<=,<>,
・値にはつぎのような書式で記述します。 1,20,-301などの整数 0.23,-3.14などの小数 2.46e+3,4.567e-6などの指数 #2006/09/01 12:00:00# の表現による日時
・変数にはつぎのものがあります。(変数を使う場合には初期化が必要です) !X, !Y, !Z ( !X=, !Y=, !Z= コマンドで変数に値が代入できます)
(例) IF (SatElevation? > 85) *FlipMode !X= (100) !Z= (!X + !Y) IF (!X = !Y ) *SetFt847Frequency
分岐先ラベル名 分岐先ラベル名にはラベル名の前に半角の*が付きます。ラベル Abc: を分岐先に指定するときには *Abc となります。 (例) *Abc123 *AOSした時 *仰角が0度以下になった時の処理
コマンド実行日時 コマンド実行日時を指定すると、指定した日時に達するまで該当行の実行を留保します。記述の書式は日付と時刻を[ ]でくくります。 (例) [2000/01/01 00:00:00] [2010/12/31 23:59:59]
マクロの記述例(1)
'クエリを使って衛星の情報を変数に代入する
!X= (SatAzimuth?)
' 現在選択されている衛星の方位角を SatAzimuth? のクエリ値と !X=(数値) の代入コマンドを使って変数 !X に代入
この例ではクエリ機能を使ってCALSAT32が持っている問い合わせ可能な値を変数に代入している。 代入された値は比較式や演算式などで利用することが出来る。 マクロの記述例(2)
'日時の設定と日時の演算
日時の値を変数に代入する機能と時間や日付の演算を行うことが出来る。
マクロの記述例(3)
'日時データの代入、現在日時の問い合わせ、指定時間になったら処理を終了する
現在の日時を日時表現や変数と比較して分岐する。 時刻の演算機能と組み合わせると任意の日時間隔でマクロを実行することも出来る。
マクロの記述例(4)
'指定回数繰り返しのテスト
IF比較式とGOTO文を使って指定回数繰り返して処理を実行することが出来る。
マクロの記述例(4)
はじめ:
' ラベルには漢字も使えます。
フォームを表示してフォーム上のボタンを押す動作を行います。 ここでは初めに衛星の選択フォームを表示してグループAの1番目の衛星、グループBの2番目の衛星の順の衛星を選択切り替えています。 そのご衛星の選択フォームを閉じて、メインフォームにある衛星の1番から6番までを切り替え日時を指定して切り替えています。 指定日時が現在日時より過去になる場合にはしては無効で1秒ごとに実行されます。
マクロの記述例(5)
'FT847の制御
リグ(FT847)の制御を行うことが出来ます。 最初に衛星を選択して、FT847の制御フォームを開いています。 通常どおりCOMポートのオープンから順番にサテライトモードに設定します。 周波数情報を読み込んでFT847のビーコン、アップリンク、ダウンリンク、モードを設定した後、トラッキングやドップラーシフトの自動補正を開始しています。 また、NOPと呼ばれるコマンドがありますが、このコマンドは何の処理も行いませんが、次のコマンドの実行を1秒間待つような動作が必要なときに挿入することが出来ます。 同様にIC910、TS2000のコントロールも出来ます。
マクロの記述例(6)
'アンテナの制御
アンテナの自動制御を行うことが出来ます。ローテータのコントロールパネルを開き、ノーマルモードで追尾を開始します。 その後、指定された時間にプリセット1〜3に順次アンテナを向けるように制御します。 PICNICからの応答待ち時間を稼ぐためにNOPコマンドを使っています。
マクロの記述例(7)
'サブルーチンの個別呼び出しのテスト
何らかのまとまった処理を記述して繰り返し利用するためにサブルーチン呼び出しが使えます。 この例では Sub1, Sub2, Sub3 の3つのサブルーチンを順次呼び出した後、 EXIT コマンドでマクロ処理を抜け出しています。
マクロの記述例(8)
'サブルーチン呼び出しでスタックのテスト(スタックに戻りアドレスを10個積む)
サブルーチンからサブルーチンを呼び出す形になっています。 順次呼び出しだけではなく多重に呼び出すことが出来ますが、サブルーチン中の変数の値はグローバルな扱いに、スタックポインターは100個で戻りアドレスが失われますので注意して下さい。
マクロの記述例(9)
' ツールバーのユーザ定義ボタンのテスト
ツールバーのユーザ定義ボタンには外部プログラムの起動などの設定が出来ます。 マクロではこのボタンを自動的に押す動作を行うことが出来、外部のプログラムと連携して動作することが可能になっています。
マクロの記述例(10)
可視範囲に入る衛星を監視:
マクロコマンドを組み合わせて可視範囲にある衛星を監視して、可視範囲にはいるとFT847の制御フォームを開いて周波数やモードの設定を行い、さらにローテータ制御フォームを開きノーマルモードで追尾を開始します。 途中、仰角が80度を超えると追尾遅れが生じないように追尾モードをフリップモードに切り替えます。 追尾中は衛星の仰角を監視し続け可視範囲からはずれると、ローテータとFT847の制御フォームを閉じて、衛星1〜6を監視します。
このほかにもいろいろな応用例が考えられると思います。 みなさまのアイディアでさらに活用いただければ幸いです。
|