使用serialport类,如何判断接收的数据已经中断? 将上面的语句放在 serialPort1_DataReceived事件当中, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte r_byte; while (serialPort1.BytesToRead != 0) { r_byte = Convert.ToByte(serialPort1.ReadByte()); switch (r_flag) { case 0: if (r_byte == 0xaa) { r_flag += 1; serial_input[0] = r_byte; } break; case 1: if (r_byte == 0xaa) { r_flag += 1; serial_input[1] = r_byte; r_count = 0; } else { r_flag = 0; r_count = 0; } break; case 2: 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; } } } 这个方法我用了,代码如下:在serialPort_DataReceived事件中:try{ if (czSerialPort.BytesToRead == 0) { strczData = "Error"; } else { //定义接收数据长度 int bytesRead = czSerialPort.BytesToRead; byte firstbyte = Convert.ToByte(czSerialPort.ReadByte()); //判断第一个字节是否是起始位:16进制的0x02 if (firstbyte == 0x02) { byte[] bytesData = new byte[bytesRead]; for (int i = 0; i <= bytesRead - 2; i++) { byte byteData = Convert.ToByte(czSerialPort.ReadByte()); //判断数据结束字节 if (byteData == 0x03) continue; bytesData[i] = byteData; } //将字节数组转换成字符串 strczData = System.Text.Encoding.Default.GetString(bytesData); //截取数据(舍去校验和等字符) strczData = strczData.Remove(7); //通过捕获异常来转换接收到的字符串 try { int intczData = Convert.ToInt32(strczData); strczData = Convert.ToString(intczData); } catch { strczData = "Error"; } }}catch (exection czerror){ MessageBox.Show(czerror.Message);}在代码中加入了你说的判断仍旧不行。 你可以可以用API写,这样就有延时参数可以用了 SERIALPORT_DATARECEIVED 怎么触发啊,我的每次都不执行啊? "Thu Apr 19 14:56:45 +0800 2012"这样格式的字符串怎么转成DateTime类型 似乎用委派都没办法解决的窗口卡的问题(重点问题,国家级问题) C#关于拖拽的问题!希望那个高手帮帮忙! 如何限制软件只能在一台电脑运行 请问:如何看到C#文件的设计界面 C#中用哪个运算符计算出2除以10的值为0.2?????? 有一个DataSet,我要清除其中一列的数据,怎么做? c#窗体程序中button控件的使用问题 这是为什么?哪里出现问题呢? 高分请教C#初学者的问题,谢谢大家! clickOnce问题 windows 下用C#来连接过Unix下DB2啊?如何做啊
{
byte r_byte;
while (serialPort1.BytesToRead != 0)
{
r_byte = Convert.ToByte(serialPort1.ReadByte());
switch (r_flag)
{
case 0:
if (r_byte == 0xaa)
{
r_flag += 1;
serial_input[0] = r_byte;
}
break;
case 1:
if (r_byte == 0xaa)
{
r_flag += 1;
serial_input[1] = r_byte;
r_count = 0;
}
else
{
r_flag = 0;
r_count = 0;
}
break;
case 2:
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;
}
}
}
在serialPort_DataReceived事件中:
try
{
if (czSerialPort.BytesToRead == 0)
{
strczData = "Error";
}
else
{
//定义接收数据长度
int bytesRead = czSerialPort.BytesToRead;
byte firstbyte = Convert.ToByte(czSerialPort.ReadByte());
//判断第一个字节是否是起始位:16进制的0x02
if (firstbyte == 0x02)
{
byte[] bytesData = new byte[bytesRead];
for (int i = 0; i <= bytesRead - 2; i++)
{
byte byteData = Convert.ToByte(czSerialPort.ReadByte());
//判断数据结束字节
if (byteData == 0x03)
continue;
bytesData[i] = byteData;
}
//将字节数组转换成字符串
strczData = System.Text.Encoding.Default.GetString(bytesData);
//截取数据(舍去校验和等字符)
strczData = strczData.Remove(7);
//通过捕获异常来转换接收到的字符串
try
{
int intczData = Convert.ToInt32(strczData);
strczData = Convert.ToString(intczData);
}
catch
{
strczData = "Error";
}
}
}
catch (exection czerror)
{
MessageBox.Show(czerror.Message);
}在代码中加入了你说的判断仍旧不行。