2023年11月29日 星期三

MODBUS 位址加40001 / 30001,為什麼就可以?不用輸入功能碼?什麼是Modicom Format?

 可能常用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),會比較清楚。



沒有留言:

張貼留言