您的位置 首页 IC

Modbus协议运用常见问题剖析

Modbus协议最初由Modicon公司开发出来,是针对PLC设备设计的基于串行总线的主从模式的应用层总线设备协议。ModbusTCP是封装在TCP包

Modbus协议开端由Modicon公司开发出来,是针对PLC设备设计的根据串行总线的主从形式的应用层总线设备协议。ModbusTCP是封装在TCP包内的Modbus协议,虽然有一些改变,可是根本上仍是主从形式。
  跟着嵌入式技能的开展,国内许多体系的操控和收集单元部分为公司自主研制,一般主张这些公司的串行通讯协议选用Modbus协议,许多用户在modbus协议存在着了解过错,现在剖析如下:
  一、modbus的坚持和输入寄存器是以word(16bit)为单位的。
  比方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)

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/230610.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部