1

私のセットアップ:

  1. USBを使用してPCに接続されたFTDI FT2232Dチップを使用するハードウェアデバイス。
  2. USB経由で接続されたFTDIチップをWindowsのCOMポートとして表示するVCP(仮想COMポート)ドライバーをインストールしました。
  3. シンプルな 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
4

1 に答える 1