Modbus作為一種迄今依然在廣泛、靈活使用的通訊協議,行業內的專家對它的解讀已經非常細致、專業了。協議格式、數據模型、功能碼的含義等不再贅述。本文主要是總結了一下,基于我司Tnbuild數據服務系統,無論是作為南向采集設備的協議,或是作為北向轉發到平臺的協議,我司在實際項目中,做的一些Modbus協議的格式變化或者協議延伸。
行業很大,應用變化更是層出不窮,以下的總結,也只是管中窺豹。在此也歡迎與行業內朋友們進一步做交流與共享!
序號 | 自定義名 | 數據格式及場景描述 |
1 | Modbus RTU | 3號命令:讀保持寄存器 讀取010300000001840A 接收0103020000B844 常規儀表、傳感器; 網關做主站,問答方式讀取數據 |
2 | Modbus TCP | 3號命令:讀保持寄存器 讀?。?/span> 000000000006010300000001 接收:0000000000050103020000 現場控制設備、plc; 網關做主站,問答方式讀取數據 |
3 | Modbus ASCII | 3號命令:讀保持寄存器 讀?。?/span>30313033303030303030303138343041 接收:3031303330323030303042383434 同等點位字符傳輸量大、傳輸效率較低,實際使用少; 網關做主站,問答方式讀取數據 |
4 | Modbus RTU 代理 | 和標準Modbus RTU報文格式一樣 網關在還原原有RTU通訊基礎上,可以根據需要讀取對應的數據 網關做轉接,靈活解析需要的數據 |
5 | Modbus RTU | 和標準Modbus RTU報文格式一樣 讀取現場設備主動推送的RTU數據,網關做從站 |
6 | Modbus TCP | 和標準Modbus TCP報文格式一樣 讀取現場設備主動推送的TCP數據,網關做從站 |
7 | Modbus SOE | 標準的Modbus報文格式,在程序中增加了寄存器值的判斷,以及寄存器值寫入的條件 Modbus寄存器1作為SOE使能,讀取到該寄存器值為1,將寄存器2的值(報警id)寫到寄存器3中, 以便綜保檢測到正確的ID號,在寄存器1中的SOE使能清零。 |
8 | Modbus Control | 標準的Modbus報文格式,在程序中增加了寄存器值的判斷,以及寄存器值寫入的條件,結合轉發MQTT平臺的下發,程序收到平臺控制的閥門開關指令,將現場閥門使能開關打開,等待現場工人使用完關閉閥門后,再將使能開關關閉。 |
9 | Modbus 104Control | 在標準Modbus的05和06指令上做改動,給一些特定的地址下發不同的值,實現對保護裝置的遙控合閘/分閘選擇及執行。例: 05 05 05 00 FF 00 8D 72 遙控合閘選擇 05 05 05 00 FF 00 8D 72遙控合閘選擇返校 05 05 05 80 FF 00 8C 9A 遙控合閘執行 05 05 05 80 FF 00 8C 9A遙控合閘執行返校 |
10 | Modbus RTU/TCP 字符串采集/轉發 | 字符串的采集和轉發相當于把字符轉換成ASCII碼對應的十六進制,作為數據加在標準的Modbus報文里傳輸,采集支持將設備傳過來的ASCII碼解析為原字符,轉發可以將取到的字符串再以Modbus協議傳給Modbus主站 例如,帶字符數值的Modbus轉發報文: 01 03 07 31 32 33 40 61 62 63 79 56 其中標注藍色的16進制轉換為字符串為123@abc 一般會有一些工廠把生產數據存在數據庫,就像生產數據里的時間,值班人等,都屬于需要傳輸的字符串,網關可以從數據庫取到這些數據,再以別的協議傳給平臺或主站;同樣如果有工廠的生產數據存在一個服務器上,服務器對外通訊是Modbus協議,那就可以用網關將服務器中的數據采集到 |
11 | Modbus TCP轉發斷線緩存
| Modbus基本的傳輸指令不變,增加和Modbus主站的連接判斷;判斷連接斷開之后執行數據存儲(用實時數據庫的方式存儲為一個DB文件);連接恢復之后讀取DB文件,將數據按照實際需求的格式上送一些現場環境的網絡信號不穩定,或者使用有線網絡傳輸,為避免數據在斷網或者網絡波動的時候丟失,需要加上斷線緩存的功能;網絡斷開時存儲數據,網絡恢復后將緩存的數據上送。 |