シリアル通信ソフトを制作する最初の関門は、送受信がスムースにできるコードを確定することです。まずツールボックスからSirialPortを Form にドラッグし、そのプロパティに所定のCOMチャンネル、ボーレート(38400)、ストップビット(TWO)を設定します。次に送信のコードは以下のようになります。
-----------------------------------------------------------------------------------------------------
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 =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 ' 例えばFA;を送信した場合
End sub
-------------------------------------------------------------------------
以上のコードで FA; を送信し無事 TextBox1 に周波数を受信することができました。次に周波数を連続して受信するコードを試してみました。
-------------------------------------------
Fstart:? ? '周波数の連続受信
TextBox1.Clear()
RcvTextBox.Clear()
CommandStrings = "FA;"
SerialPort1.WriteLine(CommandStrings)
GoTo Fstart
-------------------------------------------
ところがこれが全然動きません。つまり単発の送信はできても連続すると動かない、ということです。そこで試行錯誤を行った結果次のような対策で可能になりました。
・FTdx10のタイムアウトタイマーをデフォルトの10msecに戻す。
・次の位置に遅延時間要素を挿入する。
----------------------------------------------------------------------
Fstart:? ? '周波数の連続受信
TextBox1.Clear()
RcvTextBox.Clear()