串口通信 数据丢失问题

问题描述

基于MODBUS协议写的串口通信程序,在vc6.0里用API写的,在接收数据时,记录接受的是19字节,但是用TRACE调试时,只显示出3个字节,但是我用串口调试助手却能显示19位。程序主要代码如下:hcom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);///打开串口DCBdcb;GetCommState(hcom,&dcb);dcb.BaudRate=9600;dcb.ByteSize=8;dcb.Parity=NOPARITY;dcb.StopBits=ONESTOPBIT;dcb.fBinary=TRUE;dcb.fParity=FALSE;if(SetCommState(hcom,&dcb)==0){MessageBox("串口设置错误!");return;}SetupComm(hcom,1024,1024);///////写串口的代码省略,只列出读串口的代码////BYTEbyte[19];DWORDwCount=0;ReadFile(hcom,byte,19,&wCount,NULL);/////wCount的值显示为19TRACE("byteis%Xn",byte);////显示的情况为byteis12F5A0,byte为什么只是3个字节很着急,请各位大虾出手相助!!!!

解决方案

本帖最后由 zhongjun_12345 于 2011-03-25 22:29:36 编辑
解决方案二:
该回复于2011-03-26 14:43:39被版主删除
解决方案三:
最近我也在搞通信,真的挺难的
解决方案四:
数据发送慢一点,你会发现没丢。由于调试操作比较慢,数据发过来了,你还没有接受,就被系统回收了。应该是这个样子的。
解决方案五:
打印方式错误了for(i=0;i<19;i++){printf("%02x",byte[i]);}
解决方案六:
TRACE%s遇到字符串结束符就不输出了。你的第4个字节是多少呢?
解决方案七:
有可能数据中有00,后面的就没有显示出来!
解决方案八:
在内存里看看byte的值是不是正常的
解决方案九:
6楼说的是对的,串里也许有00值的字符。给截取了。也可象4楼那样,看一看,如果有不能显示的字符,可能也看不到。
解决方案十:
串口是流方式,发送方发送19字节,接收端可能要分几次才能全部读取完毕,我觉得数据应该没有丢。
解决方案十一:
该回复于2011-12-26 09:37:01被版主删除
解决方案十二:
Read回来的每一个有效字节放在一个缓冲区里面,然后再处理。就不会丢失数据的。串口没那么不可靠,很简单。Boy!
解决方案十三:
你读串口应该看看读到多少吧,做其它通讯也一样,不能只管做不负责任哟。

时间: 2024-09-20 18:00:49

串口通信 数据丢失问题的相关文章

缓冲区-串口通信数据传输数据丢失

问题描述 串口通信数据传输数据丢失 我现在要做一个全站仪的数据读取接口,由于不了解全站仪数据的发送方式,缓冲区大小该如何设置,才不会造成数据丢失? 比如我设置缓冲区大小为1024,我一次性发送2048个字节的数据,那么缓冲区只有1024个字节的数据,剩下的1024个字节数据那里去了?有什么别的传输方式可以避免这样的问题嘛? 解决方案 既然有缓冲区,那么你为什么不把数据拆开,一块块的发送,而不是一下子全发过去.

我在写串口通信程序遇到的坑

我在做基于HC6800的51单片机上,写串口通信程序遇到了许多坑. 一个大坑:为什么HC6800上U转串口不能发送数据. 因为我们向HC6800烧程序都是使用图1所示的软件,所以我想当然地认为可以直接通过HC6800上的U转串进行串口通信,而我的同学信誓旦旦地告诉我可以.坑爹.并且这个软件好像也在提示可以用直接用U转串,进行串口通信(见图2).但是当我打开串口调试助手的时候(如图3),却发现单片机掉电了(如图4).其实HC6800上有另一个串口的,我们只要把连接图5黄框处串口.并且在图4中的6处

STM8L151G6串口通信问题

问题描述 STM8L151G6串口通信问题 哪位大神用过STM8低功耗的单片机 最近在用这个调到串口通信怎么也调不通了,谁有这个方面经验分享下.感激不尽,坐等回复 解决方案 http://www.pudn.com/downloads554/sourcecode/embedded/detail2285865.html

单片机读写内部的EEPROM怎么操作,串口通信我已经做好了?

问题描述 单片机读写内部的EEPROM怎么操作,串口通信我已经做好了? 我要从PC上把数据发给单片机,单片机接收到后存储到EEPROM,单片机读取EEPROM的数据发送到PC上,我看了手册.网上查过资料,做了好久,没 有实现,单片机是STC15F2K16S2,求指导 解决方案 你没有实现,是卡在什么地方了?PC 与单片机的串口通讯.还是 EEPROM 的读写呢? 解决方案二: 我是卡在了EEPROM的读写了,看了手册.百度过了,还是不能实现EEPROM的读写,我用的单片机是15F2S16S2,用

在php串口通信编程时,出现win_serial is not compiled into PHP

问题描述 在php串口通信编程时,出现win_serial is not compiled into PHP 最近想试试php的串口通信,我装的是phpstudy2014,我看了一下apache2.4和php5xx等系列都装在里面,于是下了个对应php版本的php_ser++.dll,并且放在了ext中,并在php.ini中添加了extension=php_ser++.dll,但用php designer8.0调试时,却出现了win_serial不能被编译成PHP,事关紧急,忘大神指导?????

在CB6下基于api函数编写串口通信程序简介

1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数) 跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统根本就不管不问,对串口操作所造成的一切后果都是用户一个人承担的,这时候用户对串口具有高度自由的支配权:但是,这种情况好景不长,

C#结合串口通信类实现串口通信源代码

mycom是串口通信类.下面是串口通讯测试程序的源代码,将mycom类放在此项目中,可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namesp

Win32下的几种串口通信编程

要完成串口通信, 在32位模式下, 一般说来有以下四种方法: 1.以文件方式打开串口: 这里使用的是Win32 API 函数, 所以无论在BCB或VC下都可以实现.具体的函数的意义可以参考Win32 API 的帮助.这里有一个易于使用的BCB下的类, 可以方便的使用串口. 下面给出简要说明: (1) 应用CreateFile() 来初始化串口 FhFileComm=CreateFile( FCommName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, //

.NET Compact Framework下的串口通信

在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如 可以通过串口访问GPS的receiver,从而接收NMEA Data. 在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操 作,不再需要P/Invoke就可以直接操作串口. 下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行. public class Recei