初学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仍然显示最后的数据,请教如何判断上位机已停止了数据传输呢?
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仍然显示最后的数据,请教如何判断上位机已停止了数据传输呢?
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