C#串口SerialPort使用事件触发和线程查询数据接收都不完整? [问题点数:40分,结帖人ly8008csko]

一键查看最优答案

确认一键查看最优答案?
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
Bbs1
本版专家分:0
结帖率 100%
Bbs8
本版专家分:33328
Blank
黄花 2009年9月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2009年10月 .NET技术大版内专家分月排行榜第三
Bbs8
本版专家分:33328
Blank
黄花 2009年9月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2009年10月 .NET技术大版内专家分月排行榜第三
ReceivedBytesThreshold属性的设置
在<em>串口</em>通讯时,可以通过设置ReceivedBytesThreshold属性设置(也可获取)DataReceived <em>事件</em>(也可在该<em>事件</em>中空值缓冲区容量)发生前内部输入缓冲区中的字节数。 当然<em>数据</em>还是会一个字节一个字节的进入缓冲区的。但如果是<em>接收</em>到 End of File 字节,也可能引发 DataReceived <em>事件</em>,与内部输入缓冲区中的字节数和ReceivedBytesThresho...
C# 串口读取数据完整
int bytes = serialPort1.BytesToRead; 我在后面定义一个数组: byte buffer = new byte; 当<em>串口</em>缓存里有16个<em>数据</em>时,bytes却只有3,有时是
关于SerialPort的ReceivedBytesThreshold属性的疑问。
MSDN里的说明:DataReceived <em>事件</em>激发前内部输入缓冲区中的字节数。默认值为 1。 如果我设置<em>SerialPort</em>的ReceivedBytesThreshold属性为1是不是就意味着:只要
C# 串口编程,接收到的数据完整!!!!!虔诚求教!
<em>接收</em><em>数据</em>的<em>事件</em>如下: void commPlc_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte buffer=new
C#串口问题:接收事件触发的问题
最近做了个循环向<em>串口</em>发送<em>数据</em>的例子,要求获取返回值,并显示在同一txtBox中。功能是实现了,但是显示结果是却是所有发送<em>数据</em>显示完才显示<em>接收</em><em>数据</em>,我想要的结果是发一条<em>数据</em>显示一条返回结果,有没有做过这
C# serialport 串口 接收数据不全
<em>使用</em>serialport 向设备发送请求并获得响应<em>数据</em> <em>SerialPort</em> sp = new <em>SerialPort</em>(); sp.PortName = "COM2"; sp.BaudRate = 24
C#串口通信数据完整
下面代码是我<em>使用</em><em>C#</em>开发<em>串口</em>通信写的代码,在实现<em>串口</em>通信过程中,在<em>数据</em><em>接收</em><em>线程</em>中, 未加这条语句Thread.Sleep(50);我<em>使用</em><em>串口</em>工具调试 ,<em>串口</em>通信正常,但是在与实际单片机通信过程中,出现<em>数据</em>不<em>完整</em>现象,经过多方<em>查询</em>,发现模拟状态下<em>串口</em>通信速率是理想状态,但是在实际通信过程中,<em>串口</em>通信并不是理想状态,有速率限制。 因此在<em>接收</em><em>串口</em>通信时应该有一定的延时,这样给予<em>串口</em>充足时间<em>接收</em>收据,这...
C# SerialPort 串口读写
<em>串口</em>发送<em>接收</em><em>数据</em>,支持大量<em>数据</em>交互
C#中Invoke的串口接收事件中的用法
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在<em>串口</em>Serilport控件的DataReceived<em>事件</em>响应函数中改变控件的状态,直接更改会报错,可以<em>使用</em>Invoke()解决。例如: this.Invoke() { textBox1.Text += “2”; })); ...
C#上位机制作之串口接受数据(利用接受事件
前面设计好了界面,现在就开始写代码了,首先定义一个<em>串口</em>对象.. <em>SerialPort</em> serialport = new <em>SerialPort</em>();//定义<em>串口</em>对象 添加<em>串口</em>扫描函数,扫描出来所有可用<em>串口</em>显示在下拉框中,同时设置接受函数 string[] ArryPort = <em>SerialPort</em>.GetPortNames(); comboBox1.Ite...
c#串口数据读取不全问题
![正确的NFC贴片值](https://img-ask.csdn.net/upload/201611/30/1480487915_614568.png) 我自己写的值和代码 private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { System.Threading.Thread.Sleep(100);//延时100ms等待<em>接收</em>完<em>数据</em> // this.Invoke就是跨<em>线程</em>访问ui的方法 this.Invoke((EventHandler) (delegate { if (isHex == false) { tbxRecvData.Text += sp.ReadLine(); } else { Byte[] ReceivedData = new Byte[sp.BytesToRead]; sp.Read(ReceivedData, 0, ReceivedData.Length); String RecvDataText = null; for (int i = 0; i < ReceivedData.Length; i++) { RecvDataText += (" " + ReceivedData[i].ToString("X2") + ""); } tbxRecvData.Text += RecvDataText; } sp.DiscardInBuffer();//丢弃<em>接收</em>缓冲区<em>数据</em> })); } ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480488296_546399.png)
c#串口通讯类serialport的read事件触发机制疑问?
我将<em>事件</em><em>触发</em>设为100个字节,在<em>事件</em>结束的时候清空<em>串口</em><em>接收</em>缓冲区。然后我在窗体上加了一个label显示serialport.bytetoread,<em>事件</em>中只有一句清空缓冲区的代码,但是bytetorea
C#串口SerialPort使用线程接收数据完整问题
最近在做一个<em>串口</em><em>SerialPort</em><em>使用</em><em>线程</em><em>接收</em><em>数据</em>,但是总是出现<em>接收</em><em>数据</em>不<em>完整</em>问题,一部分<em>数据</em>丢失。而<em>使用</em><em>串口</em><em>事件</em><em>接收</em><em>数据</em>是正常的,请问这是怎么回事?
C#实现串口数据循环发送
<em>C#</em>实现<em>串口</em><em>数据</em>循环发送(待更) 1.起始 最近在公司做上位机和设备进行<em>串口</em>通信的项目,自己就写了个<em>串口</em>通信工具,今天是第三天,刚刚实现<em>串口</em>的双向通信。 2.软件的架子 先进行界面设计,将需要的功能放上来。 主要功能包括:打开<em>串口</em>、关闭<em>串口</em>,向<em>串口</em>发送<em>数据</em>以及从<em>串口</em>读取<em>数据</em>。在发送和<em>接收</em>的文本框里面,我加上了切换16进制的功能,方便调试。
C# 串口读取中文数据
一开始是用str方式从<em>串口</em>中读取<em>数据</em>。然后在网上找了一堆utf8转gb2312的代码.并没有什么用。 然后就像是不是不应该以string的方式读取。果然,解决了问题。 <em>串口</em><em>接收</em>中文<em>数据</em>代码: /******************<em>接收</em>部分**********************************/ private void port_DataRec...
C# 第二节 SerialDataReceivedEventHandler 串口数据接收事件
private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i &lt; 13; i++) { comboBox1.Items.Add("COM" + i.ToString()); ...
c#串口为何一次收到的数据不全啊。
每次只收到设备发过来的一部分<em>数据</em> 要收几次才是<em>完整</em>的 代码如下。 Sport.PortName = ApplicationSettings.PortName ; Sport.BaudRate = A
C#SerialPort接收数据的多线程问题
学习c#进行<em>串口</em>读写的时候我发现一个问题:期望发送一次<em>接收</em>一次,接着马上再发送一次<em>接收</em>一次(发送<em>接收</em>的<em>数据</em>输出到终端),会看到先发送两次再<em>接收</em><em>数据</em>,而这时候只能<em>接收</em>到一次的<em>数据</em>。 sp.DataReceived += new SerialDataReceivedEventHandler(自定义方法); 原因在MSDN的文档中可以看到(https://docs.microsoft.com/zh...
C#如何用线程处理大量节点的串口数据
大家好,领导要用<em>C#</em>编写一个ZigBee无线网络环境监测系统 --<em>串口</em>编程。 这个网络最多有64个节点,还有一个协调器,节点的<em>数据</em>都传到协调器,协调器通过<em>串口</em>与计算机相连,把<em>数据</em>发过来。系统要求能实时
C# 串口数据解析问题
<em>接收</em>到的<em>数据</em> 结果 如何解析出来
C#如何处理好串口数据接收线程与界面显示事件
写了一个通过<em>串口</em>实现上下位机交互的软件。 但是在<em>数据</em>传输这里遇到了麻烦,发送和接受的<em>数据</em>报文是根据协议制定的。 协议: 报头## + 内容 + CRC16校验位 因为一个报文可能被分次发送过来,所以采
关于serialport的属性ReceivedBytesThreshold
我设置了值为272 可是有时<em>接收</em>的长度为16 这是怎么回事,有没有人遇到这种问题 谢谢回复
基于C# Winform的串口数据接收
今天,我分享一篇文章,讲述 基于<em>C#</em> Winform的<em>串口</em><em>数据</em><em>接收</em>编程(适合大概明白WinForm编程的同学,没有接触过WinForm的同学下载源码学习) 首先添加<em>串口</em>(自行拖拽) [csharp] view plain copy <em>SerialPort</em> serialPort1 = new <em>SerialPort</em>("COM2", 9
C#串口通信数据接收处理
本源码在VS2013平台上,<em>使用</em><em>C#</em>编程,实现了多<em>串口</em>通信的<em>数据</em><em>接收</em>处理,实用性强,代码简洁,内置<em>使用</em>说明
C# VS2013 串口接收事件 通过委托跨线程操作TXTBOX
<em>C#</em> VS2013 <em>串口</em><em>接收</em><em>事件</em> 通过委托跨<em>线程</em>操作TXTBOX
注册的监听串口的信息事件,是否可以在新的线程中运行啊?
<em>SerialPort</em> port = dec.port; port.DataReceived += comm_DataReceived; 如何对<em>串口</em>的监听方法进行多<em>线程</em>操作? 同时监听多个<em>串口</em>的时候,
C#使用seriport和单片机进行串口数据收发不全,解决办法
最近做了一个项目,上位机向单片机要205个字节的报文。每次上位机<em>接收</em>的<em>数据</em>总是分成好几段,不能一次<em>接收</em>205个字节。所以对<em>数据</em>处理造成影响。因此就想着怎么能实现一次<em>接收</em>205字节<em>数据</em>,一次进行处理。试了很多办法,最后终于解决了。 <em>C#</em>中,<em>使用</em>的是serialPort.DataReceived来<em>接收</em><em>数据</em>。一开始,上位机向单片机发送轮询指令后,单片机按照modbus协议上传205个字节<em>数据</em>。但是每次
C# serialport数据接收不全的问题?
<em>C#</em> serialport读取松下PLC的<em>数据</em>,用的是松下Mewtocol通讯协议,我在timer_tick<em>事件</em>中<em>接收</em><em>数据</em>,因要实时读取<em>数据</em>,timer设置为1毫秒,<em>数据</em><em>接收</em>时不全,代码如下: cls
C# SerialPort事件触发接收数据完整的解决方法问题。
最近用<em>C#</em> <em>SerialPort</em>类做单片机上位机程序,发现一个问题: 单片机一次发送一批<em>数据</em>(400字节左右)到上位机,上位机利用<em>事件</em><em>触发</em>方式<em>接收</em><em>数据</em>。 刚开始<em>数据</em><em>接收</em>非常不稳定,上位机经常<em>数据</em><em>接收</em>不<em>完整</em>。 后来我在<em>事件</em>处理函数最开始处加入了500ms延时,则每次<em>数据</em><em>接收</em>就完全OK了。 不知道这是什么原因。感觉这样虽一时可以解决问题,但是感觉这样会影响<em>接收</em>的...
C#中怎么让SerialPort接收到一个字节就触发DataReceived时间?
ReceiveByteThreshold设为1了,但是进入消息处理函数,查看BytesToRead属性,每次都是0xf。 这怎么回事,不能一个字节<em>触发</em>一次吗?
vb.net中serialport控件的一些使用经验
一些需要注意的地方 Serialport 的datareceived<em>事件</em>是<em>串口</em><em>接收</em>到不大于<em>SerialPort</em>1.ReceivedBytesThreshold个字节的时候<em>触发</em>,但是具体多少个不确定(实验发现,当第一个字节与下一个字节发送间隔很短的时候几乎就是等于<em>SerialPort</em>1.ReceivedBytesThreshold的时候<em>触发</em>,但是间隔很长的时候就不确定了,但是一定小于Serial
VS2015 C# 串口线程收发源码
创建2个<em>线程</em>分别处理<em>串口</em><em>数据</em>的收和发,另外建一个<em>线程</em>进行循环发送
c#串口线程数据读写问题
设计一个<em>串口</em>的程序,硬件是USB转485的,要读出设备的<em>数据</em>并保存。 <em>SerialPort</em>类有DataReceived<em>事件</em>,所以读<em>串口</em>可以不用自己设<em>线程</em>了。因为要经常询问以得到设备的<em>数据</em>,所以要重启一
C# SerialPort.DataReceived 是不是在后台线程里运行
<em>SerialPort</em>.DataReceived <em>串口</em>的<em>数据</em><em>接收</em><em>事件</em>,是不是没有在主<em>线程</em>里运行 Timer 是不是在窗口<em>线程</em>里运行? 我觉得是。 在主窗口有个 Graphics, 在Timer 里要用,
开一个线程专门读串口数据,然后通过委托给窗体上label显示就行,还有串口是什么串口,232、485,还是CAN
开一个<em>线程</em>专门读<em>串口</em><em>数据</em>,然后通过委托给窗体上label显示就行,还有<em>串口</em>是什么<em>串口</em>,232、485,还是CAN
C# 怎样判断串口是否有数据
我用datareceived方法进行<em>串口</em><em>数据</em>的一系列操作。那如果<em>串口</em>没有<em>数据</em>输出的话,我怎样判断呢?这时候datareceived不<em>触发</em>,
c#多串口线程接收数据
因为前段时间需要用到<em>串口</em><em>接收</em><em>数据</em>,且<em>使用</em>的<em>串口</em>号不确定,需采用多<em>线程</em>的方式来实现<em>接收</em>。 创建<em>线程</em>: Thread thread = null; for (int i = 0; i < PortNum; i++)//根据选择的<em>串口</em>号数量创建对应数量的<em>线程</em> { thread = new Thread(Text_Ru
串口的消息处理事件与多线程
我的程序一开始要执行一段代码,初始化一组<em>串口</em>,具体代码是这样的: for(int i=0;i<dt.Rows.Count;i++) { comport = new <em>SerialPort</em>(); comp
C# serialPort.ReadExisting()接收数据出错,但serialPort.Read(buf, 0, length)接收数据正常
在VS2015中<em>使用</em><em>C#</em>的serialPort进行<em>串口</em>通信,<em>接收</em>运动传感器的<em>数据</em>。 根据传感器说明书,回传频率10Hz,定义传输<em>数据</em>包为20Byte,<em>数据</em>为十六进制,不是ASCII码。 第1位起始位0
C# 通信接收数据不全,求解决方法
我做了一个桌面聊天程序,A程序发送过来的<em>数据</em>在B程序<em>接收</em>不全。现在基本确定问题出现在以下代码(<em>接收</em>部分) try { TcpClient client = listener.AcceptTcpClie
c# 串口通信 DataReceived 事件触发方法的使用
DataReceived<em>事件</em>:在<em>接收</em>到了ReceivedBytesThreshold设置的字符个数或<em>接收</em>到了文件结束字符并将其放入了输入缓冲区时被<em>触发</em>。<em>数据</em><em>接收</em>的方法如果采用轮询的方法比较浪费时间,采用DataReceived<em>事件</em><em>触发</em>的方法,合理的设置ReceivedBytesThreshold的值,若<em>接收</em>的是定长的<em>数据</em>,则将ReceivedBytesThreshold设为<em>接收</em><em>数据</em>的长度,若<em>接收</em>数...
C#串口接收函数多线程的问题
这个问题困扰了我两天,全程利用RS232短接引脚自发自收: CSDN提示没没有分来提这个问题,我都不知道能不能提出来这个问题 我做了2件事: 第一件:定义了一个<em>串口</em><em>接收</em>函数: void comm_Da
C#串口通讯超时优化类
一直以来就想实现一个功能,<em>串口</em>通讯
c# SerialPort.DataReceived 的事件处理方法抛出异常后导致程序出现“XXX已停止工作”
以下为再现问题的测试代码,你只要给COM3发送任何<em>数据</em>,就会导致程序无限卡在throw exception的地方 class Program { private static int Index =
c#串口上位机通信问题,无法触发接收数据事件的原因
碰到一个很奇怪的事情,用<em>C#</em>自带的<em>串口</em>类,实例化对象后,注册<em>数据</em>回调<em>事件</em>,然后,按照通信原则,设置好相关的<em>数据</em>格式,打开<em>串口</em>,然后发送。发送是成功的,这个在助手上测试过,因为有返回<em>数据</em>,所以能显示出来
C#2008中使用SerialPort.DataReceived事件问题求助
一个FORM上建了一个Button跟一个<em>SerialPort</em>控件,点Button送一个指令到<em>串口</em>,并<em>接收</em>返回的<em>数据</em>显示在Form的TextBox上, 运行到红字部份报错,提示:<em>线程</em>间操作无效: 从不是
c#winform调用serialport类触发事件
c#winform开发,里面<em>使用</em>了多<em>线程</em>开发,并且<em>使用</em>了serialport类,程序运行一段时间后,<em>事件</em>DataReceived private void DataReceived(object se
C#使用SerialPort和API串口的例子
一个集成了<em>SerialPort</em>和API方式实现<em>串口</em>通信的例子.注意<em>线程</em>操作UI的部分图方便<em>使用</em>了不安全的代码,建议改为委托
应用多线程:解决等待超时问题
     我和老米曾经讨论过等待超时的问题觉得是比较挺常用的代码,所以在这里和大家分享一下。我和老米的思路略有不同这里没有孰优孰略,只是习惯差异而已。    我们日常工作中常会遇到这种场景:<em>数据</em>库、远程webservice、<em>串口</em>设备等等连接失败,或其他需要长时间等待才能返回错误信息的情况。这时我们需要设定一个超时时间如果出现问题能够及时反馈给用户。虽然我们给<em>数据</em>库或webservice把超时设
c# 如何设置线程超时时间
比如 Thread thread = new Thread(this.test); thread.Start(); public void test() { 执行程序 } 如果test()超过10秒,
C# 串口如何做到多线程收发?
<em>串口</em>的收发是两条<em>线程</em>,互不干扰,一边收一边发。上位机软件不好弄啊。
[求助]C# 串口事件接收高频次数据, sp.close()时就会程序会卡死.
有相关开发经验的大侠们有遇到过同类问题吗? 目前要设计一个利用<em>串口</em><em>接收</em>间隔为100~50ms的<em>数据</em>程序. 我用<em>串口</em>助手模拟以100ms间隔持续发送相同<em>数据</em>, 然后写程序利用<em>串口</em><em>接收</em><em>数据</em><em>事件</em>对其<em>数据</em>进行
串口通信中,解决serialport.DataReceived接收到的数据完整
private <em>SerialPort</em> serialport = new <em>SerialPort</em>(); private StringBuilder builder = new StringBuilder(); // private StringBuilder bs = new StringBuilder();//用于存储一条<em>完整</em>信息; Boolean op
C#串口接收数据触发事件
当<em>使用</em><em>串口</em><em>接收</em><em>数据</em>的时候,会用到下列语句:      serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 而当<em>接收</em>到<em>数据</em>时,调用port_DataReceived函数。 其中:    1)serialPort.DataReceived 是一个<em>事件</em>(Event);
C# serialport 串口发送与接收数据操作类
对<em>C#</em>的serialport类功能进行了总结,给出了发送,<em>接收</em><em>数据</em>的<em>完整</em>操作类代码,可直接运用该类进行c#的<em>串口</em><em>数据</em>操作
C# 串口编程数据完整以及处理大数据丢失数据的问题
我现在在用<em>C#</em>的<em>串口</em> 来和仪器通讯,但<em>数据</em>总是<em>接收</em>不<em>完整</em>(<em>数据</em>包的类型有很多种),该如何处理,还有就是仪器会实时的给我发<em>数据</em>,但通常会丢<em>数据</em>,网上说可以用多<em>线程</em>和<em>数据</em>池的方法解决,但看到不是很明白,有
C# SerialPort触发两次事件
 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO.Ports;namespace Voltage
C# 串口线程接收
private void ReadPort() { while (true) { if (sComm.IsOpen) { int count = sComm.BytesToRead; if
C# 使用SerialPort控件用类及线程实现串口通信
using System;      using System.Collections.Generic;      using System.ComponentModel;      using System.Data;      using System.Drawing;      using System.Text;      using System.Windows.Forms;
C#串口接收到的数据,用的事件serialPort_DataReceived,怎么才能转换为全局变量来使用
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { int len = seria
C#串口通信:发送数据接收指令无法触发数据接收事件(serialPort1_DataReceived)
在上位机调试的时候发现连续发送两次<em>串口</em><em>数据</em><em>接收</em>指令,<em>数据</em><em>接收</em>处理<em>事件</em>只响应一次,请问这个是什么原因? <em>数据</em><em>接收</em><em>触发</em><em>事件</em>: private void serialPort1_DataReceived(o
C# 串口通信(彻底解决C#串口通信中的数据丢失问题)
以网上某位大虾的源码为版本,沿用了其可用的代码部分。对其余欠妥部分进行了改造。不要资源分,是大家不用为积分而烦恼。出来混都不容易,希望大家相互照应!
c# 串口接收数据并保存
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
浅谈SerialPort控件的使用(C#)
最近的一个小项目中需要从<em>串口</em>读取摄像机的应答指令,因此在程序中用到了<em>SerialPort</em>控件(<em>使用</em><em>SerialPort</em>类也可以)。 在<em>SerialPort</em>控件的属性列表中主要注意3个地方: (1)PortName:表示要打开的通信端口名称; (2)BaudRate:表示端口的波特率; (3)ReceivedBytesThreshold:表示<em>触发</em><em>SerialPort</em>控件的DataReceived<em>事件</em>前
C#串口接收大量数据事件触发设置
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = comm.BytesToRead;//先记
如何在c#中实现串口接收一个字节就触发事件处理函数一次?
因工作需要编写一个上位机,监视modbus主机和从机在485通信线上发送的<em>数据</em>,但是现在出现的问题是不能利用超时检测来断开主机发送的帧<em>数据</em>和从机回复的帧<em>数据</em>,经过调试发现,serialPort类就算设
.NET 2.0中串口通讯类SerialPort
1。简介随着USB的流行,<em>串口</em>通讯已经应用到日常生活的很多方面了,USB是一种高速的<em>串口</em>通讯协议,USB接口非常复杂,通常被用在需要传输大量<em>数据</em><em>数据</em>的地方,如U盘、相机、打印机等。除了USB这种较为奢侈的<em>串口</em>外,在工控和嵌入式行业,大量被<em>使用</em>的是另一种古老的<em>串口</em>协议,RS-232<em>串口</em>。RS-232是一种非常简洁的低速<em>串口</em>通讯接口,它可以同时进行<em>数据</em><em>接收</em>和发送的工作。2。.NET 2.0对串
C# SerialPort的Datareceive事件触发后,BytesToRead的值有时候为零
下位机每隔0.5秒通过<em>串口</em>传25个字节到上位机,<em>串口</em><em>接收</em>到<em>数据</em>后处理并用zedgraph控件绘制实时曲线图,程序运行几分钟后,Datareceive<em>事件</em><em>触发</em>后,BytesToRead的值有时候为0,有时是25,也有时是50,界面刷新有时也不是0.5秒。 <em>接收</em>程序: ``` private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { if (my<em>SerialPort</em>.IsOpen) { Thread.Sleep(10); int count = my<em>SerialPort</em>.BytesToRead; byte[] data = new byte[count]; my<em>SerialPort</em>.Read(data, 0, count); if (data[0] == 0x01 && data[1] == 0x03) { this.Invoke(textChanged, data, count); } } } catch (Exception err) { throw err; } } ``` 处理程序: ``` textChanged += new UpdateTextEventHandler(ChangeText); private delegate void UpdateTextEventHandler(byte[] buffer,int m);//定义委托 private event UpdateTextEventHandler textChanged;//定义<em>事件</em> private void ChangeText(byte[] buffer,int m) //<em>事件</em>处理方法 { s1 = ""; Array.Copy(buffer, 3, float_byte1, 0, 4); Array.Copy(buffer, 8, float_byte2, 0, 4); Array.Copy(buffer, 13, float_byte3, 0, 4); Array.Copy(buffer, 18, float_byte4, 0, 4); temperture[0] = BitConverter.ToSingle(float_byte1, 0); temperture[1] = BitConverter.ToSingle(float_byte2, 0); temperture[2] = BitConverter.ToSingle(float_byte3, 0); temperture[3] = BitConverter.ToSingle(float_byte4, 0); textBox1.Text = temperture[0].ToString(); textBox2.Text = temperture[1].ToString(); textBox3.Text = temperture[2].ToString(); textBox4.Text = temperture[3].ToString(); for (int i = 0; i < m; i++) { s1 += buffer[i].ToString("X2"); s1 += " "; } textBox5.Text = s1.ToString(); if (Curve_Flag == 1) { i++; creatGraph(temperture[j]); } } ``` zedgraph绘图: ``` public void creatGraph(float temp) { double x = (double)i; double y = Convert.ToDouble(temp); list.Add(x, y); myCurve = zedGraphControl1.GraphPane.AddCurve("", list, Color.Red, SymbolType.None); //myCurve.Symbol.Fill = new Fill(Color.Blue);//填充<em>数据</em>点 zedGraphControl1.AxisChange();//画到zedGraphControl1控件中,此句必加 zedGraphControl1.Refresh();//重新刷新 } ```
我写的串口程序读数据经常不完整
软件功能是要读取一个光纤传感器返回的数值,先发送一个6字节的代码确认传感器已经准备好,传感器返回6个字节响应;接着上位机在发送6个字节读取<em>数据</em>,传感器会周期性的返回126个字节来响应。。。。 因为<em>接收</em>
串口接收数据完整
如图,自己在QT定义的<em>串口</em>协议,<em>接收</em>到什么就打印什么。但是偶尔有<em>接收</em>不<em>完整</em>的<em>数据</em>,这是什么原因? 是波特率太高了么?我定义的是115200 每秒收发一次
C#连接串口接受数据显示问题。很急。
<em>C#</em><em>串口</em>上位机工具,<em>接收</em>到发过来的一串16进制<em>数据</em>,格式如下: FA AF 00 08 FF 31 32 33 34 FA AF 00 07 FF 35 36 后面可能还会有FA AF开头的 这串<em>数据</em>分析如下:识别FA AF为固定开始的头,紧接着后面的两个00 08为第一个整个字符串实际长度(FA AF 00 08 01 31 32 33 34),FF为固定的<em>数据</em>,不用管。 FF后面对应的<em>数据</em>为实际需要输出显示的<em>数据</em>(31 32 33 34),长度为4,然后这4个<em>数据</em>以正常的ASCII码显示出来。 第一个(FA AF 00 08 FF 31 32 33 34)实际需要的<em>数据</em>31 32 33 34对应的ASCII码为1234 第二个(FA AF 00 07 FF 35 36)实际需要的<em>数据</em>35 36对应的ASCII码为56 所以<em>串口</em>最终输出在textbox中显示为123456 以下代码是接受<em>数据</em>并显示在textbox的代码。怎么修改能达到以上的要求? ``` private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReDatas = new byte[ComDevice.BytesToRead]; ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取<em>数据</em> this.AddData(ReDatas);//输出<em>数据</em> } /// /// 添加<em>数据</em> /// /// 字节数组 public void AddData(byte[] data) { if (rbtnHex.Checked) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sb.AppendFormat("{0:x2}" + " ", data[i]); } AddContent(sb.ToString().ToUpper()); } else if (rbtnASCII.Checked) { AddContent(new ASCIIEncoding().GetString(data)); } else if (rbtnUTF8.Checked) { AddContent(new UTF8Encoding().GetString(data)); } else if (rbtnUnicode.Checked) { AddContent(new UnicodeEncoding().GetString(data)); } else {} lblRevCount.Invoke(new MethodInvoker(delegate { lblRevCount.Text = (int.Parse(lblRevCount.Text) + data.Length).ToString(); })); } /// /// 输入到显示区域 /// /// private void AddContent(string content) { this.BeginInvoke(new MethodInvoker(delegate { if(chkAutoLine.Checked && txtShowData.Text.Length>0) { txtShowData.AppendText("\r\n"); } txtShowData.AppendText(content); })); } ```
QT解决串口数据接收完整问题
<em>使用</em>QT编写<em>串口</em>上位机时,<em>串口</em>通信的过程中有时会遇到<em>数据</em><em>接收</em>不<em>完整</em>的问题,下位机一次发送的<em>数据</em>可能会分为两次甚至多次<em>接收</em>,这样就导致<em>数据</em><em>接收</em>不<em>完整</em>,解决方案如下:void MainWindow::Read_Data()//读取<em>数据</em>函数,只要<em>串口</em>中有<em>数据</em>,就会进入这个函数 { static QByteArray buf;//QByteArray 类是定义一个字节数组(char *) 一定...
C#使用SerialPort类实现串口通信(陆续更新)
 在.NET Framework 2.0中提供了<em>SerialPort</em>类,该类主要实现<em>串口</em><em>数据</em>通信等。本文章将本人在学习过程中从网络上搜集到的相关信息写出来供大家参考。下面主要介绍该类的主要属性(表1)和方法(表.2)。如果需要了解更多的信息请登录http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport(VS.80)
C#读取串口数据完整是怎么回事?
发过去了 读的时候只读了一些,还有些没有读出来! 用的是<em>SerialPort</em>控件,没有用DataReceived<em>事件</em> 另外开的<em>线程</em>读的,请问怎么解决呢???
串口读取数据完整该如何解决??????????
<em>串口</em>控件comm<em>事件</em> Private Sub Comm_OnComm() Dim tempstr As String Select Case Comm.CommEvent Case comEvRece
C# Serialport串口通信,接收数据丢失
用DataReceived方法<em>接收</em><em>数据</em>时有时候会丢失,尤其是在debug的时候,有时候甚至多定义几个变量,<em>数据</em><em>接收</em>也会出现丢失,有什么办法可以解决吗?
串口数据读不完整怎么继续读?
DWORD WINAPI ThreadFunc(LPVOID lpParam) { while(TRUE) { DWORD dwLength=0; COMSTAT ComStat; DWORD dwE
C#串口接收数据丢失,最大只能收8个字节
不知道为什么,我和单片机做通信,发送01 03 00 00 00 04 44 09 正确回复应该是01 03 08 XX XX XX XX XX XX XX XX XX XX 但是只回复了01 03
和单片机通信串口收发的问题,接收数据有时候不完整
这个是从<em>串口</em>返回计算机的<em>数据</em>: FF 55 1F 00 D8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
串口接收数据完整问题
各位大神: 平台:VS2013,MFC 我在网上看到你发的一篇《C++<em>串口</em>编程实例》,链接http://blog.csdn.net/jiangqin115/article/details/403912
C#serialPort类接受数据时有时不能完整接受,要延时?
我的笔记本利用CH340实现上位机自己收发<em>数据</em>,有时还没发送完,datareceive<em>事件</em>就发生然后还接受不到<em>完整</em>的<em>数据</em>,接受部分代码如图:
C#串口接收数据问题,怎么在处理数据前判断数据接收完毕
上位机<em>接收</em><em>数据</em>格式如下: 0x53 0x50 0x01 0x01 0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 0x11 0x07 0x17 0x11 0x13 0x39 其中 53 50是包头,后面是有效<em>数据</em>,我现在想把0x00 0x00 0x00 0x00 0x57 0x23 0x7F 0x3F 0xA6 0xFC 0xBF 0x3A 这几个字节分别转化为三个浮点数,但是问题是,我现在无法判断<em>数据</em>是否<em>接收</em>完毕,及<em>完整</em>的一个<em>数据</em>包。 注:通过按下一次单片机上的“确定键”,单片机给上位机发送一次<em>数据</em>,<em>数据</em>格式如上描述。请大家指点下,谢谢! 我是通过绑定<em>串口</em><em>接收</em><em>事件</em>实现的,但这样会多次<em>触发</em><em>串口</em><em>接收</em><em>事件</em>,主要卡在<em>数据</em><em>接收</em>和<em>数据</em>以浮点数显示环节,代码如下: private void sp_DataReceived(object sender,SerialDataReceivedEventArgs e) { if (isHex==true) { string str; uint i=0; int bufferlen = sp.BytesToRead; byte[] bytes = new byte[bufferlen]; sp.Read(bytes, 0, bufferlen); for(i=0;i); } } else { int bufferlen = sp.BytesToRead; byte[] bytes = new byte[bufferlen]; sp.Read(bytes, 0, bufferlen); string gb = System.Text.Encoding.Default.GetString(bytes); tbxRecvData.AppendText(gb); } }
C#解决串口通信中接收数据时延迟处理与缓存处理的方法
<em>C#</em>解决<em>串口</em>通信中<em>接收</em><em>数据</em>时延迟处理与缓存处理的方法 时间:2011-1-21 14:04:29 来源:www.cnblogs.com 作者:杨少宁 - - 利用<em>串口</em>进行通信,当发送方(A)将<em>数据</em>写入<em>串口</em>后,通过无线或有线方式将<em>数据</em>传送给<em>接收</em>方(B),B通过调用<em>串口</em>读方
C# SerialPort串口通信发送接收,处理接收数据完整
using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; namespace <em>SerialPort</em>Com {     public class <em>SerialPort</em>ComImp
一个简单方法解决串口接收一包完整数据问题
     最近在写<em>C#</em>的<em>串口</em>时,明明是一包<em>数据</em><em>SerialPort</em><em>事件</em>非要产生一次或者多次<em>事件</em>来<em>接收</em>,导到一包<em>数据</em>分成两包<em>数据</em> ,后来改成<em>线程</em>处理。废话不多说直接上程序。 如果有问题可以直接回复,谢谢,延时时间不一定是10ms,如果要求更高可以减少延时时间。 public partial class mainWin : Form { const int dataMaxLen = 10...
C# 串口接收数据
using System; using System.IO.Ports; using System.Text; using System.Threading; using System.Windows.Forms; namespace Serial { public partial class Form1 : Form { public Form1() ...
C#读写串口数据,读不到
如题,代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.D
C#串口怎样接收一个完整数据包的解析
用到了serialPort控件 已经能接受到<em>串口</em>的<em>数据</em> <em>数据</em>格式为 帧头+<em>数据</em>长度+<em>数据</em>++帧尾 如何把帧头帧尾和<em>数据</em>长度去掉 直接把<em>数据</em>写到文本中
串口接收数据不全
我用超级终端可以<em>接收</em>到<em>数据</em>,但我自己只能收到一半为什么 呢?哪里出错了?
串口数据接收完整,如何进行粘包
需求: 1.<em>串口</em><em>接收</em>多种类型的<em>数据</em>,固定包头+长度。 2.按照<em>接收</em>的<em>数据</em>类型进行相应处理 问题: 1.<em>串口</em><em>接收</em>的<em>数据</em>不<em>完整</em>,多个包粘在一起发送过来。 2.<em>完整</em>的<em>数据</em>包解析出来之后,最后一个包只有一部分
C# 实现串口发送接收 完整的例子
//程序设计:段利庆 QQ:14035344using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO.
C#串口接收事件接不全数据的处理
问题描述:都知道用<em>事件</em>dataReceive来处理<em>串口</em>非常的方便,但当一次的<em>数据</em>过长时,就会出现截断<em>数据</em>的情况。比如说发一个指 令,返回一个30个字节的<em>数据</em>,但上位机则分两次来<em>接收</em>者30个<em>数据</em>。 解决办法:可以通过设置<em>串口</em>的ReceivedBytesThreshold来设置当<em>接收</em>到几个字节来<em>触发</em><em>接收</em><em>事件</em>,如上面所说可以用serialPort1.ReceivedBytesThreshold = ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
SpringMvc学习笔记下载
一份简单的SpringMvc的学习笔记,能简单和清楚的了解SpringMvc 相关下载链接:[url=//download.csdn.net/download/goingtosick/8456907?utm_source=bbsseo]//download.csdn.net/download/goingtosick/8456907?utm_source=bbsseo[/url]
飞机订票系统课程设计源代码源代码下载
飞机订票系统课程设计源代码源代码 相关下载链接:[url=//download.csdn.net/download/chenxh/151995?utm_source=bbsseo]//download.csdn.net/download/chenxh/151995?utm_source=bbsseo[/url]
javascript编程宝典源代码下载
javascript编程宝典源代码,javascript编程宝典源代码, 相关下载链接:[url=//download.csdn.net/download/mmmjjjhhhccf/2796811?utm_source=bbsseo]//download.csdn.net/download/mmmjjjhhhccf/2796811?utm_source=bbsseo[/url]
相关热词 c#判断数字不得为负数 c#帧和帧协议 c#算偏移值 c# 在枚举中 c#6 字符串 插值 c#程序中的占位符标签 c#监听数组变化 c# vlc c#索引实现 c# 局域网广播通信
我们是很有底线的