Modbus驅(qū)動
Link IoT Edge提供Modbus官方驅(qū)動,用于支持工業(yè)領(lǐng)域廣泛應(yīng)用的Modbus通信協(xié)議設(shè)備。本文主要介紹Modbus驅(qū)動及其用法。
概覽
Modbus是常用的應(yīng)用層數(shù)據(jù)通信協(xié)議,阿里云官方Modbus驅(qū)動(以下簡稱Modbus驅(qū)動)支持Modbus RTU和Modbus TCP兩種交互。
Modbus驅(qū)動支持的功能有讀取輸入狀態(tài)和輸入寄存器、讀取和寫入線圈狀態(tài)、保持寄存器。
Link IoT Edge提供C和Python語言Modbus驅(qū)動,同時根據(jù)CPU架構(gòu)的不同,有多種C語言Modbus驅(qū)動。您可以直接從控制臺部署Modbus驅(qū)動到網(wǎng)關(guān),也可以從控制臺下載Modbus驅(qū)動代碼進行修改,作為您的自定義驅(qū)動使用。
本文以示例方式介紹Modbus官方驅(qū)動的使用步驟,具體操作如下文所示。
前提條件
請確保已創(chuàng)建邊緣實例并上線網(wǎng)關(guān),具體操作請參見環(huán)境搭建。
一、分配驅(qū)動
- 登錄邊緣計算控制臺。
- 左側(cè)導航欄單擊邊緣實例,在已創(chuàng)建的邊緣實例右側(cè)單擊查看。
- 在實例詳情頁面設(shè)備與驅(qū)動頁簽下,單擊全部驅(qū)動右側(cè)的
+
圖標 。 - 在分配驅(qū)動面板中,選擇官方驅(qū)動,根據(jù)網(wǎng)關(guān)CPU架構(gòu)選擇需要使用的Modbus驅(qū)動,單擊對應(yīng)操作欄中的分配。然后單擊關(guān)閉。說明
- C語言Modbus驅(qū)動,需在v1.8.4及以上版本的Link IoT Edge中使用。
- Python語言Modbus驅(qū)動,僅支持在Link IoT Edge專業(yè)版中使用。
二、配置驅(qū)動
- 單擊已分配的Modbus驅(qū)動,在設(shè)備列表右側(cè)單擊驅(qū)動配置。
- 在彈出面板中單擊添加通道。通道是網(wǎng)關(guān)與具體物理設(shè)備之間的連接介質(zhì)。
- 根據(jù)界面提示設(shè)置參數(shù),然后單擊確定。
參數(shù) 描述 通道名稱 設(shè)置通道名稱,需在網(wǎng)關(guān)維度具有唯一性。支持中文漢字、英文字母、數(shù)字和下劃線(_),長度不超過1~30個字符,1個中文漢字算2個字符。 傳輸模式 支持RTU、TCP和LoRa LAN三種。
當傳輸模式為RTU時,需設(shè)置以下參數(shù): 串口 設(shè)置串口,如/dev/ttyUSB0、/dev/ttyUSB1。支持英文字母、數(shù)字、正斜杠(/)和下劃線(_),長度限制1~64字符。 波特率 表示每秒傳送的符號個數(shù),從下拉列表中選擇。 數(shù)據(jù)位 表示一組數(shù)據(jù)實際包含的數(shù)據(jù)位數(shù),從下拉列表中選擇。 校驗位 從下拉列表中選擇奇偶校驗、或者無校驗。 停止位 用于表示單個包的最后一位,從下拉列表中選擇。 當傳輸模式為TCP時,需設(shè)置以下參數(shù): IP地址 Modbus設(shè)備IP地址,輸入點分十進制格式的地址。 端口號 Modbus設(shè)備端口號,輸入1~65535范圍的整數(shù)。 當傳輸模式為LoRa LAN時,需設(shè)置以下參數(shù): DevAddr設(shè)備地址。請?zhí)顚?位十六進制數(shù)值,例如66be****
。AppSKey應(yīng)用會話密鑰。請?zhí)顚?2位十六進制數(shù)值,例如623bd505f042090b5af660954509****
。NwkSKey網(wǎng)絡(luò)會話密鑰。請?zhí)顚?2位十六進制數(shù)值,例如e1336a94a03aa3beae55b737acda****
。Class通信節(jié)點的特定類。當前僅支持C特定類,即隨時接收設(shè)備上報的數(shù)據(jù)。 上行 FPort上行應(yīng)用端口,取值范圍為1~223。下行 FPort下行應(yīng)用端口,取值范圍為1~223。 - (可選)在設(shè)備列表右側(cè),單擊容器配置,根據(jù)如下參數(shù)說明,對當前驅(qū)動進行容器配置。配置完成后單擊保存。 說明 僅在產(chǎn)品規(guī)格為專業(yè)版的邊緣實例中,允許設(shè)置容器配置。
參數(shù) 描述 是否使用宿主機host模式 選擇是否隔離容器的網(wǎng)絡(luò)。直接使用宿主機網(wǎng)絡(luò)環(huán)境。 - 是:表示不隔離容器的網(wǎng)絡(luò),直接使用宿主機網(wǎng)絡(luò)環(huán)境。
- 否:表示隔離容器的網(wǎng)絡(luò),需要設(shè)置網(wǎng)絡(luò)端口映射。
網(wǎng)絡(luò)端口映射 當是否使用宿主機host模式為否時出現(xiàn)的參數(shù)。函數(shù)的網(wǎng)絡(luò)環(huán)境和宿主機的環(huán)境是完全隔離的。通過網(wǎng)絡(luò)端口映射,將容器內(nèi)函數(shù)的監(jiān)聽端口映射到宿主機的某一個端口上,實現(xiàn)不同主機上的客戶端程序,能夠訪問該函數(shù)提供的服務(wù)。最多支持映射10條網(wǎng)絡(luò)端口。 例如,運行在宿主機容器內(nèi)的
fc-http-server
函數(shù),通過80端口對外界提供服務(wù)。此時,其它主機上的客戶端程序,無法通過訪問宿主機的80端口,訪問到fc-http-server
函數(shù)。因此需要將fc-http-server
函數(shù)所在的容器端口映射到宿主機的某一個端口上(例如將容器內(nèi)的80端口映射到宿主機8080端口),允許其它主機上的客戶端程序通過訪問宿主機的IP地址:8080
,訪問到容器內(nèi)部的fc-http-server
函數(shù)。是否啟動特權(quán)模式 容器內(nèi)的root用戶實際上只是宿主機的一個普通用戶。若在容器內(nèi)部做修改系統(tǒng)時間、使用mount命令等需要root權(quán)限的操作,則需要賦予容器privileged特權(quán)。
說明 特權(quán)模式下,容器內(nèi)部擁有宿主機的root權(quán)限,而且宿主機的所有設(shè)備會默認映射到容器內(nèi)部,即無需配置設(shè)備映射。設(shè)備映射 當是否啟動特權(quán)模式為否時出現(xiàn)的參數(shù)。設(shè)備管理系統(tǒng)和宿主機的環(huán)境是完全隔離的。當一個函數(shù)需要訪問宿主機的設(shè)備(例如串口)時,需要將設(shè)備映射到運行函數(shù)的容器內(nèi)部。最多可添加10個設(shè)備映射。 卷映射 文件系統(tǒng)和宿主機的環(huán)境是完全隔離的。當一個函數(shù)需要訪問宿主機的文件時,需要將文件映射到運行函數(shù)的容器內(nèi)部。最多可添加10個卷映射。 內(nèi)存限制 設(shè)置容器的內(nèi)存上限。 - 當容器內(nèi)存使用超過限制時,容器會被重啟。
- 如果內(nèi)存限制值過小,可能會導致容器內(nèi)的應(yīng)用運行失敗。
默認內(nèi)存為1024 MB,請根據(jù)容器內(nèi)應(yīng)用大小,上調(diào)內(nèi)存限制。
三、驅(qū)動關(guān)聯(lián)子設(shè)備
- 單擊設(shè)備列表區(qū)域框下的分配子設(shè)備,在Modbus驅(qū)動下為邊緣實例分配設(shè)備。您可以分配已有的Modbus設(shè)備,也可以根據(jù)下面的步驟,新建Modbus設(shè)備。說明 分配已有的Modbus設(shè)備時,該設(shè)備所屬產(chǎn)品必須接入網(wǎng)關(guān),且接入網(wǎng)關(guān)協(xié)議為Modbus。詳細說明請參見創(chuàng)建產(chǎn)品。
- 在右側(cè)彈出的分配子設(shè)備面板中,單擊添加子設(shè)備。
- 在添加設(shè)備對話框,單擊新建產(chǎn)品,創(chuàng)建Modbus設(shè)備所屬產(chǎn)品。
- 在創(chuàng)建產(chǎn)品對話框設(shè)置參數(shù)后,單擊完成。
表 1. 參數(shù)說明 參數(shù) 描述 產(chǎn)品名稱設(shè)置產(chǎn)品名稱,產(chǎn)品名稱在賬號內(nèi)具有唯一性。支持中文、英文字母、數(shù)字、下劃線(_)、短劃線(-)、at符號(@)和英文圓括號,長度限制4~30個字符,一個中文漢字算2個字符。 所屬品類選擇品類,為該產(chǎn)品定義物模型。此處選擇自定義品類。 接入網(wǎng)關(guān)協(xié)議此處必須選擇Modbus。 認證方式選擇適合您設(shè)備的認證方式。詳細信息,請參見設(shè)備安全認證。產(chǎn)品描述 添加對該產(chǎn)品的描述??梢詾榭?。 - 在添加設(shè)備對話框,產(chǎn)品自動分配已創(chuàng)建的產(chǎn)品,單擊產(chǎn)品下的前往配置,為產(chǎn)品添加自定義功能。說明 您也可以使用Modbus調(diào)試工具配置Modbus產(chǎn)品,但需要先完成添加設(shè)備并分配到邊緣實例的操作,再使用調(diào)試工具。
系統(tǒng)跳轉(zhuǎn)到物聯(lián)網(wǎng)平臺控制臺的產(chǎn)品詳情頁面功能定義頁簽。單擊編輯草稿,在彈出頁面中單擊添加自定義功能。
- 在添加自定義功能對話框,根據(jù)實際情況設(shè)置屬性參數(shù)。具體操作請參見單個添加物模型。在配置物模型屬性的過程中,單擊新增擴展描述設(shè)置如下擴展描述參數(shù),將屬性映射到寄存器中。官方Modbus驅(qū)動會將所有的屬性聚合為Modbus數(shù)據(jù)請求,驅(qū)動收到Modbus數(shù)據(jù)之后再轉(zhuǎn)換為物模型數(shù)據(jù)。
參數(shù)說明如下所示,詳細的參數(shù)解釋請參見單個添加物模型中“擴展描述”的說明。
名稱 描述 操作類型 指操作Modbus的功能碼。 說明 其中:- 線圈狀態(tài):讀取時統(tǒng)一使用0x01功能碼。寫入時支持使用單個寫入功能碼0x05,或多個寫入功能碼0x0F。
- 保持寄存器:讀取時統(tǒng)一使用0x03功能碼,寫入時支持使用單個寫入功能碼0x06,或多個寫入功能碼0x10。
- 寫入時選擇0x06:原始數(shù)據(jù)類型參數(shù)下只可選擇int16或者uint16。選擇其它數(shù)據(jù)類型時,上報屬性數(shù)據(jù)會報錯。
- 寫入時選擇0x10:原始數(shù)據(jù)類型參數(shù)下所有數(shù)據(jù)類型都可選。
- 離散輸入:讀取時統(tǒng)一使用0x02功能碼,該類型不支持寫入。
- 輸入寄存器:讀取時統(tǒng)一使用0x04功能碼,該類型不支持寫入。
Modbus協(xié)議相關(guān)規(guī)范,請參見GB/T 19582.1-2008、GB/T 19582.2-2008和GB/T 19582.3-2008。
寄存器地址 填寫十六進制,以 0x
開頭。根據(jù)您自己設(shè)備的屬性地址設(shè)置寄存器地址。例如,要調(diào)試溫度屬性,您設(shè)備的溫度屬性地址為1,則寄存器地址可設(shè)置為0x1。
原始數(shù)據(jù)類型 如采集的溫度值的數(shù)據(jù)類型為浮點型。 取值范圍 取值范圍指的是原始數(shù)據(jù)經(jīng)過縮放因子處理之后的取值范圍,超出取值范圍的數(shù)據(jù)會被丟棄。 交換寄存器內(nèi)高低字節(jié) 是否把寄存器內(nèi)16位數(shù)據(jù)的前后8個bits互換。此處設(shè)置為互換true。 交換寄存器順序 是否把原始數(shù)據(jù)32位數(shù)據(jù)的bits互換。此處設(shè)置為不互換false。 縮放因子 指縮放系數(shù),如采集的值為100, 但真實的值為10,因此需要縮放10倍,故縮放因子填寫0.1即可。如放大10倍(即真實的值為1000),則放大因子為10。 數(shù)據(jù)上報方式 有兩種數(shù)據(jù)上報方式。 - 按時上報:選擇按時上報后,根據(jù)步驟9中為子設(shè)備設(shè)置的數(shù)據(jù)采集間隔,采集數(shù)據(jù)并上報。
- 變更上報:采集后的值發(fā)生變化后才會上報。
- 返回實例詳情頁面,添加Modbus設(shè)備。
- 將新建的Modbus設(shè)備分配到邊緣實例。
- 分配設(shè)備到邊緣實例后,單擊設(shè)備名稱對應(yīng)操作欄中的設(shè)備配置,通過關(guān)聯(lián)通道,關(guān)聯(lián)設(shè)備與Modbus驅(qū)動。
表 2. 參數(shù)說明 參數(shù) 描述 關(guān)聯(lián)通道 選擇配置驅(qū)動步驟2中已創(chuàng)建的通道。 從站號 從站號是Modbus設(shè)備標識信息,在同一個通道中是唯一的。 數(shù)據(jù)采集間隔 Modbus協(xié)議是半雙工協(xié)議,由網(wǎng)關(guān)主動請求數(shù)據(jù),因此需要指定對數(shù)據(jù)點的采集間隔時間。單位為毫秒。 說明 單個屬性點的采集耗時時間大概為60毫秒(ms),則采集間隔的計算方式為:
例如,當前Modbus總線通道上有10個設(shè)備,且每個設(shè)備有10個屬性點,即采集間隔時間應(yīng)大于等于6000 ms(60 ms * 10 * 10 = 6000 ms),這樣才能保證每個屬性點能正常上報。采集耗時時間(60 ms) * 該通道的所有屬性點個數(shù)
四、部署邊緣實例
- (可選)在部署實例前,可以使用Modbus調(diào)試工具,測試網(wǎng)關(guān)能否連接該Modbus設(shè)備,同時也可以測試Modbus設(shè)備所屬產(chǎn)品的物模型是否配置正確。
- 在實例詳情頁面,單擊右上角部署,部署邊緣實例。
常見問題
Modbus官方驅(qū)動上報消息到云端時,是按照設(shè)備維度上報,還是屬性維度上報?
答:Modbus官方驅(qū)動在每個采集周期內(nèi),按照設(shè)備維度進行采集和上報數(shù)據(jù)。例如,1個Modbus設(shè)備有100個屬性,數(shù)據(jù)采集間隔為5秒,那么Modbus驅(qū)動每5秒上報云端1條消息(因為是1個設(shè)備)。