基於Python的Modbus協議獲取寄存器數據


基於Python的Modbus協議獲取寄存器數據

1. Modbus通訊協議

Modbus是一種串行通信協議,是Modicon公司(現在的施耐德電氣 Schneider Electric)於1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標准(De facto),並且現在是工業電子設備之間常用的連接方式。

1.1 Modbus比其他通信協議使用的更廣泛的主要原因有:

1. 公開發表並且無版權要求
2. 易於部署和維護
3. 對供應商來說,修改移動本地的比特或字節沒有很多限制

Modbus允許多個 (大約240個) 設備連接在同一個網絡上進行通信,舉個例子,一個測量溫度和濕度的裝置,並且將結果發送給計算機。在數據采集與監視控制系統(SCADA)中,Modbus通常用來連接監控計算機和遠程終端控制系統(RTU)。

1.2 協議版本

1. Modbus協議目前存在用於串口、以太網以及其他支持互聯網協議的網絡的版本。
2. 大多數Modbus設備通信通過串口EIA-485物理層進行。
3. 對於串行連接,存在兩個變種,它們在數值數據表示不同和協議細節上略有不同。
4. Modbus RTU是一種緊湊的,采用二進制表示數據的方式,Modbus ASCII是一種人類可讀的,冗長的表示方式。
這兩個變種都使用串行通信(serial communication)方式。RTU格式后續的命令/數據帶有循環冗余校驗的校驗和,
而ASCII格式采用縱向冗余校驗的校驗和。被配置為RTU變種的節點不會和設置為ASCII變種的節點通信,反之亦然。
5. 對於通過TCP/IP(例如以太網)的連接,存在多個Modbus/TCP變種,這種方式不需要校驗和計算。
 對於所有的這三種通信協議在數據模型和功能調用上都是相同的,只有封裝方式是不同的。
6. Modbus有一個擴展版本Modbus Plus(Modbus+或者MB+),不過此協議是Modicon專有的,和Modbus不同。
7. 它需要一個專門的協處理器來處理類似HDLC的高速令牌旋轉。它使用1Mbit/s的雙絞線,並且每個節點都有轉換隔離裝置,
8. 是一種采用轉換/邊緣觸發而不是電壓/水平觸發的裝置。連接Modbus Plus到計算機需要特別的接口,通常是支持ISA(SA85),PCI或者PMCIA總線的板卡。

1.3 通信和設備

    Modbus協議是一個master/slave架構的協議。有一個節點是master節點,其他使用Modbus協議參與通信的節點是slave節點。
每一個slave設備都有一個唯一的地址。在串行和MB+網絡中,只有被指定為主節點的節點可以啟動一個命令(在以太網上,
任何一個設備都能發送一個Modbus命令,但是通常也只有一個主節點設備啟動指令)。

       一個ModBus命令包含了打算執行的設備的Modbus地址。所有設備都會收到命令,但只有指定位置的設備會執行及回應指令
(地址0例外,指定地址0的指令是廣播指令,所有收到指令的設備都會運行,不過不回應指令)。所有的Modbus命令包含了檢查碼,
以確定到達的命令沒有被破壞。基本的ModBus命令能指令一個RTU改變它的寄存器的某個值,控制或者讀取一個I/O端口,
以及指揮設備回送一個或者多個其寄存器中的數據。

       有許多modems和網關支持Modbus協議,因為Modbus協議很簡單而且容易復制。它們當中一些為這個協議特別設計的。
有使用有線、無線通信甚至短消息和GPRS的不同實現。不過設計者需要克服一些包括高延遲和時序的問題。

1.4 實現

幾乎所有的實現都是官方標准的某種變體。不同的供應商設備之間可能無法正確的通信。一些主要的變化有:

數據類型
IEEE標准的浮點數
32位整型數
8位數據
混合數據類型
整數中的位域
multipliers to change data to/from integer. 10, 100, 1000, 256 ...
協議擴展
16位的從站地址
32位的數據大小(1個地址 = 返回32位數據)
字交換數據

1.5 限制

Modbus是在1970年末為可編程邏輯控制器通信開發的,這些有限的數據類型在那個時代是可以被PLC理解的,大型二進制對象數據是不支持的。
對節點而言,沒有一個標准的方法找到數據對象的描述信息,舉個例子,確定一個寄存器數據是否表示一個介於30-175度之間的溫度。
由於Modbus是一個主/從協議,沒有辦法要求設備“報告異常”(構建在以太網的TCP/IP協議之上,被稱為open-mbus除外)- 主節點必須循環的詢問每個節點設備,並查找數據中的變化。在帶寬可能比較寶貴的應用中,這種方式在應用中消耗帶寬和網絡時間,例如在低速率的無線鏈路上。
Modbus在一個數據鏈路上只能處理247個地址,這種情況限制了可以連接到主控站點的設備數量(再一次指出以太網TCP/IP除外)
Modbus傳輸在遠端通訊設備之間緩沖數據的方式進行,有對通信一定是連續的限制,避免了傳輸中的緩沖區漏洞的問題
Modbus協議自身提供針對未經授權的命令或截取數據沒有安全性。

2. 基於Python的Modbus通訊協議對接采集器項目實戰

2.1 安裝超聲波一體式氣象站采集器

具體安裝可以查看設備安裝說明書
部分安裝過程如圖
在這里插入圖片描述

2.2 配置軟件安裝及使用

2.2.1 485 現場布線說明

多個 485 型號的設備接入同一條總線時,現場布線有一定的要求,具體請參考資料包中 《485 設備現場接線手冊》

2.2.2 軟件選擇選擇“調試軟件”---“485 參數配置軟件”,找到“485 參數配置工具” 打開即可。

2.2.3 參數設置

①、選擇正確的 COM 口(“我的電腦—屬性—設備管理器—端口”里面查看 COM 端口), 下圖列舉出幾種不同的 485 轉換器的驅動名稱。
在這里插入圖片描述

②、單獨只接一台設備並上電,點擊軟件的測試波特率,軟件會測試出當前設備的波特率以 及地址,默認波特率為 4800bit/s,默認地址為 0x01。
③、根據使用需要修改地址以及波特率,同時可查詢設備的當前功能狀態。
④、如果測試不成功,請重新檢查設備接線及485驅動安裝情況。

在這里插入圖片描述

2.3 底層數據采集Python代碼部分展示在這里插入圖片描述

2.3 環境檢測預警系統項目效果展示

2.3.1 python后端項目部分展示

在這里插入圖片描述

2.3.2 前端效果展示

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM