使用serialport类,如何判断接收的数据已经中断?

问题描述

之前发过一次贴,简单测试以为可以了,实际还是不行。具体要求如下:使用serialport类接收串口数据(串口数据是由与计算机相连的一台仪表以固定格式连续发送的),现在接收数据已正常,但是不知怎样判断串口数据已中断。(此处我所说的串口数据中断,是指由于串口rs232连接线路中断,或与计算机连接的仪表已关闭停止向计算机发送数据)。之前发帖求助,得到的用serialPort.BytesToRead=0得到缓冲字节长度,只能在serialPort打开时判断有效,如果起初接收正常,突然中断了串口的数据传输,用这个方法依旧不能得到正确结果。

解决方案

解决方案二:
if(serialPort.BytesToRead==0)
解决方案三:
将上面的语句放在serialPort1_DataReceived事件当中,
解决方案四:
privatevoidserialPort1_DataReceived(objectsender,SerialDataReceivedEventArgse){byter_byte;while(serialPort1.BytesToRead!=0){r_byte=Convert.ToByte(serialPort1.ReadByte());switch(r_flag){case0:if(r_byte==0xaa){r_flag+=1;serial_input[0]=r_byte;}break;case1:if(r_byte==0xaa){r_flag+=1;serial_input[1]=r_byte;r_count=0;}else{r_flag=0;r_count=0;}break;case2:serial_input[r_count+2]=r_byte;r_count+=1;if(serial_input[2]!=0xd0){if(r_count==4){r_flag=0;r_count=0;rs_cl();//调用接收处理函数}}else{if(r_count==0x14){r_flag=0;r_count=0;rs_cl();//调用接收处理函数}}break;}}}
解决方案五:
学习
解决方案六:
引用1楼baihe_591的回复:

if(serialPort.BytesToRead==0)

这个方法我用了,代码如下:在serialPort_DataReceived事件中:try{if(czSerialPort.BytesToRead==0){strczData="Error";}else{//定义接收数据长度intbytesRead=czSerialPort.BytesToRead;bytefirstbyte=Convert.ToByte(czSerialPort.ReadByte());//判断第一个字节是否是起始位:16进制的0x02if(firstbyte==0x02){byte[]bytesData=newbyte[bytesRead];for(inti=0;i<=bytesRead-2;i++){bytebyteData=Convert.ToByte(czSerialPort.ReadByte());//判断数据结束字节if(byteData==0x03)continue;bytesData[i]=byteData;}//将字节数组转换成字符串strczData=System.Text.Encoding.Default.GetString(bytesData);//截取数据(舍去校验和等字符)strczData=strczData.Remove(7);//通过捕获异常来转换接收到的字符串try{intintczData=Convert.ToInt32(strczData);strczData=Convert.ToString(intczData);}catch{strczData="Error";}}}catch(exectionczerror){MessageBox.Show(czerror.Message);}在代码中加入了你说的判断仍旧不行。
解决方案七:
实时检查连接标志位,异常断开时就读取数据,这样行吗
解决方案八:
你可以可以用API写,这样就有延时参数可以用了
解决方案九:
晕老在这个问题你还没解决??做个标记明天给你个点代码。
解决方案十:
SERIALPORT_DATARECEIVED怎么触发啊,我的每次都不执行啊?
解决方案十一:
mark,明天过来学习代码
解决方案十二:

解决方案十三:
引用8楼showjancn的回复:

晕老在这个问题你还没解决??做个标记明天给你个点代码。

是不是忘了啊,代码呢?问题还没有解决

时间: 2024-09-15 19:21:30

使用serialport类,如何判断接收的数据已经中断?的相关文章

串口类。自动接收到的数据。 怎么传到窗口上啊

问题描述 .NET里面有个串口控件.我没有使用...自已定义了一个类.因为要和多串口通信.用很多那个控件感觉不好.所以...问题是这样的.串口类里面接收到数据了.怎么在把这个数据反回给窗口呢..!以前我用VB写过思路是在类中定义一个事件然后串口接收事件收到数据后引发定义的事件,并把收到的数据传到定义的事件的参数里面然后.在窗口中调用此类时.就有自定义的那个事件.就是收到数据自已发生事件///////////////////////////////////////////////////////现

C#串口通信 serialport类

问题描述 有个C#的问题想请教,在线等!!我用C#中的serialport类做一个串口通信,遇到个问题,我查看了资料"通过调用一次serialport类中的Read()方法并不能确保所读取的数据就是完整一桢",我现在就遇到这个问题,我用Read()方法只能得到我数据的前9个字节,后面的数据得不到,百思不得其解,望赐教!Byte[]BSendTemp={0x00,0xff,0xff,0xcc,0x01,0x01,0x02,0x40,0x00,0x44};//建立临时字节数组对象seria

代码-【MFC,VS2013中使用Serialport类的问题???急】

问题描述 [MFC,VS2013中使用Serialport类的问题???急] 10C 上位机软件.1.在VC6.0中用SerialPort类,数据的传输完全没有问题.[我代码没有问题]2.使用串口精灵传输命令没有问题.[我机器没有问题]3.但是我现在将代码用在VS2013发送数据就完全没有反应.[同样的代码同样的机器用VS2013就有问题]VS2013中我把数据发送分为2个部分:①初始化串口+②发送数据命令.如果每次发送格式是:①初始化串口+②发送数据命令[没有问题]如果格式是:②发送数据命令[

使用PHP接收POST数据,解析json数据

本篇文章是对使用PHP接收POST数据以及json数据进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: <?php $json_string = $_POST["txt_json"]; if(ini_get("magic_quotes_gpc")=="1") { $json_string=stripslashes($json_string); } $user = json_decode($json_string); echo

app-Android APP接收UDP数据出错

问题描述 Android APP接收UDP数据出错 /** * 接收数据线程 */ @Override public void run() { // TODO Auto-generated method stub try { while(!isStart); DatagramPacket dPacket = new DatagramPacket(reBuf, LEN); //InetAddress LocalAddr = InetAddress.getLocalHost(); //Log.e(T

C51串口中断接收多字节数据,并解析数据,问题是不能解析,哪错了?

问题描述 C51串口中断接收多字节数据,并解析数据,问题是不能解析,哪错了? #include #include #include #define uchar unsigned char #define uint unsigned int uchar code SZDLJ[13]={0x41,0x54,0x2B,0x43,0x49,0x50,0x4D,0x55,0x58,0x3D,0x31,0x0D,0x0A};//AT+CIPMUX=1 uchar code KQFU[21]={0x41,0x

数据接收-C# socket接收单片机数据问题

问题描述 C# socket接收单片机数据问题 单片机通过wifi将采集到传感器的数据传至上位机,单片机是每一秒发送一组数据,如"0xaa,0x55,'采集到的数据1','采集到的数据2'"问:怎样才能接收数据并判断第一个是"0xaa"并且第二位是"0x55"时候将"采集到的数据1"和"采集到的数据2"拿出来并整合合,下一秒也是这样循环下去,我现在只能做到接收数据.private byte[] m_rece

C# Socket 异步如何接收网页数据?

问题描述 publicstaticbyte[]ReceiveBodyData(Socketsocket){List<byte>list=newList<byte>();intnowContentLength=0;while(true){byte[]buffer=newbyte[BUFFER_SIZE];intreceiveCount=socket.Receive(buffer,BUFFER_SIZE,SocketFlags.None);if(receiveCount>0){f

Ajax Hacks-Hack6 接收数字数据

ajax|数据 Ajax Hacks-Hack6 接收数字数据 本Hack以数字形式接收股票价格,然后和用户输入处理以后显示出结果.如果服务器没有返回正确的数字,程序会显示错误信息. Ajax技术的一个巨大进步就是从服务器接收不连续的数据,而不是整个页面.有时,这些不连续信息不得不作为一个数字,而不是作为一个字符串(就像上一个Hack讲的那样)或者其他对象.JavaScript能够很容易的将其他各式的数据转换成数字而不需要用户的干预,但尽管如此,用户还是不想从服务器得到一些奇怪的数据(需要格式检