Modbus 通訊協(xié)議是什么?
Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個(gè)品牌)在1979年發(fā)明的,是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議。為更好地普及和推動(dòng)Modbus在基于以太網(wǎng)上的分布式應(yīng)用,目前施耐德公司已將Modbus協(xié)議的所有權(quán)移交給IDA(Interface for Distributed Automation,分布式自動(dòng)化接口)組織,并成立了Modbus-IDA組織,為Modbus今后的發(fā)展奠定了基礎(chǔ)。
MODBUS是一種國(guó)際標(biāo)準(zhǔn)的通訊協(xié)議,用于不同廠商之間的設(shè)備交換數(shù)據(jù)(一般是工業(yè)用途);
Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語(yǔ)言。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。
它描述了一控制器請(qǐng)求訪問(wèn)其它設(shè)備的過(guò)程,如何回應(yīng)來(lái)自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。Modbus是一種單主站的主/從通信模式。一條Modbus網(wǎng)絡(luò)上同時(shí)只能有一臺(tái)主站,從站可以有若干個(gè)。
Modbus具有以下幾個(gè)特點(diǎn):
1.標(biāo)準(zhǔn)、開(kāi)放,用戶(hù)可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會(huì)侵犯知識(shí)產(chǎn)權(quán)。目前,支持Modbus的廠家超過(guò)400家,支持Modbus的產(chǎn)品超過(guò)600種。
2.Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無(wú)線等。
3.Modbus的幀格式簡(jiǎn)單、緊湊,通俗易懂。用戶(hù)使用容易,廠商開(kāi)發(fā)簡(jiǎn)單。
一般情況下,兩臺(tái)設(shè)備通過(guò)MODBUS協(xié)議傳輸數(shù)據(jù):最早是用RS232作為硬件接口,(也就是普通電腦上的串行通訊口(串口));也有用RS422的,也有常用的RS485,這種接口傳輸距離遠(yuǎn),在一般工業(yè)現(xiàn)場(chǎng)用的比較多。
MODBUS協(xié)議著名的又分MODBUS RTU,MODBUS ASCII和后來(lái)發(fā)展的MODBUS TCP三種模式。
Modbus RTU和Modbus TCP的區(qū)別
Modbus RTU和Modbus TCP是Modbus通信中比較好用的兩個(gè)協(xié)議,兩者協(xié)議很相似。
在工業(yè)現(xiàn)場(chǎng)一般都是采用Modbus RTU協(xié)議,一般而言,大家說(shuō)的基于串口通信的Modbus通信協(xié)議都是指Modbus RTU通信協(xié)議。與Modbus RTU協(xié)議相比較,Modbus TCP協(xié)議則是在RTU協(xié)議上加一個(gè)MBAP報(bào)文頭,并且由于TCP是基于可靠連接的服務(wù),RTU協(xié)議中的CRC校驗(yàn)碼就不再需要,所以在Modbus TCP協(xié)議中是沒(méi)有CRC校驗(yàn)碼的,所以就常用一句比較通俗的話來(lái)說(shuō):Modbus TCP協(xié)議就是Modbus RTU協(xié)議在前面加上五個(gè)0以及一個(gè)6,然后去掉兩個(gè)CRC校驗(yàn)碼字節(jié)就OK。雖然這句話說(shuō)得不是特別準(zhǔn)確,但是也基本上把RTU與TCP之間的區(qū)別說(shuō)得比較清楚了。
RTU協(xié)議中的指令由地址碼(一個(gè)字節(jié)),功能碼(一個(gè)字節(jié)),起始地址(兩個(gè)字節(jié)),數(shù)據(jù)(N個(gè)字節(jié)),校驗(yàn)碼(兩個(gè)字節(jié))五個(gè)部分組成。
數(shù)據(jù)由數(shù)據(jù)長(zhǎng)度(兩個(gè)字節(jié),表示的是寄存器個(gè)數(shù),假定為M)和數(shù)據(jù)正文(M乘以2個(gè)字節(jié))組成。
發(fā):01 03 01 8E 00 04 25 DE //讀(0x03),從寄存器地址01 8E 開(kāi)始讀,讀4個(gè)寄存器00 04
回:01 03 08 00 01 00 01 00 01 00 01 28 D7 // 08表示數(shù)據(jù)長(zhǎng)度 ,00 01 00 01 00 01 00 01讀到的數(shù)據(jù)
發(fā):00 10 00 20 00 01 02 00 00 AC A0 // 寫(xiě)(0x10),從寄存器地址 00 20開(kāi)始寫(xiě),寫(xiě)一個(gè)寄存器 00 01,寫(xiě)入值 00 00
回:00 10 00 20 00 01 01 D2
Modbus TCP協(xié)議是在RTU協(xié)議前面添加MBAP報(bào)文頭,由于TCP是基于可靠連接的服務(wù),RTU協(xié)議中的CRC校驗(yàn)碼就不再需要,所以在Modbus TCP協(xié)議中是沒(méi)有CRC校驗(yàn)碼。
|
可以理解為報(bào)文的序列號(hào),一般每次通信之后就要加1以區(qū)別不同的通信數(shù)據(jù)報(bào)文
|
|
|
|
表示接下來(lái)的數(shù)據(jù)長(zhǎng)度,單位為字節(jié)
|
|
|
發(fā):00 00 00 00 00 06 00 03 00 20 00 01
回:00 00 00 00 00 05 00 03 02 00 00
發(fā):00 00 00 00 00 06 00 04 00 30 00 01
回:00 00 00 00 00 05 00 04 02 00 08
發(fā):00 00 00 00 00 09 00 10 00 20 00 01 02 00 00
回:00 00 00 00 00 06 00 10 00 20 00 01
三、總結(jié)(注:16進(jìn)制發(fā)送)
免責(zé)聲明:本網(wǎng)站部分文章、圖片等信息來(lái)源于網(wǎng)絡(luò),版權(quán)歸原作者平臺(tái)所有,僅用于學(xué)術(shù)分享,如不慎侵犯了你的權(quán)益,請(qǐng)聯(lián)系我們,我們將做刪除處理!