我们的工作中用到一个磁卡传感器,通过串口通讯。微机不断地往串口写一串指令码(读卡指令码),该传感器就会立刻返回一串代码作为回应。如果没有磁卡接触传感器,则回应吗为:"\nA1F3C\r",若有磁卡接触传感器,则回应码为:"\nA1F0007CA32901\r",但我们在serialPort_DataReceived()事件代码中接收有磁卡接触回应码时却总是收到"\nA1F0007",即8个字符,后面的却收不到,造成接收数据不全,代码如下:
string message = "";
message = serialPort.ReadExisting();
if (message.Substring(0, 7) == "\nA1F3C\r" && message.Length == 7)
{
serialPort.DiscardInBuffer(); //清除接收缓冲区
serialPort.DiscardOutBuffer();
return;
}
MessageBox.Show(message); //message显示的是 \nA1F0007总是得不到完整的回应码,请问该如何解决此问题?谢谢各位!
string message = "";
message = serialPort.ReadExisting();
if (message.Substring(0, 7) == "\nA1F3C\r" && message.Length == 7)
{
serialPort.DiscardInBuffer(); //清除接收缓冲区
serialPort.DiscardOutBuffer();
return;
}
MessageBox.Show(message); //message显示的是 \nA1F0007总是得不到完整的回应码,请问该如何解决此问题?谢谢各位!
ReadExisting()方法读取的时候,接收缓冲区中还没有收到\nA1F0007CA32901\r这个完成的串,看你的情形只是收到\nA1F0007你就读取了,当然不可能读取完整。你先理解用什么方法的使用,至于怎么读取,在上一贴我已经说过类似的方法了。
你的需求是这种“一问一答”,建议你使用串口同步写入后立即读取,读取到的内容开头和结尾标志明显,很好处理。
{
return;
} byte[] data = new byte[Len];
serialPort.Read(data, 0, Len); //从串口读取信息,此处读取的数据为byte,所以得转换成字符串,方法如下/// <summary>
/// 将Byte转换成字符串
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string Getstring(byte[] data)
{
string str = Encoding.GetEncoding("GB2312").GetString(data);
return str;
}