簡體   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