zoukankan      html  css  js  c++  java
  • c#学习笔记之串口通信【转】

    c#学习笔记之串口通信

    缘起:串口通信是一种常见的通信应用技术,无论是在工业控制还是生活上,很多场合都用到了串口通信。以前在vc下用MsComm控件对串口编程,到了c#下虽然同样可以注册该控件并使用,但既然是学习C#,就要用c#的方式对串口操作。

    准备:写串口程序当然要能调试串口,如果电脑上有两个串口,直接买根交叉线或自己直接接3根线就能调试了。我比较懒,懒得去买线,不过懒人有懒办法,在网上找了个虚拟串口工具,网上有位老兄提供了vspd虚拟串口破解版,很好用,感谢下这位老兄。见网址http://hi.baidu.com/lk3721/blog/item/17221befb259631efcfa3c54.html。下载解压后直接运行,点击add添加一对串口,在使用的时候要成对使用添加的串口。我的电脑上就是com3com4。最后再下一个串口通信调试助手。

    file>new>project,在如下界面中选择Windows Forms Application,在location处更改项目所在目录,点击ok 后确定。
    .NET 提供了串口通信的功能,其命名空间是System.IO.Ports。因此先添加代码
    using System.IO.Ports;
    往主窗口上添加一个button控件button_send,在属性处改名为发送,添加两个richtextbox控件richTextBox_senddatarichTextBox_receivedata


    初始化串口,这里为了简单在初始化的时候固化了串口的参数:
    private SerialPort MyCom = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
    双击发送按钮,添加事件
    复制内容到剪贴板
    代码:
    private void button_send_Click(object sender, EventArgs e)
    {
    string ssendstr = "";
    ssendstr = richTextBox_senddata.Text;
    MyCom.Write(ssendstr); //发送
    }
    添加接收数据事件:
    先将事件与事件处理程序关联
    MyCom.DataReceived += new SerialDataReceivedEventHandler(MyCom_DataReceived);
    在添加事件处理程序
    复制内容到剪贴板
    代码:

            public void MyCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                sdata = sdata+MyCom.ReadExisting().ToString();
                showdata(sdata);
            }
    添加显示数据方法
    复制内容到剪贴板
    代码:

           public void showdata(string sdata)
            {
                if (richTextBox_receivedata.InvokeRequired)
                {
                    MyInvoke _myInvoke = new MyInvoke(showdata);
                    this.Invoke(_myInvoke, new object[] { sdata });
                }
                else
                {
                        this.richTextBox_receivedata.Text = sdata;
                }
            }
    需要委托委托
    delegate void MyInvoke(string str);
    最后添加一个清空接收按钮button_clean,双击添加相应事件。
    复制内容到剪贴板
    代码:

            private void button_clean_Click(object sender, EventArgs e)
            {
                sdata = "";
                showdata(sdata);
            }
    至次一个简单的串口通信程序完成。由于程序固定为COM3,所以串口调试助手则应设为COM4(COM3和COM4为虚拟串口对)。

    完整代码:
    复制内容到剪贴板
    代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;

    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                MyCom.Open(); //打开串口
                MyCom.DataReceived += new SerialDataReceivedEventHandler(MyCom_DataReceived); //
            }

            //定义串口并初始化。串口选择com3,波特率9600,校验位无,数据位8位,停止位1位
            private SerialPort MyCom = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);

            delegate void MyInvoke(string str);
            

            string sdata = "" ;


            private void button_send_Click(object sender, EventArgs e)
            {
                string ssendstr = "";
                ssendstr = richTextBox_senddata.Text;
                MyCom.Write(ssendstr);
            }


            public void MyCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {

                sdata = sdata+MyCom.ReadExisting().ToString();

                showdata(sdata);

            }

            public void showdata(string sdata)
            {
                if (richTextBox_receivedata.InvokeRequired)
                {
                    MyInvoke _myInvoke = new MyInvoke(showdata);
                    this.Invoke(_myInvoke, new object[] { sdata });
                }
                else
                {
                        this.richTextBox_receivedata.Text = sdata;
                }
            }

            private void button_clean_Click(object sender, EventArgs e)
            {
                sdata = "";
                showdata(sdata);
            }

        }
    }
    该程序只是在功能上实现了串口通信,为了人性化灵活操作,应该把串口、波特率、校验位、数据位、停止位等参数都提到界面上来。

  • 相关阅读:
    QT下载速度慢的解决方法
    第七章 多态
    第六章 重复运用class
    第五章 隐藏实现细节
    代码改变世界
    第四章 初始化和清理
    第三章 控制程序流程
    module.exports和exports
    如何与外部源交互
    实现POST服务器
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1621379.html
Copyright © 2011-2022 走看看