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