【发布时间】:2020-08-13 09:58:56
【问题描述】:
我有这个 CDC 非接触式阅读器,它与显示为虚拟串行端口的 USB 连接。我可以使用以下代码找到端口并发送 AT 命令:
string strPort = GetPortName();
SerialPort srPort = new SerialPort(strPort, 9600);
srPort.Open();
if (srPort.IsOpen)
{
//device info
srPort.WriteLine(@"ATI\r" + (char)(13));
System.Threading.Thread.Sleep(200);
MessageBox.Show("Device: " + srPort.ReadExisting());
//card UID
srPort.WriteLine(@"AT+i\r" + (char)(13));
System.Threading.Thread.Sleep(200);
string strRes = srPort.ReadExisting();
MessageBox.Show("UID: " + strRes);
srPort.Close();
}
我正在根据device documentation 发送命令。第一个命令正常,但第二个,应该给我卡 UID 总是返回 ERROR。
我是否以正确的方式将命令字符串发送到端口?因为第二个命令之间有一个+ 符号,我想这可能是错误的原因?
我尝试联系他们的支持,但没有反馈。所以我希望在这里得到一些帮助。
【问题讨论】:
-
首先推荐使用异步通信而不是同步通信。如果您正确设计界面,也不需要睡眠说明。您应该以“\n\r”而不是“\r\n”来终止行。由于 Window 操作中内置的计时,数据可能会以块的形式返回,因此您需要一个循环并读取,直到您到达行尾。
-
@jdweng 关于如何在我的案例中使用异步通信的任何提示?
-
另外,我认为 srPort.WriteLine() 命令已经根据您的操作系统附加了一个 '\r\n'。尝试使用 srPort.Write()
-
(char)(13)不是必需的。这是你之前写的\r。
标签: c# winforms c#-4.0 serial-port cdc