zoukankan      html  css  js  c++  java
  • 转:C#串口编程

    本文用来简单介绍一下C#串口编程的知识,主要以实例为内容。

    凡是串口设备和计算机交互的时候都用到串口,在C#中我们如何来操作串口呢?

    大话串口工作原理

    实际串口是用来和外部设备进行交换数据的,我抽象出下面一个图形,来简单解释一下串口的原理。

    上图表示一个COM口,可以往外传输数据流,也可以往里传输数据流,我们如果想获得传入的数据流只需要监听往计算机的数据流即可。

    虚拟串口软件

    当我们没有设备时我们可以用虚拟串口软件来模拟串口操作。下面我来介绍一款软件 VSPM 虚拟串口软件。大家可以去天空软件站下载,地址请点击我。

    下载下来安装成功后如下图所示:

    然后你就点击添加端口,我上图中的COM2和COM3就是VSDM添加的,这个时候你把COM2和Com3看做是一个真实的串口,然后用两个软件连接,就相当于一个串口了,我用一个串口测试器和我们自己编写的软件进行测试:

    如下图所示,我们的串口测试器已经连接到COM3上了,

    监听串口程序

    直接上代码,在控制台程序中添加如下源码就可以直接运行了:

    using System;
    using System.IO.Ports;
    using System.Text;
    namespace PortDataReceived
    {
        class PortDataReceived
        {
            public static void Main()
            {
                SerialPort mySerialPort = new SerialPort("COM2");
                mySerialPort.BaudRate = 9600;
                mySerialPort.Parity = Parity.None;
                mySerialPort.StopBits = StopBits.One;
                mySerialPort.DataBits = 8;
                mySerialPort.Handshake = Handshake.None;
                mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
                mySerialPort.Open(); 
                Console.WriteLine("Press any key to continue..."); 
                Console.WriteLine(); 
                Console.ReadKey(); 
                mySerialPort.Close();
            }
    
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console.WriteLine("Data Received:"); Console.Write(StrToHex(indata));
            }
    
            public static string StrToHex(string mStr) //返回处理后的十六进制字符串          
            {
                return BitConverter.ToString(ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");
            }
        }
    }

    运行结果如下图:

    数据完全正确,发出的数据和接受的数据都一样,而且此时VSDM的界面有简单变化:

    总结:本文写了一个用虚拟串口软件编写的C#串口编程实例。希望对大家有帮助。

    除非注明,木杉博客文章均为原创并采用BY-NC-SA协议进行授权原创文章,转载请注明: 转载自木杉博客

  • 相关阅读:
    第 15 章 标签页和工具提示插件
    第 14 章 下拉菜单和滚动监听插件
    第 13 章 模态框插件
    第 12 章 列表组面板和嵌入组件
    第 11 章 进度条媒体对象和 Well 组件
    第 10 章 巨幕页头缩略图和警告框组件
    第 9 章 路径分页标签和徽章组件
    lock()与lockInterruptibly()的区别
    MySQL中Innodb的聚簇索引和非聚簇索引
    MySQL使用可重复读作为默认隔离级别的原因
  • 原文地址:https://www.cnblogs.com/lusunqing/p/3449594.html
Copyright © 2011-2022 走看看