Modbus-RTU

一、数据分析
      两个设备(单片机)通讯,用的是Modbus协议。
      在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如:

说明:

OX[20]   代表是输出线圈,用功能码 0x01,0x05,0x0F 访问, 开头地址是 0 (这个后续说明)
       IX[20]    代表是输入线圈,用功能码 0x02 访问,开头地址是 1 (这个后续说明)
另外两个一样的道理。
       注意:所谓的“线圈”“寄存器”就是“位变量”“16位变量”。之所以称“线圈”因为Modbus最初是施耐德公司为其PLC制定的一种通讯协议很自然Modbus协议中的很多术语是和PLC中的术语相关的。

二、报文分析

简单分析一条Modbus-RTU报文,例如:01  06  00 01  00 17  98 04

01               06                00 01           00 17          98 04
  从机地址        功能号          数据地址          数据         CRC校验

这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。

一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。

98 04是它前面的数据(01 06 00 01 00 17)通过一算法(见附录2)计算出来的结果,其实就像是计算累加和那样(就是010600010017加起来的值,它的算法就是加法运算)

1、主机对从机写操作

如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:

01                 06                00 01           00 17          98 04
  从机地址        功能号          数据地址          数据         CRC校验

假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:
       HoldDataReg[1]  =  0x0017;
Modbus主机就完成了一次对从机数据的写操作,实现了通讯。

2、主机对从机读操作

主机进行读HoldDataReg[1] 操作,则报文是:

01                 03               00 01              00 01              D5 CA

从机地址        功能号          数据地址      读取数据个数       CRC校验

那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:

返回内容:

01             03               02                   0017           F8 4A

从机地址   功能号     数据字节个数    两个字节数据    CRC校验

Modbus主机就完成了一次对从机数据的读操作,实现了通讯。

三、Modbus报文模型

以上了解到了Modbus的一帧报文是如何通讯的,其实每个报文的格式都基本一样的。

                     

ADU: 应用数据单元
PDU: 协议数据单元

四、Modbus数据模型

五、Modbus事务处理

下列状态图描述了在服务器侧Modbus事务处理的一般处理过程。

六、Modbus请求与响应

看Modbus协议手册,中文第 10 页开始,英文第 24 页开始。手册非常详细举例说明了Modbus协议各个功能号的请求与响应。

Modbus任务处理函数( 在单片机上实现过程)

函数中,RcvBuf 为串口接收缓冲区,如果接收了一个报文则,RcvBuf[0] 为从机地址,RcvBuf[0] 为MODBUS功能号。根据功能号做出响应,而具体的操作根据功能号在各自的函数中执行,相当于解析接收到的数据。

附录1:Modbus-RTU功能码
       最常用功能码:
       下面“线圈”“寄存器”其实分别直的就是“位变量”“16位变量”
        01 (0x01)        读线圈
        02 (0x02)        读离散量输入
        03 (0x03)        读保持寄存器
        04(0x04)         读输入寄存器
        05 (0x05)        写单个线圈
        06 (0x06)        写单个寄存器
        15 (0x0F)        写多个线圈
        16 (0x10)        写多个寄存器

   

附录2:CRC Generation

Modbus-RTU入门篇相关推荐

  1. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  2. 树莓派 rfid_树莓派工控机做Modbus RTU主站读取RFID数据

    KUNBUS Revpi Core 3是工业级的树莓派,可作为小型的工业PC用,外观十分小巧,操作简单,DIN导轨模块化安装,RevPi core 3能与RevPi IO连接,能实时对这些IO的控制. ...

  3. Modbus协议栈应用实例之二:Modbus RTU从站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们将使用协议栈实现一个Modbu ...

  4. Modbus协议栈应用实例之一:Modbus RTU主站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,在这一篇中我们先来使用协议栈实现Modbu ...

  5. modbus rtu 调试软件_一文最全解读Modbus 的RTU、ASCII、TCP

    导 读 ( 小库 ) 多年来没少调试施耐德PLC,因此Modbus-RTU.Modbus-TCP等协议都经常接触,但一直都没有认真总结一下,借这篇文章总结一下. 01 术语解读 1 word =2 b ...

  6. 快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  7. Matlab Simulink RS-485 Modbus RTU协议串口通信实录

    目录 一.目标实现 二.基本原理 三.过程实录 一.基本原理 一.目标实现 最近需要进行一个大型试验,需要实现:通过上位机来实时收集波高仪数据并经过一系列复杂算法来控制下位机(IO模块即继电器)从而控 ...

  8. Simens 1200 PLC如何读取多个Modbus RTU的仪表

    Simens 1200 PLC如何读取多个Modbus RTU的仪表 简介 上一篇我们学习了如何通过Modbus RTU的方式和转速表通讯,这一篇我们学习多表轮询通讯.比如在现场我需要读两个地方的转速 ...

  9. STM32CubeMX | Modbus RTU 主机协议栈实现(国产单片机、FreeModbus无缝使用)

    STM32CubeMX | Modbus RTU 主机协议栈实现 目录 1.前言 2.协议栈API介绍 2.1 控制结构 2.2 主机读线圈状态(CMD1) 2.2 主机读离散量输入(CMD2) 2. ...

  10. opc ua 用哪种语言编写_通俗讲解OPC UA 之通俗入门篇

    这是一篇通俗讲解OPC UA的入门篇 为什么要通俗的讲呢,主要是怕自己讲的自己看不懂,会尴尬. 比这更尴尬的是,自己写的没看懂,你们却看懂了. OPC UA内容过于深奥,笔者最近研究,说不上研究,只能 ...

最新文章

  1. oracle创建DBLink连接
  2. 看麦田“蚂蚁网” 想网络新社区
  3. centos安装g++
  4. 快速安装本地yum源
  5. 【OS学习笔记】三十四 保护模式十:中断和异常区别
  6. filebeat 配置文件详解
  7. 精典教程-推荐-2018-12-08(笔记)
  8. Mybatis源码本地化构建Demo
  9. 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
  10. 计算机考试外贸出货单,史上最全订单跟进英文模板
  11. 【河马】oracle注入工具v1.1,明小子4.5|明小子注入工具 v15.1最新版
  12. AS+图灵机器人官网+HTTP POST(json)+JsonReader实现安卓课设《智能聊天机器人》填坑记录
  13. CDOJ 796 DAGE(Big Brother)
  14. 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号
  15. Java之static静态对象
  16. python自动读取短信_自动化测试-自动获取手机短信验证码
  17. 深度学习原理与框架-RNN网络框架-LSTM框架 1.控制门单元 2.遗忘门单元 3.记忆门单元 4.控制门单元更新 5.输出门单元 6.LSTM网络结构...
  18. ChinaSkills技能大赛网络系统管理Debian模块||网络地址配置
  19. 生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
  20. 这个MT4指标代码哪里出问题了?

热门文章

  1. C语言图形编程|设置位置
  2. php手册 mac版,PHP中文手册for mac-PHP中文手册Mac版下载 V1.0.2-PC6苹果网
  3. 【基于深度学习的人机对弈机器人——视觉识别】
  4. 2017 matlab 仿真,Matlab 2017a 安装程序
  5. 终端一直显示 (master) ,即终端一直处于master分支下的取消办法
  6. html5 中国地图统计图,html5 echarts中国地图网络销售分布图表代码
  7. CodeBlocks下载及安装教程(小白图解)
  8. 为什么不能说“接受原假设”?
  9. TS入门——01.数据类型
  10. 论文关于mysql数据库文献_数据库论文参考文献