Modbus协议

文章目录

概念

modbus是工业通信总线协议,常用于PLC设备中,像水表、电表等。

优势是免费、简单。

采用主从问答通信(用于信息采集和控制)


分类

modbus RTU:运行在串口上 二进制传输 效率高

modbus ASCII:运行在串口上 ascii传输 用于通信数据量较小的情况下

modbus TCP:运行在以太网上 是应用层协议 基于传输层的TCP协议实现 端口号502


协议格式

报文头7字节(4字节序列号+2字节长度+1字节单元标识符) + 功能码(1字节) + 数据


寄存器

一、位寄存器(1字节) 开关量

输出线圈

离散量输入寄存器

二、字寄存器(2字节) 存储数据

保持/输出寄存器

输入寄存器


读写

功能码

0x01:读输出线圈

0x02:读离散量输入寄存器

0x03:读保持寄存器

0x04:读输入寄存器

0x05:写单个线圈

0x06:写单个保持寄存器

0x0F:写多个线圈

0x10:写多个保持寄存器

读写模板

读:

主机->从机:报文头7byte+功能码1字节+起始地址2byte+数量2byte

从机->主机:报文头7byte+功能码1字节+字节计数1byte+数据

写单个:

主机->从机:报文头7byte+功能码1字节+起始地址2byte+断通标志/数据2byte

写多个:

主机->从机:报文头7byte+功能码1字节+起始地址2byte+数量2byte+字节计数1byte+数据

注意:"断通标志"字段是2字节,但协议规定:这个字段只能天0x0000(对应"关")或0xFF00(对应"开"),实际有效信息只有1位(其他位是协议要求的固定填充)

案例:



Modbus库

应用modbus时,通常会安装modbus库,调用封装好的modbus接口

读输出线圈:modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);

读离散量输入寄存器:modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);

读保持寄存器:modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);

读输入寄存器:modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);

写单个线圈:modbus_write_bit(modbus_t *ctx, int addr, int status);

写单个保持寄存器:modbus_write_register(modbus_t *ctx, int addr, int value);

写多个线圈:modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *val);

写多个保持寄存器:modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16 *val);

代码举例:

相关推荐
发光小北5 小时前
Modbus TCP 转 Profibus DP 网关如何应用?
网络协议
灰子学技术5 小时前
Envoy HTTP 过滤器处理技术文档
网络·网络协议·http
刘马想放假8 小时前
GRE 隧道深度解析:从协议原理到生产实践
网络协议·安全
@CLoudbays_Martin118 小时前
UniApp是否能够接入SDK游戏盾呢?
服务器·网络·网络协议·tcp/ip·安全
AIwenIPgeolocation9 小时前
IP地址数据服务:驱动电子商务精细化运营与智能风控
大数据·网络协议·tcp/ip
tang777899 小时前
代理IP质量检测实战:Python实现IP可用性、延迟、匿名度自动测试脚本
大数据·爬虫·python·网络协议·tcp/ip
科技牛牛9 小时前
街道级IP定位能解决什么问题?哪些团队更适合用
网络·网络协议·tcp/ip·街道级ip定位
时空自由民.9 小时前
HTTP协议和HTTPS协议结合天气获取案例介绍
网络协议·http·https
Chengbei1113 小时前
面向红队的 AI 赋能全场景流量分析仪 网页 / APP / 终端 / IoT 全域 HTTPS 抓包解密利器
人工智能·物联网·网络协议·web安全·网络安全·https·系统安全
Hello_Embed13 小时前
【无标题】
网络·笔记·网络协议·tcp/ip·嵌入式