C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法

简介: 原文:C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法 以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流。
原文: C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法

以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流。

一定要在com实例化的时候设置ReceivedBytesThreshold 属性就能够

            SerialPort com = new SerialPort();
            com.BaudRate = 19200;
            com.PortName = "COM1";
            com.DataBits = 8;
            com.Parity = (Parity)0;
            com.StopBits = 1;
            com.WriteTimeout = 3000;
            com.ReadTimeout = 3000;
            com.ReceivedBytesThreshold = 1;  //必须一定要加上这句话。意思是接收缓冲区其中假设有一个字节的话就出发接收函数。假设不加上这句话,那就有时候触发接收有时候都发了好多次了也没有触发接收,有时候延时现象等等,
            com.DataReceived += new SerialDataReceivedEventHandler(com_DataReceived);

这个问题问了好多人都说的不正确。最后突然在网上一片博文中发现的准备发一篇博文呢。还没有写呢。今天正好写一个


接收方法

/// <summary>
        /// 接受返回消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void com_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                //接收数据
                do
                {
                    int count = com.BytesToRead;
                    if (count <= 0)
                        break;
                    g_RS232DataBuff = new byte[count];
                    com.Read(g_RS232DataBuff, 0, count);
                    g_i_DataBuffLen += count;
                    g_l_ReceivedCount += count;
                    //g_Data += Encoding.ASCII.GetString(g_RS232DataBuff);
                    foreach (byte b in g_RS232DataBuff)
                    {
                        g_s_Data += Convert.ToChar(b);


                        //g_Data += Encoding.Unicode.GetString(g_RS232DataBuff);
                        //queue.Enqueue(g_RS232DataBuff);
                    }


                } while (com.BytesToRead > 0);

//处理接收后的命令
                TranslateCommand2();
            }
            catch (Exception ex)
            {
                LogClass.WriteFile("error:接收返回消息异常。详细原因:" + ex.Message);
            }
        }

目录
相关文章
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置软件触发模式(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置软件触发模式(C#)
308 1
c# Gridview 点击checkbox 触发的事件
c# Gridview 点击checkbox 触发的事件
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
774 0
|
JavaScript 前端开发 Java
javascript实现像java、c#之类的sleep暂停的函数功能
javascript实现像java、c#之类的sleep暂停的函数功能
225 0
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
2679 82
C# 中关于补位的写法 PadLeft,PadRight 函数
C# 中的 `PadLeft` 和 `PadRight` 是 String 类提供的用于字符串补位的实用方法。`PadLeft` 在字符串左侧填充指定字符,使其达到指定长度;`PadRight` 则在右侧填充。两者通过检查原字符串长度,计算需填充字符数,并创建新字符数组完成操作。时间复杂度为 O(n),适用于简单补位场景,但在大量操作时需注意性能影响。示例代码展示了如何使用这两个方法进行补位操作。
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
217 1
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
2324 0
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题