您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页Modbus资料

Modbus资料

来源:五一七教育网
 -

Modbus协议

主从方式,主站初始化传输。从站按照主设备查询提供的数据作出反映。 主站查询格式:站(或广播)地址、功能代码、要发送的数据、错误检测域。 从站回应格式:确认要行动的域、返回的数据、错误检测域。若是在消息接收进程中发生错误,或从站不能执行其命令,从站将成立错误消息并把它作为回应发送出去。

从站地址是0...247,0为广播地址 ASCII模式

: 地址 功能数据数量 据1 数.. .数据n 节 LRC高字节 LRC低字回车 行 换代码

消息中的每一个ASCII字符都是一个十六进制字符组成

每一个字节的位: 1个起始位

7个数据位,最小的有效位先发送 1个奇偶校验位,无校验则无

1个停止位(有校验时),2个Bit(无校验时) 错误检测域 LRC(纵向冗长检测)

利用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。

其它域能够利用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每一个设备都解码下个域(地址域)来判断是不是发给自己的。

消息中字符间发送的时刻距离最长不能超过1秒,不然接收的设备将以为传输错误。 RTU模式

地址 功能代码 数据数量 据1 数.. .n 数据CRC低字节 CRC高 字节

1

-

代码系统:

8位二进制,十六进制数0...9,A...F

消息中的每一个8位域都是一个两个十六进制字符组成 每一个字节的位: 1个起始位

8个数据位,最小的有效位先发送 1个奇偶校验位,无校验则无

1个停止位(有校验时),2个Bit(无校验时) 错误检测域 CRC(循环冗长检测)

深切理解ModBus功能码 Modbus主要功能码

功能码 01 Read Coil Status 名称 (线圈状态0x)(读PLC的输出状态) 02 Read Input Status (输入状态1x) (读PLC的输入状态) 03 Read Holding Register (保持寄存器4x HR) (读模出状态) 04 Read Input Register (输入寄存器3x AR) (读PLC模入状态) 读整形、状态字、浮点型、字符型,与16对应 读整形、状态字、浮点型 只读AI 注释 bit 读位,与5对应, 可读可写DO bit 读位,只读DI 2

-

05 Write Single Coil 据) (强制单路输出,给PLC写数写单个位 可读可写DO 06 Write Single Register 据) (强制单路模出,给PLC写数写单个整形、状态字、浮点型、字符型,写HR4x的地址区 15 Write Multiple Coil 据) (强制多路输出,给PLC写数写多个位 16(0x10H) Write Multiple Register 据) (强制多路模出,给PLC写数写多个整形、状态字、浮点型、字符型

15和16可能是用于一次写一串数据的,不允许单个写。如时刻的世纪、年、月、日、时、分、秒要一次写下去

设备和Modbus 地址范围对应表 设备地址 1...10000* 10001...20000* 40001...50000* 30001...40000* *

Modbus地址 address - 1 address - 10001 address - 40001 address - 30001 描述 Coils (outputs) Discrete Inputs Holding Registers Input Registers 功能 0 01 03 04 R/W Read/Write Read Read/Write Read 最大值与设备相关

注:设备地址是从1开始的,所以Modbus写入地址要在设备地址上减1。

协议格式

功能码:01 (线圈状态0x)(读输出状态)

例:从4站读10…22(Coil 11…23),从A开始,共D(13)个数据 主站 3

-

从站地址 04 功能码 H 地址 L 地址 H Coils L Coils CRC 01 00 0A 00 0D DD 98 从站

从站地址 04 01 02 0A 11 50 B3 功能码 字节数 Coils 7..10 Coils 27..20 CRC 功能码:02 (输入状态1x) (读输入状态)

例:从4站读10…22(Input 10011…10023),从A开始,共D(13)个数据 主站

从站地址 04 02 00 0A 00 0D 99 98 功能码 H 地址 L 地址 H Input L Input CRC 从站

从站地址 04 02 02 0A 11 14 B3 功能码 字节数 Input 7..10 Input 27..20 CRC 功能码:03 (维持寄放器4x HR) (读模出状态)

例:从1站读0…1(寄放器 40001…40002),共2个数据 主站

从站地址 功能码 H 地址 L 地址 H 数据 L 数据 CRC 4

-

01 03 00 00 00 02 C4 0B 从站

从站地址 01 03 04 00 06 00 05 DA 31 功能码 字节数 H数据 L数据 H数据 L数据 CRC 功能码:04 (输入寄放器3x AR) (读模入状态)

例:从1站读0…1(寄放器 30001…30002),共2个数据 主站

从站地址 01 04 00 00 00 02 71 CB 功能码 H 地址 L 地址 H 数据 L 数据 CRC 从站

从站地址 01 04 04 00 06 00 05 DB 86 功能码 字节数 H数据 L数据 H数据 L数据 CRC 功能码:05 强制单路输出,给PLC写数据 例:给17站173单线圈写ON 主站

从站地址 11 05 00 AC FF 00 4E 8B 功能码 H 地址 L 地址 H 数据 L 数据 CRC 注:写0xFF00表示ON,写0x0000表示OFF 从站

从站地址 11 05 00 AC FF 00 4E 8B 功能码 H 地址 L 地址 H数据 L数据 CRC 5

-

注:返回帧与主站相同

功能码:06 强制单路模出,给PLC写数据

例:给17站40002变量写0x00 03H。帧的地址是0x0001H 主站

从站地址 11 06 00 01 00 03 9A 9B 功能码 H 地址 L 地址 H 数据 L 数据 CRC 从站

从站地址 11 06 00 01 00 03 9A 9B 功能码 H 地址 L 地址 H数据 L数据 CRC

注:返回帧与主站相同

功能码:15 强制多路输出,给PLC写数据

例:给17站从20号线圈开始的10个单线圈写ON,MB地址:20-1=19=0x13H 数据:

帧中位 1 位置 7 6 5 4 3 2 1 0 5 本例位置 起始位为7 20 26 25 24 23 22 21 20 214 - 13 - 12 - 11 - 10 - - 9 28 219 8 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 主站

从站功H L H线圈L线圈字HLCR6

-

地址 11 能码 地址 0F 00 地址 13 数量 00 数量 0A 节数 数据 数据 02 D C1 0C BF B 0从站

从站地址 11 功H L 地址 13 H线圈数量 00 L线圈数量 0A E CRC 4B 8

能码 地址 05 00 注:变量写的从站反馈没有数据

功能码:16 强制多路模出到维持寄放器,给PLC写数据, 每一个寄放器的数据为2个字节。

例:给17站从40002HR开始的2个寄放器,数据为000A和0102,MB地址:40002-1=40001=MB1

主站

从功HL地址 H模入数量 L模入数量 字节数 据1 11 10 00 01 00 02 04 00 H 数据1 0A L 数据2 01 H 数2 02 6 C0 FL 数据CRC 站地能码 地址 址 从站

从站地址 11 功H L 地址 01 H线圈数量 00 L线圈数量 02 2 18 9CRC 能码 地址 10 00 注:变量写的从站反馈没有数据

Modbus的从站反馈数据没有数据帧的编号(不像TCP协议那样),所以不会显示那个反馈数据是主站的哪次请求的。若主站一次发送N个数据,从站而没有及时反馈,如此就

7

-

乱了,主站就不明白从站发过来的数据是哪次命令的。

单变量与多变量:读能够读单读多,命令不分读几个。可是写要区分写一个仍是写多个,所以写命令有写单线圈和写多线圈。

Modbus所有功能码

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

-

16 17 18 19 20 21 22~ 65~72 73~119 120~ 预置多寄存器 报告从机标识 (884和MICRO 84) 重置通信链路 读取通用参数(584L) 写入通用参数(584L) 保留作扩展功能备用 保留以备用户功能所用 非法功能 把具体的二进制值装入一串连续的保持寄存器 可使主机判断编址从机的类型及该从机运行指示灯的状态 可使主机模拟编程功能,修改PC状态逻辑 发生非可修改错误后,是从机复位于已知状态,可重置顺序字节 显示扩展存储器文件中的数据信息 把通用参数写入扩展存储文件,或修改之 留作用户功能的扩展编码 保留 127 128~ 保留 255 留作内部作用 用于异常应答

ModBus功能码与数据类型对应表

代功能 码 01 02 03 04 05 06 08 15 读 读 读 读 写 写 N/A 写 位 位 整型、字符型、状态字、浮点型 整型、状态字、浮点型 位 整型、字符型、状态字、浮点型 重复“回路反馈”信息 位 数据类型 9

-

16 17 写 读 整型、字符型、状态字、浮点型 字符型 Modbus变量地址

映射地址 0xxxx 1xxxx 2xxxx 01,05,15 02 03,04,06,16 Coil 离散输入 浮点寄存器 功能 地址类型 式 读写 只读 读写 两个连续16位寄存器表示一个浮 点数(ieee754格式32位) 3xxxx 04 输入寄存器 只读 每个寄存器表示一个16位无符号 整数(0~65535)同上 4xxxx 5xxxx 03,06,16 03,04,06,16 保持寄存器 ascii字符 读写 读写 每个寄存器表示两个ascii字符 存取方 描述

FAQ0:ABB组态软件有功能块读线圈-1,读线圈-8,读寄放器-1,读寄放器-8的原因是什么?

因为Modbus功能码的读操作能够指定数据长度。若是从站的地址持续,则能够用一次读八个变量的操作。若是不持续,能够一次读一个。读八个的效率要高一些。

FAQ1 :MB地址的问题:MB经常常利用30001,40001如此的地址,WHY?给个理由。 ANS1 :地址以3开头,如IFIX的mb1中地址用3000一、300一、300001表示的是功能码4的操作,即读输入寄放器。同理, 地址以4开头表示的是功能码3的操作,即对指的是对输出寄放器/内部寄放器进行的操作。虽然Modbus有两个字节表示地址0xFFFF,共K,可是一般用不了那么多的。

例:高安屯垃圾电厂DCS Modbus通信点表

DCS-TAG_№ XA 0FG10-1 DESCRIPTION ACTIVATED CARBON STORAGE SILO VENTING Type DI Data Addr. 00407 10

-

FILTER FAN FAULT No.# INLET DAMPER FOR NID SYSTEM A IN SERVICE HC #RC10-O COMMAND ATO #FG03-S No.# SET POINT SO2 EMISSION DO BOOL BOOL AO INT 30002 10001 AI #RC01 No.# REACTOR INLET GAS SO2 ANALYZER AI INT 40001 注:地址以2开头表示浮点数,以0,1,3,4开头表示整数。 FAQ2 : Modbus功能码的名称来源是什么?

ANS2: 因为Modbus主要用于与PLC通信,所以Modbus的地址空间命名也服从PLC的方式。

功能码 01 Read Coil Status 量 02 Read Input Status 读PLC的输入DI点状态 来 03 04 Read Holding Register Read Input Register 读PLC内部模拟量 读PLC的模入AI状态 来 05 06 15 16(0x10H) Write Single Coil Write Single Register Write Multiple Coil Write Multiple Register 给PLC写开关量数据 给PLC写模拟量数据 给PLC写多个开关量数据 给PLC写多个模拟量数据 写单个位 写模拟量 写多个位 写多个模拟量 只读AI,通道 只读DI,通道 名称 读PLC的输出状态,可能是内部 注释 可读可写 列出PLC的线圈与寄放器的分派如下,以三菱FX2n介绍:

辅助继电一般 500点 M0到M499 11

-

器 (M线锁定 2572点 M384至M3071 特殊 圈) 一般 状态继电器 (S线圈) 锁定 初始 信号报256点 M8000至8255 490点 400点 10点 S0至S499 S500至S9 S0至S9 100点 警器 S900至S999 D0至D199 一般 200点 类型:32位元件的16位数据存储寄存器 D200至D7999 锁定 7800点 类型:32位元件的16位数据存储寄存器 数据寄存器(D) 文件寄7000点 存器 置类型:16位数据存储寄存器 从D8000至D8255 特殊 256点 类型:16位数据存储寄存器 V0至V7和Z0至Z7 变址 16点 类型:16位数据存储寄存器 D1000至D7999通过14块500程式步的参数设松下FP1—C40寄放器I/O配置表

名称 符号 编号(地址) X0~X12F X(位) (主机X0~X17) WXWX0~WX12(13个字) (字) 继电 Y(位) 器 WY(字) WY0~WY12(13个字) 总点数208点,主机16点,用来存储程序运行结果并Y0~Y12F(主机Y0~YF) 输出继电器 输入继电器 总点数208点,主机24点,用来存储外部输入信号 功能说明 外部 输入/ 输出 12

-

输出 R(位) 内 WR(字) 部 特殊内部继电器 继 每个继电器均具有特殊用途,用 电 器 控制其状态,不能用于输出 通用数据寄存器 DT0~DT1659(1,660字) 数据 DT(字) 寄存器 DT9000~DT9069(70字) 具有特殊用途的数据寄存器,不能存储用户数据 特殊数据寄存器 用来存储PLC内处理的数据 R(位) R9000~R903F 户只能使用其接点,不能用程序 WR0~WR62 只能在PLC内部供用户编程使用,不能用于输出 R0~R62F 通用内部继电器

13

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务