Modbus教程

四种寄存器说明

线圈状态(coil status 输出端口 对应PLC DO(数字输出)如电磁阀,MOSFET输出

离散输入状态(input status)输入端口 对应PLC DI(数字输入) ,如拨码开关,接近开关

保持寄存器(holding Register)输出参数 对应PLC AO (模拟输出)。

 

输入寄存器(input  Register)输入参数,对应PLC AI(模拟输入)。

图1:

 

寄存器种类

寄存器PLC地址(address)

Modbus协议地址

简称

读写状态

线圈状态

00001~09999

0000~FFFF (address-1)

0X

读写

离散输入状态

10001~19999

0000~FFFF(address-10001)

1X

保持寄存器

40001~49999

0000~FFFF(address-40001)

4x

读写

输入寄存器

30001~39999

0000~FFFF(address-30001)

3X

 

注意:程序(代码中)实际使用的是0~FFFF的地址,和PLC地址的关系如上图。PLC地址开头0,1,4,3实际表明了操作的是何种寄存器。

 

Modbus报文主要由四个部分组成。设备地址,功能码,数据域,校验。

功能码

如下图:图2

功能码

名称

寄存器PLC地址

位、子操作

操作数量

01

读线圈

 见图1,下同

1或多

02

读离散输入

 

1或多

03

读保持寄存器

 

1或多

04

读输入寄存器

 

1

05

写单个线圈

 

1

06

写单个保持寄存器

 

1

15

写多个线圈

 

16

写多个保持寄存器

 

 

软件说明

下面以Modbus Poll 和Modbus Slave为例,说明Modbus协议具体内容。

下载这个两个软件,版本6.X,注册码分别是

slave
5455415451475662

master
5A5742575C5D10

 

 对于Slave

F8设置:

1.从机地址

2.设置四种寄存器的一个,配置其开始地址和地址数量。

F3连接设置,默认就好,Modbus master同理。

 点击Display ->Commnunications查看通信数据。Master相同。

对于Master

F8配置

1.从机地址

2.图2 中八种功能码中 的一种

 

3起始地址(已经给出40011对应10这样的例子)。

4数据量。

5扫描频率。

 

协议格式 

读协议

报文格式:

主===> 从

从设备地址,功能码,起始地址,寄存器数量,校验。

从===>主

从设备地址,功能码,数据域字节数,数据域,校验。

说明:起始地址和寄存器数量都是big endian (高字节在前,低字节在后),short类型。

从设备返回的数据域构成:对于位类型,会把每8个位合并成一个byte类型。

对于字类型,N个寄存器会有N*2个字节,按照高字节在前,低字节在后的顺序。

例1:01读线圈状态

slave id为34,寄存器选项为0X,设置起始地址2000,数量20,

具体数据如图所示

Master配置成

读取线圈状态:从设备ID为34,起始地址2000,数量为20的。

通信数据

下行:22 01 07 D0 00 14 3B DB

上行:22 01 03 07 03 03 CA 2D

 

例2:02读取离散输入状态

 

 

读取从设备ID 为1,起始地址为0,数量20个离散输入寄存器

通信数据:

下行:01 02 00 00 00 14 78 05

上行:01 02 03 03 03 03 C8 BF

 

例3:03读取保持寄存器

 

从设备id 50,地址60,数量3

通信数据:

下行:32 03 00 3C 00 03 C0 04

上行:32 03 06 0C 8E 00 38 00 29 49 44

 

例4:04读取输入寄存器

从设备ID 24,起始地址0,数量4

通信数据:

下行:18 04 00 00 00 04 F3 C0

上行:18 04 08 00 0C 00 2D 00 0B 00 2A CE 4A

 

写协议

 报文格式:

单个数据

主===>从:从设备ID,功能码,起始地址,变更数据,校验。

从===>主:从设备ID,功能码,起始地址,变更数据,校验。

多个数据

主===>从:从设备ID,功能码,起始地址,寄存器数量,字节数量,变更数据,校验

从===>主:从设备ID,功能码,起始地址,寄存器数量,校验

 

起始地址和寄存器数量都是2个字节。

例5:05写单个线圈

设置从设备ID 为24,寄存器地址56,在数据编辑框中写1或者0

 

通信数据:18 05 00 38 FF 00 0F FE,返回相同。

如果对线圈写0,通信数据变为18 05 00 38 00 00 4E 0E

 

例6:06写单个保持寄存器

从设备ID,为1,寄存器地址50,写一个数据52

通信数据:01 06 00 32 00 34 29 D2,返回相同。

 

例7:15写多个线圈

从设备ID为100,寄存器地址50 ,数量20个,写数据如下图

通信数据:

下行:64 0F 00 32 00 14 03 03 07 03 E2 29

上行:64 0F 00 32 00 14 FD FE

 

 例8:16写多个保持寄存器

从设备ID为48,寄存器地址100,数量为4

写入如下数据

通信数据:

下行:30 10 00 64 00 04 08 01 01 00 33 00 17 00 09 93 2B

 上行:30 10 00 64 00 04 84 34

 

 异常响应

报文格式:从设备ID,功能码,异常码,校验

返回报文将功能码最高位置为1,

异常码说明:

01 非法功能码

02 非法数据地址

03非法数据值

04从设备故障

 

 

 

参考文档:

https://wenku.baidu.com/view/d233d09feff9aef8941e0698.html

 

转载于:https://www.cnblogs.com/legion/p/9404229.html

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
野火Modbus教程是关于Modbus通信协议在野火系统上的应用指南。Modbus是一种通信协议,常用于工业自动化领域,它能够实现不同设备之间的数据交互。通过学习野火Modbus教程,我们可以了解如何在野火系统上使用Modbus协议进行通信。 首先,野火Modbus教程会介绍Modbus协议的基本原理和通信方式。我们会学习Modbus协议的类型,如Modbus RTU和Modbus TCP/IP,并了解它们的工作原理和特点。同时,教程还会介绍Modbus通信的基本流程和数据格式,例如寄存器类型、功能码等。 其次,教程会介绍野火系统如何与其他设备建立Modbus通信连接。我们需要了解如何配置野火系统的串口或网络参数,以便能够与其他设备进行通信。教程中还会提供相关示例代码,供我们参考和学习。 此外,野火Modbus教程还会教授如何在野火系统中编写Modbus通信程序。我们会学习如何使用野火系统提供的Modbus库函数,实现数据的读取和写入操作。教程中会给出具体的代码示例,帮助我们理解实际编程过程中的步骤和方法。 最后,野火Modbus教程还会介绍一些常见的Modbus通信实例和案例。我们可以学习如何读取其他设备的数据,或者将野火系统作为Modbus服务器,提供数据给其他设备。这些实例和案例能够帮助我们更好地理解和掌握Modbus通信的应用方法。 总之,野火Modbus教程是一本详细介绍野火系统上Modbus通信的学习资料,通过学习教程中的内容,我们可以掌握Modbus协议的基本原理和应用技巧,为工业自动化领域的数据交互提供解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值