65.9K
CodeProject 正在变化。 阅读更多。
Home

在 NET 2.0 中通过串口进行通信

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.36/5 (25投票s)

2007 年 1 月 17 日

CPOL

3分钟阅读

viewsIcon

282015

一个简单的“操作指南”,带您开始使用 .NET 2.0 中的串口通信

引言

几天前,我对自己说,我想了解更多关于如何通过串口进行通信的知识。 当我开始在互联网上搜索这个主题时,我发现很少有文章讨论这个主题,我发现的那些例子大多是关于早期的 VB6 MSComm 控件和该控件的包装器。 那些关于 MSComm 控件的事情不是很有趣,因为我读到在 .NET 2.0 中,微软推出了一个新的串口控件。

作为一个新手,我花了一些时间来完成我现在与您分享的内容,但正如你们都知道的那样,当你成功时,每一分钟都是值得的。 实际上,这样做并不难;它只有几行代码。

对于那些熟悉串口通信的人,我推荐 这篇文章 在 Code Project 上。 这是一篇关于通过串口与手机进行通信的优秀文章,而且当您首先了解基础知识时,它非常清晰。

本例的任务非常简单。 我们希望通过串口将一个文本字符串从一台计算机发送到另一台计算机。 首先,您必须准备好 2 台计算机,其次,您必须拥有一根“空调制解调器电缆”。 另一种选择是您在计算机上有 2 个串行端口,并将它们与“空调制解调器电缆”连接起来

如果您不知道什么是“空调制解调器电缆”,请在互联网上搜索以了解其配置方式。

首先,我们要写入串口,这是基本操作。

如果您有 2 台计算机,请将此内容放在第一台计算机上。 如果您有一台计算机,请将其设为单独的项目。

在本例中,您需要在您的计算机 nr1 的窗体上有一个名为 btnSendText 的 Button 控件和一个名为 txtSendText 的 textBox 控件。 只要在 btnSendText 控件中输入一些文本并单击“发送”按钮将其发送到 COM1。

Imports System
Imports System.IO.Ports

Public Class Form1
    Dim WithEvents Port As SerialPort = _
                 New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
    Private Sub btnSendText_Click(ByVal sender As System.Object, _
                  ByVal e As System.EventArgs) Handles btnSendText.Click
        Port.Open()
        Port.Write(txtSendText.Text & "!%")
        Port.Close()
    End Sub
End Class

这就是将文本字符串发送到串口的简单方法。

现在是如何在另一台计算机上接收文本字符串。

如果您有 2 台计算机,请将下一个示例放在第二台计算机上。 如果您有一台计算机,请将其设为单独的项目,然后同时运行这两个项目。

在本例中,您需要在计算机 nr2 的窗体上有一个名为 TextBox1 的 Text 控件和一个名为 ListBox1 的 listbox 控件。 当在计算机 nr1 上单击“发送”时,您将在计算机 nr 2 上的 textbox1 控件中接收它。 当缓冲区为 0 时,它将被添加到 Listbox1 控件中,并且 ListBox1 为空以接收下一个传入的文本字符串。

Imports System
Imports System.IO.Ports

Public Class Form1
    Dim WithEvents port As SerialPort = New _ 
     System.IO.Ports.SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
                           System.EventArgs) Handles Me.Load
       CheckForIllegalCrossThreadCalls = False
       If port.IsOpen = False Then port.Open()
    End Sub

    Private Sub port_DataReceived(ByVal sender As Object, ByVal e As _
       System.IO.Ports.SerialDataReceivedEventArgs) Handles port.DataReceived
       TextBox1.Text = (port.ReadTo("!%"))
       If port.ReadExisting.Length = 0 Then
           ListBox1.Items.Add(TextBox1.Text)
           TextBox1.Text = ""
       End If
    End Sub
End Class

要注意的重要一点是,您必须像这样声明端口“Dim WithEvents port ...

您还必须在窗体加载过程中声明“CheckForIllegalCrossThreadCalls = False”,以防止当创建控件的线程以外的线程尝试访问该控件的方法或属性时发生错误。 您还必须检查端口是否已打开,如果未打开,则必须打开它。

您可能已经看到,我在写入和读取语句中都有一些特殊字符。

port.Write(txtSendText.Text & "!%") and port.ReadTo("!%").

这是因为如果我在写入语句流中放置一些特殊字符,我可以要求 readTo 语句读取所有内容,直到特殊字符,这非常方便。 试一试。

串口通信还有很多其他选择,这只是其中之一。

我希望它能对某人有所帮助。

© . All rights reserved.