C#串口精确时间戳

时间:2016-01-21 09:46:07

标签: c# gps serial-port

我正在使用通过USB连接的GPS鼠标/接收器(创建虚拟COM端口)来确定计算机时间漂移。 GPS鼠标以NMEA消息的形式发送PPS事件我希望获得每个消息的精确时间戳,以便我可以计算GPS时间和计算机时间之间的差异。

收到邮件后立即获取时间戳的最佳方法是什么。我试过轮询串口和数据接收事件。现在我的代码看起来像这样:

Seq.unfold (fun (a,i) -> 
    let a' = 
        if i % 2 = 0
        then a*2
        else a+1
    Some (a', (a',i+1)))
    (1,1)
|> Seq.append [1]

我已尝试使用Stopwatch的DateTime.Now.Ticks,但差异的噪音是20ms左右。我见过的纸张精度/精度达到了1ms。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

DateTime将有抖动,记录在案:

  

此属性的分辨率取决于系统计时器,即   在Windows系统上大约15毫秒

MSDN

StopWatch实际上是多媒体计时器的包装器,是Windows平台上最准确的计时器,但它们不提供绝对时间。它们以特定频率给出刻度,知道你可以将它转换为时间。问题是,滴答声是从启动时开始的滴答,与系统时间无关。

旁注:这取决于你想要的准确程度。不要忘记接收消息的硬件和读取.NET串行类中的字节有一定的延迟。与“硬实时”相比,延迟可能很大。哪个.NET不适合。