一文看懂Modbus, RTU, RS485等名詞的聯系
Modbus rtu和Modbus tcp兩個協議的本質都是MODBUS協議,都是靠MODBUS寄存器地址來交換數據;但所用的硬件接口不一樣,Modbus RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太網口。現在市場上有很多協議轉換器,可以輕松的將這些不同的協議相互轉換 如:Intesisbox可以把modbus rtu轉換成Modbus tcp
實際上Modbus協議包括ASCII、RTU、TCP。
標準的Modicon控制器使用RS232C實現串行的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊采用Maser/Slave方式。
Modbus協議需要對數據進行校驗,串行協議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗.
ModbusTCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。
TCP和RTU協議非常類似,只要把RTU協議的兩個字節的校驗碼去掉,然后在RTU協議的開始加上5個0和一個6并通過TCP/IP網絡協議發送出去即可
Modbus協議定義的寄存器地址是5位十進制地址,即:
線圈(DO)地址:00000~09999
觸點(DI)地址:10000~19999
輸入寄存器(AI)地址:30000~39999
輸出寄存器(AO)地址:40000~49999
由于上述各類地址是唯一對應的,因此有些資料就以其第一個數字區分各類地址,即:0x代表線圈(DO)類地址,1x代表觸點(DI)類地址、 3x代表輸入寄存器(AI)類地址、4x代表輸出寄存器(AO)類地址。
在實際編程中,由于前綴的區分作用,所以只需說明后4位數,而且需轉換為4位十六進制地址。
簡單點說,modbus有四種數據,DI、DO、AI、AO
DI: 數字輸入,離散輸入,一個地址一個數據位,用戶只能讀取它的狀態,不能修改。比如面板上的按鍵、開關狀態,電機的故障狀態。
DO: 數字輸出,線圈輸出,一個地址一個數據位,用戶可以置位、復位,可以回讀狀態,比如繼電器輸出,電機的啟停控制信號。
AI: 模擬輸入,輸入寄存器,一個地址16位數據,用戶只能讀,不能修改,比如一個電壓值的讀數。
AO: 模擬輸出,保持寄存器,一個地址16位數據,用戶可以寫,也可以回讀,比如一個控制變頻器的電流值。
無論這些東西被叫做什么名字,其內容不外乎這幾種,輸入的信號用戶只能看不能改,輸出的信號用戶控制,并可以回讀。離散的數據只有一位,模擬的數據有16位。