84 lines
1.6 KiB
Markdown
84 lines
1.6 KiB
Markdown
# Modbus TCP 客户端模块
|
||
|
||
基于libmodbus库的Modbus TCP客户端实现,提供完整的Modbus功能支持。
|
||
|
||
## 功能特性
|
||
|
||
- 基于libmodbus的稳定实现
|
||
- 支持所有标准Modbus功能码
|
||
- 线程安全的连接管理
|
||
- 数据类型转换工具(32位整数、浮点数)
|
||
- 完整的错误处理和状态报告
|
||
- 跨平台支持(Windows/Linux)
|
||
|
||
## 支持的Modbus功能
|
||
|
||
- 读取线圈(0x01)
|
||
- 读取离散输入(0x02)
|
||
- 读取保持寄存器(0x03)
|
||
- 读取输入寄存器(0x04)
|
||
- 写单个线圈(0x05)
|
||
- 写单个保持寄存器(0x06)
|
||
- 写多个线圈(0x0F)
|
||
- 写多个保持寄存器(0x10)
|
||
|
||
## API接口
|
||
|
||
### 基本操作
|
||
```cpp
|
||
ModbusTCPClient client("192.168.1.100", 502);
|
||
if (client.connect()) {
|
||
// 连接成功
|
||
}
|
||
```
|
||
|
||
### 读操作
|
||
```cpp
|
||
std::vector<bool> coils;
|
||
client.readCoils(0, 10, coils);
|
||
|
||
std::vector<uint16_t> registers;
|
||
client.readHoldingRegisters(0, 10, registers);
|
||
```
|
||
|
||
### 写操作
|
||
```cpp
|
||
client.writeSingleCoil(0, true);
|
||
client.writeSingleRegister(0, 1234);
|
||
|
||
std::vector<bool> coils = {true, false, true};
|
||
client.writeMultipleCoils(0, coils);
|
||
|
||
std::vector<uint16_t> registers = {1234, 5678};
|
||
client.writeMultipleRegisters(0, registers);
|
||
```
|
||
|
||
## 编译说明
|
||
|
||
### 依赖
|
||
- Qt 5.x 或更高版本
|
||
- C++17 编译器
|
||
- libmodbus源码(已包含在VrNets模块中)
|
||
|
||
### 构建
|
||
```bash
|
||
qmake ModbusTCPClient.pro
|
||
make
|
||
```
|
||
|
||
### 使用
|
||
该模块编译为静态库,在其他项目中包含:
|
||
```pro
|
||
LIBS += -L../Module/ModbusTCPClient -lModbusTCPClient
|
||
INCLUDEPATH += ../Module/ModbusTCPClient/Inc
|
||
```
|
||
|
||
## 错误处理
|
||
|
||
所有API调用返回bool值指示操作是否成功,可通过getLastError()获取详细错误信息:
|
||
|
||
```cpp
|
||
if (!client.readCoils(0, 10, coils)) {
|
||
qDebug() << "Error:" << client.getLastError();
|
||
}
|
||
``` |