1、ModBus RTU通訊協議與ModBus通訊協議有什么區別?
ModBus協議是應用層報文傳輸協議(OSI模型第7層),它定義了一個與通信層無關的協議數據單元(PDU),即PDU=功能碼+數據域。
ModBus協議能夠應用在不同類型的總線或網絡。對應不同的總線或網絡, Modbus協議引入一些附加域映射成應用數據單元(ADU),即ADU=附加域+PDU。
目前,Modbus主要有兩種通信方式:
1.以太網,對應的通信模式是MODBUS TCP。
2.異步串行傳輸(各種介質如有線RS-232-/422/485/;光纖、無線等),對應的通信模式是MODBUS RTU或MODBUS ASCII。
2、關于MODBUS RTU通訊協議的提問?
modbus 主要由站地址(一個字節)+功能碼(一個字節)首地址(兩個字節)+訪問字數(兩個字節)+校驗碼(CRC16或LRC兩個字節)總共8個字節組成。
3、modbus、rtu、modbus rtu分別是什么?
modbus協議是工控行業的標準協議,前身為莫迪康所寫,現已被施奈德收購。
而modbus分為兩種協議:即串口協議(modbus rtu)和網口協議(modbus tcp)協議,一般的工控機只支持rs232或者RS485的串口模式,這個時候工控機的協議棧里就只有modbusRTU協議,當他從串口接收到數據時,會直接根據報文中的數據進行控制,如果需要用modbusTCP協議進行傳輸,則需要使用帶有網口的PLC。
具體的幀格式如下
modbus RTU 地址域 功能碼 數據 差錯校驗
modbus TCP 目的地址 協議id 長度 單元號 功能碼 數據
簡單的說 tcp是由RTU加工而來的,而RTU則是另外一種概念,不包含在modbus協議內。是工控行業對監控設備的簡稱。
4、關于modbus_RTU協議主機發送的命令的一些問題?
01 讀保持線圈狀態(Read coil status)?
02 讀輸入線圈狀態(Read input status)?
03 讀保持寄存器(Read holding register?
04 讀輸入寄存器(Read input register)?
05 寫單個線圈(Force single coil)?
06 寫單個寄存器(Preset single register?
15 寫多個線圈(Force multiple coils)?
16 寫多個寄存器(Preset multiple registers)?
這些都是什么意思?
答:
01 讀取邏輯線圈組狀態
02 讀取離散量線圈組狀態
03 讀取一個或多個保持寄存器的二進制值
04讀取一個或多個輸入寄存器的二進制值
05 改變邏輯線圈狀態
06 改變單個寄存器的二進制值
15改變多個寄存器的二進制值
16 多個操持寄存器的二進制值
5、什么是modbus rtu master?
就是選RTU模式,因為MODBUS分為ASCII模式和RTU模式,MASER就是設置為主站,一般為PLC端,變頻器設為從站,還要注意主站和從站地址的設置。
6、Modbus rtu 為什么沒有開始和結束標記?
由于Modbus rtu幀的每個字節是16進制數,數值范圍在00~FF,若像Modbus ASCII那樣用02、03表示開始和結束標記,則與數值2、3發生沖突,無法判斷其是標記還是數值,無法數據解包
7、modbus tcp到 rtu的轉換?
請仔細查看幀格式:
modbus RTU 地址域 功能碼 數據 差錯校驗
modbus TCP 目的地址 協議id 長度 單元號 功能碼 數據
寫一個TCP轉RTU的程序放到設備里做modbus網橋即可。
8、MODBUS RTU通訊線被燒?
用萬用表量一下出來的通訊線,電壓不超過5V應該沒問題,一般不會燒東西,接的時候區分正和負。很多產品B是正,量一下看看。
9、MODBUS RTU協議中浮點數是如何存儲,讀到浮點數寄存器的數值如何轉換成所需的浮點數?
浮點數保存的字節格式如下:
地址 +0 +1 +2 +3
內容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
這里S 代表符號位,1是負,0是正
E偏移127的冪,二進制階碼=(EEEEEEEE)-127。
M 24位的尾數保存在23位中,只存儲23位,最高位固定為1,此方法用最較少的位數實現了較高的有效位數,提高了精度。零是一個特定值,冪是0尾數也是0。
浮點數-12.5作為一個十六進制數0xC1480000保存在存儲區中,這個值如下:
地址 +0 +1 +2 +3
內容 0xC1 0x48 Ox00 0x00
浮點數和十六進制等效保存值之間的轉換相當簡單。下所的例子說明上而的值-12.5如何轉換。浮點保存值不是一個直接的格式,要轉換一個浮點數,位必須按上面的浮點數保存格式表所列的那樣分開。例如:
地址 +0 +1 +2 +3
格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二進制 11000001 01001000 00000000 00000000
十六進制 C1 48 00 00
從這個例子可以得到下面的信息:
符號位是1表示一個負數冪是二進制10000010或十進制130,130減去127是3,就是實際的冪。尾數是后面的二進制數10010000000000000000000。
在尾數的左邊有一個省略的小數點和1,這個1在浮點數的保存中經常省略,加上一個1和小數點到尾數的開頭,得到尾數值如下:
1.1001000000000000000000。
接著,根據指數調整尾數。一個負的指數向左移動小數點,一個正的指數向右移動小數點,因為指數是3,尾數調整如下:
1100.10000000000000000000。
結果是一個二進制浮點數,小數點左邊的二進制數代表所處位置的2的冪,例如: 1100表示
(1*2^3) +(1*2^2) + (0*2^1) + (0*2^0) =12。
小數點的右邊也代表所處位置的2的冪,只是冪是負的。例如: .100...表示(1*2^(-1))+ (0*2^(-2) )+ (0*2^(-2))...=0.5。這些值的和是12.5。因為設置的符號位表示這數是負的,因此十六進制值0xC1480000表示-12.5。
10、RS-485的設備,遵守MODBUS-RTU協議。怎樣用的電腦讀取信息?
用電腦的串口,接個485轉換器,接到設備的485接口,再找個串口軟件,根據設備資料上的寄存器地址發送modbus報文,modbus報文通過串口軟件發送,報文格式: 01 03 00 00 00 01 84 0A(讀寄存器命令)。
11、MODBUS RTU 測試軟件?
推薦:modscan32。
12、MODBUS RTU協議,上位機與儀表通信,讀寫數據都正確,為什么儀表掉電,寫入的參數又丟失了?怎么保存?
兩種可能:
如果在儀表上設置參數掉電后都保存不了的話,基本可以確定是儀表問題;有些儀表寫入參數后還需要向固定的寄存器寫入確認參數,為了保證寫入參數真確,需要檢查儀表通信部分說明書。