github上的modbus协议类库,经测试,支持串口和ip两种方式,下面记录往VS移植(其实类库移植大同小异)的过程供大家参考。
一、代码下载
去github下载源代码:https://github.com/stephane/libmodbus
libmodbus 是一个免费软件库,用于使用遵循 Modbus 协议的设备发送/接收数据。 该库可以使用串行端口或以太网连接。
二、环境安装
1)、笔记本电脑
Windows 10 专业版
2)、开发IDE和代码编辑器安装
免费的开发人员软件和服务 - Visual Studio (microsoft.com)
3)、如果您想使用 Microsoft Visual Studio 进行编译,您应该按照 ./src/win32/README.md 中的说明进行操作
# Windows 下编译说明 #
# 创建一个包含库的新 Visual Studio 项目
从Github下载最新版本的libmodbus源代码 `https://github.com/stephane/libmodbus` -> 代码 -> 下载 ZIP。
解压存档后,在“src/win32”目录中启动 Windows 终端(“cmd”)并运行“cscript configure.js”。
在Windows 10的命令行cmd中运行js脚本文件-CSDN博客
1. 将文件“config.h”从“src/win32”复制到“src”。
2. 在 Visual Studio 下创建一个新的“控制台应用程序”项目。
3. 在 VS 项目中创建一个名为“libmodbus”的新目录(与“.vcxproj”文件同一级别)。
4. 将 libmodbus `src` 中的所有 `*.c` 和 `*.h` 复制到 VS 项目的新 `libmodbus` 文件夹中。
5. 将 `modbus.rc` 复制到您的 VS 项目中(与 `.vcxproj` 文件处于同一级别)。
6. 将 `libmodbus/*.c` 文件 (4) 拖放到 *解决方案资源管理器 -> 源文件* 中。
7. 将 `libmodbus/*.h` 文件 (8) 拖放到 *解决方案资源管理器 -> 头文件* 中。
8. 将 `modbus.rc` 文件拖放到*解决方案资源管理器 -> 资源文件*中。
9. 检查`modbus.rc`中的路径为`#include "modbus-version.h"`。
10. 在项目*配置属性 -> C/C++ -> 常规 -> 其他包含目录*的 **属性页** 中,添加 `libmodbus` 文件夹。
11.在项目*配置属性->资源->附加包含目录*的**属性页**中,添加`libmodbus`文件夹。
12. 在项目 *Configuration Properties -> Linker -> Input* 的 **Property Pages** 中,定义 `ws2_32.lib`。
13. 如果需要,请将 `_CRT_SECURE_NO_WARNINGS` 添加到 *C/C++ -> 预处理器 -> 预处理器定义*。
## 创建libmodbus DLL
该目录包含 Visual Studio 构建“modbus.dll”和导入库“modbus.lib”的项目文件。
在 Windows 终端中,运行 `cscript configure.js` 生成:
- `config.h`
- `modbus-version.h` 使用configure.js 生成。
4)、编译运行成功
三、代码测试
# 测试 #
# 执照 该目录的测试程序是在 BSD 许可证下提供的(请参阅关联的许可证文件)。
## 编译
安装后,您可以使用 pkg-config 来编译这些测试。 例如,要编译 random-test-server 运行:
`gcc 随机测试服务器.c -o 随机测试服务器 $(pkg-config --libs --cflags libmodbus)`
- 在运行之前启动服务器需要“random-test-server” 随机测试客户端。 默认情况下,它在本地主机和端口 1502 上接收并回复 Modbus 查询。
- `random-test-client` 向大范围内发送许多不同的查询 地址和值来测试客户端和服务器之间的通信。
- `unit-test-server` 和 `unit-test-client` 运行完整的单元测试套件。 这些 程序对于测试 Modbus 协议实现和 libmodbus 行为至关重要。
- `bandwidth-server-one`、`bandwidth-server-many-up` 和 `bandwidth-client` 返回有关服务器和客户端之间传输速率性能的非常有用的信息。 “bandwidth-server-one”一次只能处理与客户端的一个连接,而“bandwidth-server-many-up”为每个新客户端打开一个连接(有限制)。
将要测试的文件拖放到 *解决方案资源管理器 -> 源文件* 中,点击调试运行。
注意仅保留一个main函数。