<sup id="qu0mc"></sup>
<object id="qu0mc"><wbr id="qu0mc"></wbr></object>
<sup id="qu0mc"><wbr id="qu0mc"></wbr></sup>
<tt id="qu0mc"></tt>
<sup id="qu0mc"><div id="qu0mc"></div></sup><rt id="qu0mc"><div id="qu0mc"></div></rt>
<acronym id="qu0mc"><noscript id="qu0mc"></noscript></acronym>
歡迎來(lái)到無(wú)錫徽科特測控技術(shù)有限公司網(wǎng)站!
技術(shù)文章您現在的位置:首頁(yè) > 技術(shù)文章 > 如何使用 Modbus 進(jìn)行樣機開(kāi)發(fā)(獲取完整代碼)

如何使用 Modbus 進(jìn)行樣機開(kāi)發(fā)(獲取完整代碼)

更新時(shí)間:2021-10-15   點(diǎn)擊次數:1394次

您是在進(jìn)行樣機開(kāi)發(fā),還是在尋找一種經(jīng)濟型方式,保障應用中的溫濕度測量質(zhì)量?您是否了解關(guān)于 Python 等編程語(yǔ)言的一些基本知識?

如果您了解,那么我想要向您展示如何僅通過(guò)一個(gè) 維薩拉HMP110 探頭、一條 USB 服務(wù)電纜 (219690) 和一臺安裝了 Python 3 的計算機來(lái)輕松地長(cháng)時(shí)間記錄數據。我將帶您了解該代碼的各個(gè)方面,但如果您對解釋內容不感興趣,您可以直接跳到本文的末尾,獲取完整的代碼。另外需要說(shuō)明的是,這只是一個(gè)用于演示 Modbus 通信的示例腳本。

庫:

在介紹代碼之前,讓我們首先了解一下我們將用到的庫,其中最重要的是 pymodbus。我們使用該庫來(lái)通過(guò) Modbus RTU 與探頭建立通信,具體操作是從 pymodbus.client.sync 導入 ModbusSerialClient。我們使用struct庫將字位處理為不同的變量類(lèi)型,使用time庫更改輪詢(xún)率,使用datetime庫獲得讀取數據的時(shí)間和日期,此外,我們導入 argparse庫,將參數從命令行傳遞至代碼。





參數:

為了有助提高代碼的靈活性,我添加了一些參數。使用上述參數可讓我們無(wú)需更改代碼,便能從命令行輕松更改變量值。我認為可能會(huì )有所幫助的參數有通信端口、數據存儲文件的名稱(chēng)、探頭的地址、輪詢(xún)頻率和數據記錄長(cháng)度。





Modbus 連接:

我們首先需要初始化新的串行 Modbus 客戶(hù)端,此客戶(hù)端應已根據探頭進(jìn)行正確設置。本示例中的參數集必須包括通信方式、通信端口、響應超時(shí)、波特率、停止位和奇偶校驗。 Modbus RTU 的通信方式為“rtu",端口取決于您的計算機,因此我將在以下部分說(shuō)明如何識別正確的端口。由于其他參數由探頭的設置決定,因此您需要參考探頭的數據表,獲取恰當的值。一般情況下,針對維薩拉探頭,波特率應為 19200,停止位為 2,無(wú)奇偶校驗。





讀取保持寄存器:

現在我們來(lái)創(chuàng )建一個(gè)函數以讀取探頭的保持寄存器。我們要調用上一節中創(chuàng )建的 Modbus 客戶(hù)端實(shí)例的 read_holding_registers() 方法來(lái)讀取寄存器。我們需要保持寄存器的起始地址、寄存器的數量和探頭的從屬地址。我們會(huì )從寄存器收到低字節序格式的 16 位字數據,之后,我們必須將其轉換為 32 位浮點(diǎn)值。





將寄存器的值轉換為 32 位的值:

寄存器的值以 16 位整數的形式存儲,我們需要將其轉換為 32 位浮點(diǎn)格式。為此,我創(chuàng )建了一個(gè)函數,它可以獲取寄存器的值和寄存器索引,并返回索引數據的 32 位浮點(diǎn)值。我們采用模塊結構來(lái)執行此轉換。





記錄數據:

鑒于我們已經(jīng)可以讀取保持寄存器并將寄存器的值轉換為 32 位浮點(diǎn)值,我們需要創(chuàng )建一個(gè)可將這些值存儲在 .csv 文件中的函數。為此,我創(chuàng )建了一個(gè)名為 data_logger() 的函數。它可以調用函數 holding_registers_data(),并以日期時(shí)間、相對濕度、溫度、露點(diǎn)的格式將獲取的數據附加到文件中。





確定探頭的通信端口:

首先,確保您的探頭能正確連接到計算機。

Windows:

在 Windows 操作系統中,您可以在“設備管理器"下找到設備的 COM 端口。要打開(kāi)“設備管理器"窗口,請打開(kāi)屏幕左下方的“開(kāi)始"菜單,然后輸入“設備管理器"。它會(huì )顯示為“最佳匹配"下的第一個(gè)結果,單擊該圖標或按下鍵盤(pán)上的 Enter 鍵便可打開(kāi)該窗口。單擊“端口(COM 和 LPT)"旁邊的箭頭以展開(kāi)端口。您會(huì )看到被列為“Vaisala USB Device"的一個(gè)設備,它的旁邊列出了 COM 端口名稱(chēng),在我們的示例中應為 COM6。





Linux :

在 Linux 中,您可以通過(guò)在終端鍵入命令“dmesg | grep tty"來(lái)確定通信端口。在所有返回的語(yǔ)句中,會(huì )有一個(gè)類(lèi)似于“'cp210x converter now attached to ttyUSBn "的語(yǔ)句,其中 ttyUSBn 便是端口。

運行代碼:

要運行腳本,您必須安裝所有的庫。如果需要,可以使用 pip 命令





以獲得有關(guān)參數的操作。命令提示符中應顯示此過(guò)程。下方是輸出內容的屏幕截圖。





通信端口是必需參數,其他參數均具備默認值,您可以根據自己的偏好進(jìn)行更改。通信端口參數不需要標識符,可以放在文件名稱(chēng)之后的任意位置。但其他可選參數需要標識符。

以下是以長(cháng)格式和短格式顯示的典型命令示例:





男女啪啪做爰高潮全过有多少姿势,车上他吃我奶进我下面,免费网站安全软件大全,国产精品99久久久久久人四虎
穆棱市| 白玉县| 开平市| 永吉县| 扶余县| 清新县| 博客| 德兴市| 庆云县| 平陆县| 仲巴县| 务川| 江津市| 威海市| 沅江市| 湘阴县| 大邑县| 友谊县| 乌拉特前旗| 汝州市| 万全县| 新宾| 铜山县| 湟源县| 湖北省| 石家庄市| 施秉县| 朝阳区| 寻乌县| 安达市| 尉氏县| 丹棱县| 比如县| 基隆市| 涡阳县| 海丰县| 靖西县| 昌吉市| 互助| 麻栗坡县| 南投市| http://www.rzx2.com http://www.siren2.com http://www.my278.com http://www.aa2626.com http://www.qqhrgb.com http://www.tu0909.com