关注官方微信

EN

EN.

卓岚NTP时间模块用法

发布时间:2019-08-30 作者:上海卓岚 浏览量:17238
1.概述

时间同步在工程应用、科学研究、民生等领域都有广泛的应用。时间是生活和工程中最重要的参数之一,有的时候相距几米的不同电子设备需要协同动作,需要同步时钟;某些时候相距几千公里的两台设备需要进行科学测量需要同步时钟;有的时候挂在不同的教室的时钟需要精确到100毫秒以内,为了能够统一考试时间。目前来说可以通过无线电波、卫星、网络实现时间的同步。虽然网络时间同步精度有限,但是网络时间同步是最简单和最经济的方式。

NTP时间同步示意图

网络时间同步一般通过NTP(Network Timer Protocol)协议来完成时间的获取,互联网上有多个NTP时间服务器,可以选定一个服务器。NTP模块通过向NTP时间服务器获得时间来让自己的时间和时间服务器同步,NTP的协议并没有那么简单,除了网络协议本身复杂外,它还需要计算路径传输的时间差。ZLSN2043S模块已经可以自动实现NTP协议并同步时钟,用户如果需要获得NTP模块的内部时间可以通过单片机串口发送串口指令即可获得。

用此方案用户不同的单片机(单片机1、单片机2、单片机3)之间的时间相对误差可以控制在2ms以内,基本可以满足普通时间同步的需求。

卓岚提供的时间同步产品,从NTP芯片到成品设备,种类繁多。

NTP模块类型
类型 型号
NTP单芯片(集成Phy) ZLAN1043 ↴
以太网NTP时间模块 ZLSN2043S ↴
Wifi NTP时间模块 ZLSN7046T ↴
NTP时间设备(RS232/485接口) ZLAN5143 ↴

注意ZLAN1043的固件版本要在1.578及以上,ZLAN7144需要在1.490及以上。

2.用法

以上已经介绍了NTP时间同步的网络和硬件结构图,下面主要介绍软件方面如何配置NTP模块,以及单片机如何通过串口获得当前的时间。

2.1.配置文件

配置文件用于设置使用互联网上哪个时间服务器。在计算机上新建一个空的目录ntp_web目录,然后新建一个空的ntp.txt文件,内容如下:

[NTP]

NTP_SERVER1=a1.a2.a3.a4

NTP_SERVER2=b1.b2.b3.b4

NTP_SERVER3=c1.c2.c3.c4

RE_ARUIRE_TIME=0

名字 含义
NTP_SERVER1 第一个时间服务器的IP或者域名(最多为29个字符)。最多有3个服务器可以设置,但是必须从NTP_SERVER1开始写,如果只有一个就写NTP_SERVER1,只有2个就写NTP_SERVER1和NTP_SERVER2。
RE_ARUIRE_TIME 如果已经成功获得时间,那么每隔多少毫秒重新获得时间。范围是0~2147483647。如果设置为0,则表示永远不再重新获得时间。不重新获得时间时,系统靠CPU内部的时钟来计算时间。 建议对于精度比较高的地方10分钟重新让NTP获得时间,即ntp.txt中的RE_ARUIRE_TIME=60000。如果采用通过串口发送指令获得时间的用法,RE_ARUIRE_TIME可以设置为0。

保存好配置文件后,通过设备编辑→固件和配置界面下载这个目录,下载后重启设备生效。

配置文件下载

只有下载了ntp.txt的模块才会启用NTP功能,否则不具有NTP功能。

2.2.通过串口获得时间

以对应的波特率(通过zlvircom可以通过网口设置设备波特率,默认为115200bps)向模块的串口发送固定的指令:ed f2 a3 56 ca db 91 84 b0 d7 92 02 0a 51 4a。则模块会返回10个字节的数据,如果没有返回或者返回的数据全部是0,说明时间未获得或者其它错误。

串口发送和接收

返回时间格式为:年-月-日-时-分-秒-毫秒-星期。其中年和毫秒占用2字节,V1.580以上版本毫秒才有意义。例如返回数据:07 e3 05 04 0f 24 29 00 00 06,则表示2019年5月4日15点35分41秒,00 00 为毫秒数。06为星期六的意思。发送指令后,一般返回时指令会在100ms内返回给串口。

注意使用通过串口获得时间比主动向串口发送时间具有更高的精度,不同模块的时间误差在2ms时间内。另外如果需要精确到绝对时间,需要减去串口按照指定波特率发送以上10个字节的时间。

2.3.主动向串口发送时间

在上述ntp.txt目录下新建一个httpd.txt的文件,httpd.txt内容请咨询卓岚工程师。保存后,和ntp.txt文件一起使用下载工具下载到设备内部。这样设备会每隔1秒钟向串口主动输出时间。输出的日期格式为字符串“2019-05-13 22:23:31”,不包含字符串末尾的0。其中年4位、其它都是2位。日期和时间中间用空格分开。

同时也支持毫秒的输出格式为:“2019-05-13 22:23:31.123”。其中123为毫秒。请尽量使用高波特率输出时间。