Modbus协议最初由Modicon公司开发出来,是针对PLC设备设计的基于串行总线的主从模式的应用层总线设备协议。ModbusTCP是封装在TCP包内的Modbus协议,虽然有一些变化,但是根本上还是主从模式。
随着嵌入式技术的发展,国内很多系统的控制和采集单元部分为公司自主研发,一般建议这些公司的串行通讯协议采用Modbus协议,很多用户在modbus协议存在着理解错误,现在分析如下:
一、modbus的保持和输入寄存器是以word16bit)为单位的。
比如4****(保持寄存器/输出寄存器)和3****(输入寄存器)是以字为单位的。所以,如果读40001寄存器开始的一个16位的无符号数,那么返回2个Byte,并可以从40002开始读下一个16位的无符号数。
但是,如果读40001寄存器开始的一个32位浮点数,那么,返回4个Byte,而且,下一个32位浮点数必须从40003开始。
常见问题:
1)、将40001定义为一个Byte的数据;
2)、将40001定义为32位浮点数,40002为下一个32位浮点数。
二、寄存器最小地址为1,而报文起始地址为0
在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:
1.在控制器中,“线圈1”在Modbus报文的地址域中的地址为00 00。
2.线圈127的十六进制报文地址为007E hex(十进制的126)
3.保持寄存器40001的报文地址为00 00。因为报文功能码明确要操作“保持寄存器”,所以,协议就以“4XXXX”代表这个寄存器。
4.保持寄存器40108的报文地址为006B hex (十进制107)
总之,Modbus地址一般指4****(保持寄存器/输出寄存器)和3****(输入寄存器),这时应用层面的:
比如设备说明书可以简要说明设备支持Modbus RTU标准协议,并详细描述其地址对应关系为:40001 --  模拟量采集通道1,16位有符号数,.....。比如组态软件的地址设置,一般为输出寄存器,从地址1开始,连续多少个。或者指明400001:16位有符号数。但是,在数据报文层面,寄存器起始地址从0开始。
数据报文包括:设备地址+功能码+起始地址+寄存器个数+校验位。其中,起始地址是从0开始的。

举例说明:从设备17读40001开始的2个寄存器数据的报文

设备地址功能码起始地址寄存器个数校验
11              03          00 00         00 02              --

常见问题:
1、使用和定义40000地址;
2、分析报文时,直接将报文起始地址当作应用层寄存器地址。
3、Modbus的写寄存器命令的不同。
常用Modbus寄存器有:线圈(Coil)、输入(Input)、保持寄存器(Holding Registers)和输入寄存器(Input Registers)。
从Modbus设备角度看,输入是上位机采集Modbus设备的信息,也就是这些寄存器是只读的,所以,Modbus协议没有写输入(Input)和输入寄存器(Input Registers)的命令。

线圈(Coil)是状态量,对应Modbus设备的开关量输出(DO),保持寄存器(Holding Registers)是模拟量,对应Modbus设备模拟量输出(AO),这些寄存器需要Modbus设备的上位机进行设置,也就是为可以写的寄存器。

在Modicon_Modbus协议协议中,写线圈(Coil)和保持寄存器(Holding Registers)都有两种写命令:
1)、写单个寄存器:
置单线圈(Force Single Coil)功能码05(0x05)
写单个寄存器(Preset Single Holding Register)功能码06(0x06)
2)、写多个寄存器
写多线圈(Force Multiple Coils)功能码15(0x0F)
写多个寄存器(Preset Multiple Registers)功能码16(0x10)

Modbus协议使用常见问题分析相关推荐

  1. snmp协议及常见问题分析

    SNMP:"简单网络管理协议",用于网络管理的协议.SNMP用于网络设备的管理.SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了get操作:管理员需要向设备执行设置 ...

  2. 三、ModBus协议实战分析

    0x01 前言 上一篇文章我们学习总结了Modbus协议相关的一些理论基础,在这篇文章中,我们将通过搭建Modbus仿真环境来对Modbus协议进行实际分析. 协议分析环境: ModbusPoll : ...

  3. 【工控协议专题01】Modbus协议原理与安全性分析

    目录 O.术语 一.背景: 二.协议原理 三.传输方式 四.Modbus RTU 和Modbus ASCII有什么区别? 五.MODBUS TCP 注意点 六.功能码作用 七.Modbus 协议安全性 ...

  4. pda找不到服务器,PDA连不上服务器常见问题分析.doc

    PDA连不上服务器常见问题分析.doc PDA连不上服务器常见问题分析 请查看PDA的网络通不通,可以先检查WIFI/3G是否连接上网络,如果连接不上,点击PingToots工具,用"pin ...

  5. can总线配置读入是什么意思_STM32学习笔记—CAN总线收发数据常见问题分析

    CAN,Controller Area Network(控制器局域网络),在汽车电子.工业控制领域的应用比较多,通常用于局域组网. 这是第9篇学习分享文章,<STM32学习笔记>之CAN总 ...

  6. 微信小程序 RTMP 音视频 通话 ffmpeg_音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查...

    问题背景: 前两天看读者留言让再写写音视频问题排查方面的思路,前面大概写几篇:<音视频播放疑难杂症分析和解决 :序篇>.<音视频常见问题分析和解决:延时和抖动>.<记一次 ...

  7. ffmpeg 丢帧 灰屏_音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查...

    问题背景: 前两天看读者留言让再写写音视频问题排查方面的思路,前面大概写几篇:<音视频播放疑难杂症分析和解决 :序篇>.<音视频常见问题分析和解决:延时和抖动>.<记一次 ...

  8. STM8单片机串口同时识别自定义协议和Modbus协议

      在单片机开发中,串口是最常用的和外界交换数据的渠道,要使用串口,那必不可少的就是通信协议,通信协议就是单片机和外界通信的语言,要想正常和其他设备正常交流,首先语言必须相通.   在实际开发过程中由 ...

  9. 【Android】【TP】TP开发常见问题分析

    TP开发常见问题&分析 1.TP重点关注范围以及checklist 先附录上TP的内部checklist,所有在列内容都为常见问题切比较严重问题,如下: 上下电时序 Operating Vol ...

最新文章

  1. ASP.NET MVC雕虫小技 1-2
  2. ML之NB:基于NB朴素贝叶斯算法训练20类新闻文本数据集进行多分类预测
  3. 了解如何通过Python使用SQLite数据库
  4. 58 - II. 左旋转字符串
  5. 使用CancellationToken——而不是Thread.Sleep
  6. spring认证的一些核心类
  7. scala =>用法总结
  8. Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。
  9. 电脑中如何打开进程管理器?
  10. OSPF的区域划分与路由计算概述
  11. 网易云信 NIM_duilib 源码分析
  12. Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)
  13. java实现发送手机验证码功能
  14. 什么是共识?(理论篇)
  15. 上海浦东机场的wifi使用攻略
  16. 一加7充电_一加7T充电、续航能力测评
  17. 在Mac中开发STM32单片机
  18. 狼人杀暂时未连接到语音服务器,狼人杀连接服务器失败 连接不上网络怎么办...
  19. 教您如何采集阿里飞猪各旅行专营店的主图及视频
  20. 多功能在线起名取名查重工具微信小程序源码 可开流量主 带安装教程

热门文章

  1. Maven项目中使用本地JAR包
  2. Django web框架-----Django连接本地现有mysql数据库
  3. Android 的Android Device Monitor 打不开出现 A error has occured
  4. Shell命令行操作
  5. LR实战之Discuz开源论坛——网页细分图结果分析(Web Page Diagnostics)
  6. cctype 定义的函数 (记忆)
  7. POJ-3469 Dual Core CPU 最小割最大流
  8. window.event.srcElement在Firefox IE下的兼容问题
  9. map和pair配合使用
  10. SpringBoot2.0之七 实现页面和后台代码的热部署