? 英创工控主板SNTP网络校时功能--技术天地

英創工控主板SNTP網絡校時功能

 2013/7/9    

        本文轉自:程實的工作博客(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下還有一些參數沒有列出,哪些參數是完全不能改的。