VS编译和使用modbus库

一.libmodbus 库

免费的开源的,modbus 开发库,支持 RTU 和 TCP
官网:libmodbus.org
在线文档:https://libmodbus.org/reference/

二.源码简介

项目说明
doc 目录各 API 接口的详细说明文档
src 目录源码都在这个目录下
tests 目录自带的测试代码
src/win32 目录windows 平台下的项目文件(使用 VS)
Makefile.amlinux 平台下用于生成 makefile 文件
Modbus.c核心源码
Modbus.h libmodbus对外暴露的接口文件
Modbus-data.c实现数据处理的公用函数,比如大小端、位处理
Modbus-private.hlibmodbus 内部使用的数据结构和函数声明
Modbus-rtu.cRTU 模式相关的函数定义
Modbus-rtu.hRTU 模式对外提供的 API
Modbus-private.hRTU 模式内部使用的数据结构和函数声明
Modbus-tcp.cTCP 模式相关的函数定义
Modbus-tcp.hTCP 模式对外提供的 API
Modbus-tcp-private.hTCP 模式内部使用的数据结构和函数声明
Modbus-version.h.in版本定义

三.使用 VS 编译 modbus

  • VS2017 WIN32 平台
  1. 双击 configure.js 进行配置
  2. 使用 VS 打开解决方案:modbus-9.sln
  3. 对项目重新生成,编译失败。把 modbus-version.h 从项目中移除,再重新添加 src 目录下
    的 modbus-vsersion.h 文件
  4. 对项目重新生成,编译失败,提示:
    在这里插入图片描述
    在这里插入图片描述
  5. 找不到SDK
    在这里插入图片描述
  • 选择自己已有的SDK版本就行
    在这里插入图片描述

再次重新生成,得到如下两个库文件:

  • modbus.dll
  • modbus.lib

以上是调试模式下的库文件,把 VS 设置位 release 模式,重复以上步骤,即可得到 release
版本的库文件。

四.从站设置

  1. 硬件环境配置
  2. 使用虚拟串口工具,实现 com5 <——>com6
  3. Modbus 从站设置:(使用 com6)

在这里插入图片描述

  • 内容设置
    在这里插入图片描述

五.vs2017使用modbus

  • 导入 libmodbus 相关的库和头文件:
    在这里插入图片描述
    在这里插入图片描述
  • 源码
#include<stdio.h>
#include"modbus.h"

//代码加载库文件
#pragma comment(lib,"modbus.lib")


int main()
{
	//创建一个modbus设备
	modbus_t *mb = modbus_new_rtu("com5", 9600, 'N', 8, 1);

	//连接
	modbus_connect(mb);

	//选择modbus 从站的地址,从站地址1是开始就设置好了的
	modbus_set_slave(mb, 1);


	uint16_t regs[4];
	// int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
	//80 是起始地址,4是读取个数,regs是用来存储数据的
	modbus_read_registers(mb, 80, 4, regs);

	modbus_close(mb);
	modbus_free(mb);//释放内从

	for (int i = 0; i < 4; i++)
	{
		printf("%d ", regs[i]);
	}

	return 0;

}

在这里插入图片描述

六.问题思考

使用vs编译modbus库文件生成的lib和dll文件是不是相当于.cpp文件

在使用Visual Studio编译Modbus库时生成的 .lib 和 .dll 文件并不相当于 .cpp 文件。它们之间有几个关键的区别:

  1. 文件类型:
  • .cpp 文件是源代码文件,包含用C++编写的程序代码。
  • .lib 文件是静态库文件,包含了编译后的函数和对象代码,可以在链接时被静态链接到其他程序中。
  • .dll 文件是动态链接库,包含了可执行的代码和数据,可以在运行时被多个程序共享。
  1. 用途:
  • .cpp 文件需要被编译为目标文件(例如 .obj 文件),然后链接成可执行文件或库。
  • 使用 .lib 文件时,它会在编译时将库的内容直接嵌入到最终生成的可执行文件中。
  • 使用 .dll 文件时,程序在运行时会加载这个文件,节省了内存,并允许多个程序共享相同的代码。
  1. 代码访问:
  • .cpp 文件是可读的源代码,可以查看和修改。
  • .lib 和 .dll 文件是编译后的二进制文件,通常不是人类可读的,不能直接修改。

总结来说,.lib 和 .dll 文件是经过编译的代码,提供了可供其他程序使用的功能接口,而.cpp文件是其源代码形式。

实际用法上和.cpp文件是是否相同

在实际用法上,.lib 和 .dll 文件虽然与 .cpp 文件的本质不同,但在某些方面可以被看作是其“实现”或“功能”的载体。具体来说:

  1. 功能复用:
  • .lib 和 .dll 文件提供了在 .cpp 文件中定义的功能或接口。你可以在其他程序中使用这些库的功能,就像在你自己的 .cpp 文件中直接调用那些功能一样。
  1. 接口定义:
  • 当你使用 .lib 或 .dll 文件时,通常还会有一个相应的头文件(.h),其中包含了函数的声明、类的定义等。这些头文件可以在你的 .cpp 文件中被包含,从而使得调用库中的功能变得简单。
  1. 编程模型:
  • 在使用时,程序员并不需要关心这些库的实现细节,只需要调用相应的接口函数,与使用 .cpp 文件中的函数调用方式相似。
  1. 构建与链接:
  • 在使用 .lib 文件时,链接器会将其内容链接到最终的可执行文件中;而使用 .dll 文件时,程序在运行时会动态加载这个库。这两种方式都允许你在代码中使用库提供的功能。

总结来说,虽然在本质和文件结构上有很大不同,但在实现功能和调用接口的使用上,.lib 和 .dll 文件可以认为与 .cpp 文件在某种程度上是类似的,尤其是当我们关注的是它们所提供的功能时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值