利用 libmodbus 快速部署一个 Modbus TCP 服务器

本文目录
  1. 1. 1. 初始化 Modbus TCP 服务器
  2. 2. 2. 映射 Modbus 数据模型
  3. 3. 3. 监听和接受客户端连接
  4. 4. 4. 接收和响应请求
  5. 5. 5. 清理和关闭资源

在现代工业通信中,Modbus 协议因其简洁性和易于实现而被广泛应用。本文将通过一个具体的示例,详细介绍如何使用 libmodbus 库创建一个基于 TCP 的 Modbus 服务器。这个服务器能够处理客户端的 Modbus 请求,并对这些请求作出响应。

完整代码(中文注释):

您需要付费解锁才能查看当前内容

利用 libmodbus 快速部署一个 Modbus TCP 服务器插图星耀会员¥1.79
利用 libmodbus 快速部署一个 Modbus TCP 服务器插图1璀璨会员¥2.39
曜钻会员免费
已有11人解锁查看
已付费?登录刷新

1. 初始化 Modbus TCP 服务器

首先,我们需要引入 libmodbus 库,并初始化一个 Modbus TCP 服务器。在我们的示例中,服务器将绑定到本地地址 127.0.0.1 和端口 1502。通过调用 modbus_new_tcp 函数,我们创建了一个指向 modbus_t 结构的指针,这个结构体将作为后续所有操作的上下文:

ctx = modbus_new_tcp("127.0.0.1", 1502);

2. 映射 Modbus 数据模型

接下来,我们需要定义服务器将要使用的 Modbus 数据映射。这一步骤是通过 modbus_mapping_new 函数完成的,它为不同类型的 Modbus 数据(位、输入位、保持寄存器和输入寄存器)分配和初始化内存:

mb_mapping = modbus_mapping_new(500, 500, 500, 500);
if (mb_mapping == NULL) {
    fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}

3. 监听和接受客户端连接

一旦数据映射准备好,服务器就可以开始监听来自客户端的连接请求。使用 modbus_tcp_listen 函数开始监听,然后使用 modbus_tcp_accept 处理接入的客户端连接:

s = modbus_tcp_listen(ctx, 1);
modbus_tcp_accept(ctx, &s);

4. 接收和响应请求

服务器的主循环包括等待客户端请求、接收请求、处理请求,并发送响应。这通过不断调用 modbus_receive 函数来接收请求,并使用 modbus_reply 函数来发送响应:

for (;;) {
    rc = modbus_receive(ctx, query);
    if (rc > 0) {
        modbus_reply(ctx, query, rc, mb_mapping);
    } else if (rc == -1) {
        break;
    }
}

5. 清理和关闭资源

一旦服务器完成任务(通常是由于错误或客户端关闭连接),它需要释放所有分配的资源,并优雅地关闭连接:

printf("Quit the loop: %s\n", modbus_strerror(errno));
if (s != -1) {
    close(s);
}
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);

通过上述步骤,我们展示了如何使用 libmodbus 创建一个功能完备的 Modbus TCP 服务器。这个服务器能够处理标准的 Modbus 功能码,包括读写单个或多个位和寄存器的操作。本示例不仅适用于教育和测试目的,也可以作为实际应用中的基础。

技术术语(共 4 个)—— 点击展开
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Modbus编程开发 字数 1311 字 · 阅读约 4 分钟 更新 2024-04-21 永久链接 https://www.modbus.cn/%e5%88%a9%e7%94%a8-libmodbus-%e5%bf%ab%e9%80%9f%e9%83%a8%e7%bd%b2%e4%b8%80%e4%b8%aa-modbus-tcp-%e6%9c%8d%e5%8a%a1%e5%99%a8/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注