簡體   English   中英

C#串口精確時間戳

[英]C# serial port precise time stamp

我正在使用通過USB連接的GPS鼠標/接收器(創建虛擬COM端口)來確定計算機時間漂移。 GPS鼠標以NMEA消息的形式發送PPS事件我希望獲得每個消息的精確時間戳,以便我可以計算GPS時間和計算機時間之間的差異。

收到消息后立即獲取時間戳的最佳方法是什么。 我試過輪詢串口和數據接收事件。 現在我的代碼看起來像這樣:

     while ( serialPort.IsOpen())
        {

                if (serialPort.BytesToRead != 0)
                {   GetSystemTimePreciseAsFileTime(out filetime);
                    DateTime collected = DateTime.Now;


                    time.Add(collected.Ticks.ToString());
                    time2.Add(filetime.ToString());

                    serialPort.DiscardOutBuffer();
                    serialPort.DiscardInBuffer()
                }
                else {

                } 
        }`

我已嘗試使用DateTime.Now.Ticks與秒表,但差異的噪音是20ms左右。 我見過的紙張精度/精度達到了1ms。 有誰知道我做錯了什么?

DateTime將有抖動,記錄如下:

此屬性的分辨率取決於系統計時器,在Windows系統上約為15毫秒

MSDN

StopWatch實際上是多媒體計時器的包裝器,是Windows平台上最准確的計時器,但它們不提供絕對時間。 它們以特定頻率給出刻度,知道你可以將它轉換為時間。 問題是,滴答聲是從啟動時開始的滴答,與系統時間無關。

旁注:這取決於你想要的精確程度。 不要忘記接收消息的硬件和讀取.NET串行類中的字節有一定的延遲。 與.NET不適合的“硬實時”相比,延遲可能很大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM