マクロを使った自動運転

ホーム 上へ 衛星の軌道要素 経緯度・高さと直交座標 天空の時計と原子時計 ちょこっと(逆三角関数) 衛星軌道面での動き ベクトルと座標回転 衛星の方位と仰角 ちょこっと(NTP) 可視範囲と等距離円 衛星の速度とSA 地球の大きさと形 ちょこっと(方位磁石) SGP計算モデル アンテナの自動制御 リグのコントロール ちょこっと(ドップラ補正) DDEインターフェース 位置計算の数値例 マクロを使った自動運転 ちょこっと(軌道コレクション)

マクロを使うと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

   (ツールバーのユーザー定義ボタン0005)

 

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 に代入
!Y= (SatElevation?)         ' 現在選択されている衛星の仰角を SatElevation? のクエリ値と !X=(数値) の代入コマンドを使って変数 !X に代入
!Z= (SatRange?)             ' 同様に距離
!X= (SatRangeRate?)      ' 同様に距離変化
!Y= (SatSquintAngle?)     ' 同様に SA
!Z= (SatMa?)                 ' 同様に MA
!X= (SatRev?)                ' 同様に周回番号
!Y= (Now?)                    ' 同様に現在日時
END                            ' マクロの実行終了

 

 

この例ではクエリ機能を使ってCALSAT32が持っている問い合わせ可能な値を変数に代入している。 代入された値は比較式や演算式などで利用することが出来る。

 

マクロの記述例(2)

 

'日時の設定と日時の演算
!X= (#2006/09/01 12:00:00#)      ' 2006年9月1日12時0分0秒の日時を変数 !X に代入
!Y= (!X + 0.041666666)              ' 0.041666666(1時間)進める
!Z= (!Y - 1)                             ' 1日戻す
!X= (!Z + 7)                             ' 1週間進める
END

 

日時の値を変数に代入する機能と時間や日付の演算を行うことが出来る。

 

 

マクロの記述例(3)

 

'日時データの代入、現在日時の問い合わせ、指定時間になったら処理を終了する
!X= (#2006/09/01 12:00:00#)                         ' 変数 !X に日時データを代入。
いろは:                                                      ' 何かの処理
IF (Now? < #2006/09/01 12:00:00#) *いろは     ' 直接日時を記述して比較もできる。
IF (Now? < !X) *いろは                                 'Now?は現在日時の問い合わせ。
END

 

現在の日時を日時表現や変数と比較して分岐する。 時刻の演算機能と組み合わせると任意の日時間隔でマクロを実行することも出来る。

 

 

マクロの記述例(4)

 

'指定回数繰り返しのテスト
!X= (0)                            ' 変数名には!がつきます。使える変数は !X, !Y, !Z の3つです。
!Y= (10)                            ' 変数!Yに数値10を代入します。代入したい数値は()で囲みます。
123: IF (!X >= !Y) *XYZ                 ' 変数!Xと!Yを比較して結果が真の場合にはABC:のラベルの行に制御を移します。
!X= (!X + 1)                                 ' 演算結果を変数に代入します。!Xの値を1増加しています。
     '何かの処理を10回繰り返す
GOTO *123
XYZ: END

 

IF比較式とGOTO文を使って指定回数繰り返して処理を実行することが出来る。

 

 

マクロの記述例(4)

 

はじめ:                                             ' ラベルには漢字も使えます。
SHOW frmSatSelect                          ' 衛星の選択フォーム(frmSatSelect)を表示します。    
CLICK A-1                                      ' グループAの1番目の衛星のボタンをクリックします。
CLICK B-2
CLICK C-3
CLICK D-4
CLICK E-5
CLICK F-6
CLICK F-1
CLICK E-2
CLICK D-3
CLICK C-4
CLICK B-5
CLICK A-6
HIDE frmSatSelect                             ' 衛星の選択フォーム(frmSatSelect)を隠します。

CLICK Sat1 [2006/09/01 12:00:00]       ' メインフォームの1番目の衛星を 2006/09/01 12:00:00 の日時にクリックします。
CLICK Sat2 [2006/09/01 12:00:05]      ' 指定の日時に達していない場合は指定時間まで実行を待ちます。
CLICK Sat3 [2006/09/01 12:00:10]       ' 指定の日時が現在の日時を過ぎている場合には待ち時間なしで実行されます。
CLICK Sat4 [2006/09/01 12:00:15]       ' 日時の指定はすべての行に対して設定できます。
CLICK Sat5 [2006/09/01 12:00:20]       ' 日時の指定がない行は待ち時間なしで実行されます。
CLICK Sat6 [2006/09/01 12:00:25]

END

 

フォームを表示してフォーム上のボタンを押す動作を行います。 ここでは初めに衛星の選択フォームを表示してグループAの1番目の衛星、グループBの2番目の衛星の順の衛星を選択切り替えています。 そのご衛星の選択フォームを閉じて、メインフォームにある衛星の1番から6番までを切り替え日時を指定して切り替えています。 指定日時が現在日時より過去になる場合にはしては無効で1秒ごとに実行されます。

 

 

マクロの記述例(5)

 

'FT847の制御
SHOW frmSatSelect
CLICK B-2
HIDE frmSatSelect
SHOW frmFT847                     ' FT847制御フォーム(frmFT847)を表示します。
CLICK FT847PortSet              ' COMポートをオープンします。
CLICK FT847ControlCat          ' FT847とCATで通信を開始します。
CLICK FT847ControlSat          ' FT847とサテライトモードに設定します。
CLICK FT847ControlPtt           ' 送受信の切り替えを行います。(トグル動作)
CLICK FT847LinkFreq              ' SATINFO.TXTに周波数やモードが設定されていれば取り込んで設定します。
CLICK FT847LinkConv             ' SATINFO.TXTにコンバータ情報が設定されていれば取り込んで設定します。
CLICK FT847TrackNor             ' ノーマルモードでトラッキング動作を行います。
CLICK FT847TrackRev            ' リバースモードでトラッキング動作を行います。
CLICK FT847TrackDop            ' ドップラーシフトの自動補正を行います。
NOP                                     ' 何の動作も行いません。
NOP                                     ' マクロは衛星の計算が更新されるたびに1行ずつ実行されます。(通常は1秒間隔)
NOP                                     ' NOPコマンドは1秒間の待ちのような動作になります。
HIDE frmFT847                       ' FT847制御フォーム(frmFT847)を隠します。
END

 

 

リグ(FT847)の制御を行うことが出来ます。 最初に衛星を選択して、FT847の制御フォームを開いています。 通常どおりCOMポートのオープンから順番にサテライトモードに設定します。 周波数情報を読み込んでFT847のビーコン、アップリンク、ダウンリンク、モードを設定した後、トラッキングやドップラーシフトの自動補正を開始しています。 また、NOPと呼ばれるコマンドがありますが、このコマンドは何の処理も行いませんが、次のコマンドの実行を1秒間待つような動作が必要なときに挿入することが出来ます。 同様にIC910、TS2000のコントロールも出来ます。

 

 

マクロの記述例(6)

 

'アンテナの制御
SHOW frmRotator                                                ' ローテータのコントロールパネルを表示します。
NOP
NOP
NOP
CLICK RotatorAuto                                              ' ノーマルモードで追尾開始します。
NOP
NOP
CLICK RotatorPreset1 [2006/09/01 23:00:00]           ' 2006/09/01 23:00:00 にプリセット1の方向へアンテナを向けます。
NOP
NOP
CLICK RotatorPreset2 [2006/09/01 23:10:00]
NOP
NOP
CLICK RotatorPreset3 [2006/09/01 23:20:00]
NOP
NOP
CLICK RotatorManual [2006/09/01 23:30:00]
NOP
NOP
HIDE frmRotator                                                   ' ローテータのコントロールパネルを隠します。
END

 

 

アンテナの自動制御を行うことが出来ます。ローテータのコントロールパネルを開き、ノーマルモードで追尾を開始します。 その後、指定された時間にプリセット1〜3に順次アンテナを向けるように制御します。 PICNICからの応答待ち時間を稼ぐためにNOPコマンドを使っています。

 

 

マクロの記述例(7)

 

'サブルーチンの個別呼び出しのテスト
GOSUB *Sub1
GOSUB *Sub2
GOSUB *Sub3
EXIT
Sub1: !X= (1)
RETURN
Sub2: !Y= (2)
RETURN
Sub3: !Z= (3)
RETURN
END

 

 

何らかのまとまった処理を記述して繰り返し利用するためにサブルーチン呼び出しが使えます。 この例では Sub1, Sub2, Sub3 の3つのサブルーチンを順次呼び出した後、 EXIT コマンドでマクロ処理を抜け出しています。

 

 

マクロの記述例(8)

 

'サブルーチン呼び出しでスタックのテスト(スタックに戻りアドレスを10個積む)
GOSUB *Sub1
EXIT
Sub1: GOSUB *Sub2
RETURN
Sub2: GOSUB *Sub3
RETURN
Sub3: GOSUB *Sub4
RETURN
Sub4: GOSUB *Sub5
RETURN
Sub5: GOSUB *Sub6
RETURN
Sub6: GOSUB *Sub7
RETURN
Sub7: GOSUB *Sub8
RETURN
Sub8: GOSUB *Sub9
RETURN
Sub9: GOSUB *Sub10
RETURN
Sub10: RETURN
END

 

サブルーチンからサブルーチンを呼び出す形になっています。 順次呼び出しだけではなく多重に呼び出すことが出来ますが、サブルーチン中の変数の値はグローバルな扱いに、スタックポインターは100個で戻りアドレスが失われますので注意して下さい。 

 

 

マクロの記述例(9)

 

' ツールバーのユーザ定義ボタンのテスト
CLICK ToolBar00
CLICK ToolBar01
CLICK ToolBar02
CLICK ToolBar03
CLICK ToolBar04
CLICK ToolBar05
END

 

ツールバーのユーザ定義ボタンには外部プログラムの起動などの設定が出来ます。 マクロではこのボタンを自動的に押す動作を行うことが出来、外部のプログラムと連携して動作することが可能になっています。

 

 

マクロの記述例(10)

 

可視範囲に入る衛星を監視:
CLICK Sat1                                           ' 衛星1を選択
IF (SatElevation? > 0) *追尾開始               ' 衛星が可視範囲にあれば追尾を開始
CLICK Sat2
IF (SatElevation? > 0) *追尾開始
CLICK Sat3
IF (SatElevation? > 0) *追尾開始
CLICK Sat4
IF (SatElevation? > 0) *追尾開始
CLICK Sat5
IF (SatElevation? > 0) *追尾開始
CLICK Sat6
IF (SatElevation? > 0) *追尾開始
GOTO *可視範囲に入る衛星を監視
追尾開始:
SHOW frmFT847                 ' FT847制御パネルを開く
CLICK FT847PortSet               ' COMポートを開く
CLICK FT847ControlCat            ' CAT通信を開始
CLICK FT847ControlSat            ' サテライトモードに設定
CLICK FT847LinkFreq              ' 送受信周波数やモードを設定
CLICK FT847TrackDop                           ' ドップラーシフト補正開始
SHOW frmRotator                                  ' ローテータ制御パネルを開く
CLICK RotatorAuto                                ' ノーマルモードでアンテナ追尾開始
追尾中:
IF (SatElevation? < 0) *地平線の彼方に
IF (SatElevation? > 80) *フリップモードに切り替え
GOTO *追尾中
フリップモードに切り替え:
CLICK RotatorAutoFlipMode
GOTO *追尾中
地平線の彼方に:
HIDE frmRotator
HIDE frmFT847
GOTO *可視範囲に入る衛星を監視
END

 

 

マクロコマンドを組み合わせて可視範囲にある衛星を監視して、可視範囲にはいるとFT847の制御フォームを開いて周波数やモードの設定を行い、さらにローテータ制御フォームを開きノーマルモードで追尾を開始します。 途中、仰角が80度を超えると追尾遅れが生じないように追尾モードをフリップモードに切り替えます。 追尾中は衛星の仰角を監視し続け可視範囲からはずれると、ローテータとFT847の制御フォームを閉じて、衛星1〜6を監視します。

 

このほかにもいろいろな応用例が考えられると思います。

みなさまのアイディアでさらに活用いただければ幸いです。