初学c#,使用serialport类连接串口读取上位机(一台称重仪表)数据,读取代码如下:
try
            {
                //取得第一个字节
                byte firstbyte = Convert.ToByte(serialPort.ReadByte());                //判断第一个字节是否是起始位:16进制的0x02
                if (firstbyte == 0x02)
                {
                    //定义接收数据长度
                    int bytesRead = serialPort.BytesToRead;
                    //数据接收字节数组
                    byte[] bytesData = new byte[bytesRead + 1];
                    //接收字节
                    byte byteData;
                    for (int i = 0; i <= bytesRead-1; i++)
                    {
                        byteData = Convert.ToByte(serialPort.ReadByte());
                        //判断数据结束字节
                        if (byteData == 0x03)
                            continue;
                        bytesData[i] = byteData;
                    }
                    //将字节数组转换成字符串
                    strczData = System.Text.Encoding.Default.GetString(bytesData);
                }
            }
            catch (Exception czerror)
            {
                MessageBox.Show(czerror.Message);
            }
再利用timer把读取的字符串显示到label,现在数据能够显示了,可是如果中断了仪表的通讯,label仍然显示最后的数据,请教如何判断上位机已停止了数据传输呢?

解决方案 »

  1.   

    应该有结束标识符吧,比如0xff
      

  2.   

    不知楼主是不是指通讯的串口被强行关闭了。即你所谓的重仪表已强行退出了。这时的serialPort实际已是名存实亡。如果是的话,请查阅相关:WM_DEVICECHANGE 
     
    http://msdn2.microsoft.com/en-us/library/aa363431.aspx 
    http://msdn2.microsoft.com/en-us/library/aa363480.aspx把这个例子中的逻辑盘改为串行口就行了。
    Detecting   USB   drive   removal   in   C#   program 
    http://www.codeproject.com/cs/system/DriveDetector.asp