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