可能常用MODBUS的新手,可能會有一個疑問? 為什麼我在人機輸入時,只需要輸入位址+40001 或+30001,就可以讀寫MODBUS位址。 但在查MODBUS的協議時,反而找不到+40001/+30001的意義? 功能碼03就是+30001碼?功能碼04就是+40001嗎? NO, NO,NO
============================================== 例:下圖中,是一個
光看這裡並沒有提到功能碼03/04要怎麼讀寫?
從wiki百科裡,可以看到:其實Modbus是由Modicon發表的。 Modbus是一種串行通訊協定,是Modicon公司(現在的施耐德電氣 Schneider Electric)於1979年為使用可程式化邏輯控制器(PLC)通訊而發表。Modbus已經成為工業領域通訊協定事實上的業界標準,並且現在是工業電子裝置之間常用的連接方式。 ============================================== 下以的資料,是來自modbus組識網站底下:https://www.modbus.org/ https://www.modbus.org/docs/PI_MBUS_300.pdf (非常非常舊的資料了)
在功能碼03的範例有提到: 要讀40108~40110的地址的暫存器,但實際上, 發生的功能碼是03,位址是6B=107 (相當於+40001=40108) 功能碼06,也是+40001
在功能碼04的範例有提到: 要讀30009的地址的暫存器,但實際上, 發生的功能碼是04,位址是08 (相當於+30001=30009)
從文件的內文及範例可以知道, +40001=功能碼03+位址 +30001=功能碼04+位址
======= 從台達DOP人機的通訊規格來看看: 關於MODBUS的通訊格式,有很多,
看了最標準的就屬於以下這兩個
Modbus RTU /ASCII HEX Address(Master)裡可以看到,位址是0-FFFF, Output Registers:功能碼就是03,在DOP編輯時,選R,就自動帶功能碼03 Input Registers 其實就表示是功能碼03/04
在選擇要顯示時,會出現的是符號格式,這候,R=Input Registers,RW=Output Registers
如果我們把通訊換成 Modbus nW RTU / ASCII (Master)你會發現讀寫的位址變成40001-50000,30001-400000,跟我們的MODBUS不同了。 這時候才能用+300001 跟 +40001的寫法。
總結: 為什麼可以+30001+40001的寫法,是因為你選的Master裝置有支援Modicom Format的格式, 才可以這麼寫。但也不是每個格式都能這麼寫,還要取決於,你選的通訊格式。 因為光Modbus,就有這麼多種。所以通常我選擇最基本的格式Hex Address(Master),會比較清楚。 |