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

时间:2016-05-17 12:13:28

标签: c# serial-port

对不起,如果这个问题没有任何意义。我在c#中创建一个GUI来接收和发送数据到控制器。我被困在一个非常奇怪的宫殿里。假设我已经向控制器发送数据,控制器应该向我发送确认。我正在处理确认。我的问题是在发送数据后我想提出错误,如果我没有从控制器得到任何东西。

2 个答案:

答案 0 :(得分:2)

在你的port_receive事件中设置一个" dataReceived"标志为真。在您的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();
    }
}

}

答案 1 :(得分:1)

像这样使用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
}