现在是几奌?
你知道现在几点吗?请问您SNAP PAC控制器知道现在几点了吗?他们是同一时间吗?谁是对的?
在本周的博客中,我们将谈论这个大球摇摆不定的时间东西……不,不是时间旅行,而是实际的时间……。特别是如何将PAC控制器设置为当前时间。
没有阅读;请记住,时间像箭和水果一样苍蝇像香蕉一样。
SNTP会捕捉到漂移。
与大多数电子计时设备一样,SNAP PAC控制器也使用小石英晶体在振荡器电路中,为实时时钟提供连续的脉冲流。由于温度,湿度以及其他电气和环境原因,这种晶体会随着时间的流逝而随着时间的流逝而漂移。此漂移将导致控制器内部的实时时钟与正确的时间不同。漂移的数量取决于许多因素,虽然您可以做一些补偿,归根结底,实时时钟将出错。有时候只有几秒钟左右的时间,有时甚至更多。有时会很快,有时会很慢。
好消息是,从固件版本9.2及更高版本中,我们有一系列PAC控制SNTP命令我们可以用来调整时钟在控制器上,与Internet更准确的时钟同步。
NTP或网络时间协议于1979年首次使用,并于1985年左右实施。几乎一旦计算机联网在一起,我们就显然需要一种方法来确保它们都保持同步。毕竟,没有人愿意在发送前5分钟收到一封电子邮件。
NTP建立后不久,也很清楚,许多设备(通常较小的嵌入式设备)不需要NTP的全部功能和复杂性,因此实现了简单的网络时间协议(SNTP)。这就是PAC控制器使用的。
简单的网络时间协议有许多很酷的方面,但是一个关键方面是如何跟踪往返数据包延迟在设备要求时间和时间服务器之间。通过使用两个时间戳,起源和接收,网络的往返数据包延迟是时钟同步算法的一部分,并从最终时间戳中消除。
快速旁注:如果您正在运行SoftPac,则无需运行这些命令,因为Windows操作系统会处理PC时钟设置和调整。
好的,在历史课上足够了,我如何在控制器中设置时钟?
需要两个命令。当您要设置/调整/调整时钟时运行它们。通常,每天一次很好。这是一些可以做到这一点的示例代码。
//每天设置一次控制器日期/时间。同时处理时区和日光节省。
seconds_since_midnight = getsecondssincemidnight();
if(secons_since_midnight == 0)然后
time_zone_status = settimezoneconfiguration(“ pst1,11,0,1,0200/pdt,3,0,2,0200”);
time_sync_status = synchronizeclocksntp(5,s_time_server_url);
//必须有此延迟,因此我们每晚只设置一次时钟。
delaymsec(1000);
万一
在这种情况下,字符串s_time_server_url等于:“ udp:time.nist.gov:123”
让我们将其分解,看看这里发生了什么。首先,我们正在检查是否是午夜。即使它可能不是完全午夜(因为控制器时钟可能已经整天漂移),我们都将纠正任何漂移,无论它是快速还是缓慢,因此每天的漂移都不会加重前一天的漂移。
注意如果您有批处理作业或午夜运行或翻滚的数据日志,则可能需要在其他时间运行。如果这样做,只需选择零以外的几秒钟 - 午夜值即可。
如果控制器实时时钟设置至关重要,则欢迎您每小时左右运行命令,但是不必比这更频繁地运行它。如果是这样,那么您将处于特殊用例中,应该考虑其他方法来准确设置时间(例如GPS)。
回到我们的示例:午夜,我们运行两个命令。首先,我们必须设置控制器时区和日光储蓄规则。如果我们不这样做,则将为UTC设置控制器时钟。在某些情况下,这可能正是您所需的,但是大多数人希望将其PAC控制器时钟设置为当地时间,并为其处理日光储蓄规则。
让我们将这个时区配置命令分开,并以此为例,以说明为什么这样的命令使我们对RTFM至关重要,也就是说,阅读了梦幻手册。当我们查看命令后的字符串时,我们看到的第一件事是“ PST1”。Temecula位于PST时区的美国西海岸,那么“ 1”是用的呢?精彩的手册(PAC控制命令参考,表格1701)表明,对于此设定的时区配置命令,我们必须仅使用手册背面列出的时区缩写。在那里,我们看到了“ PST1”(我们的)和“ PST2”,它们将时钟设置为菲律宾标准时间。没有PST,如果我们将字符串设置为此,我们会遇到错误。从中的课程总是(总是)RTFM。这真的很棒,它确实可以节省您的时间!
从那里开始,其余的字符串设置了日光储蓄规则,即何时向前弹出以及何时倒退。11月是第11个月和3月是第3个月,发生在星期日(第0天),这是本月的第一个和第二个星期日,并且每次发生在凌晨2:00…。繁荣!在一个字符串中,我们刚刚处理了时区和日光节省!
接下来,我们实际设置了时钟。在我们在此处使用的示例中,控制器具有网关IP地址和DHCP服务器IP地址集(通过PAC Manager),因此知道如何到达Internet并查找字符串中的计时器服务器的主机名。In this case that’s time.nst.gov on port 123. We have a 5-second timeout on this command in my example, so that if there is a problem connecting with the time server, we don’t get hung up and sit here forever in the code.
一旦从时间服务器获得响应后,控制器就会为您设置时钟。在我非常简单的示例代码中,我们不检查命令状态。我们只是假设它已经起作用。但是,如果未能设置时间,您可能需要添加一些重试或通知代码。
如果您的控制器无法访问互联网怎么办?您的实时时钟注定要漫无目的地在空间和时间上漂移吗?好吧,不,您有一些选择。
首先,也许您的IT部门在您的设施中运行了一个时间服务器,而您的控制器虽然无法访问Internet,但可以在其本地网络上访问该服务器。只要它运行SNTP服务器,您就可以使用相同的命令,但指向该PC的IP地址来获取并设置控制器时钟。
如果您的PAC控制器独自出门,真正的岛屿,与互联网或局部网络上的服务器无联系,那么看看使用GPS。GPS提供了一个串行连接,可提供非常准确的时间戳。如果您对此感兴趣,请告诉我;我很想在这个主题上创建一个博客。
真的什么时候?
我最喜欢的网站之一将其视为一个旁路:“”一个有一个时钟的男人知道现在几点了。一个有两个时钟的男人永远不确定。“ 我喜欢这个。
SNTP将使我们真正接近当前时间。既然我们的SNAP PAC控制器已经拥有这些命令,那么将控制器设置为另一台计算机认为它是非常简单的。从该网站上可以看到,您可以长时间追逐时间标准(呵呵,看看我在那里做了什么)。
一旦我们将实时时钟设置在PAC控制器上,就该在正确的时间做事了!
如何?很高兴你问。订阅此博客并下周回来,因为我们将讨论安排任务的一些不同方法。
直到下周,欢呼伴侣。