官网下载libmodbus -X.X.X版本源码,网址:https://github.com/stephane/libmodbus/releases/tag/v3.1.6
使用vs2015打开win32文件下modbus-9.sln工程,配置相关路径
如果遇到未找到 config.h moubus-version.h文件错误,在src,win32文件夹下寻找相关文件,会发现多了文件后缀名,去掉后缀,重新命名为config.h moubus-version.h 可解决此问题
菜单栏 生成modbus-9 可生成相关 .lib .dll文件
如遇到下方位置错误,可修改成当前版本号 release编译成功,能进行modbus-rtu通信 debug遇到报版本错误,没有深入研究了
最终汇总相关库文件,头文件可用于项目,编译好库文件下载:https://download.csdn.net/download/qq_40277183/16341746
应用 配置头文件、库文件路径,.dll放到 .exe同文件夹下
#include <iostream>
#include "modbus.h"
#pragma comment(lib,"modbus.lib") //这一步也可以通过Project->properties->linker
using namespace std;
void modbus_rtu_read(int addr1,int addr2,int num , modbus_t *md_rtu)
{
uint16_t *tab_reg;
tab_reg = (uint16_t*)malloc(num*sizeof(uint16_t));
modbus_set_slave(md_rtu, addr1); //设置modbus从机地址
struct timeval t;
t.tv_sec = 0;
t.tv_usec = 1000000; //设置modbus超时时间为1000毫秒
modbus_set_response_timeout(md_rtu, (int)&t.tv_sec, (int)&t.tv_usec);
int regs = modbus_read_registers(md_rtu, addr2, num, tab_reg);
std::cout << "modbus recevie " << addr1 << ":";
for (int i = 0; i < num; i++)
{
std::cout << tab_reg[i] << " ";
}
std::cout << std::endl;
}
int main()
{
modbus_t *mb;
mb = modbus_new_rtu("COM1", 9600, 'N', 8, 1); //相同的端口只能同时打开一个
modbus_connect(mb);
for (int i = 1; i < 10; i++)
{
modbus_rtu_read(i, 0, 50, mb);
}
modbus_free(mb);
system("pause");
return 0;
}