Modbus协议了解与简单使用

一、协议基本原理

  Modbus 是一种串行通信协议,用于工业自动化系统中的数据传输。它被广泛应用于监控和控制设备。Modbus 协议由 Modicon(现在是施耐德电气的一部分)在 1979 年开发,用于其 PLC(可编程逻辑控制器)中。它是一种开源协议,可以在不同类型的网络和设备中使用。
  它是用于在电子设备之间的串行线路上传输信息的方法。请求信息的设备被称为 Modbus 客户端(即主站),提供信息的设备是 Modbus 服务器(从站),在标准 Modbus 网络中,有一个客户端和多达 247 个服务器,每个服务器都有从1到 247 的唯一服务器地址。客户端还可以向服务器写入信息。

1. Modbus 协议类型

Modbus 协议有多种变体,主要包括:

  1. Modbus RTU(Remote Terminal Unit)

    • 通信方式:串行通信,常通过 RS-232 或 RS-485 接口实现。
    • 数据格式:数据以二进制形式传输,使用 CRC 校验。
    • 特点:适用于点对点或多点通讯,能够处理较长的传输距离和较高的数据传输速度。
  2. Modbus ASCII(American Standard Code for Information Interchange)

    • 通信方式:串行通信,类似于 Modbus RTU,但数据以 ASCII 编码形式传输。
    • 数据格式:数据以 ASCII 码形式传输,使用 LRC 校验。
    • 特点:数据易于调试和查看,但相较于 RTU,传输效率较低。
  3. Modbus TCP/IP

    • 通信方式:基于以太网的 TCP/IP 协议进行通信。
    • 数据格式:数据在 IP 网络中传输,使用 TCP 作为传输层协议。
    • 特点:支持更快的数据传输速度和更复杂的网络架构,适合局域网和广域网。
  4. Modbus Plus

    • 通信方式:专有的串行网络协议,主要用于 Modicon PLC。
    • 数据格式:不同于 RTU 和 ASCII,使用专有的通讯协议。
    • 特点:主要用于特定设备和应用场景。

2. Modbus 主要特性

  • 主从结构:Modbus 协议基于主从结构,一个主设备(通常是控制系统)和多个从设备(传感器、执行器等)。
  • 功能码:Modbus 使用功能码来标识请求的操作类型,如读取寄存器、写入寄存器等。功能码的范围通常为 1 到 255。
  • 数据单位:数据通过寄存器传输,寄存器分为不同类型,如保持寄存器、输入寄存器、离散输入和线圈。
  • 地址:每个设备和寄存器都有唯一的地址,主设备通过这些地址进行数据访问。

3. Modbus通信原理及流程

  因为目前网上已经有很多优秀的文章讲的十分清晰,所以我这里就不做无意义工作了,把我看过的觉得讲的不错的一些文章分享给大家:
  详解Modbus通信协议—清晰易懂
  Modbus技术文章
  Modbus基本原理

  这里给大家分享下协议中文版文档:

链接:https://pan.baidu.com/s/1ubd3RoYD5GtAquWHq7_uAA 
提取码:ozrh 
--来自百度网盘超级会员V7的分享

二、开源库资源

  在 Linux 系统上,Modbus 通讯协议的开源库有几个比较流行的选择,常见的有:

1. libmodbus

  • 简介libmodbus 是一个广泛使用的 C 语言库,用于实现 Modbus 协议。它支持 Modbus RTU、Modbus TCP 和 Modbus ASCII。
  • 特点
    • 易于使用且功能全面。
    • 支持同步和异步操作。
    • 提供了丰富的文档和示例代码。
  • 官方网站stephane/libmodbus
  • 安装:可以通过源代码编译或使用包管理工具安装(例如在 Debian/Ubuntu 上使用 sudo apt-get install libmodbus-dev)。

2. modbus-tk

  • 简介modbus-tk 是一个 Python 的 Modbus 库,旨在简化 Modbus 通讯的实现。支持 Modbus RTU 和 Modbus TCP。
  • 特点
    • 使用 Python 编写,适合需要快速开发和脚本化的场景。
    • 支持同步和异步模式。
  • 官方网站modbus-tk GitHub
  • 安装:可以通过 Python 包管理工具 pip 安装:pip install modbus-tk

3. pymodbus

  • 简介pymodbus 是另一个 Python 实现的 Modbus 库,支持 Modbus RTU、Modbus TCP 和 Modbus ASCII。
  • 特点
    • 功能全面,适合需要复杂 Modbus 通讯的应用。
    • 提供了详细的文档和示例。
  • 官方网站pymodbus GitHub
  • 安装:可以通过 Python 包管理工具 pip 安装:pip install pymodbus

4. Modbus Master/Slave

  • 简介Modbus Master/Slave 是一个基于 C 的库,支持 Modbus RTU 和 Modbus TCP。它提供了用于创建 Modbus 主机和从机的功能。
  • 特点
    • 提供了主机和从机的功能实现。
    • 使用较为简单。
  • 官方网站Modbus Master/Slave GitHub

5. libmodbus-py

  • 简介libmodbus-py 是一个 Python 绑定库,用于调用 libmodbus 的功能。
  • 特点
    • 提供了对 libmodbus 的 Python 绑定,适合希望在 Python 中使用 libmodbus 的用户。
  • 安装:可以通过 pip 安装:pip install libmodbus-py

三、Linux:交叉编译libmodbus

  重复制造就是垃圾,所以这里推荐下其他大神的教程:libmodbus交叉编译静态库

#include <modbus.h>
#include <stdio.h>
#include <errno.h>

int main(int argc, char *Argv[])
{
	modbus_t *mb;
	uint16_t tab_reg[32];
	int rc;

	// 创建 Modbus RTU 上下文
	mb = modbus_new_rtu("/dev/ttyS0", 9600, 'N', 8, 1);
	if (mb == NULL)
	{
		fprintf(stderr, "Failed to create the libmodbus context\n");
		return -1;
	}

	// 设置从机地址
	modbus_set_slave(mb, 1);

	// 连接到串口
	if (modbus_connect(mb) == -1)
	{
		fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
		modbus_free(mb);
		return -1;
	}

	// 读取保持寄存器
	rc = modbus_read_registers(mb, 0, 10, tab_reg);
	if (rc == -1)
	{
		fprintf(stderr, "Read failed: %s\n", modbus_strerror(errno));
	} else
	{
		for (int i = 0; i < rc; i++)
		{
			printf("Register %d: %d\n", i, tab_reg[i]);
		}
	}

	// 关闭连接
	modbus_close(mb);
	// 释放资源
	modbus_free(mb);

	return 0;
}

  欢迎大家指导和交流!如果发现任何错误或遗漏,烦请立即指正,期待与大家一同进步!

相关推荐

  1. Modbus协议了解简单使用

    2024-07-22 11:40:02       20 阅读
  2. 【物联网】Modbus 协议简介

    2024-07-22 11:40:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 11:40:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 11:40:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 11:40:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 11:40:02       55 阅读

热门阅读

  1. springboot引入kafka

    2024-07-22 11:40:02       14 阅读
  2. web前端 React 框架面试200题(五)

    2024-07-22 11:40:02       14 阅读
  3. MySQL

    2024-07-22 11:40:02       14 阅读
  4. Udp协议

    Udp协议

    2024-07-22 11:40:02      20 阅读
  5. Xcode应用开发:自定义图表的终极指南

    2024-07-22 11:40:02       17 阅读
  6. 7.22 cf

    2024-07-22 11:40:02       19 阅读
  7. 一线大厂前端vue面试题

    2024-07-22 11:40:02       14 阅读
  8. 【MAUI】动态界面

    2024-07-22 11:40:02       21 阅读
  9. 小白C语言基础详解:C 语言的内存管理

    2024-07-22 11:40:02       16 阅读
  10. 等保测评深度探索:揭秘安全合规的幕后英雄

    2024-07-22 11:40:02       18 阅读
  11. Linux命令更新-文本处理grep

    2024-07-22 11:40:02       20 阅读