Modbus通讯 功能码及实例

Modbus通讯 功能码及实例
Modbus通讯 功能码及实例

功能码名称作用

01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)

02 读取输入状态取得一组开关输入的当前状态(ON/OFF)

03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值

04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值

05 强置单线圈强置一个逻辑线圈的通断状态

06 预置单寄存器把具体二进值装入一个保持寄存器

07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定

08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴

09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑

10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送

11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时

12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误

13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑

14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送

15 强置多线圈强置一串连续逻辑线圈的通断

16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器

17 报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态

18 (884和MICRO 84)可使主机模拟编程功能,修改PC状态逻辑

19 重置通信链路发生非可修改错误后,是从机复位于已知状态,可重置顺序字节

20 读取通用参数(584L)显示扩展存储器文件中的数据信息

21 写入通用参数(584L)把通用参数写入扩展存储文件,或修改之

22~64 保留作扩展功能备用

65~72 保留以备用户功能所用留作用户功能的扩展编码

73~119 非法功能

120~127 保留留作内部作用

128~255 保留用于异常应答

实例

在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。

1、读可读写数字量寄存器(线圈状态):

计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

例:[11][01][00][13][00][25][CRC低][CRC高]

意义如下:

<1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想和17号(十进制的17是十六进制的11)通讯。

<2>命令号01:读取数字量的命令号固定为01。

<3>起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0)。比如例子中的起始地址为19。

<4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关量。例子中为37个开关量。

<5>CRC校验:是从开头一直校验到此之前。在此协议的最后再作介绍。此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。

设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC 校验的低8位] [CRC校验的高8位]

例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]

意义如下:

<1>设备地址和命令号和上面的相同。

<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值。

<3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。比如例子中,表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。

<4>CRC校验同上。

2、读只可读数字量寄存器(输入状态):

和读取线圈状态类似,只是第二个字节的命令号不再是1而是2。

3、写数字量(线圈状态):

计算机发送命令:[设备地址] [命令号05] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

例:[11][05][00][AC][FF][00][CRC低][CRC高]

意义如下:

<1>设备地址和上面的相同。

<2>命令号:写数字量的命令号固定为05。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的开关的地址。

<4>下置的数据高8位,低8位:表明需要下置的开关量的状态。例子中为把该开关闭合。注意,此处只可以是[FF][00]表示闭合[00][00]表示断开,其他数值非法。

<5>注意此命令一条只能下置一个开关量的状态。

设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

4、读可读写模拟量寄存器(保持寄存器):

计算机发送命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

例:[11][03][00][6B][00][03][CRC低][CRC高]

意义如下:

<1>设备地址和上面的相同。

<2>命令号:读模拟量的命令号固定为03。

<3>起始地址高8位、低8位:表示想读取的模拟量的起始地址(起始地址为0)。比如例子中的起始地址为107。

<4>寄存器数高8位、低8位:表示从起始地址开始读多少个模拟量。例子中为3个模拟量。注意,在返回的信息中一个模拟量需要返回两个字节。

设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC 校验的低8位] [CRC校验的高8位]

例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]

意义如下:

<1>设备地址和命令号和上面的相同。

<2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值。例子中返回了3个模拟量的数据,因为一个模拟量需要2个字节所以共6个字节。

<3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。例子中返回的值分别是555,0,100。

<4>CRC校验同上。

5、读只可读模拟量寄存器(输入寄存器):

和读取保存寄存器类似,只是第二个字节的命令号不再是2而是4。

6、写单个模拟量寄存器(保持寄存器):

计算机发送命令:[设备地址] [命令号06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]

例:[11][06][00][01][00][03][CRC低][CRC高]

意义如下:

<1>设备地址和上面的相同。

<2>命令号:写模拟量的命令号固定为06。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模拟量寄存器的地址。

<4>下置的数据高8位,低8位:表明需要下置的模拟量数据。比如例子中就把1号寄存器的值设为3。

<5>注意此命令一条只能下置一个模拟量的状态。

设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

modbus_通讯协议_实例

上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC

例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86

Modbus RTU相关常识和通信示例

Modbus RTU –基本功能 1 关于ModBus ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。 1.1 报文结构 以串行数据传输为基础,通过一位接着一位进行传送。 1.2协议数据单元(PDU) 1.2.1 Modbus PDU(协议数据单元)由功能码和实际数据两部分组成。 1.2.2 Modbus 串行通讯的消息帧 站号(站地址) 站号字段为1字节长,可能选择0~247站点。 选择0 地址表示选择所有的子机站,代表广播消息的意思。 FC(RTU功能代码) FC字段为1字节长,用以下所示的0~255的值进行定义。带有网格部分表示使用的FC。请不要使用未使用的FC。否则会成为异常应答。常用ModBus的功能码FC定义如下: 01 READ COIL STATUS 01 读取线圈状态 02 READ INPUT STATUS 02 读取离散量输入。 03 READ HOLDING REGISTER 03 读取保持寄存器。 04 READ INPUT REGISTER 04 读取输入寄存器。 05 WRITE SINGLE COIL 05 强置单线圈。 06 WRITE SINGLE REGISTER 06 预置单寄存器 15 WRITE MULTIPLE COIL 07 15 强置多线圈。 16 WRITE MULTIPLE REGISTER 16 预置多寄存器 数据区 数据字段包含所有的信息(功能代码(地址)、字节计数、数据数、数据等)。有关各消息类型(广播、查询、正常应答、异常应答) 的信息字段的详细情况; CRC校验

modbus功能码及格式

1、“01”读取线圈状态 发送: 功能代码1字节0x01 起始地址2字节0x0000~0xFFFF 线圈数量2字节1~2000(0x7D0)接收: 功能代码1字节0x01 字节数1字节N 线圈状态n字节n = N/N+1 N=读取线圈个数/ 8 ,如果余数不为0则N=N+1 出错时的返回: 功能代码1字节0x81 错误代码1字节01/02/03/04 例子: 2、“02”读取输入状态 功能代码1字节0x02 起始地址2字节0x0000~0xFFFF 输入点数量2字节1~2000(0x7D0) 功能代码1字节0x02 字节数1字节N 输入点状态n字节n = N/N+1 出错时的返回: 功能代码1字节0x82 错误代码1字节01/02/03/04 例子:

3、“03”保持型寄存器读取 发送: 功能代码1字节0x03 起始地址2字节0x0000~0xFFFF 寄存器数量2字节1~125(0x7D)接收: 功能代码1字节0x03 字节数1字节2*N 寄存器值N*2字节 N=寄存器数量 出错时的返回: 功能代码1字节0x83 错误代码1字节01/02/03/04 例子: 4、“05”写单一线圈 功能代码1字节0x05 线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00 功能代码1字节0x05 线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00出错时的返回: 功能代码1字节0x85 错误代码1字节01/02/03/04 例子:

5、“06”写单一寄存器 功能代码1字节0x06 寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF 功能代码1字节0x06 寄存器地址2字节0x0000~0xFFFF 写入值2字节0x0000~0xFFFF 功能代码1字节0x86 错误代码1字节01/02/03/04 例子: 6、“15(0x0F)”写多线圈 发送: 功能代码1字节0x0F 起始地址2字节0x0000~0xFFFF 写入线圈个数2字节0x0001~0x07B0写入字节数1字节N 写入值N字节 功能代码1字节0x0F 起始地址2字节0x0000~0xFFFF 写入线圈个数2字节0x0001或0x07B0 功能代码1字节0x8F 错误代码1字节01/02/03/04 例子:

Modbus功能码示例

Modbus功能码示例: 分类功能说明: 1、读位:一次读512 位(64BYTE)最多,最少16 位(但会读入2 个BYTE) 2、写位:一次只能写1 位(针对具体地址写) 3、读字:一次最多可读32 个字(64BYTE) 4、写字:一次最多可写32 个字(64BYTE) 支持的功能码(16 进制表示): 01——读位COIL,对应PLC 的DO 状态 02——读位INPUT,对应PLC 的DI 状态 03——读字,对应PLC 的AO 状态 04——读字,对应PLC 的AI 状态 05——写位,只写一位COIL,对应PLC 的DO 输出10——写字,写多字,对应PLC 的AO 输出 范例: 01 功能码:例读DO,2#0X/88(二号站,88 号0X 线圈,此处88 位十进制) 发出:02 01 00 50 00 10 3D E4 意思:站号02,功能玛01,起始地址0050(十六进制,相当于十进制80),读位长度(0010,相当于十进制16),3DE4 为CRC 校验(先低字节后高字节) 回答:02 01 02 80 00 9C 3C 意思:站号02,功能玛01,后面数据(字节)长度02,数据字节1(低字节)80,数据字节2(高字节)00,数据字节先低后高,最后CRC 校验9C3C 02 功能玛,读DI 位,例:读1#1X/2, 发出:01 02 00 00 00 10 3D C6 意思:起始地址0000,一次读入一个字(16 位)长度0010 回:01 02 02 FF FF B8 08 03 功能玛:例读2#4X/88 发出:02 03 00 57 00 01 35 E9 回答:02 03 02 00 01 3D 84 注意:此功能玛下读入的数据字节排列为先高后低,表明4X/88 的数值为0001 04 功能玛:读字AI,例1#3X/3 发出:01 04 00 02 00 01 90 0A 表示:读入的字长度为0001(1 个字) 回:01 04 02 10 00 B4 F0 表示3X/3 的值为HEX1000 即十进制4096,先高字节后低字节 05 功能玛:例写2#0X/88 发出:02 05 00 57 FF 00 3D 9D,“FF 00”表示写“1”,“00 00”表示写“0” 回应:02 05 00 57 FF 00 3D 9D,表明写“1”成功

MODBUS协议(功能码及报文解析)

MODBUS协议 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求 相对容易的工业网络部署 对供应商来说,修改移动原生的位或字节没有很多限制 Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。 Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。 大多数Modbus设备通信通过串口EIA-485物理层进行[1]。 对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serial communication)方式。RTU 格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。

对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/ TCP变种,这种方式不需要校验和的计算。 对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。 Modbus 有一个扩展版本Modbus Plus(Modbus+或者MB +),不过此协定是Modicon专有的,和Modbus不同。它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。它使用1Mb it/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA 总线的板卡。 Modbus协议是一个master/slave 架构的协议。有一个节点是master 节点,其他使用Modbus协议参与通信的节点是slave 节点。每一个slave 设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。 一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0 的指令是广播指令,所有收到指令的设备都会执行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个R

基于Modbus协议实现单片机与PLC之间的通讯

基于Modbus协议实现单片机与PLC之间的通讯 来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云 关键词:可编程控制器 Modbus 通讯协议 1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议[4] Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。 (1) 典型的RTU消息帧 典型的RTU消息帧如表1所示。

RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。 从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代 码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。 当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。 (2) 所有的Modbus功能码 Modbus的功能码定义如表2所示。

用VB实现Modbus RTU串行通讯工程实例

用VB实现Modbus RTU串行通讯工程实例 声明:网上看到的,觉得不错,稍微整理了一下分享给大家。 用VB实现Modbus RTU串行通讯 在一些应用中可能需要使用诸如VB来进行上位机监控程序的开发,而Modbus 协议是这类应用中首选的通讯协议;Modbus协议以其简单易用,在工业领域里已广泛的为其他第三方设备所支持。这里对VB和Twido PLC间的通讯进行说明。 对于大部分应用,Twido PLC作为从站,它不需要编制通讯程序,只要把通讯口的参数设置好即可,例如下图表示此Twido通过编程口和上位机连接,其站号地址为2;波特率、数据位、校验、停止位和上位机设置保持一致。 VB程序通过利用MSComm控件很容易就能够实现。 1.通讯口初始化: MSComm1.Settings = "9600,n,8,1" https://www.360docs.net/doc/6011714208.html,mPort = 1 MSComm1.SThreshold = 0 If Not MSComm1.PortOpen Then MSComm1.PortOpen = True 2. CRC校验码的计算方法,如以下函数,可以得到字节数组变量cmdstring指向的字符串的CRC校验码。 Function crc16_1(ByRef cmdstring() As Byte, ByVal j As Integer) Dim data As Integer Dim i As Integer Addressreg_crc = &HFFFF For i = 0 To j Addressreg_crc = Addressreg_crc Xor cmdstring(i) For j = 0 To 7 data = Addressreg_crc And &H1

(完整版)MODBUS通讯协议-RTU要点

Modbus 通讯协议 (RTU传输模式)本说明仅做内部参考,详细请参阅英文版本。

第一章Modbus协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.1 传输方式 传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以RTU 模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与Modebus 协议– RTU方式相兼容的传输方式。 代码系统 ?8位二进制,十六进制数0...9,A...F ?消息中的每个8位域都是一个两个十六进制字符组成 每个字节的位 ?1个起始位 ?8个数据位,最小的有效位先发送 ?1个奇偶校验位,无校验则无 ?1个停止位(有校验时),2个Bit(无校验时) 错误检测域 ?CRC(循环冗长检测)

PLC的MODBUS通信实例

PLC的MODBUS通信实例 随着工业时代的发展,工业自动化控制已进入网络时代,工业控制器连网也为网络管理提供了方便。MODBUS通信就是工业控制器的网络协议中的一种。 关键词:MOBUS通信协议,RS485,奥越信CPU,程序设计 一、MODBUS 简介 MODBUS是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。当现代的控制领域持续不断的产生和应用诸如现场总线和网状网络等先进概念的时候,MODBUS的简单性以及它的便于在许多通讯媒介上实施 应用的特点一直使它受到最广泛的支持,并且成为全球应用最广泛的工业协议。通过此协议,控制器经由网络(例如以太网)和其它设备之间可以通信,此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC、DCS、变频器、智能仪表等都 在使用MODBUS协议作为他们之间的通讯标准,它可应用于各种数据采集和过程监控。 二、MODBUS协议库 1、使用MOBUS协议的部分要求 A、初始化MODBUS从站协议占用PortO作为MODBUS从站协议通信,MODBUS从站协议只支持端口0通信,所以选择奥越信的双通信的CPU,可以把Port1作为编程通信口,以便于调试;如果只有单通信口的话,可把CPU打到STOP模式在编程。 B、MODBUS从站协议指令的变量要求799字节的V区域,该区域的起始地址由用户指定,保留给MODBUS使用,程序中不可以使用库存储区占用的地址。 C、可参照S7-200编程手册中了解MODBUS指令的设置与编写。 2、MODBUS协议允许在各种网络体系结构内进行简单通信。如图所示:

MODBUS协议(功能码及报文解析)要点

Modbus是一种串行通信协议,是于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求 相对容易的工业网络部署 对供应商来说,修改移动原生的位或字节没有很多限制 Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remoteterminalunit(RTU)。 Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。 大多数Modbus设备通信通过串口物理层进行。 对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。ModbusRTU是一种紧凑的,采用二进制表示数据的方式,ModbusASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serialcommunication)方式。RTU格式后续的命令/数据带有的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。 对于通过(例如)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和的计算。 对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。 Modbus有一个扩展版本ModbusPlus(Modbus+或者MB+),不过此协定是Modicon 专有的,和Modbus不同。它需要一个专门的协处理器来处理类似的高速令牌旋转。

很好的威纶通MODBUSRTU通讯协议与变频器通讯案例

很好的威纶通 M O D B U S R T U通讯协议与变频器通讯案例 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。 图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或“断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有 3x_bit,4x_bit,6x_bit,0x_multi_coils等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。

西门子S7200与变频器MODBUS通讯实例详解

西门子S7200与变频器MODBUS通讯实例详解 西门子S7200PLC简介 西门子S7-200PLC在实时模式下具有速度快,具有通讯功能和较高的生产力的特点。一致的模块化设计促进了低性能定制产品的创造和可扩展性的解决方案。来自西门子的S7 - 200微型PLC可以被当作独立的微型PLC解决方案或与其他控制器相结合使用。 Modbus通讯协议简介 Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。 ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。 ModBus网络只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。 1 MODBUS RTU协议在S7-200中的应用原理 1.1 MODBUS RTU协议与S7-200相互关系简介 S7-200 CPU上的通讯口Port0可以支持MODBUS RTU协议,成为MODBUS RTU从站。此功能是通过S7-200的自由口通讯模式实现,因此可以通过无线数据电台等慢速通讯设备传输。 想在S7-200 CPU与其他支持MODBUS RTU的设备使用MODBUS RTU协议通讯,需要由有S7-200 CPU做MODBUS主站。S7-200 CPU做主站必须由用户自己用自由口模式,按相关协议编程。 2 从站指令的用法: S7-200控制系统应用中,MODBUS RTU从站指令库只支持CPU上的通讯0口(Port0)。要

Modbus功能码表

Modbus功能码一览 ________________________________________ Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。 表1 ModBus功能码 功能码名称作用 01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF) 02 读取输入状态取得一组开关输入的当前状态(ON/OFF) 03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值 04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值 05 强置单线圈强置一个逻辑线圈的通断状态 06 预置单寄存器把具体二进值装入一个保持寄存器 07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态 08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴 09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑 10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送 11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时 12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误 13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑 14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送

modbus协议下上位机编程实例

竭诚为您提供优质文档/双击可除modbus协议下上位机编程实例 篇一:modbus协议下的上位机地址 Rs485采取流量计数据,经串口com1的2号地址读到int ouch中来,双字40001、40002为浮点型瞬时流量,读到上位机项目为40001F双字40004、40005为长整型累计流量,读到上位机项目为40004l 驱动设置与intouch标记名的设置 驱动设置: 项目名设置 注:在不修改驱动设置的情况下,s=s1+s2*65535 s=s2+s1*65535 根据各个厂家的仪表,上面工式有区别,设计时各个测试一下。 篇二:modbus通讯协议实例 上海安标电子有限公司 ——pc39a接地电阻仪通信协议 通信协议:

波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 注:1id:1个字节,由单机来定(0~255) 2command:1个字节,读:3或4,写:6 3数据地址:2个字节,寄存器地址,读从100开始,写从200开始4Value:2个字节,读:个数(以整型为单位),写:命令/数据(以整型为单位)5cRc:计算出cRc下位机(pc39a ):注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位)4Value:n个字节,是返回上位机的数据5cRc:计算出cRc 写命令,若正确返回收到的数据:若错误注:1id:1个字节,由单机来定(0~255) 2command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令错误指令 1:表示command不存在2:表示数据地址超限 4cRc:计算出cRc 例如读pc39a电流数据: 机器地址为12,电流的数据地址100,数据为15.45(a)(一个整型数据)

S7-200实现Modbus通信范例(绝对精华)

说明: 使用下面的例程你可以在S7-200CPU之间设置一个简单的Modbus通讯。 这个例子是关于Modbus功能码6的(写从站保持寄存器),也可以作为其他所支持的功能码:1, 2, 3, 4, 5, 15 和16 的基本参数设置步骤。 要求: 要使用Modbus协议必须先在STEP 7 Micro/Win上安装指令库。 Modbus主站协议只支持STEP 7 Micro/Win V4.0 SP5及其以上版本.。 1. 硬件设置 2. 参数匹配 3. 指令库的存储地址 4. 保持寄存器值得传输 1. 硬件设置 例程中的Modbus通讯是在两个S7-200 CPU的0号通讯口间进行的(最好每个CPU 都有两个通讯口)。在主站侧也可以选择相应库文件 "MBUS_CTRL_P1" 和 "MBUS_MSG_P1"通过1号通讯口通信。通讯口1与Micro/WIN建立PG或PC连接,两个CPU的通讯口0通过PPI电缆进行连接(电缆的针脚连接为2,3,7,8)。

图. 01 2. 参数匹配 对于MODBUS通讯, 主站侧需要程序库 "MBUS_CTRL" 和 "MBUS_MSG", 从站侧需要程序库 "MBUS_INIT" and "MBUS_SLAVE"。 在 Micro/WIN 中您需要为主站和从站新建一个项目,程序与参数设置见图.02。 必须要保证主站与从站的“Baud”和"Parity"的参数设置要一致,并且程序块"MBUS_MSG"中的"Slave"地址要与程序块"MBUS_INIT"中的"Addr"所设置的一致 (见图. 02)。 Micro/WIN“系统块”中设置的0通讯口的波特率与MODBUS协议无关("Mode" = "1")。 图. 02 下面的表格列出了程序块各个参数选项及其意义 主站

Modbus通讯协议(TCP和RTU)

1MODBUS RTU 读寄存器请求序号意义所占字节字节存放格式 1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3起始寄存器基地址两个字节高字节在前 4寄存器个数两个字节高字节在前 5CRC校验码两个字节低字节在前 读寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x03 3数据长度1个字节寄存器个数×2 4数据寄存器个数×2个字节每个寄存器高字节在前5CRC校验码两个字节低字节在前 写单个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x06 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 写单个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器值两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 1

写多个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5数据长度 1个字节 寄存器个数×2  6数据寄存器个数×2个字节每个寄存器高字节在前7CRC校验码 两个字节 低字节在前 写多个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节0x10 3起始寄存器地址两个字节高字节在前 4寄存器个数两个字节 高字节在前 5CRC校验码 两个字节 低字节在前 错误返回序号意义所占字节字节存放格式1从设备地址1个字节0x00?0xff 2功能码1个字节请求功能码+0x80 3错误码1个字节 其代号见下面表格4CRC校验码 两个字节 低字节在前 错误代号错误代号意义 0x01不支持该功能码 0x02越界 0x03寄存器数量超出范围 0x04读写错误 2

s7 200和12台modbus仪表的通讯实例

TITLE=程序注释 Network 1 //网络标题 //网络注释 LD SM0.1 R M0.0, 128 Network 2 LD M0.1 EU S M1.0, 1 Network 3 LD SM0.0 =L60.0 LD SM0.0 =L63.7 LD L60.0 CALL SBR1, L63.7, 19200, 0, +100, M0.1, VB0 Network 4 LD M1.0 =L60.0 LD M1.0 EU

1 / 17 =L63.7 LD L60.0 CALL SBR2, L63.7, 3, 0, 40001, +14, &VB500, M1.1, VB1 Network 5 LD M1.1 R M1.0, 1 Network 6 LD M1.1 =L60.0 LD M1.1 EU =L63.7 LD L60.0 CALL SBR2, L63.7, 3, 1, 40014, +2, &VB200, M1.2, VB2 Network 7 LD M1.2 R M1.1, 1 Network 8 LD M1.2 =L60.0

2 / 17 EU =L63.7 LD L60.0 CALL SBR2, L63.7, 4, 0, 40001, +14, &VB528, M1.3, VB3 Network 9 LD M1.3 R M1.2, 1 Network 10 LD M1.3 =L60.0 LD M1.3 EU =L63.7 LD L60.0 CALL SBR2, L63.7, 4, 1, 40014, +2, &VB204, M1.4, VB4 Network 11 LD M1.4 R M1.3, 1 Network 12

MODBUS协议(功能码及报文的详细解析)

M O D B U S协议(功能码 及报文的详细解析) -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

MODBUS协议 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求 相对容易的工业网络部署 对供应商来说,修改移动原生的位或字节没有很多限制 Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。 Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。 大多数Modbus设备通信通过串口EIA-485物理层进行[1]。 对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII 变种的节点通信,反之亦然。

对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。 对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。 Modbus 有一个扩展版本 Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和 Modbus不同。它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。它使用1Mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。 Modbus协议是一个 master/slave 架构的协议。有一个节点是 m aster 节点,其他使用Modbus协议参与通信的节点是 slave 节点。每一个 slave 设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。 一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址 0例外,指定地址 0 的指令是广播指令,所有收到指令的设备都会执行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一

电磁流量计实用标准MODBUS通讯协议详情(1)

电磁流量计转换器 通讯协议 2012-10-12

目录 一、概述................................................................................................. - 2 - 二、网络结构及接线................................................................................ - 2 -

三、Modbus协议RTU帧格式 .............................................................. - 2 - 四、Modbus协议命令编码定义............................................................. - 4 - 五、电磁流量计MODBUS寄存器定义 ................................................... - 5 - 1. 电磁流量计MODBUS寄存器地址定义............................................... - 5 - 2.PLC地址设置说明................................................................................ - 5 - 3.组态王地址设置说明............................................................................. - 6 -4.数据含义说明 .................................................................................... - 6 -六、通讯数据解析................................................................................... - 7 -1读瞬时流量 .......................................................................................... - 7 -2.读瞬时流速:....................................................................................... - 8 -3读累积流量 .......................................................................................... - 8 - 5.读总量流量单位 ................................................................................. - 10 - 6.读报警状态 ........................................................................................ - 10 - 七、应用举例........................................................................................ - 11 - 1.C语言MODBUS 示例程序............................................................... - 11 - 2.modbus调试软件modbus poll通讯实例....................................... - 13 - 3.modbus调试软件modscan32通讯实例 ......................................... - 15 - 4.组态王6.53通讯实例 ........................................................................ - 17 - 5.力控 6.1通讯实例.............................................................................. - 21 -

相关文档
最新文档