国产熟睡乱子伦视频_激情五月综网站点_中文字幕乱偷无码_国产日韩综合第一页_在线观看亚色视频区一区二_八戒八戒神马影院免费_国产av黄色电影_4hu四虎永久在线影院97年小娇妻_台湾佬自偷自拍情侣在线_秋霞成人永久免费网站

當前位置: 首頁 >應用方案 >技術應用 >

「詳解」基于NTP的HMI校準服務

一、NTP協議簡介

NTP網絡時間協議TCP/IP協議族里的一個應用層協議,常用于客戶端服務器進行時鐘同步,提供高精度的時間校準,由于該服務存在并發(fā)量大對丟包也沒有要求,所以傳輸層一般使用UDP報文,而TCP存在確認、重傳、阻塞等機制導致傳輸速率也不如UDP,一般情況系統(tǒng)默認使用123端口作為NTP端口。

NTP服務可用于網絡管理、計費系統(tǒng)、銀行授時、協同處理、系統(tǒng)時間、安全認證等場景,這些場景一般對時間精度有較高的要求,比如心知天氣使用私鑰加公鑰,為了私鑰安全還引入時間戳有效判斷機制,通過時間戳約束公鑰有效期,不知心知天氣API采用這種通訊機制,很多的網絡通訊為了安全都會對系統(tǒng)時間進行校驗,因此有一個統(tǒng)一的標準時間對于網絡而言意義重大。

基于NTP的HMI校準服務

NTP就是用來同步網絡中各個主機時鐘的一種協議,他將全球各大授時中心的準確時間分享給設備,其精度在內網內可達1毫秒內,在互聯網上可以達到幾十毫秒以內。

分享一些國內常用的NTP服務器:

一、 中國科學院國家授時中心(ntp.ntsc.ac.cn:123

二、 騰訊云NTP授時服務(ntp.tencent.com:123

三、 阿里云NTP授時服務(ntp.aliyun.com:123

四、 教育網NTP授時服務(time.edu.cn:123

二、實例分析

NTP報文

部分HMI本身沒有對NTP服務進行集成,應該必須對NTP報文有一定的了解才能正確使用NTP對時服務器,下面將通過分析NTPv3了解NTP報文格式。

下面是一個發(fā)送實例,注意遠程主機必須使用域名,我這里實際使用的是ntp.ntsc.ac.cn:123,軟件在發(fā)送后自動DNS并覆蓋了我的輸入,重要的事說三遍,必須使用域名?。?!必須使用域名!?。?/span>

NTP報文

這里將發(fā)送時間和內容都進行記錄,也對NTP服務器返回時間與數據進行記錄,后面分析應當配置的準確會用到日志和數據收到的時間。

[2022-08-12 11:47:50.805]# SEND HEX TO 114.118.7.163 :123>

1B 00 04 FA 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

[2022-08-12 11:47:50.853]# RECV HEX FROM 114.118.7.163 :123>

1C 02 04 EA 00 00 05 CF 00 00 15 6C 7B 8B 21 03 E6 A0 44 42 42 72 91 0E 00 00 00 00 00 00 00 00 E6 A0 4B E8 11 B7 C8 3E E6 A0 4B E8 11 B8 9C 4D

這里統(tǒng)計計算時間的方法,NTP報文中使用的是時間戳機制,我們將發(fā)送時間2022-08-12 11:47:50.805與接收時間2022-08-12 11:47:50.853也轉換為時間戳方便后續(xù)使用,通過網上搜索的時間戳轉換工具精選轉換發(fā)送時間(1660276070)與接收時間(1660276070)。

這篇文章不對協議進行分析僅對部分位進行說明,NTP協議報文可以參考這篇文章(https://www.jianshu.com/p/8bb29838ae1b

NTP報文使用長度為64 Bits無符號數存儲一個時間戳,前32 Bits表示整數部分, 32 Bits表示小數部分, 理論分辨率 2^?32s,由于HMI精度只能到秒,小數位對于本項目是沒有任何用處,不分析小數部分,將接收報文記錄離開NTP服務的時間戳從報文中分離(E6 A0 4B E8 11 B8 9C 4D),提取前四個字節(jié)(HEX:E6 A0 4B E8àDEC:3869264872,與發(fā)送日志的1660276070805相差甚遠,這里就是NTP報文最坑的地方,時間戳0表示的是1970-01-01 08:00:00開始計算,而NTP服務的時間戳是從1900-01-01 00:00:00開始計算,因此兩種時間戳需要通過減去一個系數才能轉換2208988800= (70 * 365 + 17) * 24 * 60 * 60。

服務器返回的時間戳(3869264872-2208988800=1660276072),可見設備發(fā)送日志與實際時間相差2s。

實際上NTP對時服務在計算精確時間是有一個推薦公式

客戶端與服務端的時間系統(tǒng)的偏移定義為θ、網絡的往返延遲定義為δ,基于此,可以對t2進行精確的修正,已達到相關精度要求,它們的計算公式如下:

公式

公式中:

t0是請求數據包傳輸的客戶端時間戳

t1是請求數據包回復的服務器時間戳

t2是響應數據包傳輸的服務器時間戳

t3是響應數據包回復的客戶端時間戳

實際寫入的時間t2加上網絡延時δ的一半就可以了(t2+δ/2

移植到HMI

經過上面原理的學習,對NTP有了一定的了解,現在根據HMI的要求將業(yè)務流程復制到腳本中實現。

新建變量,使用透傳的模式的設備驅動,主要是學習腳本,以前關于MQTT協議的文章有講過怎樣配置驅動,變量表如下圖,由于NTP協議使用16進制收發(fā)數據,也就需要對應調整收發(fā)數據模式:

移植到HMI

使用按鍵關聯發(fā)送腳本如下:

COM1_WRITE_BUFF_CACHE="1B0004FA0001000000010000000000000000000000000000000000000000000000000000000000000000000000000000"

!SetDevice(system_time,6,"Write(COM1_WRITE_BUFF_CACHE, COM1_READ_BUFF_CACHE)")

t0=!TimeGetCurrentTime()

使用事件策略關聯接收狀態(tài)變量COM1_READ_RUN_STATE”,在電平跳變時觸發(fā)“數據解析”與“時間配置”腳本:

“數據解析”,將NTP服務返回的數據保存到t1_strt2_str,在轉換成時間戳存儲在t1t2,

IF !len(COM1_READ_BUFF_CACHE)=96 THEN

t3=!TimeGetCurrentTime()

t1_str=!mid(COM1_READ_BUFF_CACHE,65,8)

t1=!Hex2I(t1_str)-2208988800

t2_str=!mid(COM1_READ_BUFF_CACHE,80,8)

t2=!Hex2I(t2_str)-2208988800

set_time=t2+((t3-t0)-(t1-t1))/2

ENDIF

“時間配置”,利用計算得到的時間戳配置HMI系統(tǒng)時間:

!SetTime(!TimeGetYear(set_time),!TimeGetMonth(set_time),!TimeGetDay(set_time),!TimeGetHour(set_time),!TimeGetMinute(set_time),!TimeGetSecond(set_time))

查看技術文章和免費咨詢技術問題可以訪問我司官網及各官方平臺:

微信號:cdebyte

今日頭條:億佰特

新浪微博:成都億佰特

成都億佰特--物聯網應用專家,隨時在身邊,時刻準備為您服務!




4000-330-990

https://www.wjx.cn/jq/84863372.aspx