支持的芯片型號 | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |
---|
Modbus從站例子
此示例演示了使用FreeModbus協(xié)議棧來實現(xiàn)ESP32作為從站設(shè)備來進行通信,
該示例允許外部 Modbus主站使用 Modbus協(xié)議讀取/寫入的從站設(shè)備參數(shù), “mb_example_common/modbus_params.h”頭文件中,定義了可通過Modbus協(xié)議操作的參數(shù),用戶修改該文件來添加/刪除自己的自定義參數(shù)。
這些在結(jié)構(gòu)“holding_reg_params”、“input_reg_params”、“coil_reg_params”和“discrete_reg_params”中表示,分別用于保存寄存器、輸入?yún)?shù)、線圈和離散輸入。
app_main應(yīng)用程序演示了如何啟動Modbus協(xié)議,當(dāng)參數(shù)發(fā)生變化時會通知主站設(shè)備。
FreeModbus 協(xié)議棧位于“components/freemodbus”文件夾中,包含“/port”文件夾,該文件夾中包含與 ESP32 連接的堆棧端口。 可以在 KConfig 文件中配置一些端口參數(shù),以正確啟動協(xié)議棧(有關(guān)詳細信息,請參閱下面的說明)。
“examples/protocols/modbus/mb_example_common”文件夾中定義從站示例使用到的參數(shù)結(jié)構(gòu)。
所需硬件 :
選項1:
PC (Modbus從站應(yīng)用軟件) + 連接到USB端口的USB串行適配器 + RS485線路驅(qū)動器 + ESP32開發(fā)板
MAX485線路驅(qū)動器芯片在下文中作為示例,但其他類似的芯片也可以使用。
選項2:
根據(jù)其README.md文件的說明配置了modbus_master示例應(yīng)用程序,并將其燒錄到ESP32開發(fā)板上。
注意: 在modbus_master示例中,可以編輯“Example Data (Object) Dictionary”來處理連接到Modbus段的從站設(shè)備的參數(shù)。
RS485示例電路示意圖:
VCC ---------------+ +--------------- VCC
| |
+-------x-------+ +-------x-------+
RXD <------| RO | DIFFERENTIAL | RO|-----> RXD
| B|---------------|B |
TXD ------>| DI MAX485 | \ / | MAX485 DI|<----- TXD
ESP32 board | | RS-485 side | | Modbus master
RTS --+--->| DE | / \ | DE|---+
| | A|---------------|A | |
+----| /RE | PAIR | /RE|---+-- RTS
+-------x--------+ +-------x-------+
| |
--- ---
如何設(shè)置和使用示例:
配置軟件
輸入下面的命令開始配置:
idf.py menuconfig
選擇“Modbus示例配置”菜單項。
使用以下命令和表格配置用于 Modbus 通信的 UART 引腳。
------------------------------------------------------------------------------------------------------------------------------
| UART Interface | #define | Default pins for | Default pins for | External RS485 Driver Pin |
| | | ESP32 (C6) | ESP32-S2 (S3, C3, C2, H2) | |
| ----------------------|--------------------|-----------------------|---------------------------|---------------------------|
| Transmit Data (TxD) | CONFIG_MB_UART_TXD | GPIO23 | GPIO9 | DI |
| Receive Data (RxD) | CONFIG_MB_UART_RXD | GPIO22 | GPIO8 | RO |
| Request To Send (RTS) | CONFIG_MB_UART_RTS | GPIO18 | GPIO10 | ~RE/DE |
| Ground | n/a | GND | GND | GND |
------------------------------------------------------------------------------------------------------------------------------
注意: 每個目標(biāo)芯片都有不同的GPIO引腳可用于UART連接。有關(guān)更多信息,請參閱所選目標(biāo)的UART文檔。
在 Kconfig 中定義Modbus communiction mode
- CONFIG_MB_COMM_MODE(對于主站和從站應(yīng)用程序必須相同)。
為示例應(yīng)用程序設(shè)置Modbus slave address
(對于示例腳本默認設(shè)置為 1)。
FreeModbus協(xié)議棧的通信參數(shù)(Component config->Modbus configuration)允許進行適當(dāng)?shù)呐渲?,但通常使用默認設(shè)置就足夠了。
請查看參數(shù)的幫助字符串以獲取更多信息。
設(shè)置外部 Modbus主站軟件
選項1:
根據(jù)應(yīng)用程序中使用的端口配置參數(shù)配置外部Modbus主站軟件。
例如,可以使用Modbus Poll應(yīng)用程序與該示例一起使用。
選項2:
設(shè)置基于ESP32的電路板,并根據(jù)其README.md文件中的說明設(shè)置modbus_master示例配置。
設(shè)置一個或多個從站電路板,具有不同的從站地址,并將它們連接到相同的Modbus段(參見上文中的配置)。
注意:主站和從站示例應(yīng)用程序的Modbus communiction mode
參數(shù)必須相同,以便能夠相互通信。
應(yīng)用編譯和燒寫
構(gòu)建項目并燒寫程序到板上,然后運行監(jiān)視器工具查看串行輸出:
idf.py -p PORT flash monitor
(退出串行監(jiān)視器, 輸入 Ctrl-]
.)
有關(guān)配置和使用ESP-IDF構(gòu)建項目的完整步驟,請參閱《Getting Started Guide》
示例輸出
應(yīng)用程序的示例輸出:文章來源:http://www.zghlxwxcb.cn/news/detail-809970.html
I (13941) SLAVE_TEST: INPUT READ (13651163 us), ADDR:1, TYPE:8, INST_ADDR:0x3ffb2fd0, SIZE:2
I (13951) SLAVE_TEST: HOLDING READ (13656431 us), ADDR:1, TYPE:2, INST_ADDR:0x3ffb2fe0, SIZE:2
I (13961) SLAVE_TEST: INPUT READ (13665877 us), ADDR:3, TYPE:8, INST_ADDR:0x3ffb2fd4, SIZE:2
I (13971) SLAVE_TEST: HOLDING READ (13676010 us), ADDR:3, TYPE:2, INST_ADDR:0x3ffb2fe4, SIZE:2
I (13981) SLAVE_TEST: INPUT READ (13686130 us), ADDR:5, TYPE:8, INST_ADDR:0x3ffb2fd8, SIZE:2
I (13991) SLAVE_TEST: HOLDING READ (13696267 us), ADDR:5, TYPE:2, INST_ADDR:0x3ffb2fe8, SIZE:2
I (14001) SLAVE_TEST: COILS READ (13706331 us), ADDR:0, TYPE:32, INST_ADDR:0x3ffb2fcc, SIZE:8
I (14001) SLAVE_TEST: Modbus controller destroyed.
輸出行描述了操作類型、時間戳、Modbus地址、訪問類型、參數(shù)結(jié)構(gòu)中的存儲地址和寄存器數(shù)量。文章來源地址http://www.zghlxwxcb.cn/news/detail-809970.html
到了這里,關(guān)于ESP-IDF Modbus從站例子的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!