如何在串行端口

时间:2017-07-19 03:42:16

标签: vb.net

我是使用Visual Basic的新手,刚开始使用该语言进行编码。 从简单的编码,我想尝试一些有点复杂的东西,如通过串口通信发送和接收数据。我能够通过很多关于它的教程并尝试使用这段代码:

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

Public Class Form1

    Dim myPort As Array
    Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiving of data

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        myPort = IO.Ports.SerialPort.GetPortNames()
        ComboBox1.Items.AddRange(myPort)

        Button2.Enabled = False

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        SerialPort1.PortName = ComboBox1.Text
        SerialPort1.BaudRate = ComboBox2.Text
        SerialPort1.Open()

        Button1.Enabled = False
        Button2.Enabled = True
        Button3.Enabled = True

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        SerialPort1.Write(RichTextBox1.Text & vbCr) 'concatenate with \n

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        SerialPort1.Close()
        Button1.Enabled = True
        Button2.Enabled = False
        Button3.Enabled = False
    End Sub

    Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
        If Me.RichTextBox2.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})
        Else
            Me.RichTextBox2.Text &= [text] 'append text
        End If
    End Sub

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

Button1指定用于打开端口,而Button2和Button3用于分别写入和关闭端口。 RichTextBox1是我可以写入要发送的数据的地方,RichTextBox2是显示接收数据的地方。现在我的问题是每当我点击按钮在端口上写入数据时都没有显示。我想问一下如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您不能在串行通信的同一端写入消息并阅读它。

如果你想“伪造”串口通讯,那么你的电脑会自行说话,你有2个解决方案:

  1. 使用一些nullmodem仿真器虚拟创建通过软件连接的COM端口对。像com0com这样的软件可以满足您的需求,但有时候开始时使用起来有点棘手。

  2. 另一种解决方案是在您的电脑上安装2个串口(带有USB 例如,适配器)并将发送端口的TRx引脚连接到RDx引脚 读取端口,以及发送端口的RDx引脚到TRx引脚 的阅读端口。所有其他引脚只有1比1.然后你也可以从一个端口读取并从另一个端口读取。

  3. 两种方法都是相同的,第一种是软件,第二种是物理方式。

    Here你还有另外一个问题,在那里你可以获得更多信息。谷歌“伪造串口”也应该有所帮助。