繁体   English   中英

在特定时间间隔c#中从串行端口接收到数据

[英]received data from serial port in specific time interval c#

抱歉,这个问题没有任何意义。 我在c#中创建一个GUI,以从控制器接收数据和向控制器发送数据。 我被困在一个很奇怪的宫殿里。 假设我已经向控制器发送了数据,并且控制器应将确认发送回去。 我正在处理确认。 我的问题是发送数据后,如果我没有从控制器中得到任何东西,我想提出一个错误。

在port_receive事件中,将“ dataReceived”标志设置为true。 在您的timer.Elapsed事件处理程序中,如果此值为false,则表示尚未及时接收到数据,并且可能引发错误。 下面的示例演示了类似的内容,DataReceived方法表示您的port_receive方法。 您可以按计时器间隔和延迟进行操作,以查看是否及时接收到数据,则永远不会显示错误消息。

using System;
using System.Threading.Tasks;
using System.Timers;

namespace ConsoleApplication7
{
class Program
{
    static bool dataNotReceived = true;
    static readonly Timer timer = new Timer {Interval = 1000};

    static void Main(string[] args)
    {
        timer.Elapsed += (sender, eventArgs) =>
        {
            if (dataNotReceived)
            {
                Console.WriteLine("Data not received, error thrown...");
                throw new Exception();
            }
        };

        timer.Start();

        DataReceived();

        Console.ReadLine();
    }

    static async Task DataReceived()
    {
        await Task.Delay(2000);
        Console.WriteLine("Data received in time");
        dataNotReceived = false;
        timer.Stop();
    }
}

}

像这样使用SerialPort的ReadTimeout

SerialPort Port = new SerialPort()
//Define baudrate and so on
Port.ReadTimeout = 1000;

现在,您可以通过等待答案来获取TimeoutException。

Port.Write(Request);
try
{
  //waiting for an answer
  Port.ReadByte();
}
catch (TimeoutException)
{
  //No answer until timeout
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM