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