DDEインターフェース

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

DDEを使ってCalsat32の手足が増える

 CALST32の内部で計算している数値にはさまざまなものがあります。 DDEインターフェースはローテータやリグをコントロールするために必要になるものについて、外部から参照できるようにするための 機能です。

 

 DDEDynamic Data ExchangeはWindowsのプログラム間でデータを交換するための方法のひとつで、実行速度は遅いものの簡単なプログラミングで実現することができます。

 

 メニューバーの[コントロール][DDEインターフェース]をクリックすると、つぎのようなフォームが開きます。

 

 

 表示の左半分のタイトルが右半分の数字の意味で、外部のプログラムから参照できる値としてはつぎのものがあります。

 

 ・衛星名

 ・MJD(日付と時刻)

 ・衛星の方位と仰角(deg)

 ・距離(m)

 ・距離変化(m/s)

 ・MA

 ・周回番号

 ・G系地心直交座標における衛星XYZ座標(m)

 ・太陽と月の方位と仰角(deg)

 

 これらの値は、CALSAT32の画面で選択した衛星に連動し、計算値が更新されるたびに表示が替わります。

 

 VisualBASIC(6.0)で作成したDDEコントロールを使うための例を示します。

Calsat32AzEl_DDE.zipをダウンロードして、解凍してください。

 

 解凍したフォルダに含まれる"Calsat32AzEl_DDE.exe"を起動 すると、つぎのようなフォームが表示されます。

 

 

 

  CALSAT32の値を参照するプログラムを実行する場合には、CALSAT32起動している必要があります。

 

 また、"Calsat32AzEl_DDE.vbp"をクリックすると Visual BASIC が起動して、つぎのコードを見ることができます。

 

 

Private Sub Form_Load()

 

'Calsat32とのリンクを設定します。

'以下の記述はDDEを使うときには必須の設定です。

'すべての項目をリンクする必要はありません。

'Text1. 〜 Text15. はフォームに貼り付けるテキストボックス名に合わせます。

'"Calsat32|Export" や "txtSatellite" などは以下の例と同じ文字列を指定します。

   

    '衛星名

    Text1.LinkTopic = "Calsat32|Export"

    Text1.LinkItem = "txtSatellite"

    Text1.LinkMode = 2

   

    'MJD(日付と時刻)

    Text2.LinkTopic = "Calsat32|Export"

    Text2.LinkItem = "txtMJD"

    Text2.LinkMode = 2

   

    '方位角(deg)

    Text3.LinkTopic = "Calsat32|Export"

    Text3.LinkItem = "txtAzimuth"

    Text3.LinkMode = 2

   

    '仰角(deg)

    Text4.LinkTopic = "Calsat32|Export"

    Text4.LinkItem = "txtElevation"

    Text4.LinkMode = 2

   

    '距離(m)

    Text5.LinkTopic = "Calsat32|Export"

    Text5.LinkItem = "txtRange"

    Text5.LinkMode = 2

   

    '距離変化(m/s)

    Text6.LinkTopic = "Calsat32|Export"

    Text6.LinkItem = "txtRangeRate"

    Text6.LinkMode = 2

   

    'MA

    Text7.LinkTopic = "Calsat32|Export"

    Text7.LinkItem = "txtMeanAnomaly"

    Text7.LinkMode = 2

   

    '周回番号

    Text8.LinkTopic = "Calsat32|Export"

    Text8.LinkItem = "txtRevolution"

    Text8.LinkMode = 2

   

    'X座標

    Text9.LinkTopic = "Calsat32|Export"

    Text9.LinkItem = "txtXg"

    Text9.LinkMode = 2

   

    'Y座標

    Text10.LinkTopic = "Calsat32|Export"

    Text10.LinkItem = "txtYg"

    Text10.LinkMode = 2

 

    'Z座標

    Text11.LinkTopic = "Calsat32|Export"

    Text11.LinkItem = "txtZg"

    Text11.LinkMode = 2

 

    '太陽の方位角(deg)

    Text12.LinkTopic = "Calsat32|Export"

    Text12.LinkItem = "txtSunAzimuth"

    Text12.LinkMode = 2

   

    '太陽の仰角(deg)

    Text13.LinkTopic = "Calsat32|Export"

    Text13.LinkItem = "txtSunElevation"

    Text13.LinkMode = 2

   

    '月の方位角(deg)

    Text14.LinkTopic = "Calsat32|Export"

    Text14.LinkItem = "txtMoonAzimuth"

    Text14.LinkMode = 2

   

    '月の仰角(deg)

    Text15.LinkTopic = "Calsat32|Export"

    Text15.LinkItem = "txtMoonElevation"

    Text15.LinkMode = 2

 

End Sub

 

 

Private Sub Form_Unload(Cancel As Integer)

 

'リンクを自動に戻す

'DDEの使用を終わるときに必要な設定です。

   

    Text1.LinkMode = 0

    Text2.LinkMode = 0

    Text3.LinkMode = 0

    Text4.LinkMode = 0

    Text5.LinkMode = 0

    Text6.LinkMode = 0

    Text7.LinkMode = 0

    Text8.LinkMode = 0

    Text9.LinkMode = 0

    Text10.LinkMode = 0

    Text11.LinkMode = 0

    Text12.LinkMode = 0

    Text13.LinkMode = 0

    Text14.LinkMode = 0

    Text15.LinkMode = 0

   

End Sub

 

 

Private Sub Timer1_Timer()

 

    Dim intYear As Integer, intMonth As Integer, intDay As Integer

    Dim intHour As Integer, intMin As Integer, intSec As Integer

    Dim vntDate As Variant, dblMjd As Double, lngDate As Long, lngSec As Long

 

 

'テキストボックスに値を取得します。

'データを取得する LinkRequest は必要なテキストボックスに対して行います。

'この例ではすべてのテキストボックスについて、1秒ごとに要求しています。

'要求の間隔は、Timer1 のプロパティーで設定しています。

'データはCalsat32のテキストボックスから、このプログラムのテキストボックスに取り込まれます。

'テキストボックスの表示が不要であれば、プロパティーの Visible を False にします。

   

    Text1.LinkRequest   '衛星名

    Text2.LinkRequest   'MJD(日付と時刻)

    Text3.LinkRequest   '方位角(deg)

    Text4.LinkRequest   '方位角(deg)

    Text5.LinkRequest   '仰角(deg)

    Text6.LinkRequest   '距離変化(m/s)

    Text7.LinkRequest   'MA

    Text8.LinkRequest   '周回番号

    Text9.LinkRequest   'X座標(m)

    Text10.LinkRequest  'Y座標(m)

    Text11.LinkRequest  'Z座標(m)

    Text12.LinkRequest  '太陽の方位角(deg)

    Text13.LinkRequest  '太陽の仰角(deg)

    Text14.LinkRequest  '月の方位角(deg)

    Text15.LinkRequest  '月の仰角(deg)

 

'以下の部分は取得したデータの応用例です。

'必要に応じて、Val関数などで数値に変換して計算に使います。

'取得したデータを表示(方位と仰角)

 

    lblAz.Caption = Format(Val(Text3.Text), "####.0")

    lblEl.Caption = Format(Val(Text4.Text), "####.0")

 

 

'MJDの整数部を年月日に変換

    dblMjd = Val(Text2.Text)

    lngDate = Int(dblMjd) - 15018#

    vntDate = lngDate

    intYear = Year(vntDate)

    intMonth = Month(vntDate)

    intDay = Day(vntDate)

 

'MJDの小数部を時刻に変換

    lngSec = (dblMjd - Int(dblMjd)) * 86400#

    intHour = Int(lngSec / 3600#)

    lngSec = lngSec - intHour * 3600#

    intMin = Int(lngSec / 60#)

    intSec = lngSec - intMin * 60#

   

 '日時を表示します。

    txtDateTime.Text = Format(intYear, "####") & "/" & Format(intMonth, "0#") & "/" & Format(intDay, "0#") & "  " & Format(intHour, "0#") & ":" & Format(intMin, "0#") & ":" & Format(intSec, "0#") & "(UTC)"

 

End Sub

 

 

 DDE基本的な考え方は、ソース(CALSAT32テキストボックスディスティネーション(外部プログラムソースに対応する形でもうけられたテキストボックスリンクして LinkRequest コマンドを実行したときに値が同期します。

 

  外部プログラムが参照した値を使うには、Val関数で数値に変換した後に、演算処理を行うことになります。

 

  また、馴染みの少ないMJDと呼ばれる日付と時刻を表す数値については、1日毎に1づつ数が増加する通算日で、少数点以下が0の時がUTCの0時になります。

応用としては、

 

 ・衛星、太陽、月の方位仰角データを利用したアンテナの自動制御

 ・距離変化から任意の周波数でドップラーシフトを求めてリグコントロール

 ・XYZ座標から衛星位置の2次元、3次元表示

 

 などはすぐに思いつくところですが、ご活用いただければと思います。