FreeModbus快速入门指南

本文为Modbus快速使用指南,不涉及过多深入内容

协议描述

MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU,Protocol Data Unit)。特定总线或网络上的MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。
在这里插入图片描述

  • 启动MODBUS 事务处理的客户机创建MODBUS应用数据单元,功能码向服务器指示将执行哪种操作。
  • 客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。
  • 在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功能码仅说明操作。
  • 如果在一个正确接收的MODBUS ADU 中,不出现与请求MODBUS 功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求MODBUS 功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。
  • 当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。对于一个正常响应来说,服务器仅对原始功能码响应。
  • 对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑1。

PDU

MODBUS 协议定义了三种PDU。它们是:

  • MODBUS请求PDU,mb_req_pdu
  • MODBUS响应PDU,mb_rsp_pdu
  • MODBUS异常响应PDU,mb_excep_rsp_pdu

mb_req_pdu

mb_req_pdu = { function_code, request_data},其中
function_code - [1个字节] ,功能码
request_data - [n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移量、子功能码等信息。

mb_rsp_pdu

mb_rsp_pdu = { function_code, response_ data},其中
function_code - [1个字节],功能码
response_data - [n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移量、子功能码等信息。

mb_excep_rsp_pdu

mb_excep_rsp_pdu = { function_code, request_data},其中
function_code - [1个字节],功能码+ 0x80
exception_code - [1个字节],异常码。

数据模型

基本表格对象类型访问类型内容
离散量输入1 bit只读读取服务器端位状态
线圈1 bit读写读、写服务器端位状态
输入寄存器16 bits只读读取服务器端寄存器
保持寄存器16 bits读写读、写服务器端寄存器

通常使用较多的是输入寄存器、保持寄存器。

举栗子🌰

测试说明:STM32开发板作为Modbus主机,使用Modbus Slave软件模拟从机,分别测试保持寄存器、输入寄存器、线圈、离散量的读写操作。

HoldingReg.mbs:保持寄存器
InputReg.mbs:输入寄存器
Coils:线圈
Input:输入离散量
结合数据帧的数据与该图对照,了解各数据模型是如何进行读写操作的。
Modbus Slave仿真软件
数据帧的数据,即是开发板与Modbus Slave仿真软件之间的测试数据,对从机四种数据模型的读写测试。
Modbus数据帧
读取到的从机数据打印出来,写数据直接通过Modbus Slave仿真软件查看
主机串口打印数据

保持寄存器

写单个保持寄存器

客户端:01 06 00 01 00 4C D9 FF
服务器:01 06 00 01 00 4C D9 FF

客户端发送数据分析服务器发送数据分析
01从机地址01本机地址
06写单个保持寄存器06原功能码
00 01保持寄存器地址00 01原地址
00 4C写入保持寄存器的数据00 4C原数据
D9 FFCRC校验D9 FFCRC校验

客户端请求向地址为1的服务器写保持寄存器,保持寄存器的地址为1,写入的数据为0x004C

写多个保持寄存器

客户端:01 10 00 02 00 02 04 00 6F 00 DE C2 33
服务器:01 10 00 02 00 02 E0 08

客户端发送数据分析服务器发送数据分析
01从机地址01本机地址
10写多个保持寄存器10原功能码
00 02保持寄存器地址00 02原地址
00 02保持寄存器数量00 02原数量
04数据域长度E0 08CRC校验
00 6F写入地址为2的保持寄存器的数据111
00 DE写入地址为3的保持寄存器的数据222
C2 33CRC校验
读多个保持寄存器

客户端:01 03 00 04 00 02 85 CA
服务器:01 03 04 01 4D 01 BC 6B F9

客户端发送数据分析服务器发送数据分析
01从机地址01本机地址
03读多个保持寄存器03原功能码
00 04读地址为4开始的保持寄存器04数据域长度
00 02读地址为4开始的2个保持寄存器01 4D地址为4的保持寄存器值333
85 CACRC校验01 BC地址为5的保持寄存器值444
6B F9CRC校验
读写多个保持寄存器

客户端:01 17 00 06 00 02 00 08 00 02 04 03 78 03 E7 0E 09
服务器:01 17 04 02 2B 02 9A 09 9C

客户端发送数据分析服务端发送数据分析
01从机地址01本机地址
17读写多个保持寄存器17原功能码
00 06读地址为6开始的保持寄存器04数据域长度
00 02读地址为6开始的2个保持寄存器02 2B地址为6的保持寄存器值555
00 08写地址为8开始的保持寄存器02 9A地址为7的保持寄存器值666
00 02写地址为8开始的2个保持寄存器
04数据域长度4
03 78写入地址为8的保持寄存器的数据888
03 E7写入地址为9的保持九年起的数据999
0E 09CRC校验

线圈、离散量、输入寄存器与保持寄存器大同小异。

Modbus资料大全

笔者将Modbus 主机、从机协议完整资料整理如下:

文件说明
freemodbus-v1.6.zipFreeModbusV1.6源码
FreeModbusMasterSlave(Rev1.0.0).zip笔者移植好测试通过STM32+FreeRTOS+FreeModbus Master Slave代码
ModbusSlave 7.0和ModbusPoll_7.0软件注册码.zipFreeModbus Master Slave调试工具
FreeModbus V1.6 主机使用说明.mdFreeModbus 主机使用说明文档
FreeModbus 从机流程图.vsdFreeModbus 从机流程图
FreeModbus 主机流程图.vsdFreeModbus 主机流程图
Modbus应用协议.doc笔者整理的 FreeModbus 协议文档
FreeModbus Datasheet笔者搜集 FreeModbus 官方协议文档

上面的数据,均来自以下资料内的测试工程,Modbus Slave的设置参照上面的图即可。

资料链接:👉FreeModbus资源传送门👈
资料介绍:👉FreeModbus资源介绍传送门👈

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七云享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值