一般獲取精準時間的方式有兩種,第一種就是從NTP服務器上獲取,第二種則是通過衛(wèi)星獲取UTC時間,對于不能聯(lián)網的設備若想通過NTP協(xié)議獲取時間就只能通過外接支持UDP傳輸?shù)木W絡模塊,比如串口服務器。若設備支持衛(wèi)星定位則可通過獲取衛(wèi)星的UTC時間來獲取準確時間,對于需要使用北京時間的設備則需要通過換算。
UTC就是協(xié)調世界時,又稱世界統(tǒng)一時間、世界標準時間、國際協(xié)調時間,北京位于東八區(qū)比UTC時間快8小時的時區(qū)。
下面小編將通過Modbus衛(wèi)星定位模塊獲取UTC時間并通過MCGS腳本轉換東八區(qū)時間再通過Modbus協(xié)議修改PLC的RTC時鐘。
衛(wèi)星定位模塊采用EBYTE的E108-D01,一款支持多模定位并且支持UTC時間查詢的Modbus RTU從機,下表為E108-D01寄存器表截取的本案例會使用到的寄存器,寄存器直接存儲的UTC時間,需要+8小時換算成北京時間;
時間運算不能是簡單地加8小時,需要考慮大小月與閏年,以及時間計算的進位處理,比較復雜,MCGS腳本支持時間戳轉換,則可以將獲取的UTC時間轉換為時間戳,在加上8小時(時間戳計算需要使用秒,8小時等于28800秒),再轉換為其他格式的時間數(shù)據(jù),使用時間戳計算可以忽略大小月、閏年等復雜的時間處理過程。
有些PLC也支持通過時間戳配置RTC時間,有些則需要使用BCD或者普通的數(shù)值。
TM221可以通過BCD碼利用存儲字和存儲位配置系統(tǒng)字(%SW49-%SW53)結合系統(tǒng)位(%S50),下圖就可以看出利用系統(tǒng)字和系統(tǒng)位配置時間比較復雜;
TM221也可以通過PLC組態(tài)軟件中的“功能塊”的RTC功能修改,這里小編就通過這種方式修改PLC的RTC時間;
MCGS使用最便宜的TPC7062TX,該設備具有兩個串口,一個RS485(COM2)接口,一個RS232接口(COM2)接口,引腳定義這里就不再說明,不知道的可以到MCGS官網查詢。
這里使用官方自帶的設備,“所有設備”的“PLC”目錄下的“莫迪康-Modbus RTU”驅動,
PLC則使用施耐德的TM221,需要配置下列PLC梯型圖,使用了6個保持寄存器存儲MCGS發(fā)送的“年”“月”“日”“時”“分”“秒”,利用中間寄存器將參數(shù)寫入RTC功能塊實現(xiàn)時間校準。
將TM221使用寄存器格式化為下表,方便MCGS配置寄存器。
配置MCGS的設備列表以及寄存器查詢表,如下圖所示:
父設備配置,即RS-485總線的波特率參數(shù),這里使用波特率9600,數(shù)據(jù)位8,停止位1,無校驗;
分別配置GPS的寄存器地址,并使用地址1,配置TM221的寄存器地址,并使用地址0;
簡單做一個人機交互界面,如下所示:
下圖是MCGS的時間戳處理函數(shù),這里只說明了時間字符串轉時間戳,以及通過時間戳獲取年份的兩個函數(shù),其余函數(shù)用法類似。
將從GPS獲取的UTC時間分別賦予“當前UTC時間”,并通過字符串格式化函數(shù)將數(shù)值格式化為YYYY-MM-DD HH:MM:SS格式的字符串,方便直觀讀取數(shù)據(jù)和使用;
!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second)
將當前UTC時間轉換為時間戳,并將函數(shù)服務器控件“UTC時間戳”;
!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))
將時間戳增加8小時后,轉換為對應的北京時間的“年月日時分秒”并服務“北京時間”控件;
!TimeGetYear(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
!TimeGetMonth(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
!TimeGetDay(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
!TimeGetHour(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
!TimeGetMinute(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
!TimeGetSecond(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)
“修改”按鈕控件,需要先判斷UTC時間有效后才能進行校時,具體腳本如下:
至此就完成了衛(wèi)星校時的全部配置,億佰特小編從E108-D01如何獲取時間到PLC梯形圖開放RTC配置接口再到MCGS如何寫入時間PLC進行了細化簡介,根據(jù)這種方法可以對任何支持Modbus RTU協(xié)議的設備進行衛(wèi)星校時。
下圖是利用仿真設備演示跨月與跨年時設備自動校準北京時間的過程:
7 X 24 銷售服務熱線
4000-330-990深圳辦事處柯經理:18218726658 無錫辦事處劉經理:13558641933
成都總部銷售經理:
秦 科(無線模塊):18884314654 馮子恒(無線模塊):18828049434
蔡友銀(無線模塊):13882211021 葛宇龍(通信設備):19138800613
胡兵(外貿銷售經理):18584911141、 sales06@ebyte.com
業(yè)務郵箱:support@cdebyte.com 全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號B5棟(前臺座機:028-61543675)
?? 成都億佰特電子科技有限公司【版權所有】 蜀ICP備13019384號