[英]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毫秒
StopWatch實際上是多媒體計時器的包裝器,是Windows平台上最准確的計時器,但它們不提供絕對時間。 它們以特定頻率給出刻度,知道你可以將它轉換為時間。 問題是,滴答聲是從啟動時開始的滴答,與系統時間無關。
旁注:這取決於你想要的精確程度。 不要忘記接收消息的硬件和讀取.NET串行類中的字節有一定的延遲。 與.NET不適合的“硬實時”相比,延遲可能很大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.