分类

简称

起始地址

结束地址

能够使用的功能码

输出逻辑线圈/(可读写位)/(DI/O)(如继电器开关控制)

0x

00000

09999

0x01读一组逻辑线圈

0x05写单个线圈

0x0f写多个线圈

触点/开关量输入/只读位(DI)如按键是否按下

1x

10000

19999

0x02读一组开关输入

输入寄存器(AI)实时数据如AD采集数据。

3x

30000

39999

0x04读一个或多个输入寄存器

保持寄存器(AI/O)

如设置的各种参数

4x

40000

49999

0x03读一个或多个保持寄存器的值

0X06写单个保持寄存器

0X10写多个保持寄存器

0x01:   读一组逻辑线圈,如读8个继电器输出状态。

0x0F:  写一组逻辑线圈。如同时控制8个继电器

0x05:  写单个逻辑线圈,如设定单个继电器

0x02:  读一组开关量的输入,如读显示板是否有按键按下、水流开关的状态。

0x03:  读一个或多个保持寄存器,如读一个或多个设置参数

0x010: 写一个或多个保持寄存器,如写设置参数

0x06:  写单个保持寄存器,如写单个设置参数

0x04:   读一个或多个输入寄存器,如读具体的按键值,AD采集的信息等

modbus协议功能码和常见问题

Pasted from <http://blog.csdn.net/educast/article/details/8159510

1单片机开发与PLC开发的异同:

MODBUS协议是专门针对485总线设备(例PLC)开发,寄存器的定义要严格按照其地址范围;功能码的功能定义及定义的寄存器地址与功能码的使用要要严格符合。如上图。

而当单片机开发用串口点对点,可能不会完全遵守MODBUS协议具体体现在2方面:

  首先是定义的寄存器地址范围,应结合不同单片机RAM的大小和项目得实际需求定义起始范围和大小。方法如在RAM区的不同区域定义不同功能的数组:

IOX[N]:输出线圈,用来进行继电器的操作

IX[M]:开关输入  ,用于识别按键是否按下的查询。

其它:功能码的使用也不会严格限定在指定的PLC地址范围。

2modbus寄存器的地址说明:

有两套规则,一套称为PLC地址,为5位十进制数,例如40001,PLC地址40001意味着该参数类型为保持寄存器。另一套是协议地址,协议地址为0x0000,这里面有对应关系,去掉PLC地址的最高位,然后剩下的减1即可。这会存在一个问题,PLC地址30002和PLC地址40002的协议地址同为0x0001,此时访问时是不是会冲突呢。亲们,当然不会了,30001为输入寄存器,需要使用04指令访问,而40001为保持寄存器,可以使用03、06和16指令访问。注意定义的寄存器地址像数组一样都是从0开始的,即通讯中的地址比实际地址小“1”

http://blog.sina.com.cn/s/blog_6ab9638f0100vqol.html

3线圈寄存器:就是可以单独进行位控制的BITS寄存器,类似C51的位带结构体

Typedef struct

{

Bit:0

Bit:1

..

Bit:14

Bit:15

}COIL_REG

http://blog.sina.com.cn/s/blog_598b27cd0101rphm.html

4modbus帧结构:

ADU:应用数据单元

PUD:协议数据单元

freemodbus中如何判断帧结束

modbus协议中没有明显的开始符和结束符,而是通过帧与帧之间的间隔时间T3.5来判断的。超过T3.5就认为收到了新的帧。接下来就可

以处理数据了,首当其冲的就是判断帧的合法性。Modbus通过时间来判断帧是否接受完成,自然需要单片机中的定时器配合。

使用串口发送完成中断:避免丢失最后一个字节内容

Pasted from <http://www.360doc.com/content/14/0313/22/7991404_360395398.shtml>

MODBUS-寄存器与功能码学习的更多相关文章

  1. MODBUS协议整理——功能码简述

    1.Modbus简介——来自维基百科 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的.Modbus是工业领域通信协议的业界标准,并且现在是工业电 ...

  2. ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码

    现在网上有很多类似的文章.其实这一篇也借鉴了很多其他博主的文章. 写这篇文章的重点是在于解析功能和报文.对Modbus这个协议并不会做很多介绍. 好了,我们开始吧. 常用的功能码其实也没多少.我也就按 ...

  3. modbus 寄存器介绍

    modbus 的查询命令 命令 地址开始(两个地址)     地址长度(两个地址)          检验 01  xx     xx xx                              ...

  4. DNP3协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码

    现在网上有很多类似的文章.其实这一篇也借鉴了很多其他博主的文章. 写这篇文章的重点是在于解析功能和报文.对Dnp3这个协议并不会做很多介绍. 那我们就开始吧 上图则为dnp3协议整体的报文模型(点击红 ...

  5. C#ModBus Tcp的学习及Master的实现

    Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. 所以这也是我们工控领域软件开发的所必懂的通讯协议,我也是初次学习,先贴上我的学习笔记 一 ...

  6. 20170222==(MODBUS读取多个寄存器)

    MODBUS读取多个寄存器(功能码04) 为了简单我这里只用4个寄存器,当让你也可以用125个寄存器,但是最多也只能用125个寄存器的.每个寄存器有上面的表知道为一个字的大小即2个字节或者叫16比特位 ...

  7. RS485通信和Modbus协议(转)

    转自:http://www.51hei.com/bbs/dpj-23230-1.html 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接 ...

  8. Modbus协议和应用开发介绍

    因业务需要了解Modbus协议的使用,因此对Modbus的协议,以及相应的C#处理应用进行了解,针对协议的几种方式(RTU.ASCII.TCPIP)进行了封装,以及对Modbus的各种功能码的特点进行 ...

  9. C# MODBUS协议 上位机(转)

    源:C# MODBUS协议 上位机 C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 采用定时器(Timer控件)为时间片. 串口采用serialPort1_DataRec ...

随机推荐

  1. Android Apk反编译得到Java源代码

    大家做Android开发,看到别人应用里一些好的功能,是不是很想得到源码,借鉴一下?既然Android是用JAVA开发的,那么我们就能很容易的通过反编译的到应用的源代码.下面我简单介绍下应该怎么操作. ...

  2. webbrowser在不同的.netframework版本差异

    这几在做一个浏览器的自动化下载的工具,发现自己做的demo和做的项目代码运行不一致,代码就那么几行,拷贝过去为什么有些行为就不一样呢?经过分析发现原来有.net4.0和.net2.0中的webbrow ...

  3. LINQ及EntityFramework何时从数据库返回数据,备忘

    Generally speaking, LINQ queries are executed when the application code processes data (for instance ...

  4. linux服务之openldap

    http://www.openldap.org/ http://blog.csdn.net/chinalinuxzend/article/details/1870656 OpenLDAP学习笔记 ht ...

  5. SQL Server取系统当前时间【转】

    getdate //获得系统当前日期 datepart //获取日期指定部分(年月日时分表) getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate( ...

  6. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  7. 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案

    问题一:“未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ...

  8. Redis 高可用性解决方案(Sentinel)

    Sentinel是Redis的高可用性解决方案: 由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主 ...

  9. eclipse安装完成后配置tomcat server runtime evironment

    安装eclipse后创建web项目需要运行在tomcat服务器上,这里是tomcat的配置:(前提是电脑上已经安装了tomcat!)

  10. 带Cookie的 WebClient

    /// <summary> /// WebClient的扩展 /// </summary> public class webClient : WebClient { /// & ...