jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

2010年07月

730V-1バンドコントローラープログラミング その7

ハムログから周波数データを読取って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メータ読取、およびモード設定、フィルター設定などを行うプログラムを作ってあるので、これでもアンテナ切り替え部とハムログへの周波数データ送出をつけることで利用することが出来ると思ったので、あとで試してみようと思う。つづく

730V-1バンドコントローラープログラミング その6

イメージ 1

ハムログと無線機をRS-232Cでつなぎ、周波数を読み込みした状態でのパソコン上のハムログ入力[A]からVbnet2008Expressプログラムでタイマーを使いタイマー周期1秒間隔で読取を行ってみたところすんなりと読取がうまくいった。このときのハムログの設定はリグ接続設定で、タイマーコマンドは4の設定です。プログラム上のタイマー間隔設定は Timer1.Interval=1000 で1秒にしました。特にハムログが無線機との周波数読取り中でのこのプログラムとのバッテングも無いようである。無線機の周波数ダイアルをいろいろと回してみたが、全くエラーが起きないようです。当初必要と思っていた様なアイデアも使わなくてもよさそうです。一応うまく行ったので、次は読取の周波数データをもとに周波数の範囲ごとにリレーをコントロールするプログラムを組んでゆきます。以下のように切り替えの周波数仕様を決めてみました。

730V-1オリジナル  :5.000MHz~7.099MHz
              および7.201MHz~29.999MHz
7M-HIGH      :7.100MHz~7.200MHz
3.5M-NORMAL  :0.100MHz~3.550MHz
3.5M-HIGH    :3.551MHz~3.575MHz
3.7M-NORMAL  :3.576MHz~3.764MHz
3.7M-HIGH    :3.765MHz~4.999MHz

周波数の下限と上限は無線機で0.100MHz、および29.999MHzですので無線機のバンドSWで選んでも必ず上記区分けのどれかのアンテナがつながります。基本的に730V-1オリジナルで通常の7.100MHz以上のバンドSWがすべて対応なります。使用できるかは別です。
また、このプログラムは730V-1のみの切り替えで他のアンテナがある場合は、使えませんので、新たに730Vー1と他のアンテナの切り替え回路も別途追加をしたいと思います。実際バーチカルと、2ELのHB9CVと5ELを想定してます。この切り替えにはUSB-IOの残りのポート0が8ポートあるので、これを使うリレー制御か、またはアナログSWで切り替えるリレー制御のどちらかで行いたいと思います。730V-1時以外は周波数読取でのアンテナ制御は今はありません。実はバーチカルが3バンド対応(1.8MHz、3.5MHz、7MHzリレー切り替え12V制御線3本)なのでバーチカル時もプログラム制御可能となっていますのでいづれ組み込みたいと思います。つづく

730V-1バンドコントローラープログラミング その5

風呂に入って汗をながして、すっきりしたらHAMLOGのデータの読み取りを使うアイデアが浮かんだので書いています。当初は無線機との接続はHAMLOGと接続しないでのプログラム制御によるRS-232Cでの無線機への周波数設定を仕様としていましたが、このHAMLOGデータの読み取りを使うことで、従来の無線機とHAMLOGのCAT接続(YAESU無線機のシリアル制御)でHAMLOGに表示される周波数をプログラム上のタイマー機能で周期的にHAMLOGから読み取ることで、アンテナの切り替えをすることができるのではないかとふと思った。ただ、無線機のダイヤルを回していて周波数が動いている場合のHAMLOG入力フォーム[A]から周波数読み取りがタイミング的にうまくいくかどうかの問題も考えられる。だがやってみる価値はあると思う。無線機とハムログのCAT通信の周期とハムログから読み取るプログラムの周期の関係をどうするかがキーポイントであるのは間違いない。ただほかの方法として、読み込みの仕方で回避することを少し考えてみた。たとえば1回めと2回目の読み込みが同じ周波数であれば周波数が動いていないと言うことで、ダイヤルがとまったと判断しハムログ周波数確定とする方法が取れると思う。プログラム上はどのようになるかはまだ考えてはいないが、できそうな気がする。後ほどいろいろと実験してみたいと思う。つづく

730V-1バンドコントローラープログラミング その4

イメージ 1

パソコンのプログラムデバッグのついでにHAMLOGデータの読み取りをプログラムしてみた。既にJA2BQX 太田OMが資料として公開しているソースリストを参考利用させていただきました。プログラム上は、読み取りコマンドをニューメリックアップダウンより選択すると、項目がテキストボックスに表示されます。このコマンド番号(101から117まで)を設定した後、HAMLOG読取ボタンで開いているHAMLOGの入力フォーム[A]の各対応するデータが読み込まれます。コマンドの番号に対応する内容は、JG1MOU浜田 OMの資料HamlogMs.TXTを参考にしています。
現在表示するテキストボックスは1つですので、ハムログの各データを別々のテキストボックスに入れるには少し工夫がいると思われます。アイデアとしては、現状のテキストボックスの部分にコマンドの番号を引数に割り当てて引数によりSelectCaseでそれぞれ対応表示するテキストボックスに表示させる方法で可能となると思います。つまりコマンド値を引数としたファンクションにしてしまえば可能だと思います。現在は使い道はあまり考えていませんが、いろいろと応用等を考えてみたいと思います。
つづく

730V-1バンドコントローラープログラミング その3

プログラムのバグが見つかったので、対処した。まずは訂正済みの部分を載せます。
'時間処理(3)-------------------------------------------
Dim JTIME As String
JTIME = "J"
Dim kakotime As String

Dim imajikan As String
Dim lenimajikan As Integer
lenimajikan = Len(Trim(TimeOfDay))
If lenimajikan = 7 Then
kakotime = "0" & TimeOfDay
imajikan = Mid(kakotime, 1, lenimajikan - 2) & JTIME
Else
kakotime = TimeOfDay
imajikan = Mid(kakotime, 1, lenimajikan - 3) & JTIME
End If
' imajikan = Mid(kakotime, 1, lenimajikan - 3) & JTIME
Debug.WriteLine(imajikan)
ndat = imajikan
addrtnDataToHamlog(3, ndat) 'TIMEをリターン

'コールサイン欄へリターンなしでフォーカス(0)------------
sendingDataToHamlog(0, "") 'リターンせずにCALL欄へフォーカス
内容)---------------------------------------------------------------------------------------
ハムログに送る時間データ TimeOfDay の加工中のバグで23時から24時に変わったときの文字長が異なる為以下のセンテンスだけでは対応できない。
imajikan=mid(kakotime,1,lenimajikan-2 ) & JTIME
よって7文字と8文字の場合それぞれの場合にそれぞれ処理をつけて対応としました。
今日は、ハムログからのデータ読み取りを少し確認してみたいと思います。内容は別途書きたいと思います。つづく
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
  • ライブドアブログ