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);

代码举例:

相关推荐
汤愈韬2 小时前
防火墙双机热备技术之VRRP
网络·网络协议·网络安全·security·huawei
北京耐用通信2 小时前
告别通信干扰与距离限制:耐达讯自动化Profibus总线光纤中继器赋能伺服驱动器稳定连接
人工智能·科技·网络协议·自动化·信息与通信
乾元3 小时前
10 个可复制的企业级项目:从需求到交付的 AI 网络工程模板(深度实战版)
运维·网络·人工智能·网络协议·安全
我是海飞3 小时前
杰理 AC792N WebSocket 客户端例程使用测试教程
c语言·python·单片机·websocket·网络协议·嵌入式·杰理
刘某某.3 小时前
RPC分类
网络·网络协议·rpc
石像鬼₧魂石4 小时前
windows系统139/tcp与445/tcp端口渗透完整流程闭环(复习总结)
windows·网络协议·tcp/ip
科技块儿4 小时前
内网系统IP离线数据库搭建与维护完整方案
数据库·网络协议·tcp/ip
❀͜͡傀儡师5 小时前
基于shell脚本来检测SSL证书过期并发送通知到钉钉
网络协议·钉钉·ssl
CCPC不拿奖不改名5 小时前
基于FastAPI的API开发(爬虫的工作原理):从设计到部署详解+面试习题
爬虫·python·网络协议·tcp/ip·http·postman·fastapi