Link IoT Edge提供Modbus官方驅動,用於支援工業領域廣泛應用的Modbus通訊協定裝置。本文主要介紹Modbus驅動及其用法。
概覽
Modbus是常用的應用程式層資料通訊協定,阿里雲官方Modbus驅動(以下簡稱Modbus驅動)支援Modbus RTU和Modbus TCP兩種互動。
Modbus驅動支援的功能有讀取輸入狀態和輸入寄存器、讀取和寫入線圈狀態、保持寄存器。
Link IoT Edge提供C和Python語言Modbus驅動,同時根據CPU架構的不同,有多種C語言Modbus驅動。您可以直接從控制台部署Modbus驅動到網關,也可以從控制台下載Modbus驅動代碼進行修改,作為您的自訂驅動使用。
本文以樣本方式介紹Modbus官方驅動的使用步驟,具體操作如下文所示。
前提條件
請確保已建立邊緣執行個體並上線網關,具體操作請參見環境搭建。
一、分配驅動
- 登入邊緣計算控制台。
- 左側導覽列單擊邊緣執行個體,在已建立的邊緣執行個體右側單擊查看。
- 在執行個體詳情頁面裝置與驅動頁簽下,單擊全部驅動右側的
+
表徵圖 。 - 在分配驅動面板中,選擇官方驅動,根據網關CPU架構選擇需要使用的Modbus驅動,單擊對應操作欄中的分配。然後單擊關閉。說明
- C語言Modbus驅動,需在v1.8.4及以上版本的Link IoT Edge中使用。
- Python語言Modbus驅動,僅支援在Link IoT Edge專業版中使用。
二、配置驅動
- 單擊已指派的Modbus驅動,在裝置列表右側單擊驅動配置。
- 在彈出面板中單擊添加通道。通道是網關與具體物理裝置之間的串連介質。
- 根據介面提示設定參數,然後單擊確定。
參數 描述 通道名稱 設定通道名稱,需在網關維度具有唯一性。支援中文漢字、英文字母、數字和底線(_),長度不超過1~30個字元,1個中文漢字算2個字元。 傳輸模式 支援RTU和TCP兩種。
當傳輸模式為RTU時,需設定以下參數: 串口 設定串口,如/dev/ttyUSB0、/dev/ttyUSB1。支援英文字母、數字、正斜杠(/)和底線(_),長度限制1~64字元。 傳輸速率 表示每秒傳送的符號個數,從下拉式清單中選擇。 資料位元 表示一組資料實際包含的資料位元數,從下拉式清單中選擇。 校正位 從下拉式清單中選擇同位、或者無校正。 停止位 用於表示單個包的最後一位,從下拉式清單中選擇。 當傳輸模式為TCP時,需設定以下參數: IP地址 Modbus裝置IP地址,輸入焦點分十進位格式的地址。 連接埠號碼 Modbus裝置連接埠號碼,輸入1~65535範圍的整數。 - (可選)在裝置列表右側,單擊容器配置,根據如下參數說明,對當前驅動進行容器配置。配置完成後單擊儲存。 說明 僅在產品規格為專業版的邊緣執行個體中,允許設定容器配置。
參數 描述 是否使用宿主機host模式 選擇是否隔離容器的網路。直接使用宿主機網路環境。 - 是:表示不隔離容器的網路,直接使用宿主機網路環境。
- 否:表示隔離容器的網路,需要設定網路連接埠映射。
網路連接埠映射 當是否使用宿主機host模式為否時出現的參數。函數的網路環境和宿主機的環境是完全隔離的。通過網路連接埠映射,將容器內函數的監聽連接埠映射到宿主機的某一個連接埠上,實現不同主機上的用戶端程式,能夠訪問該函數提供的服務。最多支援映射10條網路連接埠。 例如,運行在宿主機容器內的
fc-http-server
函數,通過80連接埠對外界提供服務。此時,其它主機上的用戶端程式,無法通過訪問宿主機的80連接埠,訪問到fc-http-server
函數。因此需要將fc-http-server
函數所在的容器連接埠映射到宿主機的某一個連接埠上(例如將容器內的80連接埠映射到宿主機8080連接埠),允許其它主機上的用戶端程式通過訪問宿主機的IP地址:8080
,訪問到容器內部的fc-http-server
函數。是否啟動特權模式 容器內的root使用者實際上只是宿主機的一個普通使用者。若在容器內部做修改系統時間、使用mount命令等需要root許可權的操作,則需要賦予容器privileged特權。
說明 特權模式下,容器內部擁有宿主機的root許可權,而且宿主機的所有裝置會預設映射到容器內部,即無需配置裝置映射。裝置映射 當是否啟動特權模式為否時出現的參數。裝置管理系統和宿主機的環境是完全隔離的。當一個函數需要訪問宿主機的裝置(例如串口)時,需要將裝置映射到運行函數的容器內部。最多可添加10個裝置映射。 卷映射 檔案系統和宿主機的環境是完全隔離的。當一個函數需要訪問宿主機的檔案時,需要將檔案對應到運行函數的容器內部。最多可添加10個卷映射。
三、驅動關聯子裝置
- 單擊裝置列表地區框下的分配子裝置,在Modbus驅動下為邊緣執行個體分配裝置。您可以分配已有的Modbus裝置,也可以根據下面的步驟,建立Modbus裝置。說明 分配已有的Modbus裝置時,該裝置所屬產品必須接入網關,且接入網關協議為Modbus。詳細說明請參見建立產品。
- 在右側彈出的分配子裝置面板中,單擊添加子裝置。
- 在添加裝置對話方塊,單擊建立產品,建立Modbus裝置所屬產品。
- 在建立產品對話方塊設定參數後,單擊完成。
表 1. 參數說明 參數 描述 產品名稱設定產品名稱,產品名稱在帳號內具有唯一性。支援中文、英文字母、數字、底線(_)、短劃線(-)、at符號(@)和英文圓括弧,長度限制4~30個字元,一個中文漢字算2個字元。 接入網關協議此處必須選擇Modbus。 認證方式選擇適合您裝置的認證方式。詳細資料,請參見裝置安全認證。產品描述 添加對該產品的描述。可以為空白。 - 在添加裝置對話方塊,產品自動分配已建立的產品,單擊產品下的前往配置,為產品添加自訂功能。說明 您也可以使用Modbus調試工具配置Modbus產品,但需要先完成添加裝置並分配到邊緣執行個體的操作,再使用調試工具。
系統跳轉到物聯網平台控制台的產品詳情頁面功能定義頁簽。單擊編輯草稿,在彈出頁面中單擊添加自訂功能。
- 在添加自訂功能對話方塊,根據實際情況設定屬性參數。具體操作請參見單個添加物模型。在配置物模型屬性的過程中,單擊新增擴充描述設定如下擴充描述參數,將屬性對應到寄存器中。官方Modbus驅動會將所有的屬性彙總為Modbus資料請求,驅動收到Modbus資料之後再轉換為物模型資料。
參數說明如下所示,詳細的參數解釋請參見單個添加物模型中“擴充描述”的說明。
名稱 描述 操作類型 指操作Modbus的功能碼。 說明 其中:- 線圈狀態:讀取時統一使用0x01功能碼。寫入時支援使用單個寫入功能碼0x05,或多個寫入功能碼0x0F。
- 保持寄存器:讀取時統一使用0x03功能碼,寫入時支援使用單個寫入功能碼0x06,或多個寫入功能碼0x10。
- 寫入時選擇0x06:未經處理資料類型參數下只可選擇int16或者uint16。選擇其它資料類型時,上報屬性資料會報錯。
- 寫入時選擇0x10:未經處理資料類型參數下所有資料類型都可選。
- 離散輸入:讀取時統一使用0x02功能碼,該類型不支援寫入。
- 輸入寄存器:讀取時統一使用0x04功能碼,該類型不支援寫入。
Modbus協議相關規範,請參見GB/T 19582.1-2008、GB/T 19582.2-2008和GB/T 19582.3-2008。
寄存器地址 填寫十六進位,以 0x
開頭。根據您自己裝置的屬性地址設定寄存器地址。例如,要調試溫度屬性,您裝置的溫度屬性地址為1,則寄存器地址可設定為0x1。
未經處理資料類型 如採集的溫度值的資料類型為浮點型。 取值範圍 取值範圍指的是未經處理資料經過縮放因子處理之後的取值範圍,超出取值範圍的資料會被丟棄。 交換寄存器內高低位元組 是否把寄存器內16位元據的前後8個bits互換。此處設定為互換true。 交換寄存器順序 是否把未經處理資料32位元據的bits互換。此處設定為不互換false。 縮放因子 指縮放係數,如採集的值為100, 但真實的值為10,因此需要縮放10倍,故縮放因子填寫0.1即可。如放大10倍(即真實的值為1000),則放大因子為10。 資料上報方式 有兩種資料上報方式。 - 按時上報:選擇按時上報後,根據步驟9中為子裝置設定的資料擷取間隔,採集資料並上報。
- 變更上報:採集後的值發生變化後才會上報。
- 返回執行個體詳情頁面,添加Modbus裝置。
- 將建立的Modbus裝置分配到邊緣執行個體。
- 分配裝置到邊緣執行個體後,單擊裝置名稱對應操作欄中的裝置配置,通過關聯通道,關聯裝置與Modbus驅動。
表 2. 參數說明 參數 描述 關聯通道 選擇配置驅動步驟2中已建立的通道。 從站號 從站號是Modbus裝置標識資訊,在同一個通道中是唯一的。 資料擷取間隔 Modbus協議是半雙工協議,由網關主動請求資料,因此需要指定對資料點的採集間隔時間。單位為毫秒。 說明 單個屬性點的採集耗時時間大概為60毫秒(ms),則採集間隔的計算方式為:
例如,當前Modbus匯流排通道上有10個裝置,且每個裝置有10個屬性點,即採集間隔時間應大於等於6000 ms(60 ms * 10 * 10 = 6000 ms),這樣才能保證每個屬性點能正常上報。採集耗時時間(60 ms) * 該通道的所有屬性點個數
四、部署邊緣執行個體
- (可選)在部署執行個體前,可以使用Modbus調試工具,測試網關能否串連該Modbus裝置,同時也可以測試Modbus裝置所屬產品的物模型是否配置正確。
- 在執行個體詳情頁面,單擊右上方部署,部署邊緣執行個體。
常見問題
Modbus官方驅動上報訊息到雲端時,是按照裝置維度上報,還是屬性維度上報?
答:Modbus官方驅動在每個採集周期內,按照裝置維度進行採集和上報資料。例如,1個Modbus裝置有100個屬性,資料擷取間隔為5秒,那麼Modbus驅動每5秒上報雲端1條訊息(因為是1個裝置)。