我有一块硬件,我通过 RS232 使用 .NET SerialPort 类连接到该硬件。根据其文档,它不支持任何类型的流量控制。
我可以向设备写入查询和命令,对于查询,它将立即响应读取,如果设备的 echo 处于打开状态,并且我必须在写入命令后进行读取,那么命令写入也可以正常工作。命令和响应最多为 7 个字符。
但是,如果 echo 关闭并且我快速连续编写 2 个命令,则不会执行第二个命令,除非我在写入之间放入 Thread.Sleep(15),大概是复制 echo 时执行 ReadLine 所需的时间在。
我不一定能保证 echo 会打开,并且明确地打开它也不是一个真正的选择,所以我基本上需要处理我发现的行为。
SerialPort 设置如下:
SerialPort _serialPort = new SerialPort
{
PortName = "COM1",
BaudRate = 9600,
Parity = Parity.None,
DataBits = 8,
ReadTimeout = 5000,
WriteTimeout = 5000,
NewLine = "\x0D"
};
我正在使用 WriteLine 和 ReadLine 与之通信。
睡觉线程感觉就像一个黑客,我还没有找到我所有的谷歌搜索的替代方案。
那么,我错过了什么吗,有什么方法可以检查下一个写入串行端口的命令何时可以执行,或者 Thread.Sleep 几乎是我的任务?