分类

简称

起始地址

结束地址

能够使用的功能码

输出逻辑线圈/(可读写位)/(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. 利用sql_trace跟踪一个指定会话的操作

    1.  sys用户给管理用户授权.SQL> grant execute on sys.dbms_system to andy;Grant succeeded.2. 查询被跟踪用户的sid,ser ...

  2. Linux 数据流重定向

    1.三种数据流重定向1)标准输入(stdin):代码为0,使用0<或0<<,其中代码0可以省略2)标准输出(stdout):代码为1,使用1>或1>>,其中代码1可 ...

  3. Xcode 7安装KSImageNamed失败解决方法

    ## How do I use it? Build the KSImageNamed target in the Xcode project and the plug-in will automati ...

  4. 20150826运算符,if语句

    运算符+ - * / % 加减乘除与注意:1.做除法运算时,如果两个操作数同为整数,则运算结果也是整数,不会出现小数.2.上面这些运算,如果两个操作数不同是一个类型,在运算的时候会自动进行类型转换. ...

  5. struts2 的简单实例应用

    功能:本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正确转到成功界面,否则转到失败界面. 1)在创建了一个JavaWeb工程后,导入struts2的核心支持包库. 2)web项目右击-M ...

  6. Linux复制指定目录及子目录下特定类型的文件

    首先建立一个用于测试的目录,用'tree'命令查看其结构如下所示: 可见,目录中主要包含用于测试的*.txt文件和用于充当炮灰的*.tes文件 目标是保持当前的目录结构,只把txt文件复制出来 方法一 ...

  7. 【转】关于PHP的header("P3P: CP=CURa……")

    对于IE来说(默认安全级别下),iframe.img.link等标签都是只发送session cookie(又叫 第一方cookie),拦截本地cookie发送(又叫第三方cookie).当这些标签跨 ...

  8. session_write_close()

    功能: 结束当前的session 操作 保存session 数据  说的很明白了, 当脚本请求没有调用session_write_close(); 时虽然 session  的数据是存储住了.但是 s ...

  9. 纠结的NTP安装过程

    为了部署实验用的openstack环境,其中有NTP的安装环节.在这个过程中,真是折腾了一下午...遇到了一些问题! 由于公司内部网络管理的原因,很多网站没有办法访问,比如公开的时间服务站点,我找了几 ...

  10. Python爬虫(图片)编写过程中遇到的问题

    最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总 ...