什么是精准卫星授时?什么是NTP网络时间服务器?
什么是精准卫星授时?什么是NTP网络时间服务器?
京准电子科技官微——ahjzsz
时间同步技术在所有网络应用中都是至关重要的,从互联网到工业,金融和科学应用,莫不如是,因此催生了包括NTP(网络时间协议)与1588v2 PTP(精确时间协议)等用于互联设备授时协议、以及通过GNSS接收机进行时间同步的方法。
如今,随着物联网技术的不断发展,授时技术正在互联网、卫星定位、高频交易和移动电信网络中发挥着中央赋能的作用,进一步拓展物联网生态系统,为大量新兴商业提供发展机会。

授时类型
客户经常告诉我们,他们的IoT应用需要一个高度精确的授时解决方案,而当我们进一步了解时,他们的答案通常是:“高度精确的世界时”。当然,若您的应用场景在室外且不受任何遮挡,那么基于GNSS的授时模块可以提供精确的世界时。而对于室内或地下的应用场景,我们就需要其他授时技术支持。
象限A:定时器
许多授时应用只需准确测量单个设备上发生事件之间的时间间隔,而无需同步多个设备的时间,包括煮蛋定时器、秒表和心率监测器。这些应用需要准确的“时标”,需要准确测量孤立事件之间的时间间隔,是否与绝对时间同步并不重要。
象限B:天文参考时钟
诸如伦敦格林威治的全球参考时钟之类的应用,要求在单个设备上提供绝对时间,也包括钟楼、闹钟和手表,绝对时间可以是协调世界时(UTC)或给定时区的本地时间。
象限C:信号同步
需要共享时间间隔概念的应用属于象限 C。此类应用包括记录和共享多组信号的分布式传感器组,包括智能电网中的相量测量单元以及广播和辅助服务中的无线媒体设备(包括麦克风)。这些分布式应用需要能够同步它们的“时标”并确定一个约定的初始时间t0,将时间调整到绝对时间的要求通常不那么严格。
象限D:金融交易网络
此类应用属于最苛刻的分布式应用,需要将所有设备都高度同步到绝对时间。金融交易网络是一个众所周知的应用,该网络需要能够以纳秒级的精度确定交易股票的顺序。此类应用需要保持高精度的时间间隔并使其测量刻度与绝对时间同步,例如利用与GNSS卫星上搭载的原子钟同步的GNSS授时模块进行同步。
授时精准度
在我们理清了应用所需的授时类型后,现在需要讨论准确性需求了。但首先,请记住准确性和精度之间的差异:设置到错误时间的高质量手表可能非常精确,但不准确。

采取谨慎做法并为所有应用提供高度准确的绝对授时似乎是一个明智的策略。毕竟,在了解时间达到相同准确性的情况下,让煮蛋定时器在3分钟+/-5纳秒后关闭并无坏处,但如果在授时准确性方面设置不必要的严格要求,可能导致您错过高性价比且最适合您的应用的授时技术。因此,对各类授时技术进行权衡是不可避免的,仔细评估准确性要求将为您提供最佳的技术选择范围,并最终帮您提高设备的尺寸、成本和性能。
以汽车测速器为例,测速器是通过相距一公里的两个摄像头来追踪车辆的通过情况。摄像头之间的相对授时准确性应保持在较低水平,因为0.1秒的不确定度就会造成0.2km/h的测速不确定度。但对于报告事件的绝对时间的准确性要求要宽松的多,1秒钟就足够了。

智能电网包含分布在广阔区域的设备,此类设备用于测量采样值和记录事件,也具有一系列的时间准确性要求,IEC 61850对其进行了规定。
授时技术选项
IoT应用可以利用一系列授时源,但它们各自都存在限制条件。下面列出了无线IoT应用的一些最常见且可能是最适合的授时技术。

本地定时器
本地时钟易于实施,并且只要有足够的电量就可以随时使用。也就是说,其精度和准确性有一定的限制,具体取决于工作频率、晶振的品质因数、功耗、电源以及重要的环境变化,尤其是温度。此类时钟还需要初始化以设置时间。
常见的32 kHz时钟等低频时钟非常适合保持近似的时间观,用户可以使用高频、高质量、温度补偿型晶振为设备提供高精度的时基,同时最大程度地降低授时抖动。
无线广播发射器
长期以来,无线发射器一直被用来为广域设备提供授时信号,尤其是Rugby时钟,后来被迁移并在英国更名为MSF,在美国更名为WWVB,在德国更名为DCF77。除了不受发射机和接收机之间的传播延迟影响的频率参考外,它们还广播多种调制信号以指示秒数和绝对授时。
当用于同步多个设备时,可能需要考虑从发射机到设备的传播时间之差(Δt = (dA-dB)/C,其中c是光速)。对于物联网设备分布在较小区域(比如相隔100米)或不需要高精度(比如<1毫秒)的应用,可以安全地忽略此误差影响。
LTE信号
蜂窝通信无线信号(包括来自LTE基准站的信号)甚至在室内都可以广泛使用,并且随着低功耗广域网络的部署,该信号可能还会越来越多地应用于地下设施等以前不可用的位置。对于蜂窝通信调制解调器来说,将此类无线信号用于授时应用以及通信显然是很方便的。
蜂窝通信信号可提供出色的短期稳定性以及良好的长期稳定性,并可为连接到同一基准站的静态分布式物联网传感器网络提供相对精确的授时。视蜂窝通信系统设计而定,蜂窝通信信号可能会更准确地或不太准确地链接到绝对时间。举例来说,CDMA和TDMA系统通常使用GNSS准确地与绝对时间同步,而GSM网络的控制则不那么严格,而LTE基准站的绝对授时取决于网络配置。
与广播无线信号相同,蜂窝通信基准站可以发送指示传输绝对时间的消息,每个设备在收到该消息时会给出一个绝对时间(取决于信号从基准站传播的距离)。
网络授时
建立互联网连接后,授时服务和协议(例如NTP)可用于为调制解调器设备提供授时服务。此外,在某些为GNSS接收机提供加速定位的服务中,也可能附带提供授时。作为u-blox蜂窝通信调制解调器的CellLocate功能的一部分,绝对授时信息可通过蜂窝通信网络提供。
GNSS信号
GNSS信号可为IoT应用提供原子钟级别的授时精度。GNSS信号的授时单元可根据来自搭载原子钟的GNSS卫星的信号确定其 x、y 和 z 坐标以及绝对时间,因此已成为同步移动通信网络基础设施的首选解决方案,并且非常适合广域应用。
上面有关在IoT应用中使用授时解决方案的概述中可以看出,授时有两个关键方面:“时标”或测量时间间隔的能力,以及与某个时间基准同步的能力”。根据应用的需求,上述两个方面将提供信息来测量单个设备中以及不同设备组之间的物联网事件的授时,以及与绝对UTC时间的对照。
总体来说,多种信息源(来自本地时钟和无线信号–蜂窝通信和GNSS)可提高授时性能,为物联网设备和应用提供具有良好覆盖范围、准确性和可靠性的授时。
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象