英创工控主板SNTP网络校时功能

 2013-7-9          [nemail]    
[lablebox]

        本文转自:程实的工作博客(x10'S Blog)

        原文地址:为Windows CE5.0的主板增加SNTP网络校时功能

 

        英创工控主板产品,大多数都应用于连续工作的工业环境中,对实时时钟有普遍的需求。由于RTC晶体总是有一定误差的,我们控制的精度为+/-10ppm,对长期运行的设备就需要在线自动校时功能。我们可以利用标准的SNTP协议来实现这个功能。

 

        在Windows CE中校时功能是作为标准服务,由service.exe来管理运行的。对应用程序来说,只需要执行下面的简短代码,就可实现SNTP的对时功能:

        WCHAR szControlString[] = L'sync';
        DWORD dwLenIn = sizeof(szControlString);
        HANDLE hFile = CreateFile(L'NTP0:', GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);
        if(INVALID_HANDLE_VALUE == hFile)
        {
                printf('Open NTP0: failed\r\n'); 
                return 0;
        }
        //执行时间同步操作
        DeviceIoControl(hFile, IOCTL_SERVICE_CONTROL, szControlString, dwLenIn, NULL, 0, NULL, NULL);
        CloseHandle(hFile);

 

        如果客户直接引用上述代码在现有的主板上运行,发现对时不成功。这主要是由于微软发布的缺省release版的timesvc.dll似乎有些问题,需要重新build之后才能有效。我们会在5.1之后的标准版中增加SNTP校时功能。对先前已购买的客户,若需要使用SNTP校时功能,可与我们联系,以更新内核。

 

        SNTP还有一组注册表,在使用前可能需要关注一下。

        [HKEY_LOCAL_MACHINE\Services\Timesvc]
    'AutoUpdate'=dword:0
    'ClientOnly'=dword:1
    'AutoDST'=dword:0      ; auto Daylight Saving Time
    'Trustlocalclock'=dword:0   ;只能为0
    'Refresh'=dword:48190800 ; 2 weeks
    'RecoveryRefresh'=dword:1B7740 ; 30 minutes
    'Threshold'=dword:5265C00 ; 1 day
    'Server'='pool.ntp.org'

 

        注册表中的各项参数都可在msdn中找到解释,所以只对特殊的情况进行简要说明。“Server”指定的是网上的SNTP服务器,根据实际应用,也可以改成ip地址。注意使用URL时,需要在userinfo.txt中配置好DNS服务器的ip。如果AutoUpdate设置为1,每次系统上电复位启动时,都会自动进行一次SNTP校时。Timesvc下还有一些参数没有列出,哪些参数是完全不能改的。

[lablebox]