ハムログから周波数データを読取ってUSB-IOを使いアンテナを自動で切り替える部分のプログラムをコーディングし動作させてみた。プログラムはタイマーを使って周期的にハムログから周波数を読み取りし、読取周波数値でもって、SELECT CASE文でUSB-IO出力を制御するだけのプログラムです。主要部分を下記します。
----------------------------------------------------------------------------------------------
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click

cdat = Trim(Str(NumericUpDown7.Value)) 'ニューメリックアップダウン値取得 106で周波数
ndat = ""
'addrtnDataToHamlog(115, ndat)
Hwnd1 = FindWindow("TThwin", vbNullString)
If Hwnd1 < 1 Then
Exit Sub

End If
cmmd = cdat
cds.dwData = cmmd
cbuff = vbNullString
cds.cbData = 0

Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, Me.Handle, cds)
If Not Hwnd2.Equals(IntPtr.Zero) Then
SetForegroundWindow(Hwnd2)
End If

Timer1.Interval = 1000  'タイマー間隔を1秒に設定
Timer1.Enabled = True  ’タイマー1を開始
End Sub
----------------------------------------------------------------------------------------------
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_COPYDATA Then
Dim cds As COPYDATASTRUCT
cds = CType(Marshal.PtrToStructure(m.LParam, GetType(COPYDATASTRUCT)), COPYDATASTRUCT)
'TextBox1.Text = Marshal.PtrToStringAnsi(cds.lpData) ’動作しなかったセンテンス
TextBox1.Text = (cds.lpData) ’これで動作OKでした。
'2010jul14 add
Label11.Text = (cds.lpData)
AutoRLcont = Val(cds.lpData) 'AutoRLcont変数はModule1でpublicで変数宣言します。
Else
MyBase.WndProc(m)
End If
End Sub
----------------------------------------------------------------------------------------------
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
AutoRLcont = 0
Button9_Click(sender, e) ’ボタン9を押した状態をプログラムから行います。
Select Case AutoRLcont
Case 0.1 To 3.555
Dim inRet As Boolean
intDat(0) = Val("&H" + "B")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 3.551 To 3.575
Dim inRet As Boolean
intDat(0) = Val("&H" + "C")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 3.576 To 3.764
Dim inRet As Boolean
intDat(0) = Val("&H" + "9")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 3.765 To 4.999
Dim inRet As Boolean
intDat(0) = Val("&H" + "8")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 5.0 To 7.099 '730v-1
Dim inRet As Boolean
intDat(0) = Val("&H" + "F")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 7.1 To 7.199 '730v-1 +high
Dim inRet As Boolean
intDat(0) = Val("&H" + "E")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
Case 7.2 To 29.999
Dim inRet As Boolean
intDat(0) = Val("&H" + "F")
inRet = USBIO.uio_out(1, intDat(0), 0) 'L
End Select

End Sub
----------------------------------------------------------------------------------------------
ボタン9がHAMLOG読取ボタンです。周波数コマンドをニューメリックアップダウンより106を設定してからHAMLOG読取ボタンを押すとタイマー1が呼ばれます。Overrides Sub WndProcで変数のAutoRLcontに周波数の読み値が入ります。この変数をPublic変数化しておきタイマー1内のAutoRLcont読み出しで、SELECT CASEの各周波数範囲での分岐でUSB-IOへ該当するアンテナ設定出力を行います。
無線機のダイヤルを範囲の境界あたりで行ったりきたりさせるとUSB-IOの出力が設定範囲に合わせて切り替わります。また、無線機のバンドSWを押すことでも切り替わりが確認できます。
プログラムは概略動作するようになりました。当初のボタンを押してハムログ入力と無線機へ周波数を設定する部分は使わなくても良くなりました。やはりシンプルなHAMLOGと無線機のRS-232C接続のみでハムログ上の読み取った周波数データをプログラムで読み込む方法が良いようです。後はいらないボタンやニューメリックアップダウンをはずしプログラムを書き直したいと思います。ただハムログでの周波数読取を行わないときの無線機へのプログラムからの周波数設定の方法も捨てがたいので、周波数設定部分のみ追加し、別プログラムとして残したいと思います。あとはハード(アンテナ切り替えボックス)の作製がのこっていますので、おいおい半田ゴテを握ることになりそうです。
ふと思ったのですが、以前FT-1000MPの周波数読取とSメータ読取、およびモード設定、フィルター設定などを行うプログラムを作ってあるので、これでもアンテナ切り替え部とハムログへの周波数データ送出をつけることで利用することが出来ると思ったので、あとで試してみようと思う。つづく