文档说明了Modbus
文件类型:PDF/Adobe Acrobat 文件大小:36745字节
内容摘要:
GFK-2220B 1
Modbus RTU 主站 通讯
文档说明了Modbus RTU 主站的操作. 这些信息可以作为串行通讯手册(GFK-
0582)的补充. 本文档包含以下内容:
∧ 概述
∧ 支持产品
∧ 操作的模式
∧ COMMREQ命令
∧ 时间限制条件
∧ 串行 连接
∧ 标准
∧ 多支路 连接
∧ 驱动器和接收器
∧ 电缆
∧ 接地
∧ 连接器接线
∧ 四线
∧ 双线
∧ 点对点
∧ COMMREQ 功能块 格式
∧ COMMREQ 功能块 参数
∧ COMMREQ 功能块 输出
∧ COMMREQ 命令 数据块
∧ Modbus RTU 主站 状态字格式
∧ Modbus RTU 主站 COMMREQ的队列限制
∧ 本地数据
∧ Modbus RTU 主站 诊断状态字
∧ Modbus RTU 主站 命令
∧ Initialize RTU 主站 端口 : 65520 (FFF0)
∧ Clear RTU 主站 诊断状态字: 08000 (1F40)
∧ 读RTU 主站 诊断状态字: 08001 (1F41)
∧ 发送 RTU Read/强制/预置 查询: 08002 (1F42)
∧ 发送 RTU 诊断 查询: 08003 (1F43)
∧ 错误代码
∧ 应用范例
Modbus 是Schneider Electric公司的商标.
2 Modbus RTU Master Communications - December 2003 GFK-2220B
概述
Modbus 串行通讯协议是一项开放标准,用于PLC之间以及相关设备间的数据通讯
串行通讯,串行通讯协议是一种开放的 数据通讯标准 . Modbus 串行通讯标准提供
两种传输模式,一种是使用专用的可打印字符 (Modbus ASCII), 另一种是使用二进
制数 (Modbus RTU). 这篇文档说明了 GE Fanuc PLC CPU 产品的 Modbus RTU 主
站通讯.
支持产品
90 -30 系列中的IC693CPU363 以及 VersaMax 的CPU 模块 IC200CPU001,
IC200CPU002, IC200CPU005 和IC200CPUE05目前均支持Modbus RTU 主站 通讯.
操作模式
Modbus RTU 主站设备(客户端)通过串行网络向一个或多个从站设备 (服务器 )发送
查询 消息. 查询可能包含数据及对数据, 状态及的命令请求.
网上的从站有一个唯一的设备地址. 任何查询根此确定特定从站设备或特定的广
播地址. 使用广播地址的查询被称作广播 查询. 需要回应的查询不可以用广播地
址.
接到一个完整的非广播查询后,从站必须向主站发送一个回应 消息. 当主站接收
一个完整的回应时,查询/回应的一个周期就完成了 .
从站 不会响应 广播 查询. 当发送出 广播 查询之后, 在完成这个周期并发下一个
查询之前,主站必须等待一段特定的时间 . 某些广播查询会包含 命令,要求从站
执行特定的动作.
COMMREQ
PLC CPU 中运行的应用程序控制计时和所有查询的内容,这些内容通过发送
COMMREQ 消息 . COMMREQ 必须访问连在 Modbus RTU 串行网络的 CPU 串行
端口 . COMMREQ 数据指定了查询的内容. 当 查询/回应 周期完成时,
COMMREQ 状态值会表明这个周期是成功了还是失败了. 欲了解细节,请参见本
文档的 COMMREQ 功能块 格式 及以后的几个小节.
时间限制
串行通讯上运行 Modbus 规范及实现指南 V1.01包含若干重要的时间限制要求.
串行连接
Series 90 和 VersaMax 都是 GE Fanuc Automation公司的商标.
1 最新的Modbus RTU 规范在文档 Modbus Application应用协议规范 V1.1 与串行线路上的 Modbus
规范及实现指南 V1.0 中提供,后者两个规范可以在 http://www.modbus.org/找到. 按照Modbus 标
准库链接查找它们.
GFK-2220B 3
一个Modbus RTU 网络具有一台主站设备和一台或多台(最多 247台) 从站设备.
串行 网络 互连所有. 如果只有一台从站,则使用点对点 连接 . 如果有 两台或更多
台从站就需要多支路 连接.
标准
实际上,所有的 PLC 串行 通讯 端口 (包括了GE Fanuc PLC CPU上的所有 串行端口)
都会支持异步串行通讯三个物理层标准中的一个 (有时可能是两个或三个) . 三个
标准的最新修订版可从Telecommunications Industries Association 购得,
http://www.tiaonline.org/standards/.
EIA/TIA-232-F: 采用 串行二进制数据交换方式的数据 终端设备和 数据 回路-终端设备
之间的接口 (ANSI/TIA/EIA-232-F-1997)
这个 标准 通常称作 "RS-232" 或 "RS-232C" 因为更早的修订版命名为"RS-232-C".
RS-232 端口使用非平衡回路传送和接收数据并且控制信号 . 所以, 所有数据和控
制回路需要一根 信号地 (Signal Ground)电线以构成 回路 .
RS-232 端口 适合长度在25 米左右的点对点连接, 而不适合于更长的线路或多支路
连接. 规范推荐把 速率(有效)限制在 每秒 19,200 位 (bps)以内或更低,但在使用短
的电缆 (大约2 米)时,速率常可达115,200 bps.
EIA/TIA-422-B: 平衡电压型数字接口回路电气特性 (ANSI/TIA/EIA-422-B-94, 2000年
修订 )
这个标准经常称作"RS-422" 因为初期的修订版使用它作为标题. 它规定了任何回
路中的双绞 线和平衡线路驱动器以及 接收器 . 与RS-232相比, RS-442 的传送速
率比更高而且传送距离更远 . 双绞回路电缆推荐使用阻抗标称为100-欧姆的, 并且
每个回路接收端推荐使用100-欧姆的终端电阻 .
有些 RS-422 端口 支持多支路 (多点) 操作. 然而,标准并不保证实现这一能力标
准. 试图在多支路网络中使用 an RS-422 设备时需要注意.
EIA/TIA-485-A: 平衡数字多点系统中所用的发送器和接收器的电气特性
(ANSI/TIA/EIA-485-A-98)
这个标准的原始版本 被冠以 "RS-485";它经常以这个名字提及. 这个标准已经有效
地 替换了 RS-422因为它确保增加了多支路 (多点) 能力. 数据回路里的线路驱动器
在不传送数据时 需要切换到高阻抗状态(自身的"三态" ), 而且 控制和状态 回路 很少
通过电缆以 多支路方式 连接 . 因此, 多路 数据线路驱动器能并联到每个 数据 回
路. 端口固件保证在一个时刻只有一个端口尝试在每个回路传送.
RS-485 使用 120-欧姆电缆和终端电阻. 因为传送器不总是连接到线路上, 所以每
个回路的两端必须使用终端电阻.
值得注意的是某些RS-485 设备可能需要 pull-up 和pull-down 电阻来偏振 (bias) 接收
数据回路到 mark 状态,当所有的传送器处于高阻抗状态. GE Fanuc RS-485 端口
不需要pull-up 和 pull-down 电阻.
4 Modbus RTU Master Communications - December 2003 GFK-2220B
多支路 连接
四线连接 (4-Wire)
在下面的网络配置中 , RTU 主站 设备发送 数据 (SD) 的成对信号线 连到所有从站
接收 数据 (RD) 的成对信号线 , 并且 所有从站 SD 的成对信号线 连到 主站RD 的成
对信号线 . 从站设备必须全部使用兼容 RS-485的串行 端口 以便在不传送数据时
它们的传送器全部禁止工作. 尽管某些 RS-442 设备在不传送数据时 禁止输出 , 但
是RS-442 规范并不强制要求这样t. 主站 可以使用RS-422或 RS-485 端口中的任
意一种,因为它的传送器是那对信号线上唯一的一个传送器. 所有设备 的串行端
口都应当设置成 :流控制 无.
这两对信号线必须在两端接上合适的电阻. 每对线的一端必须是由内置于末端口
的终端电阻 (RT 针)截止. 另一端由连接器壳内的120 欧姆, 瓦 电阻截止 .
如果末端 设备缺少了内置的终端电阻, 再用一个 120-欧姆, 瓦 电阻接在连接器壳
内部一对 RD 信号线上.
无中继器情况下的四线连接
CTS(A')
RD(B')
RTS(B)
SD(B)
MODBUS RTU 主站
(终端连接器)
注意:
1. 连接电缆的连接器使用
终端电阻 (RT) 针连接.
其他连接器不能连接RT
3. 在两个端点设备之间的连接器.如图所示
其他的连接器最多
可以使用 31个.
4. 所有连接器都接到GE Fanuc CPU 模块的
15-针RS-485端口上 .
Modbus RTU 主站设备必须
接到左侧的连接器.
其他设备都是从站
5. CTS 和RTS 之间的跳线是可选的.
. 非 GE Fanuc 15-针
支持 Modbus RTU的 RS-485 端口需要这些跳线
.6. 主站和从站设备的接地回路有通过 SHLD
连接 和 frame 接地.
接地电流过大会导致数据错误.
参见关于这个问题相应的讨论.
7. 改变连接头的接线方式以适应第三方
RTU 从站设备.
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
SD(A)
RD(A')
1
2
3
4
5
6
7
8
9
12
13
10
11
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
终端连接器
从站连接器
120
120
2. 在SD 信号线两端要用终端电阻
在连接器外壳内接有一个120 欧姆, 瓦
的电阻.
任意高质量屏蔽两对双绞电缆都适于 短 电缆情况 (最长到15 米左右). 需要更长
的情况,需要使用标称阻抗是 120 欧姆的 电缆. 请使用专为 RS-485 传送设计的
Belden2 9842 或性能相当的电缆 .
2 Belden 是 Belden Technologies Inc公司的商标.
GFK-2220B 5
接地 和 接地回路
要让电缆的外壳正确接地,需要仔细规划网络和电力线. 为避免间歇的电子噪音
造成数据错误, 把电缆 外壳接到网络上的每个设备的 SHLD (shield) 针上 显得尤为
重要. 不幸的是,这会形成至少 N-1型个接地回路, 这里的 N是网络上设备数量 .
每个接地回路由两个设备间的电缆段的屏蔽层和与接地路径组成. 回路从一个设
备的 柜体接地点开始,经过它的接地端到公共地,然后通过其他设备的接地端到它柜
体的接地点.
接地电流通过仔细地接地必须限制 在一个可承受的范围内. 否则, 公共-模式 由接
地回路电流引入到数据信号线对上的噪音,会 产生 数据错误.
在设计接地接线方案时,需考虑以下要求:
1. 系统中必须有一个公共地,要求与地之间的阻抗极小.
2. 每个设备柜体与公共地之间连接线的阻抗极小.
3. 在设计柜体接地点和公共地之间的连接时必须考虑使用推荐的柜体地线的粗
细,长度及正确的接线 .
4. 数据电缆与地线走线时必须与其他可能带偶合噪音的数据电缆或者接地电缆在
物理上隔离开.
5. 电缆屏蔽层接到设备的SHLD针可以减少数据错误.如果不接电缆屏蔽层, 网
络有接到回路隐患. 早先的GE Fanuc手册推荐在一端接电缆屏蔽层以消除接
地回路电流. 现在不推荐这样做. 如果屏蔽层仅在一端接地, 网络很容易收到
电磁干扰(EMI) 的增加而变得容易发生数据错误. 这些错误不是立即出现,而
是实际安装之后诊断和排除中最常发现的原因.
如果接地回路产生的数据错误无法避免 (例如,由于电缆长度太长,无法将所有设
备都接到一个共地点), 请在网络中增加一台或多台光隔离RS-485中继器 . 网络分
段以便每个网段都有一个共同的地. 使用诸如BLACK BOX 模式l IC158A 的中继
器隔离网段 http://www.blackbox.com/. 详细内容,参见 中继器生产商的产品数据
表 . 前页的图示显示了一个典型的无中继器的四线网络.
BLACK BOX 是 Black Box Corporation公司的注册商标.
6 Modbus RTU Master Communications - December 2003 GFK-2220B
使用主站 RS-232 端口 的四线连接
主站也可使用RS-232 端口 ,该端口再外接一个 RS-232/RS-442 或 RS-232/RS-485
转换器. 例如, 使用GE Fanuc IC690ACC901 电缆自带的微型转换器 和 附件 . 设
备由GE Fanuc PLC上的15针接头的电源针供电. 电源针和接地针按如下所示 接
到一台从站设备上 .
我们在这里重申, 两对信号线的两端必须接上失当的电阻. 微型转换器上的发送器
一直为使能并且充当连接到SD 针的信号线的终端电阻 . 信号线的另一端由端口
内置的终端电阻 (RT pin) 截止. 另外一对信号线由 各端终端接头内置的120-欧姆,
瓦 电阻截止 .
如果终端设备未能提供内置终端电阻, 必须再用一个 120-欧姆, 瓦 电阻接到接头外
壳内的RD 信号线上
120
终端连接器
15-针侧
微型连接器的
RS-232 MODBUS RTU
主站的
Notes:
1. 将Modbus RTU 主站设备
通过它的RS-232 端口与左侧微型-
连接器连接起来.
其他所有设备为RS-485 从站.
2. 使用微型连接器内的 120 欧姆
瓦的电阻截止RD 信号线,
. 微型-连接器在针9和针10之间
有一个内置的跳线
4. 仅在最远端的从站连接
终端电阻(RT)
其他所有的RT都不接.
5. 在CTS和 RTS 之间的跳线是可选的
支持Modbus RTU的非GE Fanuc 15-针
RS-485 端口需要它们
6. 图中给出了两个终端设备的连接器
其他的连接器最多可以有8个
7. 在SHLD 连接和主站从站柜体
接地连接之间存在接地回路
可参考关于这个问题的其他文字
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
SD(A)
SD(B)
RD(A')
RD(B')
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
12
13
10
11
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
从站连接器
120
3. 在最远端SD信号线使用
微型-连接器内置的120 欧姆 瓦的终端
电阻截止
.
RS-442 和 RS-485主站所能驱动的从站端口的数目必须小于两个规范中的理论值.
据经验, 带RS-422 端口的主站可用驱动6至7台从站, 而带 RS-485 端口的主站能驱
动大约15到18 台带RS-485 端口的从站. 确切的数字回根据电缆长度和 电缆上从
站所处位置的不同而不同. 对于更多的从站, 需要在网络上加入一个台或多台RS-
485中继器(例如, BLACK BOX Models IC155A 和 IC158A). 了解细节请查阅中继
器厂商的产品数据表.
GFK-2220B 7
双线 (2-Wire)
由于在一个时刻只能有一台设备传送数据, 支持Modbus RTU 的网络 仅需一对数据
线. 双线 接法有节省电缆 成本的优点. 双线网络上的全部设备都由主站配置.
在双线网络上, 所有设备的 发送 数据 (SD) 和 接收 数据 (RD) 信号线并联到一对信
号线上. 线的两端使用120-欧姆 电阻截止. 为了能让传送器仅在传送发送时才工
作,所有设备必须兼容 RS-485. 在有数据传送时所有设备的 接收器都必须禁止工
作. 注意GE Fanuc IC690ACC901 微型转换器不能满足这些要求.
在信号线的两端,使用末端端口内置的终端电阻(RT pin) 截止 . 如果末端设备没
有内置终端电阻,则必须在接头壳内接上一个 120-欧姆, 瓦 电阻.
如果电缆比较短(最长15 米),可以使用 高质量的屏蔽双绞电缆 .如果电缆距离很
长,请用标称阻抗是120 欧姆的电缆. Use a 请使用RS-485专用电缆,如 Belden
3105A或同类产品.
所有设备的串行 端口必须能够配置成无流控制方式.
典型双线连接
Notes:
1. 电缆的两端使用终端电阻 (RT)针
连接起来
其他所有的RT都不接
2. 图中给出了两端设备之间的连接器
. 其他的连接器最多可有31个
3. 连接GE Fanuc CPU模块的15-针RS-485
端口和所有连接器.
Modbus RTU 主站设备可以
接到任意一个连接器.其他所有
设备都是从站.
4. CTS和RTS 之间的跳线是可选的
支持Modbus RTU的非 GE Fanuc 15-针
RS-485 端口需要这个跳线
5. 在 SHLD 连接和主站从站柜体
连接之间存在接地回路
参见关于这个问题的相关文档
6. 根据需要变更和第三方RTU从站设备
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHLD
N/C
N/C
N/C
+5VDC
RTS(A)
SG
CTS(B')
RT
RD(A')
RD(B')
SD(A)
SD(B)
RTS(B)
CTS(A')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
终端连接器
终端连接器
的接线方式
.
RS-485中继器也可用于双线网络.
点对点
当网络中仅有一个从站设备, 主站和从站可以使用点对点 连接. 电缆连接 可以是
RS-232或 RS-422/485. 设备上的串行端口必须都能配置成无流控制方式 .
8 Modbus RTU Master Communications - December 2003 GFK-2220B
COMMREQ 功能块 格式
Modbus RTU 主站 通讯使用 标准 COMMREQ 功能块来发起Modbus RTU 查询 并
(可选地) 根据端口配置. PLC CPU上的 Modbus RTU 端口 由机架号,槽号和任务
号指定.
COMM
REQ
IN FT
SYSID
TASK
ENABLE
COMMREQ 功能块 参数
IN COMMREQ 命令/数据块的参数地址; 例如, %R00101. 在下页定义的命令/数
据块中Word 1的位置.
SYSID 一个常量,用来指定CPU 机架/槽地址
IC693CPU363: 1 (机架 0, 槽 1)
IC200CPUxxx: 0 (机架0, 槽0)
TASK CPU给定 的用于Modbus RTU 端口的内部任务号 :
19 = 为IC693CPU363 和 IC200CPUxxx上的端口1
20 = 为 IC693CPU363 and IC200CPUxxx的端口 2
COMMREQ 功能块 输出
FT 故障;无论发生下列哪种情况都会接通:
IN 参数地址或数据块的任何 部分无效,或者
SYSID 和 TASK 参数给了一个COMMREQs不支持的数据.
只有VersaMax的 CPU: COMMREQ状态字位置在数据块无效中给定 .
接通状态表明COMMREQ 没有成功完成. 如果COMMREQ 是一个 Modbus
RTU 查询消息, 它没有从端口发送出去 .
GFK-2220B 9
COMMREQ 命令/数据块
COMMREQ 命令/数据块的前7个字对于 所有的 Modbus RTU 主站 命令都差不多.
Location Value 说明
Word 1 依赖于 命令码 RTU 命令/数据块 长度
Word 2 0 非等待 模式
Word 3 参见下表. 状态字内存类型
Word 4 >= 0 状态字地址 - 1
Word 5 0 未用
Word 6 0 未用
Word 7 65520, 8000, 8001, 8002 or, 8003 RTU 主站 命令码
Modbus RTU 主站 COMMREQ 命令/数据块的各个字段如下.
Word 1 RTU 命令/数据块长度. 以 字为单位, COMMREQ 命令和数据块的总长
度, 从 Word 7开始; 根据特定命令其值可以是1至13 .
Word 2 非等待-模式 COMMREQ必须用于RTU 主站 命令.
状态字内存类型, 必须是以下取值之一.
类型 代码 PLC 内存类型
Dec Hex
有效范围1
Word 3
寄存器 (%R) 08 08h 1至最大单位
模拟量 输入 (%AI) 10 0Ah 1至最大单位
模拟量 输出 (%AQ) 12 0Ch 1至最大单位
数字量 输入(%I) 70 46h 1至最大单位
16 10h 1至最大单位 2
数字量 输出 (%Q) 72 48h 1至最大单位
18 12h 1至最大单位 2
1. 每种内存类型最大可寻址范围 取决于CPU 型号及内存配置.
2. 当使用基于字节的 内存类型时, 对应的内存地址偏移量和 数据数量是以字节表
示而不是位.
Word 4 状态字地址减一
状态字的偏移量从0开始; 例如, 0是指的%R00001寄存器. 状态 内存类型
和 地址(Word 3 和 4) 必须是有效的 内存参数位置.
Word 5, 6 未用. 这两个字段中的 等待-模式 COMMREQ 超时值 对非等待-模式
COMMREQ未用 .
Word 7 RTU 主站 命令码. 命令码 8000, 8001, 8002, 8003 和 65520 在下面给出
说明.
10 Modbus RTU Master Communications - December 2003 GFK-2220B
Modbus RTU 主站 状态字格式
所有的Modbus RTU 主站 命令都返回两个字节的状态值给由COMMREQ 命令/数据
块指定的状态字位置. 低字节(LSB) 包含了一个完成状态或 主错误代码, 而 高字
节(MSB) 包含了一个次错误代码. 当一个命令成功完成,完成状态为1同时次错误
代码 值为0; 因此整个状态字的值为1.
每个 Modbus RTU 主站 命令的重要 和 次错误代码以及它们的说明在本文档的错误
代码一节列出.
Modbus RTU 主站 COMMREQ队列的长度限制
在PLC应用程序中从COMMREQ 功能块执行时刻开始到端口 写COMMREQ 状态
位置时刻为止,COMMREQ 处于阻塞状态. Modbus RTU 主站 的每一端口在同一
时刻接受不超过2个阻塞中的 COMMREQ.
如果 处于阻塞状态的COMMREQ达到最大界限了而 PLC 应用程序又试图发送 一
个COMMREQ给那个端口 , PLC故障表中会出现一个故障:
由于PLC 内存受限Comm req 不能进行处理.
注意当同时有两个或多个COMMREQ 处于阻塞时, 每个COMMREQ 需要一个 唯一
状态位置.
GFK-2220B 11
Local 数据
许多 Modbus RTU 主站 COMMREQ 命令和本地PLC的 内存参数传送 数据 . 下表
给出了可用的 内存类型. 任何有效的 内存类型 均可被所有 命令使用. 例如, 存放
Modbus 读功能代码 (读 输入表,读 寄存器,等待.)的COMMREQ 返回数据本地目的
内存 可以是位, 字节或字类型的. 某些内存类型的 有效范围是可配置的.
可供Modbus RTU 主站 COMMREQ使用的本地有效 内存类型 和范围
类型 代码
PLC 内存类型
十进制. 十六进制长度单位
有效范围 1
寄存器 (%R) 08 08h 字 1至最大单位
模拟量 输入s (%AI) 10 0Ah 字 1至最大单位
模拟量 输出 (%AQ) 12 0Ch 字 1至最大单位
数字量 输入 (%I)
70
16
46h
10h
位
字节
1至最大单位
1至最大单位 2
数字量 输出 (%Q)
72
18
48h
12h
位
字节
1至最大单位
1至最大单位 2
数字量 临时量 (%T)
74
20
4Ah
14h
位
字节
1至最大单位
1至最大单位 2
数字量 内部量 (%M)
76
22
4Ch
16h
位
字节
1至最大单位
1至最大单位 2
数字量 (%SA)
78
24
4Eh
18h
位
字节
1至最大单位
1至最大单位 2
数字量 (%SB)
80
26
50h
1Ah
位
字节
1至最大单位
1至最大单位 2
数字量 (%SC)
82
28
52h
1Ch
位
字节
1至最大单位
1至最大单位 2
数字量 (%S) (只读3)
84
30
54h
1Eh
位
字节
1至最大单位
1至最大单位 2
Genius 全局数据 (%G)
86
56
56h
38h
位
字节
1至最大单位
1至最大单位 2
1. 每种内存类型最大可寻址范围 取决于CPU 型号及内存配置.
2. 当使用基于字节 内存类型时, 对应的内存地址偏移量及 数据数量按字节表示而不是位. 例如,
类型 70, 偏移量 3 表示从%I00017至少到 %I00024的范围. 用单字节写这个参数来替代8位输
入, 甚至包含的实际数据少于8 位 也不例外.
3. %S 是只读内存类型. 只能用作RTU 强制/预置 功能代码的源数据参数,而不能用作读功能的
目的数据参数.
对于位和字节类型代码, 数字量数据传送的处理速度, 消息 长度 和消息传送次数
都是一样的.
对应数字量类型使用字节访问要特别注意. Modbus读输出表和读输入 表功能回
应信息的最后一个消息字节里没有用到的那些位均 返回. 例如, 假设一个读输出
表查询 指定了从输出通道1开始的三个点. 从站会返回一个字节的数据,字节中
的低三位 表示输出通道1-3的值. 然而,对应于输出通道 4-8的高5位的值,不论
其实际的输出值是什么,都为0. 如果你使用按位访问的 类型,再为这三位指定数
据目的地址 , 只有 查询中指定的这三位被写入目的内存. 如果你使用按字节访问
的类型, 目的内存会按照整字节写入. 在这种情况, 超过指定范围的那5个数字量
参数将被置0. 这可能引起意外的后果.
12 Modbus RTU Master Communications - December 2003 GFK-2220B
Modbus RTU 主站 诊断状态字
Modbus RTU 主站 协议 以字表形式维护一个确定的诊断状态数据 . 无论在应用程
序开发或正常操作过程中, 该数据都是有用的.
我们提供了读全部或部分的诊断状态字表的命令和清空该表的命令. 这个表也可
由串行端口设定COMMREQ在 RTU 主站 端口初始化或重新初始化 时清空 .
诊断状态字的格式
位置 说明
Word 1 RTU 错误状态字: 低字节和高字节分别对应重要和次错误代码,这些错误
代码是 最近RTU 主站 COMMREQ产生的 错误,内部错误,或 RTU 异
常 回应. 如果没有发生错误则两者都是0.
Word 2 接收自PLC CPU的RTU 主站 COMMREQ数目.
Word 3 已从串行端口发出的RTU 查询数目 .
Word 4 超时前仍没有发送出去的 RTU 查询数目.
Word 5 串行端口接收到的RTU正常回应的数目.
Word 6 串行端口接收到的RTU异常 (错误) 回应的数目.
Word 7 RTU回应 超时数目.
Word 8 串行端口上RTU回应错误数目 .
Word 9 无效长度的RTU回应的数目 .
Word 10 带无效循环校验码RTU 回应的数目 .
Word 11 带无效设备地址RTU 回应的数目.
Word 12 带无效功能代码RTU 回应的数目.
Word 13 带无效数据的Loopback/Maintenance RTU 回应的数目.
Word 14 回应超时后,又收到的RTU有效 回应的数目
Word 15 - 18 最后一次 RTU 查询: 串行端口最近一次发送的RTU 查询中前8个字节 .
对于少于8个字节的查询, 多余的字节未定义. 如果没有查询被发送,则
这些字全部为0.
Word 19 - 22 最后一次RTU 回应: t串行端口最近一次收到的RTU 回应中前8个字
节 . 对于少于8个字节的回应, 多余的字节未定义. 如果没有收到过回
应则这些字全部为0.
Word 23 - 38 COMMREQ错误信息 数据块: 最后一次 COMMREQ产生的错误中命令/
数据块. 如果没有 COMMREQ 错误 ,则这些字都为0. 命令/数据块多
于16个 字, 则只取前16个字.
GFK-2220B 13
Modbus RTU 主站 命令
下面几页会说明Modbus RTU主站 使用的命令.
Initialize 初始化RTU 主站 端口 : 65520 (FFF0)
本地命令
标准 串行 端口设定 COMMREQ 用于在Modbus RTU 主站运行时,由数据块指定的
值,修改端口的配置. 本命令用于Modbus RTU 主站 运行时修改配置. 注意
Word 19 和20的使用和Modbus RTU 从站的不同.
当 CPU 硬件配置赋予了目标端口另外一种 协议并用本 COMMREQ 启动 Modbus
RTU 主站时, 应用程序不能再使用其他的Modbus RTU 主站 COMMREQ直到这个
命令成功执行. 应用程序必须检测这个 COMMREQ 的状态位置来判断是否其成功
执行.
在 Modbus RTU 主站运行时可用本COMMREQ 进行再次初始化, 这时诊断状态字
清零.
14 Modbus RTU Master Communications - December 2003 GFK-2220B
命令 块 格式
LocationValue 说明
Word 1 对于 Modbus RTU 主站为16 端口设定命令/数据块 长度,以字为单位 (包括 字
7 - 22, )
Word 2 0 非等待 模式 (必填)
Word 3 参见 9页上的表格. 状态字内存类型
Word 4 >= 0 参见9页. 状态字地址 - 1.
Word 5 0 (忽略) 等待模式超时值未用
Word 6 0 (忽略) 等待 模式 超时值未用
Word 7 65520 命令 - 端口设定
Word 8 3 协议 - Modbus RTU
Word 9 1 模式 - 主站 (Modbus RTU新增)
Word 10 2 = 1200, 3 = 2400, 4 = 4800,
5 = 9600, 6 = 19200, 7 = 38400,
8 = 57600, 9 = 115200
速率
Word 11 0 = 无, 1 = 奇, 2 = 偶 奇偶校验
Word 12 0 = 硬件, 1 = 无 流控制
Word 13 0 (忽略) SNP 转向延时
Word 14 0 = 长 (8 秒),
1 = 中 (2 秒),
2 = 标准 (500 毫秒),
3 = 短 (200 毫秒)
回应 消息 超时- 指定值必须不大于以当前速率
下所有从站接发延时总和 加 最长回应 消息发送
时间.
Word 15 1 (忽略) 每字符的位数 - Modbus RTU 要求 8 位.
Word 16 0 (忽略) 停止位 - Modbus RTU 强制规定 1个停止位 .
Word 17 0 (忽略) 端口接口 - VersaMax 和IC693CPU363都不可
软件配置; 端口 1 = RS-232, 端口 2 = RS-485
Word 18 0 (忽略) 半双工模式 - Modbus RTU 主站 和 从站在传送
时禁止端口的接收器, 有效地 使用在2-线 模式
下.
Word 19 0 - 65,535 (0 to 6.5535 秒)
0 = 默认
字符间隔超时值,以 100-微妙为单位. 参见下
面的说明.
Word 20 (0 to 6.5535 seconds)
0 = 默认 (参见下面的说明 .)
RTS Drop Delay 以100微妙为单位.
字
21 - 22
0 (忽略) 端口设定命令/数据长度的最小需求值,包括这
些字. 但是, Modbus RTU 主站 忽略这些值.
GFK-2220B 15
命令字的说明
Word 7 - RTU 主站 命令码: 65520 (0FFF0 Hex): 端口设定
Word 8 - 协议: 3 = Modbus RTU
Word 9 - 模式: 1 = Modbus RTU 主站
Word 10 - 速率: 主站设备决定的最高有效速率. 例如, 型号是IC693CPU363,
IC200CPU001 和 IC200CPU002的Modbus RTU 主站和从站支持的最高速率是
19,200 位/秒(bps) . IC200CPU005 and IC200CPUE05 目前 支持57,600 bps.
Word 11 - 奇偶校验: 注意当奇偶校验 = 奇或偶时,Modbus RTU 主站的字符长度为1
1位: 1个起始位, 8个数据位, 1个奇偶校验位 和1个停止位. 如果不使用 奇偶校验
位 即 奇偶校验 = 无, 则一个字符长度就是10位. Modbus RTU 标准推荐在所有情
况下都用11 位.
Word 12 - 流控制: 2 = 软件 无效; 参数错误 (020Ch)返回给初始化端口 COMMREQ
所指定的状态位置.
如果指定了 0 = 硬件, 在发送前,端口先assert RTS 并等待 CTS变为活动. 如果
CTS 两秒中之内没能变成活动的, 超时 错误代码 返回给发送 RTU 查询 COMMREQ
所指定的 状态位置.
如果端口在发送数据,那么在发送停止之前 CTS从激活变成截止状态, 最多有5个
毫秒的间歇. 在 CTS 变成截止状态之后最多可发送的字符是通讯速率的一个比例
值. 这个值是指当CTS变成截止时还能发送多少个字符.
速率 在CTS截止之后
发送字符最大值
速率 在CTS截止之后
发送字符最大值
1200
2400
4800
9600
1
2
3
5
19200
38400
57600
115200
10
20
29
58
Word 13 - SNP 转向延时: 此字忽略. 不过, 指定的值必须有效 (0 - 255).
Word 14 - 回应 消息 超时: 当发送 RTU 查询 COMMREQ 指定了一个广播 查询, 当
到达超时时刻时,返回一个COMMREQ_OK并写到COMMREQ 状态位置上.
当 发送 RTU 查询 COMMREQ 指定了一个非广播 查询, 在回应被完整的接收之
前,发生超时,则 返回一个REPONSE_TIMEOUT 错误代码,并写到COMMREQ
状态位置.
Modbus RTU总要指定一个超时值. 一般地, 2 (标准) 或 3 (断) 的定义和其他的协议
不同.
Modbus RTU 标准推荐的标准延时值 是(500 毫秒).
The 超时 begins开始 after the 端口发送完查询中最后一个字符 并停止之后 , 当字
符间隔 超时 (Word 19)过期 在收到回应 中最后一个字符之后. 如果回应超时发生
在字符间隔的最后超时时刻之前, 端口检测回应消息. 如果没有检测到回应信息
(例如, 因为 回应接收之后gap 超时发生之前回应超时才会发生), 回应 通常在gap 超
16 Modbus RTU Master Communications - December 2003 GFK-2220B
时发生之后才进行处理. 如果没有检测到有效的回应 , 超时错误代码被返回到
COMMREQ 状态位置.
Word 15 - 每字符位数: Modbus RTU 要求每个字符占 8 位,所有每字符占几位的设
置必须是8. 但是, 给定的值必须是有效值(0 或1).
Word 16 - 停止位: 为与GE Fanuc Automation RTU 从站兼容,停止位必须设为1.
但是, 给定的值必须是有效值(0 或1).
Word 17 - 端口接口: VersaMax CPU 和IC693CPU363 模块上的端口接口不可软件
配置: 端口 1 只能是RS-232, 且端口 2 只能是 RS-485. 但是, the 给定的值必须是
有效值 (0 或1).
Word 18 - 半双工模式: Modbus RTU 主站 和 从站都是使用双线 模式. 但是, 给定
的值必须是有效值(0, 1 或 2).
在即将发送前, 端口关闭接收器. 在 RS-485 端口上 ,发送数据 和 RTS 线路驱动
器 开关从高阻抗 状态切换到激活 状态.
在最后一个消息字符发送之后的一个字符时间 (或 Word 20指定的值), 端口关闭
RTS 并打开接收器. 在 RS-485 端口上 发送 数据 和 RTS 线路驱动器 开关 切换到
高阻抗状态.
Word 19 - 两条消息之间的字符间隔超时值 以 100-微妙为单位: 这个时间间隔值定
义了收到回应消息末尾. 从接收的最后一个字符时开始计算. RTS 是关闭的并且
发送器在这个时间间隔保持沉默.当一个新的查询准备发送时 , RTS不会在这个时
间间隔之前打开.
至少在这个时间间隔内,RS-485 端口上发送数据和RTS 信号保持高阻抗 状态,
0 指定为默认值,在指定的速率上的定义为3.5 个字符时间 , 可以假设每个字符有11
个 位.
速率 默认值 (单位100 μ-sec) 速率 默认 (单位100 μ-sec )
1200
2400
4800
9600
322
161
80
40
19200
38400
57600
115200
21
10
7
3
任何小于默认值的给定值都将被默认值替代.
这个值还执行Modbus RTU 从站从接收变换到发送状态的延时功能. 如果所需的延
时值大于当前速率的默认值, 那么增加的给定值是以100-毫秒为单位. 如果所需延
时值小于当前速率下的默认值,那么不需额外的延时值.
GFK-2220B 17
Word 20 - RTS 截止延时以100微妙为单位: 这个值指的是从最后一个字符发送结
束到RTS被关闭的时间(截止).
接收器在传输数据时是禁用状态,在RTS截止延时期间也是禁用状态. 如果给定
的延时值长于Modbus RTU从站查询和回应之间的静默时间间隔, 主站会丢弃全部
或一部回应.
默认值为0, 表示在指定速率下发送一个字符的时间, 默认每个字符有11个位.
速率 默认 (100 μ-sec. 单位) 速率 默认 (100 μ-sec. 单位)
1200
2400
4800
9600
92
46
23
12
19200
38400
57600
115200
6
3
2
1
所有小于默认值的指定值都被默认值代替.
注意Modbus RTU 从站上的RTS截止延时以10毫秒为单位.
字 21 - 22: 串行端口设定的命令/数据的所需长度最小值, 包含这些字. 不过,
Modbus RTU 主站忽略这些值.
错误代码
该命令返回的错误代码取决于发送所用的协议. 活动的协议 通常是硬件配置指定
的, 但前面执行的串行端口设定命令 可以激活别的协议.
Active 端口 协议 错误代码 可能出错的情况
0403h COMREQ 数据长度太小.
RTU 主站
0503h
给出的协议,速率,奇偶校验,流控制,等数值,超
出有效范围.
0C0Ch COMREQ 数据长度太小. RTU 从站
串行 I/O
SNP 从站
SNP 主站
020Ch
指定的端口不支持 Modbus RTU 主站 模式.
给出的协议,速率,奇偶校验,流控制,等数值,超
出有效范围.
0313h COMREQ 数据长度太小.
Disabled
0513h
指定的端口不支持 Modbus RTU 主站 模式.
给出的协议,速率,奇偶校验,流控制,等数值,超
出有效范围.
Modbus RTU主站和从站的格式差异:
Modbus RTU 从站忽略 Word 14中的回应消息超时值.
对于 Modbus RTU 从站, Word 19 是从站设备地址, 且 Word 20 至 22 未用. 对于
Modbus RTU 主站, Word 19 是字符间隔 超时, word 20 是RTS 截止延时, 且 字 21 -
22 未用.
Word 24中的 Modbus RTU 从站RTS 截止延时值以 10 毫秒为单位. Word 20 中的
Modbus RTU 主站 RTS截止延时值 以100微妙为单位.
Modbus RTU 主站中,Word 19中字符间隔超时值,包含了从站从收-到-发的延时值
(Word 23)的功能 .
18 Modbus RTU Master Communications - December 2003 GFK-2220B
Clear RTU 主站 诊断状态字: 08000 (1F40)
本地命令
本命令 清除端口 维护的Modbus RTU 主站诊断状态数据内容. 诊断数据格式以上
的部分 定义的数据字都被清零.
命令块格式
Location Value 说明
Word 1 1 命令/数据块 长度
Word 2 0 非等待 模式
Word 3 参见9页. 状态字内存类型
Word 4 >= 0 参见9页. 状态字地址 - 1
Word 5 0 (忽略) 等待模式超时值未用
Word 6 0 (忽略) 等待模式超时值未用
Word 7 8000 清除 RTU 主站 诊断状态字
命令字说明
Word 7, - RTU 主站 命令码: 8000 (01F40 Hex): Clear RTU 主站 诊断状态字
错误代码
本命令在端口未被 Modbus RTU 主站初始化时,会返回一个错误代码; 否则它返回
1.
GFK-2220B 19
读RTU 主站 诊断状态字: 08001 (1F41)
本地命令
本命令将由端口给定的Modbus RTU 主站诊断状态 数据 端口 复制到一个参数地址
上 ,这个地址由本命令块指定. 该数对于调试开发Modbus RTU 主站应用程序和
正常运行时监视RTU 网都有用处.
命令 块 格式
Location Value 说明
Word 1 5 命令/数据块 长度
Word 2 0 非等待 模式
Word 3 参见9页. 状态字内存类型
Word 4 >= 0 参见9页. 状态字 地址 - 1
Word 5 0 (忽略) 等待模式超时值未用
Word 6 0 (忽略) 等待模式超时值未用
Word 7 8001 读取 RTU 主站诊断状态字
Word 8 1 - 38 需读诊断状态的首字
Word 9 1 - (39 - Word 8) 需要读取的诊断状态字的个数
Word 10 参见11页. 数据 内存类型
Word 11 >= 1 数据 地址
命令字说明
Word 7 - RTU 主站 命令码: 8001 (01F41 十六进制): 读取 RTU 主站 诊断状态字
Word 8 - 需要读取诊断状态字的首字位置: 存放诊断状态数据的字的起始位置. 如
需读全部数据,则指定 1.
Word 9 - 需要读取诊断状态字数量: 要读取的诊断状态数据字总数.如果要读一个
字,则给定1. 如果要读取全部数据, 则给定 38.
Word 8 和 Word 9的总和 不能大于诊断状态字字大小 加1 (即39).
Word 10 - 数据内存类型: 返回的诊断状态数据的内存类型 ; 哪些类型有效,参见页
11 .
Word 11 - 数据 地址: 存放返回的诊断状态数据的首字偏移量,偏移量从1开始; 例
如, 如果要放入 %R00101,则指定101 .Modbus RTU 主站诊断状态 数据的大小和
格式由表3给定3.
错误代码
如果端口没有为 Modbus RTU 主站完成初始化或 数据内存类型及地址无效,则该
命令返回一个错误代码; 否则它返回1.
20 Modbus RTU Master Communications - December 2003 GFK-2220B
发送 RTU 读/强制/预置 查询: 08002 (1F42)
远程命令
本命令 按照以下指定的命令/数据块格式 ,发送一个Modbus RTU 主站 读,强制,
预置,或报告设备类型查询消息.
命令 块 格式
Location Value 说明
Word 1 7 命令/数据块 长度
Word 2 0 NO等待 模式
Word 3 参见9页. 状态字内存类型
Word 4 >= 0 参见 9页. 状态字地址 - 1
Word 5 0 (忽略) 忽略等待模式的超时值
Word 6 0 (忽略) 忽略等待模式的超时值
Word 7 8002 发送 RTU 主站 读/强制/预置 查询
Word 8 0 - 247 目标RTU 设备地址
Word 9 参见下表. RTU 功能代码
Word 10 参见下表. RTU 数据地址/起始地址
Word 11 参见下表. RTU 点数或16-位 寄存器数
Word 12 参见下表. 数据 (对于 强制,/预置 查询的) 源内存类型 或(对
于读 查询的)目的 内存类型
Word 13 >= 1 数据(对于强制/预置查询的) 源地址或 (对于读 查
询的)目的地址
命令字说明
Word 7 - RTU 主站 命令码: 8002 (01F42 Hex): 发送 RTU 读/强制/预置 查询
Word 8 - 目标 RTU 设备地址: 查询访问的Modbus RTU 从站 设备的地址,8-位地
址. 地址0是 广播地址. 所有发到广播 地址的查询 都不会产生回应. 有效的设
备地租范围是从1至247 ,包括245. 地址 248至255保留给Schneider/Modicon使
用.
Word 9 - RTU 功能代码: 查询使用的8-位 功能代码. 下列功能代码都是支持的;
除此之外的值都是无效的.
功能代码 值
十进制.
十六进
制.
功能名称 从站参数 类型
广播 查询是
否有效
1 01 读输出表 %Q 否
2 02 读输入表 %I 否
3 03 读寄存器 %R 否
4 04 读模拟量 输入 %AI 否
5 05 强制单个 输出 %Q 是
6 06 预置 单个 寄存器 %R 是
7 07 读异常 状态 %Q 否
15 0F 强制 多个 输出 %Q 是
16 10 预置 多个 寄存器 %R 是
GFK-2220B 21
17 11 报告设备类型 N/A 否
67 43 读手写板内存y N/A 否
Word 10 - RTU 数据 地址/起始地址: 指定从站上的目标参数的偏移量 以1开始 :
∧ 对于强制单输出和预置单寄存器功能代码,为数据位置;
∧ 数据区域的起始位置,对于 读 输出 表, 读输入 表, 读寄存器, 读模拟量 输入, 强
制多输出和预置多寄存器 功能代码,为数据区域的起始位置; and
∧ 对于读手写板内存功能代码,为起始字节数.
例如, 给定 101指的要么是 GE Fanuc PLC 的 %R00101 要么是 Schneider/Modicon
PLC的保持型寄存器 .
对于读异常状态 和报告 设备类型功能代码,这个字没有作用.
Word 11 - RTU 点数/寄存器数/字节数: 强制/预置多个查询中要发送的1-位 点数
(读输出表, 读输入表, 强制多输出) 或16-位寄存器数(读寄存器, 读模拟量输入, 预置
多寄存器) ,或读查询中的1-位 点数和6-位寄存器数, 或读Scratch Pad 内存请求中
的字节数 .
强制单输出, 预置单寄存器, 读异常状态和 报告设备类型功能代码忽略该字.
注意 强制/预置多 查询中字节计数字段会按照与RTU 功能代码相关联的目标参数类
型的大小,计算RTU的点数/寄存器数.
Modbus 规范对点数/寄存器数/字节数的限制:
参数类别 范围
多个数字量 输入/输出 1 至 2000 (7D0h)
读/预置 16-位 寄存器 1 至 125 (7Dh)
注意: 目前Modbus RTU 规范指定 "近120 个寄存器" 给预置多寄存器 功能代
码. 一些 从站设备 可能拒绝对GE Fanuc 主站设备有效的查询 .
Word 12 -数据 内存类型: 强制/预置查询中发送数据的数据类型 或 读查询返回的
回应数据的数据类型 . 本文档的第 9页 给出了有效数据类型列表.
Word 13 - 数据地址: 表示本地PLC的强制/预置 查询的源 数据地址或读查询的目
的数据地址的偏移量,从1开始的值 . 例如, 给定101表示 %R00101.
数据参数的全部范围由 数据内存类型, 数据地址, 和 点数/寄存器数/字节数定义,并
且在本地PLC中是有效的. 例如, 如果本地PLC被配置的2048个字大小的R型内
存 , 且读寄存器查询的寄存器数是120, 那么最大有效数据地址值是 %R01929 (2048
- 120 + 1).
22 Modbus RTU Master Communications - December 2003 GFK-2220B
发送 RTU 诊断 查询: 08003 (1F43)
远程命令
本命令发送下列 Modbus RTU 主站查询之一 作为命令/数据块中所指定的:
Loopback/Maintenance
命令 块 格式
Location Value 说明
Word 1 5 命令/数据块 长度
Word 2 0 NO等待 模式
Word 3 参见9页. 状态字内存类型
Word 4 >= 0 参见9页. 状态字地址 - 1
Word 5 0 (忽略) 等待模式超时值未用
Word 6 0 (忽略) 等待模式超时值未用
Word 7 8003 发送 RTU 主站 诊断 查询
Word 8 0 - 247 目标RTU 设备地址
Word 9 参见下文. RTU 功能代码
Word 10 参见下文. Loopback/Maintenance 诊断 代码
Word 11 参见下文. Loopback/Maintenance 数据
说明 of the 命令 字
Word 7 - RTU 主站 命令码: 8003 (01F43 Hex): 发送 RTU 诊断 查询
Word 8 - 目标RTU 设备地址: RTU 查询访问的Modbus RTU 从站设备8-位地址,.
地址0是广播地址. 所有发到广播地址的查询都不会产生回应.
有效设备地址的范围是1 至247 . 地址248 至 255保留给Schneider/Modicon 使
用 .
GFK-2220B 23
Word 9 - RTU 功能代码: TModbus RTU 查询的 8-位 功能代码 . 下列是支持的功
能代码; 其他均为无效.
功能代码 功能名
作为广播查询是
否有效
8 (08h) Loopback/Maintenance 否/是
Word 10 - Loopback/Maintenance 诊断 代码: Loopback/Maintenance 查询下面的诊断
代码支持; 其他均为无效.
诊断代码 值 说明
作为广播查询是
否有效
0 返回查询数据 - 目标从站应返回一个与查询消
息一样的信息.
否
1 通讯重启 - 目标从站 关闭仅监听模式 (如果使
能).
是
4 强制仅监听模式 - 目标从站 打开 仅监听模式 是
Word 11 - Loopback/Maintenance 数据: Loopback/Maintenance 查询中的下列数据值
都是需要的; 其他均为无效.
诊断 代码
Value
Loopback/Maintenance 数据值
0 16-位 无符号整数: 0 - 65,535 (0 - 0FFFFh)
1 清理通讯事件日志:
不清理事件日志:
0 (0000h)
65280 (FF00h)
4 0
24 Modbus RTU Master Communications - December 2003 GFK-2220B
发送 32-位 RTU 读/强制/预置 查询: 08004 (1F44)
远程 命令
这个命令 发送一个 Modbus RTU 主站的 读, 强制, 预置, 或 报告设备类型 查询 消息
到 命令/数据块. 功能代码3,4,6 和 16, 32-位 register 数据 is assumed. 该命
令 仅用于与使用32-位 寄存器的远程终端单元交换寄存器数据 - 例如, Daniels
Industries Mode 2500 Flow Computer.
命令 块 格式
Location Value 说明
Word 1 7 命令/数据块 长度
Word 2 0 非等待 模式
Word 3 参见9页. 状态字内存类型
Word 4 >= 0 参见9页. 状态字地址 - 1
Word 5 0 (忽略) 等待 模式 超时值忽略
Word 6 0 (忽略) 等待 模式 超时值忽略
Word 7 8004 发送 32-Bit RTU 主站 读/强制/预置 查询
Word 8 0 - 247 目标 RTU 设备地址
Word 9 参见下表. RTU 功能代码
Word 10 参见下文. RTU 数据 地址/起始地址
Word 11 参见下文. RTU点数 或 32-位 寄存器数
Word 12 参见下文. 数据 源 (用于预置查询)内存类型或目的(用于读
查询)
Word 13 >= 1 数据源(用于 预置查询)或目的(用于读查询)地址
命令字说明
Word 7 - RTU 主站 命令码: 8004 (01F44 Hex): 发送 32-Bit RTU Read/预置 查询
Word 8 - 目标 RTU 设备地址: 这个字指定查询要访问的Modbus RTU 从站的8-位
设备地址, 用于 Modbus 寻址. 地址0是 广播地址. 任何发送到广播地址的查询
都不会产生回应.有效设备地址的范围:从1到247. Schneider/Modicon保留从
248到255的地址范围.
GFK-2220B 25
Word 9 - RTU 功能代码: 这个字指定查询的 8-位功能代码 . 下列是支持的功能代
码; 除此之外的是无效的. 读 寄存器, 读模拟量输入, 预置单个寄存器和 预置多寄
存器功能处理 functions process 32-位 寄存器. All other 功能代码s operate exactly
as with 和命令 08002 (发送 RTU 读/强制/预置 查询).
功能代码 值
Dec. Hex.
功能名 从站引用 类型
作为广播 查询是否
有效
1 01 读 输出 Table %Q 否
2 02 读 输入 Table %I 否
3 03 读 寄存器 %R 否
4 04 读 模拟量 输入s %AI 否
5 05 强制单个 输出 %Q 是
6 06 预置 单个 寄存器 %R 是
7 07 读异常状态 %Q 否
15 0F 强制多个 输出 %Q 是
16 10 预置多个寄存器 %R 是
17 11 报告设备类型 N/A 否
67 43 读 手写板内存 N/A 否
Word 10 - RTU 数据 地址/起始地址: 指定从站上的目标参考地址的数据类型从1开
始的偏移量 :
∧ 对于强制单个输出和 预置 单个寄存器功能代码,指的是数据位置;
∧ 对于 读输出表, 读输入表, 读 寄存器, 读模拟量输入, 强制多个输出和 预置 多个
寄存器功能代码 指的是 数据范围的起始位置 ;
∧ 对于读手写板 Scratch Pad 内存功能代码, 指的是起始字节数 .
例如例如, 指定Daniels Industries Mode 2500 Flow Computer首个模拟量输入寄存
器 .
Word 11 - RTU 点数或 32-Bit 寄存器数: 1-位 点数 (读输出表, 读输入表, 强制多个
输出)或 32-位 寄存器 (读寄存器, 读模拟量输入, 预置多个寄存器) 将在预置多个查
询中被发送给从站或来自从站的读查询中.
对于强制单个输出,预置单个寄存器,读异常状态和报告设备类型功能代码忽略这
个字.
注意:强制/预置多个查询中的字节计数字段,是根据与 RTU 功能代码关联的目标
参数类型的大小计算出RTU 点数/32-位 寄存器数.
Modbus 规范 对点数,寄存器数,字节数的限制:
参数类型 范围
数字量输出/输出 1 to 2000 (7D0h)
读/预置 32-位 寄存器 1 to 62 (7Dh)
注意: 现行的 Modbus RTU 规范 指定 "大约 120 [16-位] 寄存器" 用于for the
预置 多寄存器Multiple 寄存器 功能代码. 某些从站设备可拒绝 那些对于
GE Fanuc 主站设备是有效的查询 .
Word 12 -数据 内存类型: 对应预置查询中的传送的源数据的数据类型 或对应读查
询返回的回应数据的数据类型. 本文档的第11页了 指定哪些类型有效.
26 Modbus RTU Master Communications - December 2003 GFK-2220B
Word 13 - 数据地址: 预置查询的源数据地址 或读查询的目的数据地址,值从1开
始 . 例如, 101 对应为 %R00101.
数据参数的全部范围由 数据内存类型, 数据地址, 和 点数/寄存器数/字节数定义,并
且在本地PLC中是有效的. 例如, 如果本地PLC被配置的2048个字大小的R型内
存 , 且读寄存器查询的寄存器数是 60,那么最大有效数据地址值是 %R01929 (2048 -
(2*60) + 1).
字节/字顺序
标准的Modbus RTU 16-位 寄存器字节顺序被扩展到 一个32-位 寄存器. 数据 内
存类型 和 数据 地址 合并成一个双字数据. 对于预置 功能, 作为源数据参数的第一
个双字的最高位的字节首先发送, 然后依次向低位发送. 对于读功能,第一个接收的
字节,放在双字的最高位;然后依次向低位存放.
当 本PLC的源/目的 双字 数据 以字显示, 参数地址上的双字的高字在 参考地址的左
侧字位置上. 例如, 假设 一个读寄存器查询 返回了一个32-位 寄存器的值, 而目的
数据参数是%R00001.
收到的数据字节 (首字节在最左侧): 16#01, 16#23, 16#45, 16#67
双字存储到 %R00001: 16#01234567
%R00001按字显示: 16#4567
%R00002按字显示: 16#0123
GFK-2220B 27
RTU 主站 命令错误代码
下表显示了重要及次错误代码的符号值以及它们含义. 初始化RTU主站端口命令
的错误代码参见 13页的表格.
主错误代码 次错误代码
数字 状
态值
说明
COMMREQ_OK None 0001h RTU 主站 COMMREQ 命令 成功执行 .
NOT_A_COMREQ 0103h CPU发送过来的消息不是一个 COMREQ.
WAIT_COMREQ 0203h 等待-模式 COMREQs 不支持.
UNSUPP_COMREQ_CMD 0303h 不支持的COMREQ 命令.
COMREQ_LEN_INVALID 0403h COMREQ 数据长度太短.
PORT _DATA_INVALID 0503h 端口设定COMREQ 数据无效.
DEV_ADDRESS_INVALID 0603h 无效的RTU从站设备.
FUNC_CODE_UNSUPPORTED 0703h 不支持的RTU功能代码.
PARAMETER_
ERROR
FUNC_INVALID_FOR_BCAST 0803h 指定的功能代码需要一个回应.
DIAG_CODE_UNSUPPORTED 0903h 不支持的诊断代码in Loopback/Maintenance 查
询.
DATA_START_INVALID 0A03h 指定数据起始位置无效.
DATA_QUANTITY_INVALID 0B03h 产生于无效消息长度的数据个数 .
DATA_MEM_TYPE_INVALID 0C03h 源/目的数据中指定的内存类型 ,对于本PLC
CPU无效.
DATA_MEM_OFFSET_INVALID 0D03h 源/目的数据中指定的内存位置,对于本PLC
CPU无效.
STATUS_MEM_TYPE_INVALID 0E03h 指定状态内存类型,对于本 PLC CPU无效.
STATUS_MEM_
OFFSET_INVALID
0F03h 所指定状态内存位置,对于本PLC CPU无
效.
DSW_RANGE_INVALID 1003h 指定的诊断状态字起始位置或长度无效.
BUF_ALLOC_ERROR 1103h 试图分配系统内存时出现错误.
PARITY_ERROR 0104h 检出奇偶校验错误, 丢弃回应.
FRAMING_ERROR 0204h 检出帧错误, 丢弃回应.
OVERRUN_ERROR 0204h 检出过载错误, 丢弃回应.
SHORT_RSP_ERROR 0304h 检出不完整的回应, 丢弃回应.
PORT _ERROR
CRC_ERROR 0404h 检出CRC 错误, 丢弃回应.
QUERY_XMIT_TIMEOUT 0105h 使用硬件流控制, and 并且在指定的时间内没
有检到CTS.
TIMEOUT_
ERROR
RESPONSE_TIMEOUT 0205h 在指定的时间内没有收到回应.
STATUS_WORD_WRITE_ERR 0106h 写入COMREQ 状态字时发生错误.
DATA_WRITE_ERR 0206h 写RTU 数据内存时发生错误.
MEM_ERROR
DATA_READ_ERR 0306h 读RTU 数据 内存时发生错误.
28 Modbus RTU Master Communications - December 2003 GFK-2220B
主错误代码 次错误代码 状态 值 说明
INVALID_RESPONSE_CRC 0107h 回应的CRC-16 不正确.
INVALID_RESPONSE_LENGTH 0207h 回应的长度不正确.
INVALID_RESPONSE_ADDR 0307h 回应设备地址不正确.
INVALID_RESPONSE_FUNC 0407h 回应功能代码不正确.
RESPONSE_
ERROR
INVALID_LOOPBACK_RESP 0507h Loopback/Maintenance 回应 数据不正确.
ILLEGAL_FUNCTlON 0108h Modbus 从站检出一个不支持的功能代
码 .
ILLEGAL_DATA_ADDRESS 0208h Modbus从站检出一个不支持的数据 地
址.
ILLEGAL_DATA_VALUE 0308h Modbus从站检出一个不允许的数据值 .
SLAVE_DEVlCE_FAILURE 0408h Modbus从站在尝试完成已请求的功能时遇
到一个不可恢复的错误.
ACKNOWLEDGE 0508h
SLAVE_DEVlCE_BUSY 0608h
RCVD_
EXCEPTION
NEGATlVE_ACKNOWLEDGE 0708h
这个异常代码不适用于本产品支持的功
能.
MEMORY_PARlTY_ERROR 0908h 从站检出扩展内存中的一个奇偶校验错
误.
GFK-2220B 29
Example Application应用示例
以下例子演示了 Modbus RTU 主站应用程序所使用的基本编程原则. 这个程序使
用梯形图 (LD)逻辑.GE Fanuc PLC 技术支持网站提供适用于 IC693CPU363 和
VersaMax modular CPU的版本. CIMPLICITY Machine Edition Logic Developer -
PLC, VersaPro, 和 Logic Master 90-30 (IC693CPU363 only)有应用程序文件夹.
这个例子仅提供 RTU主站通讯. 它可用作开发实际应用程序的框架. 另外, 程序
块可由其他的应用程序文件夹导入并且根据需要修改.
例子中的程序块都在下面给出.
CIMPLICITY 和 Logicmaster 是GE Fanuc Automation公司的商标.
30 Modbus RTU Master Communications - December 2003 GFK-2220B
+/_
+, /~ _MAIN, q A×*üJ",X/ c+~ RTUINITA'n> 0^ 2E >
Modbus RTU 0 0~ "E E / ' , K`4 %T00003 C^,J U
PLC bRUN ¨RTUINIT "E°F AE > G AEA×*ü~
RTUSTAT ( "u *ü Z~
RTU_SLV E E 0^ 2 n,XRTU 0 A' E RTU A ~ 'RTU
h CY , 0 G E c ,X A ~ 'c ,X h 5
CY , E 1 A ~
RTU_TMR 'RTU_SLV, ~ S*üAu A×*ü~ ü M6,XFEeG , + RTUSTAT ' RTU_TMR ,¨> A×*ü5à
RTU_SLVAE> A×*ü~ " A'AuA×*ü 2ObRTU_SLV ( RTU_TMR)
,X+ , + E A A " 4 0 Eg9DB, 5à" + E Eg DB4 "
4 0 ~
GFK-2220B 31
RTUINIT /_
+ RTUINIT üPLCE 9E > ( > A×*ü , ~ M6/FEe, BLKMOV
s6 +ae COMMREQ ,X( DB'DB+¨A'5B> 0^ 2*übRTU 0
0~ 0^ '; ae :
COMMREQ ( : 0
COMMREQ ( !5B: %R01001
#A : Modbus RTU
: 0
Eó)[: 19,200 !// ~
J P': J P'
#{: ·
E@ E : 0
h #\C CY : (0.5 / ~)
! +8V!D: 8 (AE^G!5B)
0!6!: 1 (AE^G!5B)
0^ Interface: AE^G!5B for CPU 0^ , 0^ 1: RS-232, 0^ 2: RS-485
: 4 (AE^G!5B)
+0oeK¨Lh+0oeE + CY : T Ax
RTS Drop Delay: 0
RTUINIT / c +, F… 1
32 Modbus RTU Master Communications - December 2003 GFK-2220B
RTUINIT +,X F… ü16> Z 2/ Au <¨ E 0^ A'5B
COMMREQ~ 4 %T00001 üOj 7 |# L8( , J Au <s6 +
0 G Au ~ 'W,Xn E' , W5B! yE 5B!4 %T00002 ¨ %T000024
AE!Au % # ~ Vp ) COMMREQ Lp, %T00001AE! A} Au ,XEQ_INT s6 +1Y the value in the
COMMREQ( + at %R01001 > 5B1 by +> 0^ ¨' 5B! %T00003, E 4
><,XPARAMETER_ERROR F… ~
RTUSTAT/_
+ RTUSTAT + _MAINA×*ü¨Aˇ" RTU 0 A ( + (DSW) DB~
RTUSTAT 0^ ~
M6/FEe*üBLKMOV s6 +' COMMREQ DB,Xae ~ 0
COMMREQ ( !5B,XDB n %R01031 J A "<F…38 ( +, ü1
+ ~ ( DB,, ,X8ר %R00961 - %R00998~
RTUSTAT / c+, Part 1
34 Modbus RTU Master Communications - December 2003 GFK-2220B
RTUSTAT / c+, Part 2
8V,X_$/ cFEe *ü 1/ Au <{COMMREQ~ Au <üRTU 0 ae
' |~ ' Au <n ¨NE_INT s6 + #COMMREQ ( !5B to
JoeL ¨·! COMMREQE "u ' ~
1 Au <n , ( !5B W,Xae (1)~ NE_INT Eg yE , (
!5B 5BL J5B!4 %T00004, WCOMMREQ ,X " 5B1~
"1/ Au =) ˇ A ~
M6/FEe *ü BLKMOV s6 +ae F… COMMREQ DB¨E ,X 0ü
c A EW ~ DB n %R01051 0 COMMREQ ( !5B~
RTU_SLV / c+, Part 1
M6,XNE_INT # COMMREQ ( !5B,X~ ' #M2L , ( > AE
!COMMREQ " 4 , %T00005, 5B!~ ( !5B ü1 ae 1,
ü! s A COMMREQ' 31~
36 Modbus RTU Master Communications - December 2003 GFK-2220B
M6,XFEe¨*ü BLKMOV ae ! A COMMREQ DB~
A ,XDB"u 4 ~AEE , 4^ ü LD / c4 Ee ae ~, h¨ "& %T00099
E E %T00101 A 1 ae , 1 1h A ,~
RTU_SLV / c+, Part 2
GFK-2220B 37
M6/,XFEe E Z COMMREQ c ~ The COMMREQ + "
contact, %T00005 S6 ~ Vp COMMREQ *óLp, 4 %T000815B!~ 4
^ #ˇtFEe¨Sk6 > %T00081 4 S6 ¨' B4,X/ cG "E ',X|
0 ~
*üSHFR_BIT ü! COMMREQ E E > !9 A ~ 'PLCE 9RUN
¨ ,X %T 4 F > 5B AE!( , > SHFR_BITS*ü,X %T00097
%T00101,X8ר ~ ü1 / c óK¨¨1 > ,XRTU_SLV (135NI) 6
%T00097 5B!~ SHFR_BIT ! /ˇ|E !¨P ,X!%T00005 fires~ '
! /ˇ|Z+SHFR_BIT KSz D4 ,X D , / cE¤ %T00097, E E /
G AE;> ~
E E / ^ + SHFR_BIT KSz D9 n;> KS~ J-BLKMOV ('!
8V,X/ c2O) ;> = ,X!9Px~
RTU_SLV / c+, F… 3
38 Modbus RTU Master Communications - December 2003 GFK-2220B
这个例子 RTU_SLV 块不检测 COMMREQ 状态的错误. 其他的逻辑,这里没有给出,
可以检查 COMMREQ 状态位置 for 错误值. 下面是一个指导性的设计要点以区别
编程错误 还是 网络 错误.
1. 使用一个AND_WORD 指令 ,将 COMMREQ状态字 和十六进制常数 00FF
(16#00FF) 作为它的输入.屏蔽次错误代码 (最左侧的字节) , 这样结果中只包
含主错误代码. 指定一个未被使用的寄存器作为输出.
2. 使用EQ_INT 指令检查主错误代码 (低字节) 是否为十进制数值 3 (COMMREQ
参数错误) . This 重要这个主错误是由编程 错误或者是由应用程序和PLC里
配置的内存范围不兼容引起的. 需要修改应用程序或者PLC硬件配置来改
正.
3. 所有由程序需要在运行过程中检测和处理 的条件限制引起的其他主错误 - 例如,
临时性干扰网络条件, l一个Modbus RTU 从站掉电, 从站硬件配置变更,等等.
但是请注意, 主错误代码 8 表明一个 Modbus RTU 回应中包含了一个意常信息.
COMMREQ 数据块指定的查询数据里的错误会导致某些这样的意常.
RTU_TMR举例
RTU_TMR块 因和 RTU_SLV 相近,故不再这里显示了. 它增加了一个 延时接通
计时器,以控制查询回应的连续序列起始时间的最小值. 计时器在 SHFR_BIT 序
列的开始时加 状态(1 位),用来复位并启动 计时器. 在序列结束时加上另一个状
态, 一直加下去,直到 计时器到达它预定的 超时值 . 发生超时之后, 这个序列再
次开始.
·上一篇:
创新与创业管理学程·下一篇:
百草园雏鹰学创业