在命令调用之间等待串口响应

本文关键字:串口 响应 等待 之间 命令 调用 | 更新日期: 2023-09-27 18:09:44

我正在使用RS-232(串行)通信的静电计。它一次接受一个命令,并返回一个指示命令是否成功完成的响应。

为了演示,只考虑以下方法…

    private void SetDevice()
    {
        sc.SetBias();
        sc.SetRange();
        sc.SetCollectionTime();
        sc.SetID();
    }

sc.SetID()的方法签名如下:

    public void SetID()
    {
        ComPort.Write("*IDN?");
    }
上面的

可以让您了解其他单独的命令调用是什么样的。

由于DataReceived事件表明它是在辅助线程上引发的,我应该如何继续等待每个命令调用之间的响应?目前,在sc.SetBias()被调用之后,sc.SetRange()会触发,而不管前面的命令是否成功执行。

我可以欣赏,通过启动DataReceivedEvent在一个新的线程,它可以防止我的UI锁定,但在这种情况下,当它是关键的响应得到配对适当的命令调用,我不确定最好的可用选项,并将感谢一些指导在我的研究。到目前为止,我正在考虑获得当前UI线程的句柄并使用Thread.Sleep(sleepTime),但不知道静电计的响应时间到底有多可靠,这真的是最佳实践吗?难道每次命令发出后都不需要调用它吗?

在命令调用之间等待串口响应

如果您需要的是:

  1. 发送命令
  2. 等待响应
  3. 发送下一个命令

那么你可以使用信号量

工作方式如下:

Semaphore _sync = new Semaphore(1, 1);
SerialPort _port;
...
void Send(...){
    _sync.WaitOne()
    _port.Send(...);
}
void _port_DataReceived(...){
    _sync.Release();
}

试试!