無線と熱帯魚とロードバイクと・・・


#アマチュア無線
#アクアリウム
#ロードバイク
#家庭

FTdx10 をCAT制御で便利に使う (その3) VB.NETによるCATコントロールソフトの開発

2024-07-11 14:29:51 | アマチュア無線

VB.NETでシリアル通信ソフトを制作する最初の関門は、送受信がスムースにできるコードを確定することです。まずツールボックスから SirialPortForm にドラッグし、そのプロパティに所定のCOMチャンネル、ボーレート、ストップビットを設定します。次に送信のコードは以下のようになります。

----------------------------------

'シリアルポートをオープンしていない場合、処理を行わない.

If SerialPort1.IsOpen = False Then 
            Return
End If
'送信するテキストは data 、ここでは VFO-A の周波数を読みに行く
Dim data As String
        data = "FA;"

 '送信するテキストがない場合、データ送信は行わない.

If String.IsNullOrEmpty(data) Then       
            Return
End If

Try             'シリアルポートからテキストを送信
            SerialPort1.WriteLine(data)          
End Try

これに対してもしポートにデータが入力された場合、これを読んで受信テキストを得ます。このコードはかなり厄介でベタコピがオススメ。

Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)Handles SerialPort1.DataReceived

 'シリアルポートをオープンしていない場合、処理を行わない.

 If SerialPort1.IsOpen = False Then   
            Return
 End If

 Try

'受信データを読み込む.
Dim data As String               
data = SerialPort1.ReadExisting()

 '受信したデータをテキストボックスに書き込む.
Dim args(0) As Object           
args(0) = data
Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), args)
        End Try

End Sub

-------------------------------------

Private Sub RcvDataToTextBox(ByVal data As String)

 RcvTextBox.AppendText(data)
 If CommandStrings = "FA;" Then  TextBox1.Text = data 

End sub

-------------------------------------------

以上のコードで FA; を送信し無事 TextBox1 に周波数を受信することができました。次に周波数を連続して受信するコードを試してみました。

-------------------------------------------

Fstart:        '周波数の連続受信
 TextBox1.Clear()
 RcvTextBox.Clear()

 CommandStrings = "FA;"
 SerialPort1.WriteLine(CommandStrings)

 GoTo Fstart

-------------------------------------------

ところがこれが全然動きません。つまり単発の送信はできても連続すると動かない、ということです。そこで試行錯誤を行った結果次のような対策で可能になりました。

・FTdx10のタイムアウトタイマーをデフォルトの10msecに戻す。

・次の位置に遅延時間要素を挿入する。

--------------------------------------

Fstart:          
  TextBox1.Clear()
  RcvTextBox.Clear()

 CommandStrings = "FA;"
 SerialPort1.WriteLine(CommandStrings)

' FUNCTION でループによる遅延時間要素を作成する、*はそのループ数(遅延時間)設定値

 DummyLoop(*)  

GoTo Fstart

----------------------------------------------

これで周波数の連続受信が可能になりましたが、この遅延時間の値が動かすPCの性能により変える必要があることが分かりました。例えばPCの動作速度が速い場合、この遅延時間を大きくする必要があります。しかしあまり大きくすると動作しなくなり、その幅はやってみなければ分からない、という状況です。



最新の画像もっと見る

コメントを投稿