Связь с последовательным устройством через COM-порт дает нечитаемые символы в VB - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь установить связь с автоматическим анализатором CBC, который отправляет данные через последовательный порт RS232.Это настройки устройства

введите описание изображения здесь

Я подключаю его к порту com4 с помощью адаптера последовательного интерфейса к usb

ON COM4 порт IЯ использую следующий код VB для чтения поступающих данных.

Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel


Public Class ComReadWrite
    Dim myPorts As Array
    Dim txtline As String
    Dim txtchar As String
    Dim txtbyte As String
    Dim txtexisting As String
    Delegate Sub setTextCallBack(ByVal txt As String)


    Private Sub ComReadWrite_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        myPorts = IO.Ports.SerialPort.GetPortNames()
        portnamecombo.Items.AddRange(myPorts)
        WriteButton.Enabled = False
        CloseButton.Enabled = False

    End Sub

    Private Sub Start_Click(sender As Object, e As EventArgs) Handles Start.Click
        SerialPort1.PortName = portnamecombo.Text
        SerialPort1.BaudRate = BaudRateBox.Text
        SerialPort1.ReadTimeout = 500

        SerialPort1.Parity = Parity.None
        SerialPort1.DataBits = 8
        SerialPort1.StopBits = StopBits.One

        SerialPort1.Open()

        Start.Enabled = False
        WriteButton.Enabled = True
        CloseButton.Enabled = True


    End Sub

    Private Sub WriteButton_Click(sender As Object, e As EventArgs) Handles WriteButton.Click
        SerialPort1.Write(WriteBox.Text)
    End Sub

    Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
        SerialPort1.Close()
        Start.Enabled = True
        WriteButton.Enabled = False
        CloseButton.Enabled = False
    End Sub

    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        RecievedText(SerialPort1.ReadExisting())

    End Sub

    Private Sub RecievedText(ByVal txt As String)
        If Me.ReadBox.InvokeRequired Then
            Dim x As New setTextCallBack(AddressOf RecievedText)
            Me.Invoke(x, New Object() {(txt)})
        Else

            Me.ReadBox.Text &= txt

        End If
    End Sub


    Private Sub portnamecombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles portnamecombo.SelectedIndexChanged

    End Sub

    Private Sub Label5_Click(sender As Object, e As EventArgs)

    End Sub

    Private Sub BindingSource1_CurrentChanged(sender As Object, e As EventArgs) Handles BindingSource1.CurrentChanged

    End Sub
End Class

При запуске программы форма читает только странные нечитаемые символы, такие как OOOOOOOO, но не любую читаемую вещь, как показано на рис.

показывает только странные символы

Документация, поставляемая с устройством, имеет следующие страницы, которые, по-видимому, актуальны.

page1

page2

1 Ответ

0 голосов
/ 01 октября 2018

Нам нужно сообщить команды в коде ASCII.Enq - это Chr (5), ack - это Chr (6).Это были нечитаемые персонажи.

Эй, спасибо сообществу переполнения стека за помощь.Я нашел решение, которое заключается в следующем:

Предполагается, что машина сообщает enq, на какой хост должен отвечать ack.Но когда я читаю последовательный порт, кажется, что машина отправляет нечитаемый символ.

Что ж, enq равен ASCII-коду 5, с которым не связано ни одного символа, поэтому это нечитаемый символ.Поэтому, если вместо serialport1.readexisting () я пишу serialport1.readchar (), я получаю, что машина говорит 5. То есть машина фактически отправляет enq.

Теперь нам нужно отправить значение ASCII которого6

Если я скажу serialport1.write ('6'), это не получится.То, что будет работать, это serialport1.write (Chr (6))

И, используя это, я получил машину для отправки данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...