Modbus是一種開放協(xié)議,這意味著制造商無需支付版稅就可以免費(fèi)使用它。它已成為工業(yè)中的標(biāo)準(zhǔn)通信協(xié)議,并且現(xiàn)在是連接工業(yè)電子設(shè)備的最常用方法。它被許多行業(yè)的許多制造商廣泛使用.Modbus通常用于將來自儀表和控制設(shè)備的信號(hào)傳輸回主控制器或數(shù)據(jù)采集系統(tǒng),例如測(cè)量溫度和濕度并將結(jié)果傳送到計(jì)算機(jī)的系統(tǒng)。Modbus通常用于將監(jiān)控計(jì)算機(jī)與遠(yuǎn)程終端單元(RTU)連接在監(jiān)控和數(shù)據(jù)采集(SCADA)系統(tǒng)中。
Modbus通過設(shè)備之間的串行線路傳輸。最簡(jiǎn)單的設(shè)置是連接兩個(gè)設(shè)備(主設(shè)備和從設(shè)備)上的串行端口的單根串行電纜。
數(shù)據(jù)以一系列1和0的形式發(fā)送,稱為位。每個(gè)位都作為電壓發(fā)送。零作為正電壓發(fā)送,而一個(gè)作為負(fù)電壓發(fā)送。這些位很快發(fā)送。典型的傳輸速度為9600波特(每秒位數(shù))。
什么是十六進(jìn)制?
在解決問題時(shí),查看傳輸?shù)膶?shí)際原始數(shù)據(jù)會(huì)很有幫助。長(zhǎng)串的1和0很難讀取,因此這些位組合在一起并以十六進(jìn)制顯示。每個(gè)4比特的塊由從0 到F 的16個(gè)字符之一表示。
每個(gè)8位塊(稱為字節(jié))由00 到FF 的256個(gè)字符對(duì)中的一個(gè)表示。
數(shù)據(jù)如何存儲(chǔ)在標(biāo)準(zhǔn)Modbus中?
信息存儲(chǔ)在四個(gè)不同的表中的從設(shè)備中。兩個(gè)表存儲(chǔ)/關(guān)閉離散值(線圈)和兩個(gè)存儲(chǔ)數(shù)值(寄存器)。每個(gè)線圈和寄存器都有一個(gè)只讀表和讀寫表。每個(gè)表有9999個(gè)值。每個(gè)線圈或觸點(diǎn)為1位,并分配一個(gè)介于0000 和270E 之間的數(shù)據(jù)地址。每個(gè)寄存器為1字= 16位= 2字節(jié),并且數(shù)據(jù)地址在0000 和270E 之間。
線圈/寄存器編號(hào)可以被認(rèn)為是位置名稱,因?yàn)樗鼈儾粫?huì)出現(xiàn)在實(shí)際消息中。數(shù)據(jù)地址用于消息中。例如,第一個(gè)保持寄存器,編號(hào)40001,具有數(shù)據(jù)地址0000 。這兩個(gè)值之間的差異是偏移量。每個(gè)表都有不同的偏移量。1,10001,30001和40001。
什么是奴隸身份證?
網(wǎng)絡(luò)中的每個(gè)從站都分配有1到247的唯一單元地址。當(dāng)主站請(qǐng)求數(shù)據(jù)時(shí),它發(fā)送的第一個(gè)字節(jié)是從站地址。這樣,每個(gè)從設(shè)備在第一個(gè)字節(jié)之后知道是否忽略該消息。
什么是功能代碼?
主機(jī)發(fā)送的第二個(gè)字節(jié)是功能代碼。此數(shù)字告訴從站要訪問哪個(gè)表以及是從表中讀取還是寫入表。
什么是CRC?
CRC代表循環(huán)冗余校驗(yàn)。它是在每個(gè)modbus消息的末尾添加兩個(gè)字節(jié)以進(jìn)行錯(cuò)誤檢測(cè)。消息中的每個(gè)字節(jié)用于計(jì)算CRC。接收設(shè)備還計(jì)算CRC并將其與來自發(fā)送設(shè)備的CRC進(jìn)行比較。如果錯(cuò)誤地接收到消息中的一位,則CRC將不同并且將導(dǎo)致錯(cuò)誤。。
什么是數(shù)據(jù)類型?
對(duì)于示例FC03 表明,寄存器40108包含AE41 ,其轉(zhuǎn)換為16位1010 1110 0100 0001 大!但是這是什么意思?嗯,這可能意味著一些事情。寄存器40108可以定義為這些16位數(shù)據(jù)類型中的任何一種:
甲16位無符號(hào)整數(shù)(0到65535之間的整數(shù))寄存器40108包含AE41 = 44609(十六進(jìn)制到十進(jìn)制的轉(zhuǎn)換)
甲16位帶符號(hào)整數(shù)(-32768到32767之間的整數(shù))AE41 = -20,927 (十六進(jìn)制到一個(gè)包裝,如果其超過32767然后減去65536十進(jìn)制的轉(zhuǎn)換)
甲兩種字符的ASCII字符串(2鍵入的字母)AE41 =?甲
甲開/關(guān)值的離散(在此工作方式相同的16位整數(shù)0或1的值的十六進(jìn)制數(shù)據(jù)將是0000 或0001 )注冊(cè)40108也可與結(jié)合
40109形成任何這些32位數(shù)據(jù)的類型:
甲32位無符號(hào)整數(shù)(0和4294967295之間的數(shù)字)40108,40109 = AE41 5652 = 2923517522
一個(gè)32位有符號(hào)整數(shù)(-2,147,483,648和2,147,483,647之間的數(shù)字)AE41 5652 = -1,371,449,774
甲32位雙精度IEEE浮點(diǎn)數(shù)。這是一個(gè)數(shù)學(xué)公式,允許任何實(shí)數(shù)(帶小數(shù)點(diǎn)的數(shù)字)用32位表示,精度約為7位數(shù)。AE41 5652 = -4.395978 E-11 這是一個(gè)電子表格IEEE浮點(diǎn)計(jì)算器,用于輸入4個(gè)字節(jié)或2個(gè)字。要下載副本,請(qǐng)右鍵單擊并選擇目標(biāo)另存為...
甲四個(gè)字符的ASCII字符串(4鍵入的字母)AE41 5652 =?AVR 更多寄存器可以被組合以形成更長(zhǎng)的ASCII字符串。每個(gè)寄存器用于存儲(chǔ)兩個(gè)ASCII字符(兩個(gè)字節(jié))。
什么是字節(jié)和字排序?
Modbus規(guī)范沒有準(zhǔn)確定義數(shù)據(jù)如何存儲(chǔ)在寄存器中。因此,一些制造商在他們的設(shè)備中實(shí)現(xiàn)了modbus,首先存儲(chǔ)和傳輸高字節(jié),然后是低字節(jié)。(41 之前的AE )?;蛘?,其他人首先存儲(chǔ)和發(fā)送低位字節(jié)(AE 之前的41 )。類似地,當(dāng)寄存器組合起來表示32位數(shù)據(jù)類型時(shí),某些器件將高16位(高字)存儲(chǔ)在第一個(gè)寄存器中,剩余的低字存儲(chǔ)在第二個(gè)寄存器中(AE41 在5652 之前),而其他器件則相反(5652 之前)AE41 )只要接收設(shè)備知道期望它的方式,發(fā)送字節(jié)或字的順序無關(guān)緊要。例如,如果要將數(shù)字29,235,175,522作為32位無符號(hào)整數(shù)發(fā)送,則可以按這四種方式中的任何一種進(jìn)行排列。
AE41 5652 高字節(jié)第一高字首先
5652 AE41 高字節(jié)第一低字首先
首先是41AE 5256 低字節(jié)第一個(gè)高字
5256 41AE 低字節(jié)第一個(gè)低字首先
什么是Modbus地圖?
modbus映射只是一個(gè)單獨(dú)的從設(shè)備列表,它定義了- 數(shù)據(jù)是什么(例如壓力或溫度讀數(shù))
某些設(shè)備使用由制造商定義的固定映射構(gòu)建。而其他設(shè)備允許操作員配置或編程自定義地圖以滿足他們的需要。
Modbus ASCII和Modbus RTU有什么區(qū)別?
Modbus RTU和Modbus ASCII使用相同的協(xié)議。唯一的區(qū)別是通過線路傳輸?shù)淖止?jié)用RTU表示為二進(jìn)制,用Modbus RTU表示為可讀ASCII。關(guān)于RTU的重要注意事項(xiàng)是RTU消息沒有Start_of_text指示。通信中的接收方 使用“靜默”時(shí)間以確定新消息的開始。ASCII確實(shí)有一個(gè)文本開頭標(biāo)記。二進(jìn)制消息比ASCII短,因此理論上傳輸/接收速度更快。您可能很高興在HMI / SCADA中看到大約100 ms的更新速率,并且可以選擇任一通信。
總結(jié):
什么是擴(kuò)展寄存器地址?
由于模擬輸出保持寄存器的范圍是40001到49999,因此意味著寄存器不能超過9999個(gè)。雖然這對(duì)于大多數(shù)應(yīng)用程序來說通常已經(jīng)足夠了,但有些情況下會(huì)有更多的寄存器。寄存器40001至49999對(duì)應(yīng)于數(shù)據(jù)地址0000 至270E 。如果我們利用剩余的數(shù)據(jù)地址270F 到FFFF ,可以使用超過六倍的寄存器,總共65536個(gè)。這對(duì)應(yīng)于40001到105536的寄存器編號(hào)。許多modbus軟件驅(qū)動(dòng)程序(用于主PC)都是用40001到49999編寫的限制,不能訪問從設(shè)備中的擴(kuò)展寄存器。許多從設(shè)備不支持使用擴(kuò)展寄存器的映射。但另一方面,一些從設(shè)備確實(shí)支持這些寄存器,一些Master軟件可以訪問它,特別是在編寫自定義軟件時(shí)。
字節(jié)從站尋址如何工作?
由于單個(gè)字節(jié)通常用于定義從站地址,并且網(wǎng)絡(luò)上的每個(gè)從站都需要唯一的地址,因此網(wǎng)絡(luò)上的從站數(shù)量限制為256. modbus規(guī)范中定義的限制甚至更低,為247 。超出此限制,可以對(duì)協(xié)議進(jìn)行修改以使用兩個(gè)字節(jié)作為地址。主人和奴隸都需要支持這種修改。雙字節(jié)尋址將網(wǎng)絡(luò)中從站數(shù)量的限制擴(kuò)展到65535. 默認(rèn)情況下,Simply Modbus軟件使用1字節(jié)尋址。輸入大于255 的地址時(shí),軟件會(huì)自動(dòng)切換到2字節(jié)尋址并保持不變所有地址的此模式,直到手動(dòng)關(guān)閉2字節(jié)尋址。