modbus rtu 通信
modbus rtu (remote terminal unit) 是用于网络中通信的标准协议,使用 rs232 或 rs422/485 连接在网络中的 modbus 设备之间进行串行数据传输。
modbus rtu 使用主/从站网络,其中整个通信仅由一个主站设备触发,而从站只能响应主站的请求。 主站将请求发送到一个从站地址,并且只有该地址上的从站做出响应。
例外: modbus 从站地址为 0 时会向所有从站发送广播帧(从站均不响应)。
modbus 功能代码
作为 modbus rtu 主站运行的 cpu 能够在 modbus rtu 从站中通过通信连接读取和写入数据和 i/o 状态。
作为 modbus rtu 从站运行的 cpu 允许利用通信连接进行连接的 modbus rtu 主站在其自身的 cpu 中读取并写入数据和 i/o 状态。
用于读取数据的功能: 读取分布式 i/o 和程序数据
modbus 功能代码 用于读取从站(服务器)数据的功能 - 标准寻址
01 读取输出位: 每个请求 1 至2000/19921) 位
02 读取输入位: 每个请求 1 至 2000/19921) 位
03 读取保持寄存器: 每个请求 1 至 125/1241) 字
04 读取输入字: 每个请求 1 至 125/1241) 字
1) 用于扩展寻址
用于写入数据的功能: 更改分布式 i/o 和程序数据
modbus 功能代码 用于向从站(服务器)写入数据的功能 - 标准寻址
05 写入一个输出位: 每个请求 1 位
06 写入一个保持寄存器: 每个请求 1 个字
15 写入一个或多个输出位:每个请求 1 至 1960 位
16 写入一个或多个保持寄存器:每个请求 1 至 122 个字
modbus 功能代码 08 和 11 提供从站设备的通信诊断选项。
modbus 从站地址为 0 时会将广播帧发送给所有从站(无从站响应;针对功能代码 5、6、15、16)。
modbus 网络中的站地址
站 地址
rtu 站 标准站地址 1 到 247 , 0 用于广播
扩展站地址 1 到 65535,0 用于广播
modbus 存储器地址
可用的 modbus 存储器地址(输入/输出地址)的实际数量取决于 cpu 版本和可用的工作存储器。
程序中的 modbus rtu 指令
modbus_comm_load:需要运行 modbus_comm_load 来设置 ptp 参数,例如数据传输速率、奇偶校验和数据流控制。 为 modbus rtu 协议组态完通信模块后,它只能由 modbus_master 指令或 modbus_slave 指令使用。
modbus_master:利用 modbus 主站指令,cpu 可用作 modbus rtu 主站设备,与一个或更多的 modbus 从站设备进行通信。
modbus_slave:利用 modbus 从站指令,cpu 可用作 modbus rtu 从站设备,与一个 modbus 主站设备进行通信。
modbus_comm_load: 对 modbus 的通信模块进行组态
说明
modbus_comm_load 指令通过 modbus rtu 协议对用于通信的通信模块进行组态。当在程序中添加 modbus_comm_load 指令时,将自动分配背景数据块。
modbus_comm_load 的组态更改将保存在 cm 中,而不是 cpu 中。恢复电压和插拔时,将使用保存在设备配置中的数据组态 cm。必须在这些情况下调用 modbus_comm_load 指令。
参数
参数 声明 数据类型 标准 说明
s7-
1200/1500 s7-
300/400/
winac
req in bool false 当此输入出现上升沿时,启动该指令。
port in port laddr 0 指定用于以下通信的通信模块:
对于 s7-1500/s7-1200:设备组态中的“硬件标识符”。
符号端口名称在 plc 变量表的“系统常数”(system constants) 选项卡中指定并可应用于此处。
对于 s7-300/s7-400:设备组态中的“输入地址”。
在 s7-300/400/winac 系统中,在 hwcn 中分配的输入地址中分配端口参数。
baud in udint dword 9600 选择数据传输速率
有效值为:300、600、1200、2400、4800、9600、19200、38400、57600、76800、115200 bit/s。
parity in uint word 0 选择奇偶校验:
0 – 无
1 – 奇校验
2 – 偶校验
flow_ctrl in uint word 0 选择流控制:
0 – (默认)无流控制
1 – 硬件流控制,rts 始终开启(不适用于 rs422/485 cm)
2 – 硬件流控制,rts 切换(不适用于 rs422/485 cm)
rts_on_dly in uint word 0 rts 接通延迟选择:
0 – 从“rts 激活”直到发送帧的第一个字符之前无延迟。
1 到 65535 - 从“rts 激活”一直到发送帧的第一个字符之前的延迟(以毫秒表示)(不适用于 rs422/485 cm)。不论选择 flow_ctrl 为何,都会使用 rts 延迟。
rts_off_dly in uint word 0 rts 关断延迟选择:
0 - 从传送上一个字符一直到“rts 未激活”之前无延迟
1 到 65535 - 从传送上一个字符直到“rts 未激活”之前的延迟(以毫秒表示)(不适用于 rs422/485 端口)。不论选择 flow_ctrl 为何,都会使用 rts 延迟。
resp_to in uint word 1000 响应超时:
5 ms 到 65535 ms - modbus_master 等待从站响应的时间(以毫秒为单位)。如果从站在此时间段内未响应,modbus_master 将重复请求,或者在指定数量的重试请求后取消请求并提示错误(请参见下文,retries 参数)。
mb_db in/out mb_base ‑ 对 modbus_master 或 modbus_slave 指令的背景数据块的引用。
mb_db 参数必须与 modbus_master 或 modbus_slave 指令的(静态,因此在指令中不可见)mb_db 参数相连。
com_rst in/out --- bool false modbus_comm_load 指令的初始化
将使用 true 对指令进行初始化。随后会将 com_rst 复位为 false。
注:
该参数仅适用于 s7-300/400 指令。
done out bool false 如果上一个请求完成并且没有错误,done 位将变为 true 并保持一个周期。
error out bool false 如果上一个请求完成出错,则 error 位将变为 true 并保持一个周期。status 参数中的错误代码仅在 error = true 的周期内有效。
status out word 16#7000 错误代码(请参见错误消息)
执行 modbus_comm_load 以对 modbus rtu 协议的端口进行组态。为 modbus rtu 协议组态完端口后,它只能由 modbus_master 指令或 modbus_slave 指令使用。
必须运行 modbus_comm_load 来完成将用于 modbus 通信的每个通信端口的组态。必须为使用的每个端口分配唯一的 modbus_comm_load 背景数据块。如果需要更改数据传输速率或奇偶校验等通信参数,或者网络已经恢复,只需再次运行 modbus_comm_load。
例如,当在程序中添加 modbus_master 或 modbus_slave 指令时,将自动为指令分配背景数据块。需要将 modbus_comm_load 指令的 mb_db 参数连接到 modbus_master 或 modbus_slave 指令的 mb_db 参数。
modbus_comm_load 数据块变量
下表显示了可在程序中使用的 modbus_comm_load 背景数据块中的公共静态变量。
背景数据块中的静态变量
变量 数据类型 标准 说明
s7-
1200/1500 s7-
300/400/
winac
ichar_gap word 0 字符间的最长字符延迟时间。此参数以毫秒为单位指定,并且增加了所接收字符之间的预期周期。将此参数的相应位时间数添加到 modbus 默认值 35 位时间(3.5 字符时间)。
retries word 2 返回“无响应”错误代码 0x80c8 之前主站执行的重复尝试次数。
en_supply_volt bool 0 启用对电源电压 l+ 缺失的诊断
mode usint 字节 0 工作模式
有效的工作模式包括:
0 = 全双工 (rs232)
1 = 全双工 (rs422) 四线制模式(点对点)
2 = 全双工 (rs 422) 四线制模式(多点主站,cm ptp (et 200sp))
3 = 全双工 (rs 422) 四线制模式(多点从站,cm ptp (et 200sp))
4 = 半双工 (rs485) 二线制模式 1)
line_pre usint 字节 0 接收线路初始状态
有效的初始状态是:
0 =“无”初始状态 1)
1 = 信号 r(a)=5 v,信号 r(b)=0 v(断路检测):
在此初始状态下,可进行断路检测。
仅可以选择以下项:“全双工 (rs422) 四线制模式(点对点连接)”和“全双工 (rs422) 四线制模式(多点从站)”。
2 = 信号 r(a)=0 v,信号 r(b)=5 v:
此默认设置对应于空闲状态(无激活的发送操作)。在此初始状态下,无法进行断路检测。
brk_det usint 字节 0 断路检测
以下内容有效:
0 = 断路检测已禁用
1 = 断路检测已激活
en_diag_alarm bool 0 激活诊断中断:
0 - 未激活
1 - 已激活
stop_bits usint 字节 1 停止位个数;
1 = 1 个停止位,
2 = 2 个停止位,
0、3 到 255 = 保留
1) 使用 profibus 电缆连接 cm 1241 的 rs485 时所需的设置
modbus_master: 作为 modbus 主站进行通信
modbus_master 指令可通过由 modbus_comm_load 指令组态的端口作为 modbus 主站进行通信。当在程序中添加 modbus_master 指令时,将自动分配背景数据块。modbus_comm_load 指令的 mb_db参数必须连接到 modbus_master 指令的(静态)mb_db参数。
参数
参数 声明 数据类型 标准 说明
s7-
1200/1500 s7-
300/400/
winac
req in bool false false = 无请求
true = 请求向 modbus 从站发送数据
mb_addr in uint word ‑ modbus rtu 站地址:
标准地址范围(1 到 247 以及 0用于 broadcast)
扩展地址范围(1 到 65535以及 0 ,用于 broadcast)
值 0 为将帧广播到所有 modbus 从站预留。广播仅支持 modbus 功能代码 05、06、15 和 16。
mode in usint byte 0 模式选择:指定请求类型(读取、写入或诊断)。下面的 modbus 功能表中提供了其它信息。
data_addr in udint dword 0 从站中的起始地址:指定在 modbus 从站中访问的数据的起始地址。下面的 modbus 功能表中列出了有效地址。
data_len in uint word 0 数据长度:指定此指令将访问的位或字的个数。下面的 modbus 功能表中列出了有效长度。
com_rst in/out --- bool false modbus_master 指令的初始化
将使用 true 对指令进行初始化。随后会将 com_rst 复位为 false。
注:
该参数仅适用于 s7-300/400 指令。
data_ptr in/out variant any ‑ 数据指针:指向要进行数据写入或数据读取的标记或数据块地址。
自指令版本 v3.0 起:
该参数可指向优化存储区。在优化存储区中,允许使用以下数据类型的单个元素或数组:bool, byte, char, word, int, dword, dint, real, usint, uint, udint, sint, wchar。所有其它数据类型都会导致出现错误消息 16#818c。
done out bool false 如果上一个请求完成并且没有错误,done 位将变为 true 并保持一个周期。
busy out bool ‑ false – modbus_master 无激活命令
true – modbus_master 命令执行中
error out bool false 如果上一个请求完成出错,则 error 位将变为 true 并保持一个周期。status 参数中的错误代码仅在 error = true 的周期内有效。
status out word 0 错误代码(请参见错误消息)
modbus 主站数据块中的变量
下表显示了可在程序中使用的 modbus_master 背景数据块中的公共静态变量。
背景数据块中的静态变量
变量 数据类型 标准 说明
blocked_proc_timeout real 3.0 在“激活”状态移除此实例前,等待受阻的 modbus 主站实例的持续时间(以秒为单位)。例如,如果输出主站请求,随后在其完全结束请求之前,程序停止并调用主站功能,则可能发生这种情况。时间值必须大于 0 秒而小于 55 秒,以避免发生错误。
另请参见“modbus-master 通信规则”和“使用不同的参数设置调用 modbus_master 指令”。
extended_addressing bool false 将从站地址组态为单字节或双字节。
false = 1 字节地址;0 到 247
true = 2 字节地址(对应于扩展地址);
0 到 65535
compatibility_mode 1) bool false 对于 modbus,使用 modbus rtu 驱动程序 的 cp 341、cp 441-2 和 et 200sp 1si,以及 et 200sp 1si 的兼容模式
默认值为 0。
false = 根据 modbus 规范,不兼容
true = 兼容
对于 fc1 和 fc2:从帧中读取的数据逐字写入访问的 cpu 存储器内,并逐字节替换。
如果要传输的位数不是 16 的倍数,那么不相关的位将在最后一个字中设置为空值。
对于 fc15:要传输的字从访问的存储器中逐字读取并逐字节写入发送帧。
如果要传输的位数不是 8 的倍数,那么最后一个字节中不相关的位将从访问的存储器中读取,并输入到发送帧中。
mb_db mb_base - modbus_comm_load 指令的 mb_db 参数必须连接到 modbus_master 指令的此 mb_db 参数。
1) 点对点通信模块会根据 modbus 规范中的定义进行响应。对于 modbus,要保留与 cp 341, cp 441‑2 和 et 200sp 1si一样的响应,使用“compatibility_mode”参数。
程序可以向 blocked_proc_timeout 和 extended_addressing 变量中写入值来控制 modbus 主站的操作。
modbus-master 通信规则
必须运行 modbus_comm_load 来组态端口,以便 modbus_master 指令可以使用该端口进行通信。
要用来作为 modbus 主站的端口不可作为 modbus_slave 使用。对于该端口,可以使用一个或多个 modbus_master1) 的实例。但是,所有版本的 modbus_master 都必须为该端口使用相同的背景数据块。
modbus 指令不会使用通信报警事件来控制通信过程。程序必须查询 modbus_master 指令来获得完整的命令(done、error)。
我们建议为来自程序周期 ob 的特定端口调用 modbus_master 的所有执行。modbus 主站指令只能在一个程序周期或一个周期/时间控制的处理级别中执行。它们无法在不同的处理级别中进行处理。由具有较高优先级的处理级别中的 modbus 主站指令引起的 modbus 主站指令的优先级中断将导致操作不正确。modbus 主站指令无法在启动、诊断或时间错误级别中处理。
1) 此处的“modbus 主站的实例”意味着,调用具有与 modbus_comm_load 指令相同的互联,并具有与 mb_addr、mode、data_addr和 data_len参数相同的设置的 modbus_master 指令。
示例
mode = 0 且 data_addr = 10 时会调用 modbus_master
此作业将一直处于激活状态,直到通过参数 done=1 或 error=1 完成,或者 blocked_proc_timeout 参数中组态的监视时间到期。如果在看门狗时间用完且之前的命令还未完成时启动了新命令,那么之前的命令将会中止而不会有错误消息。
如果在此命令正在运行期间使用相同的实例数据以不同的 mode和 data_addr参数设置再次调用,则第二次的调用将以 error = 1 和 status = 8200 终止。
使用不同的参数设置调用 modbus_master 指令
如果程序中含有使用不同 mb_addr、mode、data_addr或 data_len设置的多个 modbus_master 指令调用,必须确保在任意给定时间,只有一个调用处于激活状态。否则,将输出错误消息 16#8200(接口正忙于处理当前请求)。
如果无法完整地完成调用,那么看门狗会由 blocked_proc_timeout 参数激活,并终止当前命令。
req 参数
false = 无请求;true = 请求向 modbus 从站发送数据
启用请求的传输。这会将缓冲区中的内容传送到点对点通信接口。
可以使用 data_addr 和 mode 参数来选择 modbus 功能代码。
data_addr(从站中的 modbus 起始地址):指定在 modbus 从站中访问的数据的起始地址。
modbus_master 指令使用 mode 输入,不使用功能代码输入。mode 和 data_addr 结合使用可指定在实际 modbus 帧中使用的功能代码。下表显示了 mode 参数、modbus 功能代码和data_addr 中 modbus 地址范围之间的关系。
modbus 功能
mode data_addr(modbus 地址) data_len
(数据长度) modbus 功能代码 运行和数据
0 每个请求的位数 01 读取输出位:
1 到 9999 1 到 2000/1992 1 0 到 9998
0 每个请求的位数 02 读取输入位:
10001 到 19999 1 到 2000/1992 1 0 到 9998
0 每个请求的字数 03 读取保持寄存器:
40001 到 49999 1 到 125/124 1 0 到 9998
400001 到 465535 1 到 125/124 1 0 到 65534
0 每个请求的字数 04 读取输入字:
30001 到 39999 1 到 125/124 1 0 到 9998
1 每个请求的位数 05 写入一个输出位:
1 到 9999 1 0 到 9998
1 每个请求 1 个字 06 写入一个保持寄存器:
40001 到 49999 1 0 到 9998
400001 到 465535 1 0 到 65524
1 每个请求的位数 15 写入多个输出位:
1 到 9999 2 到 1968/1960 1 0 到 9998
1 每个请求的字数 16 写入多个保持寄存器:
40001 到 49999 2 到 123/122 0 到 9998
400001 到 465534 2 到 123/122 1 0 到 65534
2 2 每个请求的位数 15 写入一个或多个输出位:
1 到 9999 1 到 1968/1960 1 0 到 9998
2 2 每个请求的字数 16 写入一个或多个保持寄存器:
40001 到 49999 1 到 123 0 到 9998
400001 到 465535 1 到 122 1 0 到 65534
11 此功能将忽略 modbus_master 的 data_addr 和 data_len 操作数。 11 读取从站通信的状态字和事件计数器。状态字表示“忙”(0 - 不忙,0xffff - 忙)。事件计数器随着帧的每次成功处理而递增。
80 每个请求 1 个字 08 使用数据诊断代码 0x0000 检查从站状态(回送测试 - 从站返回请求的回应)
- 1 -
81 每个请求 1 个字 08 利用数据诊断代码 0x000a 重新设置从站事件计数器
- 1 -
104 每个请求的字数 04 读取输入字
0 到 65535 1 到 125/124 1 0 到 65535
3 到 10,
12 到 79,
82 到 103,105 到 255 - - 保留
1 在扩展寻址中(请参见 extended_adressing 参数),最大数据长度根据功能的数据类型而缩减 1 字节或 1 个字。
2 mode 2 允许使用 modbus 功能 15 和 16 写入 1 个或多个输出位和 1 个或多个保持寄存器。
mode 1 使用 modbus 功能 5 和 6 写入 1 个输出位和 1 个保持寄存器,使用 modbus 功能 15 和 16 写入多个输出位和多个保持寄存器。
data_ptr 参数
data_ptr 参数指向在其中执行读取或写入的数据块或位存储器地址。如果使用数据块,则必须创建全局数据块,以便为 modbus 从站上的读取或写入过程提供数据存储器。
说明
s7-1200/1500 - 使用 data_ptr 的访问的数据块必须支持直接寻址
数据块必须允许直接(绝对)寻址和符号寻址。
说明
使用功能代码 5
功能代码 5 用于设置或删除各个位。
设置位时,必须在通过 data_ptr 寻址到的 db 或位存储区的首个字中指定值“16#ff00”。
对于 s7-1200,也可以指定值“16#0100”以设置位。
为复位某个位,必须在通过 data_ptr 寻址到 db 或位存储区的首个字中指定值“16#0000”。
所有其它值通过 error = true 和 status = 16#8384 拒绝。
data_ptr 参数的数据块结构
这些数据类型对读取 modbus 地址范围 (data_ptr) 30001 到 39999、40001 到 49999 和 400001 到 465535 中的字有效,以及对写入 modbus 地址范围(data_ptr 参数)40001 到 49999 和 400001 到 465535 中的字有效。
数据类型 word、uint 或 int 的标准数组
word、uint 或 int 类型的指定结构,其中每个元素都有唯一的名称和一个 16 位的数据类型。
指定的复杂结构,其中每个元素都有唯一的名称和一个 16 位或 32 位的数据类型。
用于读/写 modbus 地址范围(data_ptr 参数)00001到 09999 中的位和用于读取 10001 到 19999 中的位。
布尔数据类型的标准字段。
来自明确指定的布尔变量的指定布尔结构。
给每个 modbus_master 指令分配各自的独立存储区并不是必须进行的操作,但我们建议进行此操作。原因是,如果多个 modbus 指令都在同一个存储区读取和写入,那么数据损坏的可能性将大大增高。
data_ptr的数据区不必位于相同的全局数据块中。可以为 modbus 读取过程创建具有多个区域的数据块,为 modbus 写入过程创建数据块或为每个从站创建数据块。
modbus_slave:作为 modbus 从站进行通信
说明
程序可利用 cm(rs422/485 或 rs232)端口,使用 modbus_slave 指令来作为 modbus 从站进行通信。添加指令时,step 7 将自动创建背景数据块。modbus_comm_load 指令的 mb_db 参数必须连接到 modbus_slave 指令的(静态)mb_db 参数。
参数
参数 声明 数据类型 标准 说明
s7-
1200/1500 s7-
300/400/
winac
mb_addr in uint word ‑ modbus 从站的标准寻址:
标准寻址范围(1 到 247)
扩展寻址范围(0 到 65535)
注:0 是广播地址
com_rst in/out --- bool false modbus_slave 指令的初始化
将使用 true 对指令进行初始化。随后会将 com_rst 复位为 false。
注:
该参数仅适用于 s7-300/400 指令。
mb_hold_reg in/out variant any ‑ modbus 保持寄存器 db 的指针:modbus 保持寄存器可能为标志的存储区或者数据块。
自指令版本 v4.0 起:
该参数必须指向长度为 16 位以上的存储区,否则会导致出现错误消息 16#8187。这一要求对于单个元素、数组、struct 和 udt 均适用。例如,如果 single bool 或数组中包含的布尔元素个数小于 16,则会导致出现错误消息。
如果长度不是 16 位的倍数,则存储区末端的剩余位无法通过modbus_slave 指令读取或写入。
该参数可指向优化存储区。在优化存储区中,允许使用以下数据类型的单个元素或数组:bool, byte, char, word, int, dword, dint, real, usint, uint, udint, sint, wchar。所有其它数据类型都会导致出现错误消息 16#818c。
ndr out bool false 可用的新数据:
false - 无新数据
true – 表示新数据已由 modbus 主站写入
如果上一个请求完成并且没有错误,ndr 位将变为 true 并保持一个周期。
dr out bool false 读取数据:
false - 未读取数据
true - 表示该指令已将 modbus 主站接收到的数据存储在目标区域中。
如果上一个请求完成并且没有错误,dr 位将变为 true 并保持一个周期。
error out bool false 如果上一个请求完成出错,则 error 位将变为 true 并保持一个周期。如果执行因错误而终止,则 status 参数中的错误代码仅在 error = true 的周期内有效。
status out word 0 错误代码(请参见错误消息)
modbus 通信的功能代码(1、2、4、5 和 15)可直接在 cpu 的过程映像输入和过程映像输出中读取或写入位和字。对于这些功能代码,必须将 mb_hold_reg 参数定义为大于一个字节的数据类型。下表显示了将 modbus 地址分配给 cpu 中过程映像的示例。
将 modbus 地址分配给过程映像
modbus 功能 s7-1200
代码 功能 数据区 地址区 数据区 cpu 地址
01 读取位 输出 0 到 8191 过程映像输出 o0.0 到 o1023.7
02 读取位 输入 0 到 8191 过程映像输入 i0.0 到 i1023.7
04 读取字 输入 0 到 511 过程映像输入 iw0 到 iw1022
05 写入位 输出 0 到 8191 过程映像输出 o0.0 到 o1023.7
15 写入位 输出 0 到 8191 过程映像输出 o0.0 到 o1023.7
将 modbus 地址分配给过程映像
modbus 功能 s7-1500/s7-300/s7-400
功能代码 功能 数据区 地址区 数据区 cpu 地址
01 读取位 输出 0 到 9998 过程映像输出 o0.0 到 a1249.6
02 读取位 输入 0 到 9998 过程映像输入 i0.0 到 i1249.6
04 读取字 输入 0 到 9998 过程映像输入 iw0 到 iw19996
05 写入位 输出 0 到 9998 过程映像输出 o0.0 到 a1249.6
15 写入位 输出 0 到 9998 过程映像输出 o0.0 到 a1249.6
说明
可用的地址区可能更小,具体取决于 cpu 的存储器组态。
modbus 通信的功能代码(3、6 和 16)使用 modbus 保持寄存器,此寄存器是标志的存储区或者数据块中的一个地址区。保持寄存器的类型由 modbus_slave 指令的 mb_hold_reg 参数指定。
说明
s7-1200/1500 - mb_hold_reg 数据块的类型
具有 modbus 保持存器的数据块必须允许直接(绝对)寻址和符号寻址。
诊断功能
s7-1200 modbus_slave 的 modbus 诊断功能
功能代码 子功能 说明
08 0000h 输出回应测试的请求数据:modbus_slave 指令会将所接收数据字的回应返回到 modbus 主站。
08 000ah 清除通信事件计数器:modbus_slave 指令将清除用于 modbus 功能 11 的通信事件计数器。
11 调用通信事件计数器:modbus_slave 指令使用内部通信事件计数器来检测将发送到 modbus 从站的成功的 modbus 读取和 modbus 写入数量。该计数器不随功能 8、功能 11 和广播请求而递增。它也不会随导致通信错误(例如,奇偶校验或 crc 错误)的请求而递增。
modbus_slave 指令支持来自 modbus 主站的广播写入请求,只要该请求包括到有效地址的访问即可。针对广播功能不支持的功能代码,modbus_slave 指令将生成错误代码 16#8188。
指令版本 v3.0 中 modbus 从站的变量
下表显示了可在程序中使用的 modbus_slave 背景数据块中的公共静态变量。
modbus 从站的变量
变量 数据类型 标准 说明
hr_start_offset word 0 为 modbus 保持寄存器指定起始地址(默认 = 0)
qb_start word 0 输出的有效可写入寻址范围起始地址(字节 0 到 65535)
注:
该变量不适用于 s7-300、s7-400 和 winac。
qb_count word 0xffff 可由 modbus 主站写入的输出字节数。
注:
该变量不适用于 s7-300、s7-400 和 winac。
extended_addressing bool false 扩展寻址,将从站寻址组态为单字节或双字节。
(false = 单字节地址,true = 双字节地址)
request_count word 0 该从站接收的所有请求的数量
slave_message_count word 0 该特定从站接收的所有请求的数量
bad_crc_count word 0 存在 crc 错误的已接收请求的数量
broadcast_count word 0 已接收的广播请求的数量
exception_count word 0 使用主站的例外进行确认的 modbus 特定错误
success_count word 0 该特定从站接收的无协议错误的请求数量
mb_db mb_base - modbus_comm_load 指令的 mb_db 参数必须连接到 modbus_master 指令的此 mb_db 参数。
程序可以向 hr_start_offset 和 extended_addressing 变量中写入值来控制 modbus 从站的操作。可以读取其它变量来监视 modbus 状态。
楷登电子发布全新音频软件框架 —— Cadence HiFi Integrator Studio
Google Pixel 4A真机照曝光,采用打孔屏设计曲面圆润
阿里巴巴发布2019财年第三财季业绩报告 支付宝活跃用户仅次于微信
迷你组合音响的音场技术
检测高频电子整流器的两种方法
Modbus RTU通信概述
虚拟现实头显和传感器原理详解
《怪猎:世界》成卡普空销量第一游戏 Steam版销量超200万套
高速模数转换器(ADC)的INL/DNL测量
铁总与阿里巴巴会谈 促高铁网和互联网双网融合
手机端鸿蒙OS测试版将在12月份正式发布
OPPO官方预热海报公布 Find X2与OPPO Watch真容亮相
怎样判断更换的点火线圈接线是否正确_点火线圈工作过程是什么_附加电阻的作用是什么?
基于STM32单片机的衣柜系统设计
FPGA多功能数字钟系统原理
LED灯珠有哪些参数?应该如何选择合适的LED灯珠
基于MRTG流量监测在网络管理中的应用
CW恒流激光控制器驱动器 ATLSXA202D
电容式传感器的工作原理以及电容式传感器的特点
浅析发电机组自动稳压器PCB电路