C#串口接收程序的实现

1.代码

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

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;

            serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            serialPort1.Encoding = Encoding.GetEncoding("GB2312");
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }

        /// /数据接收部分
        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)//接收函数

        {
            try
            {

                string recive_data;
                recive_data = serialPort1.ReadExisting();
                recive_data = returnData.ToString();
                textBox1.Text += recive_data;
                textBox1.AppendText("\r\n");
            }
            catch { }
        }

        /// //搜索串口部分
        private void button1_Click(object sender, EventArgs e)
        {
            SearchAnAddSerialToComboBox(serialPort1, comboBox1);
        }
        private void SearchAnAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox)//搜索串口函数
        { //将可用的串口号添加到ComboBox
            string[] NmberOfport = new string[20];//最多容纳20个,太多会卡,影响效率
            string MidString1;//中间数组,用于缓存
            MyBox.Items.Clear();//清空combobox的内容
            for (int i = 1; i < 20; i++)
            {
                try //核心是靠try和catch 完成遍历
                {
                    MidString1 = "COM" + i.ToString();  //把串口名字赋给MidString1
                    MyPort.PortName = MidString1;       //把MidString1赋给 MyPort.PortName
                    MyPort.Open();                      //如果失败,后面代码不执行??
                    NmberOfport[i - 1] = MidString1;    //依次把MidString1的字符赋给NmberOfport
                    MyBox.Items.Add(MidString1);        //打开成功,添加到下列列表
                    MyPort.Close();                     //关闭
                    MyBox.Text = NmberOfport[i - 1];    //显示最后扫描成功那个串口
                }
                catch { };
            }
        }

        /// 打开串口部分
        private void button2_Click(object sender, EventArgs e)
        {
            if (button2.Text == "打开串口")//为0时,表示关闭,此时可以进行打开操作
            {
                try
                {
                    serialPort1.PortName = comboBox1.Text;//获取端口号
                    serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);//设置波特率
                    //serialPort1.Parity = Parity.None;
                    //serialPort1.DataBits = 8;
                    //serialPort1.StopBits = StopBits.One;
                    serialPort1.Open();//打开串口

                    button2.Text = " 关闭串口";
                }
                catch
                {
                    MessageBox.Show("串口打开错误");
                }
            }
            else  //为1时,表示开启,此时可以进行关闭操作
            {
                try
                {
                    serialPort1.Close();//关闭串口
                    button2.Text = "打开串口";//置位为0,表示状态为关闭
                }
                catch { }
            }
        }
        /// <summary>
        /// /清空显示部分
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
        }
    }
}

2.工具

串口虚拟软件

串口软件,发送数据

3.效果

到此这篇关于C#串口接收程序的实现的文章就介绍到这了,更多相关C# 串口接收内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C# 串口接收数据中serialPort.close()死锁的实例

    最近在做一个有关高铁模拟仓显示系统的客户端程序,在这个程序中要运用串口serialPort传输数据,因为每次接收数据结束后要更新UI界面,所以就用到了的Invoke,将更新UI的程序代码封装到一个方法中,然后通过Incoke调用,程序跑起来没有任何问题,但是当你执行serialPort.close()是程序就会发生死锁,整个程序卡在那里动都动不了. 上网查了很多资料,有各种这样的说法,有的说定义一个接收数据的标志,如果在执行关闭程序是进行判断,如果数据接收完了就关闭串口,没有的话继续执行,但是经

  • C#串口接收程序的实现

    1.代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespac

  • C#串口通信程序实例详解

    创建C#串口通信程序之命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类. 创建C#串口通信程序之创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程. 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULLWriteLine(string):写入输出缓冲Open():打开一个新的串口连接Close():关闭 复制代码 代码如下: SerialP

  • Python3 串口接收与发送16进制数据包的实例

    如下所示: import serial import string import binascii s=serial.Serial('com4',9600) s.open() #接收 n=s.inwaiting() if n: data= str(binascii.b2a_hex(s.read(n)))[2:-1] print(data) #发送 d=bytes.fromhex('10 11 12 34 3f') s.write(d) s.close() 以上这篇Python3 串口接收与发送1

  • Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况. 因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分. 因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据. 本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快. 发送 void Widg

  • 使用Java实现串口通信

    1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9611343 效果图如下: 2.RXTXcomm Java串口通信依赖的jar包RXTXcomm.jar 下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9611334 内含32位与64位版本 使用方法: 拷贝 RXTXcomm.jar 到 JAVA_HO

  • 详细解读Java的串口编程

    常见问题 JavaComm 和 RxTX 安装时有一些与众不同的地方.强烈建议按照安装说明一点点的安装.如果安装说明要求一个jar文件或一个共享库必须在某一特定的文件夹下,那这就意味着需要严肃对待.如果说明要求一个特定的文件或设备需要拥有一个特定的所有权或访问权,这也意味着需要严肃处理.很多安装问题都只是因为没有按照安装说明要求的去做而引起的. 特别要注意的是一些版本的JavaComm会带有两个安装说明.一个用于java 1.2及以后的版本,一个用于java 1.1版本.使用错误的安装说明会导致

  • C# 实现简易的串口监视上位机功能附源码下载

    实现上位机和下位机之间的通信,通常使用的是串口通信,接下来实现一个通过上位机和串口调试助手来完成串口通信测试. 首先创建一个WInfrom窗体应用工程文件,创建过程可参考  https://www.jb51.net/article/150973.htm 在创建好的工程下面,通过工具箱中已有的控件完成界面的搭建,如下图所示,为了方便初学者容易看懂程序,下图将控件的命名一并标注出来: 直接进入正题,将完整的工程代码黏贴出来: using System; using System.Collection

  • .Net Core应用增强型跨平台串口类库CustomSerialPort()详解

    目录 摘要 引言 基础类库的选择 类库的实现 创建跨平台类库 实现机制/条件 .net core跨平台实现 主要代码 创建.net core控制台程序 类库地址 跨平台测试 Windows测试输出界面 ubuntu测试输出界面 源码地址 摘要 在使用SerialPort进行串口协议解析过程中,经常遇到接收单帧协议数据串口接收事件多次触发,协议解析麻烦的问题.针对此情况,基于开源跨平台串口类库SerialPortStrem进行了进一步封装,实现了一种接收超时响应事件机制,简化串口通讯的使用. 引言

  • .Net Core跨平台应用开发串口篇HelloArm

    目录 引言 硬件环境 硬件资源特性 支持的系统平台 系统平台 .NET Core支持的Linux版本 系统平台选择 连接嵌入式Linux系统 物理连接 串口连接 网络连接 .NET Core跨平台验证 验证程序设计 显示系统平台信息 串口资源列举 串口测试 跨平台发布 远程部署 Linux环境运行.Net Core程序 第三方串口类库 Linux串口类库编译 环境变量配置 Linux串口测试 配置程序开机运行 结束语 引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应

随机推荐