串口超时

时间:2016-06-02 08:17:09

标签: serial-port timeout freeze

我正在使用带有串口通信的Biomic V3,一切顺利,直到我发送EOT(传输结束)字符。我正在使用后台工作人员来完成写作。串口超时并没有发生,应用程序挂起。

沟通流程:

发送:入队角色

接收:确认字符

发送:标题

接收:确认字符

发送:患者

接收:确认字符

发送:工具订单

接收:确认字符

发送:页脚

接收:确认字符

发送:传输结束字符(应用程序挂起)

任何人都可以帮我解决这个问题,因为我没有想法! 我提前谢谢你了!

    #region Static Variables

    private static AutoResetEvent _SendWaitHandle = new AutoResetEvent(false);

    #endregion

    #region Member Variables

    private object _Lock = new object();

    private BackgroundWorker _BackgroundWorker;

    #endregion

    #region Public Methods

    public void Write()
    {
        Monitor.Enter(_Lock);
        try
        {
            // Reset Handle
            _SendWaitHandle.Reset();

            // Send Data Logic

            // Wait for ACK
            if (_SendWaitHandle.WaitOne(1000))
            {
                // Send EOT
            }
            else
            {
                // Timeout Occurred
                // Your Logic To Handle Timeout
            }
        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            Monitor.Exit(_Lock);
        }
    }

    #endregion

    #region Private Methods

    private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        // When ACK is received call SET
        _SendWaitHandle.Set();

    }


    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        write();
    }

    #endregion
}

1 个答案:

答案 0 :(得分:-1)

自己完成。将计时器添加到串行端口处理程序以避免超时