这里提供一个基于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库,可以通过以下方式安装:

  1. 下载libmodbus源代码,可以从官网(https://libmodbus.org/)下载。
  2. 解压源代码,打开命令行进入源代码目录。
  3. 执行以下命令编译和安装库:make && sudo make install
  4. 在代码中引用libmodbus头文件和链接libmodbus库即可。
Windows系统下Modbus通信C++源代码示例

原文地址: https://www.cveoy.top/t/topic/nMTw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录