Java通過socket和DTU,RTU連線工業感測器通訊

語言: CN / TW / HK

現在做DTU感測器監測資料一塊,給大家分享如何通過socket技術連線到DTU,並能和DTU下面的感測器通訊的,分享一下自己的心得和體會。

總體架構圖

先來看下整體網路結構圖。

工業名稱解釋

感測器:能夠採集資料機器,電腦端通過下發指令通過DTU發給感測器,感測器通過DTU返回相應的資料給電腦端,比如雨量計能實時反饋雨量,這很好理解。

RTU:遠端傳輸單元,可以是一臺plc(程式過程控制),通俗理解就是能夠程式設計的還可以將資料傳輸伺服器的工具。RTU內部是包含通訊模組的,RTU儀表配置伺服器後,他可以通過socket將採集器的資料轉發到伺服器。咦?你剛才不講說的DTU嗎?現在怎麼是DTU了,接下來我們看看。

DTU:資料傳輸單元,他主要的功能是能將IP資料和串列埠資料進行等價轉化。對比上面RTU的功能,如果說RTU能進行資料處理和資料傳輸,那麼DTU就只能進行資料傳輸了。像DTU因為沒有任何的資料處理動作,所以一般業界叫“透傳”即透明傳輸。所以RTU的價格一般比DTU貴很多,因為有軟體程式設計的成本。

RS485:RS485是一個物理介面,DTU和感測器就是通過RS485介面進行連線的。

Modbus協議:標準的序列工業協議。可以支援RS485,RS232介面。那既然是協議,就需要遵循一定的規範,舉個簡單的例子,讀取雨量計的命令是16進位制的_0E04000000027134_

那麼0E 04 00 00 00 02 71 34 分別對應的該感測器的通訊id,功能碼等。如下圖,這是一串指令,能夠讀取雨量的具體資料。

網路:DTU可以配置伺服器,通過socket技術通訊。

伺服器:伺服器解析資料並存入資料庫。

當然,雨量感測器也能返回一串標準16進位制資料DTU,_0E0404326640BCDA52,_具體解析格式如下,如果返回正確我們需要讀取5,6位元組進行解析。

這個是我任意舉的一個案例,是為了更好說明 Modbus協議 只要支援能modbus的感測器都類似,需要我們對照具體的 感測器通訊協議文件 進行轉化解析,一般都會有說明。

思路整理

樓主在剛開始接到任務不理解這些工業,介面,協議的概念,走了一些彎路。因為我們專案是需要從RTU換成DTU做資料採集的,已有專案RTU是能夠主動推送資料到伺服器的,當時比較困惑有幾個點,順便整理下思路。

  1. DTU能夠主動推送資料給你嗎?如果不能,我需要如何做?

不能,DTU既然是透傳的,說明我們需要通過DTU給感測器下發指令。‘

  1. 發什麼指令?

這裡的指令就是modbus指令,上面有類似指令說明,指令需要到相應的感測器通訊協議去獲取,一般都有說明,如果是新手,就找感測器廠家支援下,順便說一句,他們都是搞硬體的,軟體他們可能也不太清楚,這個時候就需要你的正確方向的判斷了。

  1. 如何下發指令?如何除錯下發指令正確性?

我因為當時是新手,我只懂程式,除錯都是通過自己寫的程式除錯的,一直執行程式沒有調試出來,最終才知道usb連線串列埠轉485工具再直接連線感測器,通過串列埠工具就可以直接傳送命令,返回對應的資料,一目瞭然,串列埠工具我用的是sscom。這個問題給我的感觸很深,可以先不寫程式碼,直接先在工具上分析結果。我主要用的是下面這三個工具。

  1. 如何打通socket和DTU連線的感測器?

最後一步就比較簡單了,通過socket,拿到二進位制資料後直接轉16進位制進行解析得到結果,我貼部分程式碼。

結尾

好的,今天就到這裡,希望這邊文章能對您有所幫助,有不懂的地方可以給博主留言哦,分享讓我們共同成長,喜歡的請點贊加關注哦。 點關注,不迷路, 我是【 叫練公眾號 ,微訊號 【jiaolian123abc】 邊叫邊練。