zoukankan      html  css  js  c++  java
  • C#串口通信程序详解

    C#串口通信程序详解

    摘要:创建C#串口通信程序需要注意什么呢?创建C#串口通信程序的步骤是什么?那么本文就向你详细介绍创建C#串口通信程序集体的内容。

         在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。创建C#串口通信程序的具体实现是如何的呢?让我们开始吧:

    创建C#串口通信程序之命名空间

          System.IO.Ports命名空间中最重用的是SerialPort 类。

    创建C#串口通信程序之创建SerialPort 对象

         通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。

         我们将要用到的SerialPort 类的方法:

    •      ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL
    •      WriteLine(string):写入输出缓冲
    •      Open():打开一个新的串口连接
    •      Close():关闭
    //create a Serial Port object  
    SerialPort sp = new SerialPort (); 

    默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置:

    •      BaudRate:串口的波特率
    •      StopBits:每个字节的停止位数量
    •      ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒

    还有不少其它公共属性,自己查阅MSDN。

    创建C#串口通信程序之串口的硬件知识

          在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样的波特率和数据位数。

    创建C#串口通信程序之无猫模式

          没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。

    创建C#串口通信程序示例程序

          如果想使用默认属性,按“Save Status”按钮,如果想改变属性按“Property”。设定好之后,可以通信了。

    主窗口的代码

    复制代码
    #region Using directives  
    
    using System;  
    using System.Collections.Generic;  
    using System.ComponentModel;  
    using System.Data;  
    using System.Drawing;  
    using System.Windows.Forms;  
    using System.IO.Ports;  
     
    #endregion  
    namespace Serialexpample
    {
        partial class Form1 : Form
        {
            //create instance of property page  
            //property page is used to set values for stop bits and  
            //baud rate  
            PropertyPage pp = new PropertyPage();
            //create an Serial Port object  
            SerialPort sp = new SerialPort();
            public Form1()
            {
                InitializeComponent();
            }
    
            private void propertyButton_Click(object sender, EventArgs e)
            {
                //show property dialog  
                pp.ShowDialog();
                propertyButton.Hide();
            }
    
            private void sendButton_Click(object sender, EventArgs e)
            {
                try
                {
                    //write line to serial port  
                    sp.WriteLine(textBox.Text);
                    //clear the text box  
                    textBox.Text = "";
                }
                catch (System.Exception ex)
                {
                    baudRatelLabel.Text = ex.Message;
                }
    
            }
    
            private void ReadButton_Click(object sender, EventArgs e)
            {
                try
                {
                    //clear the text box  
                    textBox.Text = "";
                    //read serial port and displayed the data in text box  
                    textBox.Text = sp.ReadLine();
                }
                catch (System.Exception ex)
                {
                    baudRatelLabel.Text = ex.Message;
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                MessageBox.Show("Do u want to Close the App");
                sp.Close();
            }
    
            private void startCommButton_Click(object sender, EventArgs e)
            {
                startCommButton.Hide();
                sendButton.Show();
                readButton.Show();
                textBox.Show();
            }
    
            //when we want to save the status(value)  
            private void saveStatusButton_Click_1(object sender, EventArgs e)
            {
                //display values  
                //if no property is set the default values  
                if (pp.bRate == "" && pp.sBits == "")
                {
                    dataBitLabel.Text = "BaudRate = " +
                     sp.BaudRate.ToString();
                    readTimeOutLabel.Text = "StopBits = " +
                    sp.StopBits.ToString();
                }
                else
                {
                    dataBitLabel.Text = "BaudRate = " +
                     pp.bRate;
                    readTimeOutLabel.Text = "StopBits = " + pp.sBits;
                }  //创建C#串口通信程序
    
                parityLabel.Text = "DataBits = " +
                 sp.DataBits.ToString();
                stopBitLabel.Text = "Parity = " +
                 sp.Parity.ToString();
                readTimeOutLabel.Text = "ReadTimeout = " +
                  sp.ReadTimeout.ToString();
    
                if (propertyButton.Visible == true)
                    propertyButton.Hide();
                saveStatusButton.Hide();
                startCommButton.Show();
    
                try
                {
                    //open serial port  
                    sp.Open();
                    //set read time out to 500 ms  
                    sp.ReadTimeout = 500;
                }
                catch (System.Exception ex)
                {
                    baudRatelLabel.Text = ex.Message;
                }
            }
        }
    }
    复制代码

    创建C#串口通信程序之属性设置对话框代码:

    复制代码
    #region Using directives  
    using System;  
    using System.Collections.Generic;  
    using System.ComponentModel;  
    using System.Data;  
    using System.Drawing;  
    using System.Text;  
    using System.Windows.Forms;  
     
    #endregion  
    namespace Serialexpample
    {
        partial class PropertyPage : Form
        {
            //variables for storing values of baud rate and stop bits  
            private string baudR = "";
            private string stopB = "";
    
            //property for setting and getting baud rate and stop bits  
            public string bRate
            {
                get
                {
                    return baudR;
                }
                set
                {
                    baudR = value;
                }
            }
    
            public string sBits
            {
                get
                {
                    return stopB;
                }
                set
                {
                    stopB = value;
                }
            }
    
            public PropertyPage()
            {
                InitializeComponent();
            }
    
            private void cancelButton_Click(object sender, EventArgs e)
            {
                this.bRate = "";
                this.sBits = "";
                //close form  
                this.Close();
            }
    
            private void okButton_Click_1(object sender, EventArgs e)
            {
                //here we set the value for stop bits and baud rate.  
                this.bRate = BaudRateComboBox.Text;
                this.sBits = stopBitComboBox.Text;
                //  
                this.Close();
            }
        }
    }
    复制代码

            C#串口通信程序创建的相关内容就向你介绍到这里,希望对你了解创建C#串口通信程序的步骤和需要注意的事宜。

     
     
     
    标签: 串口
  • 相关阅读:
    训练总结
    图论--最短路--SPFA模板(能过题,真没错的模板)
    图论--最短路-- Dijkstra模板(目前见到的最好用的)
    The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)
    关于RMQ问题的四种解法
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 D Carneginon
    ZOJ 3607 Lazier Salesgirl (枚举)
    ZOJ 3605 Find the Marble(dp)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3453125.html
Copyright © 2011-2022 走看看