私のセットアップ:
- USBを使用してPCに接続されたFTDI FT2232Dチップを使用するハードウェアデバイス。
- USB経由で接続されたFTDIチップをWindowsのCOMポートとして表示するVCP(仮想COMポート)ドライバーをインストールしました。
- シンプルな VB.net プログラムを使用して COM ポートを読み取っています。
行動:
realterm を使用して COM ポート経由でデバイスにデータを送信すると、デバイスは常に正常に応答します。
VB.net テスト プログラムを使用してから realterm を使用すると、tx は機能しますが、realterm は応答を受け取りません。
USBを取り外し、再接続してからコマンドを再送信することで、realtermにデータを再度受信させることができます。
vb.net プログラムを使用している場合、USB を取り外して再接続しても問題は解決しません。私の vb.net プログラムは時々動作しますが、常に動作するとは限りません。
私のプログラムの何かが原因で com ポートが壊れているようです。それを修正する唯一の方法は、USB ケーブルを抜いて再度差し込むことです。
私のコードは次のようになります。
Public Class SerialConnection
Private MSerialPort As SerialPort
Private Const StartByte As Byte = &H5B
Public Sub New(ByVal Port As String)
MSerialPort = New SerialPort()
MSerialPort.PortName = Port
MSerialPort.BaudRate = 9600
MSerialPort.ReadTimeout = 5000
MSerialPort.WriteTimeout = 5000
MSerialPort.Open()
End Sub
Public Function SerialPacketTransaction()
Dim SendPacketBytes = New List(Of Byte)
Dim ReceivePacketBytes As List(Of Byte)
MSerialPort.DiscardInBuffer()
MSerialPort.DiscardOutBuffer()
SendPacketBytes.Add(StartByte)
MSerialPort.Write(SendPacketBytes.ToArray, 0, SendPacketBytes.Count)
Dim TimeoutTime As DateTime = Now().AddMilliseconds(MSerialPort.ReadTimeout)
Dim readbyte As Byte
Do
If Now() > TimeoutTime Then Throw New TimeoutException("Timeout waiting for response")
Thread.Sleep(50)
readbyte = ReadSerialByte()
Loop Until (readbyte = StartByte)
End Sub
End Class