C# 串行端口提供不需要的 IRP 消息
C# Serial Port gives unwanted IRP messages
我正在尝试通过串行端口向 RFID reader 发送命令(它就像一个键盘,KKMOON 制造的 M302)。
我有这段代码是为了发送指令:
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.DataReceived += myRecieved;
sp.Open();
byte[] bytestosend = { 0x03, 0x0a, 0x00, 0x0d };
sp.Write(bytestosend, 0, bytestosend.Length);
bytestosend = new byte[]{ 0x04, 0x05, 0x00, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);
bytestosend = new byte[] { 0x03, 0x06, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);
if (beep)
{
running = false;
bytestosend = new byte[] { 0x02, 0x13, 0x15 };
sp.Write(bytestosend, 0, bytestosend.Length);
}
sp.Close();
sp.Dispose();
sp = null;
我从串行端口侦听器获得此输出:
为了读取数据我需要得到的输出是
所以在 Hans Passant 的评论之后我意识到问题实际上只是没有正确读取串口!
为了读取消息的完整范围,我构建了一个读取整个缓冲区的方法:
private static string readData()
{
int reads = sp.BytesToRead;
byte[] bytesRead = new byte[reads];
try
{
sp.Read(bytesRead, 0, reads);
return BitConverter.ToString(bytesRead).Trim(' ') != "" ? BitConverter.ToString(bytesRead) : "-1";
}
catch
{
return "-1";
}
}
然后读取整个缓冲区,直到找到想要的 return 数据
while ((data += readData()) != "02-05-07")
{
if (data.Contains("-1"))
{
data = "";
}
Console.WriteLine(data);
Console.ReadLine();
}
这将使我能够从我的 RFID reader 中读取所有数据,我希望这对可能遇到问题的其他人有所帮助!
我正在尝试通过串行端口向 RFID reader 发送命令(它就像一个键盘,KKMOON 制造的 M302)。
我有这段代码是为了发送指令:
SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.DataReceived += myRecieved;
sp.Open();
byte[] bytestosend = { 0x03, 0x0a, 0x00, 0x0d };
sp.Write(bytestosend, 0, bytestosend.Length);
bytestosend = new byte[]{ 0x04, 0x05, 0x00, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);
bytestosend = new byte[] { 0x03, 0x06, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);
if (beep)
{
running = false;
bytestosend = new byte[] { 0x02, 0x13, 0x15 };
sp.Write(bytestosend, 0, bytestosend.Length);
}
sp.Close();
sp.Dispose();
sp = null;
我从串行端口侦听器获得此输出:
为了读取数据我需要得到的输出是
所以在 Hans Passant 的评论之后我意识到问题实际上只是没有正确读取串口!
为了读取消息的完整范围,我构建了一个读取整个缓冲区的方法:
private static string readData()
{
int reads = sp.BytesToRead;
byte[] bytesRead = new byte[reads];
try
{
sp.Read(bytesRead, 0, reads);
return BitConverter.ToString(bytesRead).Trim(' ') != "" ? BitConverter.ToString(bytesRead) : "-1";
}
catch
{
return "-1";
}
}
然后读取整个缓冲区,直到找到想要的 return 数据
while ((data += readData()) != "02-05-07")
{
if (data.Contains("-1"))
{
data = "";
}
Console.WriteLine(data);
Console.ReadLine();
}
这将使我能够从我的 RFID reader 中读取所有数据,我希望这对可能遇到问题的其他人有所帮助!