社区
C#
帖子详情
C#读取串口数据不完整是怎么回事?
w254873233
2010-06-11 10:30:49
发过去了 读的时候只读了一些,还有些没有读出来!
用的是SerialPort控件,没有用DataReceived事件
另外开的线程读的,请问怎么解决呢???
...全文
510
8
打赏
收藏
C#读取串口数据不完整是怎么回事?
发过去了 读的时候只读了一些,还有些没有读出来! 用的是SerialPort控件,没有用DataReceived事件 另外开的线程读的,请问怎么解决呢???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
捷哥1999
2010-06-11
打赏
举报
回复
1、设置大一点的缓冲区,如果一次读取不完,自然要分多次读取!
2、
关于SerialPort写串口程序的问题
w254873233
2010-06-11
打赏
举报
回复
多次serialPort1.Read(data, 0, data.Length);什么意思,怎么做!!!上面给的代码看不懂!
rroo
2010-06-11
打赏
举报
回复
比如一个扫码枪读到条码之后,你需要通过多次serialPort1.Read(data, 0, data.Length);才能读到完整的数据,要不然就会出现断码的现象,特别是那种USB转COM的设备,这种情况特别容易出现
rroo
2010-06-11
打赏
举报
回复
你要用一个全局变量来保存每次读到的数据,直到读取完整了,也就是说,erialPort1.Read(data, 0, data.Length);有时候并不能一次性把数据读取完整,之前我也遇到过这样的问题,给你一段代码参考一下
#region serialPort1_DataReceived - 接受COM数据
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
lock (locker)
{
switch (e.EventType)
{
case SerialData.Chars:
byte[] data = new byte[256];
int length = serialPort1.Read(data, 0, data.Length);
if (length > 0)
{
if (data[length - 1] == 13)
{
if (length > 1)
{
buffer += Encoding.ASCII.GetString(data, 0, length - 1);
}
string temp = buffer;
buffer = "";
//DealBarcode(temp);
this.Invoke(new DealBarcodeEvent(this.DealBarcode), new object[] { temp });
}
else if (data[length - 1] == 10)
{
if (length == 1)
{
return;
}
else if (length == 2)
{
string temp = buffer;
buffer = "";
//DealBarcode(temp);
this.Invoke(new DealBarcodeEvent(this.DealBarcode), new object[] { temp });
}
else // length > 2 含有数据
{
buffer += Encoding.ASCII.GetString(data, 0, length - 2);
string temp = buffer;
buffer = "";
//DealBarcode(temp);
this.Invoke(new DealBarcodeEvent(this.DealBarcode), new object[] { temp });
}
}
else
{
buffer += Encoding.ASCII.GetString(data, 0, length);
}
}
break;
case SerialData.Eof:
break;
}
}
}
#endregion
其中的temp就是前面说的全局变量
而this.Invoke(new DealBarcodeEvent(this.DealBarcode), new object[] { temp });就是在判定所有数据读完了之后,做的一段业务逻辑,自己去改改吧
garfieldzf
2010-06-11
打赏
举报
回复
DataReceived
w254873233
2010-06-11
打赏
举报
回复
不会,先帮下解决下问题先!
casinosun
2010-06-11
打赏
举报
回复
用VC不行吗?
rroo
2010-06-11
打赏
举报
回复
上面的代码用的是事件,你先试试看
C#
通过
串口
读取
和发送
数据
C#
通过
串口
读取
和发送
数据
,简单的
串口
读取
发送
数据
例子,简单易懂,适合初学者,欢迎下载
C#
读取
串口
数据
封装, RS485、232 MODBUS通讯协议,亲测可用
C#
读取
串口
数据
封装, RS485、232 MODBUS通讯协议,亲测可用
C#
上位机
串口
编程、Modbus编程
WinForm框架 是 Windows Form 的简称,是美国微软公司Microsoft开发基于 .NET Framework 平台的桌面运用程序框架,一般使用
C#
语言 编写。WinForm框架可用于设计窗体和可视控件,采用面向对象语言
C#
,可快速创建绚丽漂亮的基于Windows的桌面应用程序、非常适合做上位机的界面!
串口
(Serial Port),也称串行通讯接口(通常指COM口),
串口
通信是指将
数据
一个比特一个比特地逐位进行传输的通信模式。
C#
串口
通信是借助一个SerialPort类的对象来方便的对
串口
进行读写。 Modbus是一种串行通信协议,是施耐德电气发表工业标准协议。
C#
NModbus4库提供了ModbusMaster、ModbusSlave类来实现Modbus通讯相关的功能 本课程主要帮助学员熟练掌握
C#
WinForm框架上位机
串口
编程,Modbus协议编程,并且通过两个实战工具项目,为学习
C#
WinForm上位机编程
串口
、Modbus编程打下坚固的基础!
C#
读取
串口
数据
画图
使用
C#
读取
串口
数据
画图,特别适合初学者学习
C#
读取
串口
数据
C#
读取
串口
数据
:打开端口、监听端口并获取
数据
、关闭端口
C#
110,561
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章