在工控行業很多領域中,需要控制系統具有高精度的時間同步功能,IRIG就是美國靶場司令委員會制定的一種時間標準。自EM9X60后,英創EM928x嵌入式主板也實現了IRIG-B碼校時功能。之前的相關文章見鏈接http://www.emtronix.com/article/article2011414.html。
IRIG是美國靶場司令委員會制定的一種時間標準,其中的串行時鐘編碼共有6種格式,即A、B、D、E、G、H。它們的主要差別是時間碼的幀速率不同,廣泛應用的IRIG-B即其中的B型編碼,B型碼的時幀速率為1幀/s,可傳遞100位信息。圖1是IGIG-B碼示意圖,其時幀周期是1s,每秒100個碼元,使用脈寬編碼方式,每個碼元脈寬10ms,共三種碼元,其中高電平5ms和2ms分別表示二進制 “1”,“0”,高電平8ms為位置標識,分別為P0,P1,…P9。連續兩個8ms寬度脈沖的第二個8ms脈沖的前沿為秒準點標志,也是一個時間格式的幀參考標志。一個時間格式幀包含了秒,時,分,天數,年份,控制位等豐富的信息。
圖1:IRIG-B碼標準
EM9280擁有4路IRQ,其中IRQ3也可用于IRIG-B碼校時。使用IRIG-B碼校功能時,需要設置注冊表,關閉IRQ3功能
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IRQ3]
'TrueInstall'=dword:0
同時打開IRIQB對時功能
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IGB1]
'TrueInstall'=dword:1
此時IRIGB功能打開,IRQ3不能繼續做IRQ使用(其它3路IRQ可正常使用)。
在與IRIG-B碼時鐘源時間同步時,用戶并不需要關心IRIG-B碼的具體含義,實現方法,僅需要將B碼送到EM9280的IRQ3接口(對應英創EM9280評估底板CN10,11針腳)就行了,EM9360的驅動程序將完成B碼解碼,同步等工作。
應用層面使用EM9280的IRIG-B校時功能方法如下。
1、通過標準的文件操作方式來打開系統的校時功能。
HANDLE hIrigb;
hIrigb = CreateFile(L'IGB1:', // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
NULL, // security attributes (ignored)
OPEN_EXISTING, // creation disposition
FILE_FLAG_RANDOM_ACCESS, // flags/attributes
NULL); // template file (ignored)
2、關閉由CreateFile打開的HANDLE,即關閉系統校時功能。
CloseHandle(hIrigb);
3、用戶可以調用DeviceIoControl來查看系統最近一次同步的時間,調用方法如下:
#define IOCTL_IRIG_B_GET_TIME CTL_CODE(FILE_DEVICE_UNKNOWN, 0xC10, METHOD_BUFFERED, FILE_ANY_ACCESS)
bRet = DeviceIoControl(hIrigb, // file handle to the driver
IOCTL_IRIG_B_GET_TIME, // I/O control code
NULL, // in buffer
0, // in buffer size
&systime, // out buffer
sizeof(SYSTEMTIME), // out buffer size
NULL, // pointer to number of bytes returned
NULL); // ignored (=NULL)
4、用戶可以通過修改系統注冊表來配置靈活的校時方案,通過注冊表的設置,可實現時間秒同步、分鐘同步、小時同步或日同步,對應的注冊表項如下:(下面的注冊表鍵值為系統默認值)
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\IGB1]
'DeviceArrayIndex'=dword:1
'Prefix'='IGB'
'Dll'='irig_b.dll'
'DeviceID'=dword: fe
'Priority256'=dword:88
; AutoSync =0: 禁止校時功能; =1: 秒同步; =2: 分同步; = 3: 小時同步; = 4: 日同步
'AutoSync'=dword:2 ; minute sync
; SyncMinute:當AutoSync為小時同步時,在SyncMinute分鐘進行同步
'SyncMinute'=dword:3b ; 0x3b = 59 -> minute on sync
; SyncHour: 當AutoSync為日同步時,在SyncHour小時進行同步
'SyncHour'=dword:17 ; 0x17= 23 -> hour on sync
傳統的工控板卡在對IRIG-B碼處理時,通常需要增加額外的硬件(如單片機,FPGA)對B碼進行解碼,然后再通過串口、總線或其它形式將數據交給主控板卡處理,增加了系統成本和操作難度,英創EM9280及EM9X60可直接對B碼進行解碼,不需要增加任何硬件就能實現毫秒級精度的時間同步,大大降低了系統復雜程度,節約了成本,提高了系統穩定性。
-
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35303
發布評論請先 登錄
相關推薦
評論