版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/starelegant/article/details/74590951
一、新建win32工程,配置环境
首先在libmodbus官网下载 libmodbus库稳定版
https://github.com/stephane/libmodbus解压文件后,在src文件夹目录下,选取如下图文件
新建一个文件夹,再添加到win32工程中 ,放在项目工程源码文件下。为了方便,这个文件夹命名为“libmodbus”。(新建的工程名称为:TestMod)
配置两个地方
1 、项目属性--》C/C++--》常规 --》附加包含目录
包含刚刚libmodbus文件夹的路径
宏定义方式:$(ProjectDir)libmodbus;
2、 项目属性--》链接器--》常规 --》附加库目录
包含刚刚libmodbus文件夹的路径
宏定义方式:$(ProjectDir)libmodbus;
二、 编译modbus.dll
modbus-9.sln 打开工程文件,选择模式为Debug,编译后生成modbus.dll
这个modbus.dll 最终需要放在 测试工程TestMod exe输出目录(Debug)下
三、 实现功能,源码如下
-
#include "stdafx.h"
-
#include <iostream>
-
#include "libmodbus/modbus.h"
-
#pragma comment(lib,"modbus.lib")
-
//#include <Windows.h>
-
using
namespace
std;
-
int main()
-
{
-
modbus_t *mb;
-
uint16_t tab_reg[
10] = {
0 };
-
-
mb = modbus_new_rtu(
"COM2",
9600,
'N',
8,
1);
//相同的端口只能同时打开一个
-
modbus_set_slave(mb,
1);
//设置modbus从机地址
-
-
modbus_connect(mb);
-
-
struct timeval t;
-
t.tv_sec =
0;
-
t.tv_usec =
1000000;
//设置modbus超时时间为1000毫秒
-
modbus_set_response_timeout(mb, (
int)&t.tv_sec, (
int)&t.tv_usec);
-
-
-
for (
int i =
0; i <
10; i++)
-
{
-
int regs = modbus_read_registers(mb,
0,
5, tab_reg);
-
std::
cout <<
"modbus recevie "<< i <<
":" << tab_reg[
0] <<
" " << tab_reg[
1] <<
" " << tab_reg[
2] <<
" "
-
<< tab_reg[
3] <<
" " << tab_reg[
4] <<
" " << tab_reg[
5] <<
std::
endl;
-
Sleep(
500);
-
}
-
system(
"pause");
-
return
0;
-
}
四、 调试功能
1、定义虚拟串口,COM2 COM3配对
2、 使用modbus slave软件定义如下数据,
3、 实验结果如下