Windows系统下Modbus通信C++源代码示例
这里提供一个基于C++语言的Windows系统下搭建Modbus通信的源代码示例:
#include <Windows.h>
#include <iostream>
#include <vector>
#include 'modbus.h'
// Modbus设备地址
#define DEVICE_ADDRESS 1
// Modbus读取数据的起始地址和长度
#define READ_START_ADDRESS 0
#define READ_LENGTH 10
// Modbus写入数据的起始地址和长度
#define WRITE_START_ADDRESS 0
#define WRITE_LENGTH 10
int main()
{
// 初始化Modbus连接
modbus_t* ctx = modbus_new_rtu('COM1', 9600, 'N', 8, 1);
if (ctx == NULL)
{
std::cout << 'Failed to create Modbus context' << std::endl;
return 1;
}
// 设置Modbus从站地址
modbus_set_slave(ctx, DEVICE_ADDRESS);
// 打开Modbus连接
if (modbus_connect(ctx) == -1)
{
std::cout << 'Failed to connect to Modbus device' << std::endl;
modbus_free(ctx);
return 1;
}
// 读取Modbus数据
std::vector<uint16_t> read_data(READ_LENGTH);
int read_count = modbus_read_registers(ctx, READ_START_ADDRESS, READ_LENGTH, read_data.data());
if (read_count == -1)
{
std::cout << 'Failed to read Modbus data' << std::endl;
modbus_close(ctx);
modbus_free(ctx);
return 1;
}
// 输出读取到的数据
std::cout << 'Read data: ';
for (int i = 0; i < read_count; i++)
{
std::cout << read_data[i] << ' ';
}
std::cout << std::endl;
// 写入Modbus数据
std::vector<uint16_t> write_data(WRITE_LENGTH);
for (int i = 0; i < WRITE_LENGTH; i++)
{
write_data[i] = i;
}
int write_count = modbus_write_registers(ctx, WRITE_START_ADDRESS, WRITE_LENGTH, write_data.data());
if (write_count == -1)
{
std::cout << 'Failed to write Modbus data' << std::endl;
modbus_close(ctx);
modbus_free(ctx);
return 1;
}
// 关闭Modbus连接
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
这个示例代码使用了libmodbus库,可以通过以下方式安装:
- 下载libmodbus源代码,可以从官网(https://libmodbus.org/)下载。
- 解压源代码,打开命令行进入源代码目录。
- 执行以下命令编译和安装库:
make && sudo make install。 - 在代码中引用libmodbus头文件和链接libmodbus库即可。
原文地址: https://www.cveoy.top/t/topic/nMTw 著作权归作者所有。请勿转载和采集!