locked
FAQs: 如何实现串行COM端口通信?_ RRS feed

答案

  • 你可以使用SerialPort类来实现串行COM端口通信。它描述了一个端口资源。此类提供了同步和事件驱动I/Opin和中断状态入口,串行驱动属性入口。我们可以通过使用此类来控制一个串行端口文件资源。

     

    代码示例: 从串行端口接收数据并在UI控件上显示出来。

    先决条件: 窗体Form1上的串行端口SerialPort1和文本框TextBox1

     

    Public Class Form1

     

        Dim inputData As String = ""

        Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler

     

        Private Sub Form1_Load(ByVal sender As System.Object, _

                       ByVal e As System.EventArgs) Handles MyBase.Load

            '为某些属性设定值

            SerialPort1.PortName = "COM1"

            SerialPort1.BaudRate = 9600

            SerialPort1.Parity = IO.Ports.Parity.None

            SerialPort1.DataBits = 8

            SerialPort1.StopBits = IO.Ports.StopBits.One

            SerialPort1.Handshake = IO.Ports.Handshake.None

            SerialPort1.RtsEnable = True

     

            ' 打开串行端口

            SerialPort1.Open()

     

            '给串行端口输出了写入数据

            If SerialPort1.IsOpen = True Then

                SerialPort1.Write("MicroCommand")

            End If

        End Sub

     

        ' 从串行端口接收数据

        Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, _

                          ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _

                          Handles SerialPort1.DataReceived

            inputData = SerialPort1.ReadExisting '或者 SerialPort1.ReadLine

            Me.Invoke(New EventHandler(AddressOf DoUpdate))

        End Sub

     

        '将接收到的数据在UI控件上显示出来然后做些其它操作

        Public Sub DoUpdate()

            TextBox1.Text = TextBox1.Text & inputData

        End Sub

     

        Private Sub Form1_FormClosed(ByVal sender As System.Object, _

                       ByVal e As System.Windows.Forms.FormClosedEventArgs) _

                       Handles MyBase.FormClosed

            '关闭串行端口

            SerialPort1.Close()

        End Sub

    End Class

     

    注意:
    http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.datareceived.aspx
    当从SerialPort对象接收到数据时DataReceived事件在一个二级线程上被触发。由于这个事件是在二级线程上触发,而不是在主线程上,如果尝试在主线程修改一些元素,比如UI元素,则会产生线程异常。如果必须在主窗体或控件中修改元素,使用Invoke回发修改请求,这将会在合适的线程上生效

    System.IO.Ports.SerialPort类成员 (属性,方法,事件,等.)
    http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport_members.aspx

     

    详细指导见下篇:

    http://www.innovatic.dk/knowledg/SerialCOM/SerialCOM.htm

     

    包含代码示例的相关帖子:

    http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/c9fef85f-949f-4f5f-8639-26205607fbce/

    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/62ddb9a4-fe79-43bd-b43e-de2af7aeb039

    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/479ba2a6-10a7-47a1-baa2-ed0a4d837354/

     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年3月2日 12:01