精华内容
下载资源
问答
  • visual studio 2012 c# wpf 开发串口收发数据demo,仅供学习测试使用,已测,可正常收发数据
  • 耀华3190-A12+E型号电子秤,串口连接,winform读取通过串口读取重量;有两种模式:1、连续发送模式请使用代码中的方案2;2、指令模式请使用方案1;默认模式是指令模式(需要设置电子秤为指令模式,才可以使用清零、...
  • 此程序可以用来读取赛多利斯电子天平的称重读数,但程序中读数部分代码需要自行提取,属于电子天平读数的代码可参考https://mp.csdn.net/postedit/80812561
  • 非常适合新手学习的一款上位机,基本实现所需要的功能。代码简单明了
  • 为实验室项目做的小软件,串口通信模式能够接收数据采集卡的数据进行动态显示,U盘数据处理模式能够读取文件进行静态图形显示。
  • c#(winform)通过串口读取并解析数据

    千次阅读 多人点赞 2020-02-03 09:38:42
    在开发过程中,有时会遇到通过串口读取地磅等数据,但是在真实的环境测试也不方便,这时使用虚拟串口工具就显得非常方便了,虚拟出两个串口,一个模拟发送数据,一个模拟接收数据。 虚拟串口工具:Configure ...

    1、工具选择

    在开发过程中,有时会遇到通过串口读取地磅等数据,但是在真实的环境测试也不方便,这时使用虚拟串口工具就显得非常方便了,虚拟出两个串口,一个模拟发送数据,一个模拟接收数据。

    虚拟串口工具:Configure Virtual Serial Port Driver 

    串口调试工具:Serial Port Utility

    2、程序编写

    2.1 winform 中使用串口就需要在左侧工具箱里拖入一个serialPort,如下图所示

                                                    

    2.2 初始化串口

    public SerialPort serialPort;
    private bool Listening = false;//是否没有执行完invoke相关操作   
    private bool Closing = false;//是否正在关闭串口,执行Application.DoEvents,并阻止再次invoke   
    #region 初始化串口
            private void InitPort()
            {
                try
                {
                    serialPort1.PortName = "COM1";
                    serialPort1.BaudRate = 4800;
                    serialPort1.DataBits = 8;
                    serialPort1.Parity = Parity.None;
                    serialPort1.StopBits = StopBits.One;
                    serialPort1.WriteTimeout = 3000;
                    serialPort1.ReadTimeout = 3000;
                    serialPort1.ReceivedBytesThreshold = 1;
                    serialPort1.DtrEnable = true;
                    serialPort1.RtsEnable = true;
                    updateText = new UpdateTextEventHandler(UpdateTextBox);  //实例化委托对象
                    serialPort1.Handshake = Handshake.RequestToSend;
                    serialPort1.Open();
                    //MessageBox.Show("开始");
                    button3.Text = "关闭串口";
                    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            #endregion

    2.3 串口获取数据

    我解析这个吊钩秤是通过称一直向外发送数据,程序解析数据,通过截取字符串,获取两个空白之间的数据并显示在文本框上

    #region  串口获取数据
            public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                if (Closing) return;//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
                try
                {
                    Listening = true;//设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。
                    Thread.Sleep(600);
    
                    string SDateTemp = "";
                    int len = serialPort1.BytesToRead;
    
                    Byte[] readBuffer = new Byte[len];
                    serialPort1.Read(readBuffer, 0, len);
    
                    SDateTemp = Encoding.Default.GetString(readBuffer);
                    //MessageBox.Show(SDateTemp);
    
    
                    int L = SDateTemp.IndexOf(" ");
                    int length = SDateTemp.Length;
                    string str1 = SDateTemp.Substring(L, length - L).Trim();
    
                    int L2 = str1.IndexOf(" ");
                    int length2 = str1.Length;
                    str2 = str1.Substring(0, L2).Trim();
    
                    if (!string.IsNullOrEmpty(str2))
                    {
                        this.BeginInvoke(new UpdateTextEventHandler(UpdateTextBox), new string[] { str2 });
                        //SDateTemp = GetValue(SDateTemp, "@G002", "kg").Trim(); //多少kg
                    }
    
                    //this.Invoke(new UpdateTextEventHandler(UpdateTextBox), new string[] { SDateTemp });
                    
                }
                finally
                {
                    Listening = false;//我用完了,ui可以关闭串口了。   
                }
            }
            #endregion

    2.4 到文本框进行显示

    private void UpdateTextBox(string text)
            {
                if (!string.IsNullOrEmpty(text))
                {
                    textBox6.Text = text;
                }
            }

    3、正则解析

    如果串口发送的数据时规范的并且可以用正则解析的话,可以使用下边的方法。

    #region 获得字符串中开始和结束字符串之间的值
            /// <summary>
            /// 获得字符串中开始和结束字符串之间的值
            /// </summary>
            /// <param name="str">字符串</param>
            /// <param name="A">开始</param>
            /// <param name="B">结束</param>
            /// <returns></returns> 
    public static string GetValue(string str, string A, string B)
            {
                Regex rg = new Regex("(?<=(" + A + "))[.\\s\\S]*?(?=(" + B + "))", RegexOptions.Multiline | RegexOptions.Singleline);
                //Regex rg = new Regex("(?<=(" + A + "))[.\\d]*?(?=(" + B + "))", RegexOptions.Multiline | RegexOptions.Singleline);
    
                return rg.Match(str).Value;
            }
            #endregion

    如果采用了上边GetValue方法的话,在serialPort1_DataReceived 方法中,带注释的两行就需要取消注释使用。

    展开全文
  • WinForm串口操作

    2020-09-10 14:15:45
    生产中经常会使用到串口来处理数据,在此做一下记录: 1.创建界面 在WinForm中创建界面还是相对比较简单的。串口相关的界面主要包含以下几点 串口选择框 波特率选择框 开启、关闭按钮 大致如下: 注意 红色的...

    生产中经常会使用到串口来处理数据,在此做一下记录:

    • 1.创建界面
      在WinForm中创建界面还是相对比较简单的。串口相关的界面主要包含以下几点
    1. 串口选择框
    2. 波特率选择框
    3. 开启、关闭按钮
      大致如下:
      在这里插入图片描述

    注意
    红色的图片表示的是串口开启的状态,为了便于区分当前串口状态。红色表示关闭,绿色表示开启

    • 2.窗口开启/关闭
    /// <summary>
    /// 自动加载获取串口
    /// </summary>
    private void GetComList()
    {
        string[] ports = SerialPort.GetPortNames();
        foreach (string port in ports)
        {
            cbbCom.Properties.Items.Add(port);
        }
        if (cbbCom.Properties.Items.Count > 0)
        {
            cbbCom.SelectedIndex = 0;
            cbbCom.Enabled = true;
        }
    }
    
    
    /// <summary>
    /// 定义的串口
    /// </summary>
    SerialPort ComDevice = new SerialPort();
    
    /// <summary>
    /// 串口开启/关闭事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void BtnCom_Click(object sender, EventArgs e)
    {
        try
        {
            if (cbbCom.SelectedIndex < 0 || cbbBaudRate.SelectedIndex < 0)
            {
                XtraMessageBox.Show("请选择波特率 或 串口","消息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                return;
            }
            if (BtnCom.Tag.ToString() == "0")
            {
        		ComDevice.PortName = cbbCom.SelectedItem.ToString();//串口
                ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.Text.Trim());//波特率吧
                ComDevice.Parity = (Parity)0;
                ComDevice.DataBits = 8;
                ComDevice.ParityReplace = 0x00;//<<<<<<<<<<------------很重要!!!
                ComDevice.StopBits = (StopBits)1;
                ComDevice.ReadTimeout = 300;//
                ComDevice.Encoding = Encoding.Default;//System.Text.Encoding.GetEncoding("GB2312");//此行非常重要 可解决接收中文乱码问题
                try
                {
                    ComDevice.Open();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                BtnCom.Text = "关闭串口";
                BtnCom.Tag = "1";
                cbbCom.Enabled = false;
                picComStatus.Image = Properties.Resources.green;
                ComDevice.DataReceived += new SerialDataReceivedEventHandler(ComDevice_DataReceived);
            }
            else
            {
                try
                {
                    ComDevice.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                BtnCom.Text = "开启串口";
                BtnCom.Tag = "0";
                cbbCom.Enabled = true;
                picComStatus.Image = Properties.Resources.red;
            }
    
        }
        catch (Exception ex)
        {
            XtraMessageBox.Show(ex.ToString());
        }
    }
    
    • 3.数据处理
    
    private StringBuilder builder = new StringBuilder();
    
    /// <summary>
    /// 串口的DataReceived事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int n = ComDevice.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
        byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据   
        ComDevice.Read(buf, 0, n);//读取缓冲数据 
    
        //因为要访问ui资源,所以需要使用invoke方式同步ui。          
        this.Invoke((EventHandler)(delegate
        {
            string strCode = System.Text.Encoding.ASCII.GetString(buf);//builder.ToString();
            try
            {
                builder.Append(strCode);
                if (builder[builder.Length - 1] == '\r')
                {
                    Analyse(builder.ToString().Substring(0, builder.Length - 1));
                    builder.Clear();
                }
                else if (builder[builder.Length - 2] == '\r' && builder[builder.Length - 1] == '\n')
                {
                    Analyse(builder.ToString().Substring(0, builder.Length - 2));
                    builder.Clear();
                }
            }
            catch { }
        }));
    }
    
    /// <summary>
    /// 串口数据处理
    /// </summary>
    /// <param name="sn"></param>
    private void Analyse(string data)
    {
    	//ToDo数据处理
    	
        //发送数据到光标所在的位置,并带回车键,
        //是否需要回车视具体情况而定,如果扫描枪自带回车,这里可以去除
        SendKeys.SendWait(sn + "{ENTER}");
    }
    
    展开全文
  • 基于C# Winform串口数据接收

    万次阅读 多人点赞 2016-12-29 13:35:22
    很多初学者在接触到串口编程时,不知道如何入手,找了网上一些文章,也是...今天,我分享一篇文章,讲述 基于C# Winform串口数据接收编程(适合大概明白WinForm编程的同学,没有接触过WinForm的同学下载源码学习)

    很多初学者在接触到串口编程时,不知道如何入手,找了网上一些文章,也是鱼龙混杂,不好学习。

    今天,我分享一篇文章,讲述 基于C# Winform的串口数据接收编程(适合大概明白WinForm编程的同学,没有接触过WinForm的同学下载源码学习)


    首先添加串口(自行拖拽)

            SerialPort serialPort1 = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);      //初始化串口设置

    创建一个数据接收方法

    void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
    
                Byte[] InputBuf = new Byte[128];
    
                try
                {
                    serialPort1.Read(InputBuf, 0, serialPort1.BytesToRead);                                //读取缓冲区的数据直到“}”即0x7D为结束符
                    //InputBuf = UnicodeEncoding.Default.GetBytes(strRD);             //将得到的数据转换成byte的格式
                    System.Threading.Thread.Sleep(50);
                    this.Invoke(disp_delegate, InputBuf);
    
                }
                catch (TimeoutException ex)         //超时处理
                {
                    MessageBox.Show(ex.ToString());
                }
            }

    建立一个委托事件:(关于C#委托事件,下文会有参考文章)

            public void DispUI(byte[] InputBuf)
            {
                //textBox1.Text = Convert.ToString(InputBuf);
    
                ASCIIEncoding encoding = new ASCIIEncoding();
                richTextBox1.Text = encoding.GetString(InputBuf);
            }

    完整的程序代码:

    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
        {
            SerialPort serialPort1 = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);      //初始化串口设置
            public delegate void Displaydelegate(byte[] InputBuf);
            Byte[] OutputBuf = new Byte[128];
            public Displaydelegate disp_delegate;
    
            public Form1()
            {
                disp_delegate = new Displaydelegate(DispUI);
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(Comm_DataReceived);
    
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    if (button1.Text == "打开")
                    {
                        serialPort1.Open();
                        button1.Text = "关闭";
                    }
                    else
                    {
                        serialPort1.Close();
                        button1.Text = "打开";
                    }
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
    
            void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
    
                Byte[] InputBuf = new Byte[128];
    
                try
                {
                    serialPort1.Read(InputBuf, 0, serialPort1.BytesToRead);                                //读取缓冲区的数据直到“}”即0x7D为结束符
                    //InputBuf = UnicodeEncoding.Default.GetBytes(strRD);             //将得到的数据转换成byte的格式
                    System.Threading.Thread.Sleep(50);
                    this.Invoke(disp_delegate, InputBuf);
    
                }
                catch (TimeoutException ex)         //超时处理
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    
            public void DispUI(byte[] InputBuf)
            {
                //textBox1.Text = Convert.ToString(InputBuf);
    
                ASCIIEncoding encoding = new ASCIIEncoding();
                richTextBox1.Text = encoding.GetString(InputBuf);
            }
        }
    }
    

    程序运行



    最后分享一个虚拟串口工具:vspd(在没有底层硬件的时候,这个工具就派上用场了,结合串口小助手还有自己开发的程序使用)



    程序源码:http://download.csdn.net/detail/kevin_iot/9724392

    委托事件:http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html

    展开全文
  • winform读取电子秤重量RS232串口数据
  • 挖坑待补

    挖坑待补

    展开全文
  • C#winform上位机接收串口数据后显示到textbox控件中; ![上位机显示情况](https://img-ask.csdn.net/upload/201705/27/1495894251_237664.png) 理想的情况是要数据单列显示,便于保存到excel。但是在下位机添加"\r\n...
  • C# winform串口读取下位机指令,每一条指令有的是以;结尾,有的是以换行“\n”结尾,格式如下 xxxxxx;xxxxxx xxxxxx xxxxxx xxxxxx; 能否通过serialport.readto(正则表达式)来读取到指令? 或有其他好的...
  • 关于串口C#接受数据,Serialport类里面发布了SerialDataReceivedEventHandler这个委托,并建立了SerialPort.DataReceived事件,我们可以在窗口主程序中进行事件绑定,绑定到我们对数据的函数。可以简单理解为串口一...
  • C#WinForm实现串口通讯

    2021-05-14 10:17:43
    串口通讯是一种计算机常用的数据传输方式。 程序运行如下: 首先,检查计算机的串口,并获取所有串口信息。 private void CheckPort()//检查串口是否可用 { myLog(2, "检测串口开始!"); //log记录函数 ...
  • C#读取串口数据画图

    2018-11-12 15:50:43
    同学在用FPGA做读卡器,上位机准备用labview做,因为不熟悉所以让我用C#做个备份,备不时之需。 菜鸟级别就跑去给人家帮忙,越帮越忙。他的要求是自定义串口属性,...2、读取串口数据存储到txt中 3、在winform中画图
  • 1小时搞定C# winForm串口通信

    千次阅读 2020-09-30 11:46:29
    1小时搞定C# winForm串口通信 界面设计 事件处理 界面设计 本文参考https://blog.csdn.net/yc5300891/article/details/100522854 1、完成如下界面一共需要Lable、ComboBox、TextBox、Button四个普通组件,两个...
  • 使用vs2012 插measurement studio创建的串口波形图绘制软件的工程文件 说明一下没有安装measurement studio的电脑无法运行这个软件 实现的功能就是基本串口功能 字节过滤功能 模拟波形绘制 数字波形绘制 水平低微...
  • C# Winform 环境搭建串口通信应用

    千次阅读 2019-06-23 10:12:08
    目录 前言 可能遇到的问题 ...本文采用C#语言编写windows平台下的串口通信应用,以实现上位机与下位机之间的通讯。提前说明的一点是,建议阅读本文的读者具有一定的C#编程经验。本示例源代码连接。 ...
  • 一、界面设计 在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。 这里使用的软件是:...新建工程选择“c# winform类型的工程,然后填写工程名...
  • //读取所接收到的数据 receivedDatas.AddRange(ReceivedData); textBox3.Text = (Convert.ToInt32(textBox3.Text) + ReceivedData.Length).ToString(); if (checkBox2.Checked) { textBox1.Text = Class1....
  • C#接收串口数据

    2016-12-29 13:01:51
    基于C# winform,建立监听线程,读取串口数据
  • 这节介绍实现的是利用SerialPort类进行串口的链接。 .NetFramework 作为微软开发的一个框架,万变不离其宗,要怎么使用一个东西,就最好看它的说明书 。 SerialPortClass 的文档链接:...
  • 最近工作需要把单片机读取的传感器电压数据实时在PC上通过曲线显示出来,刚好在看python, 就试着用了python 与uart端口通讯,并且通过matplotlib.pyplot 模块实时绘制图形出来。1. 废话少说,上图因为没有UI,运行时...
  • 这节主要介绍通过串口接收回来的数据,我是如何处理的。 首先跟负责硬件的同学约定好格式,首个字母作为标志,判断是哪一个数据,然后利用字符:和@约定为数据,然后裁剪出来,就获得了数据。 话不多说,上代码...
  • 利用多线程实现多个串口通讯,可以实现多个服务端和客户端通讯。
  • 这回主要介绍Chart图表的使用。 我们使用的Chart图表用两条曲线来显示,一条是作为温度的显示,一条是作为湿度的显示。...下一节讲解我如何处理传回来的串口数据,还有保存Chart图表的截图,和生成txt文件。  
  • c# winform串口电子秤集成代码,自己写的,有需要的可以拿去

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 739
精华内容 295
关键字:

winform读取串口数据