Modbus (RTU) (S7-300, S7-400) Modbus RTU 通信概述 (S7-300, S7-400) 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 状态。 表格 4-381 用于读取数据的功能:读取分布式 I/O 和程序数据 Modbus 功能代码 用于读取从站(服务器)数据的功能 - 标准寻址 01 读取输出位:每个请求 1 至 2000/19921) 位 02 读取输入位:每个请求 1 至 2000/19921) 位 03 读取保持寄存器:每个请求 1 至 125/1241) 字 04 读取输入字:每个请求 1 至 125/1241) 字 1) 用于扩展寻址 表格 4-382 用于写入数据的功能:更改分布式 I/O 和程序数据 Modbus 功能代码 用于向从站(服务器)写入数据的功能 - 标准寻址 05 写入一个输出位:每个请求 1 位 06 写入一个保持寄存器:每个请求 1 个字 15 写入一个或多个输出位:每个请求 1 至 1960 位 16 写入一个或多个保持寄存器:每个请求 1 至 122 个字
此变频器的另一个请求当前处于激活状态。 稍后重复参数读取或写入命令。 16#818B 变频器未响应。 检查变频器。 16#818C 变频器对参数请求响应错误消息。 检查变频器的响应帧。 检查参数请求。 检查指令 USS_Read_Param、 USS_Write_Param 或 USS_Port_Scan 是否已报 告错误。如果已报告错误,请检查 USS_Drive_Control 指令的静态变量 USS_DB. w_USSExtendedError 的值。 16#818D 变频器对参数请求响应访问错误消息。 检查变频器的响应帧。 检查参数请求。 16#818E 变频器未初始化。 检查用户程序,确保向此变频器调用 USS_Drive_Control 指令。 16#8280 读取模块时进行否定确认 检查 PORT 参数中的输入。 在静态参数 Port_Config.RDREC.STATUS、 Send_Config.RDREC.STATUS 、 Receive_Config.RDREC.STATUS 、 Send_P2P.RDREC.STATUS 或 Receive_P2P.RDREC.STATUS,以及 SFB RDREC 的说明中可找到有关错误原因的更多详细信息。 16#8281 写入模块时进行否定确认 检查 PORT 参数中的输入. 在静态参数 Port_Config.WRREC.STATUS、 Send_Config.WRREC.STATUS 、 Receive_Config.WRREC.STATUS 、 Send_P2P.RDREC.STATUS 或 Receive_P2P.RDREC.STATUS,以及 SFB WRREC 的说明中可找到有关错误原因的更多详细信息。 错误代码,一般 16#8FFF 模块因复位而暂时未准备就绪。 重复请求。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 的通信模块进行组态 (S7-300, S7-400) 说明 使用 CM1241 自模块的固件版本 V2.1 起,才能通过 CM1241 使用该指令。 说明 Modbus_Comm_Load 指令通过 Modbus RTU 协议对用于通信的通信模块进行组态。当在程 序中添加 Modbus_Comm_Load 指令时,将自动分配背景数据块。Modbus_Comm_Load 的组态更改将保存在 CM 中,而不是 CPU 中。恢复电压和插拔时,将 使用保存在设备配置中的数据组态 CM。必须在这些情况下调用 Modbus_Comm_Load 指令。 参数 参数 声明 数据类型 标准 说明 S7- 1200/15 00 S7- 300/400 / WinAC REQ IN Bool FALSE 当此输入出现上升沿时,启动该指令。 PORT IN Port Word 0 指定用于以下通信的通信模块: • 对于 S7-1500/S7-1200:设备组态中的“硬件标 识符”。 符号端口名称在 PLC 变量表的“系统常数”(System constants) 选项卡中指定并可应用于此处。 • 对于 S7-300/S7-400:设备组态中的“输入地 址”。 在 S7-300/400/WinAC 系统中,在 HWCN 中分配 的输入地址中分配端口参数。 BAUD IN UDInt DInt 9600 选择数据传输速率 有效值为:300、600、1200、2400、4800、 9600、19200、38400、57600、76800、 115200 bps。 PARITY IN UInt Word 0 选择奇偶校验: • 0 – 无 • 1 – 奇校验 • 2 – 偶校验 FLOW_CTR L IN UInt Word 0 选择流控制: • 0 – (默认)无流控制 • 1 – 硬件流控制,RTS 始终开启(不适用于 RS422/485 CM) • 2 – 硬件流控制,RTS 切换(不适用于 RS422/485 CM)S7- 1200/15 00 S7- 300/400 / WinAC RTS_ON_D LY 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 并保持一个周期。S7- 1200/15 00 S7- 300/400 / WinAC ERROR OUT Bool FALSE 如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。STATUS 参数中的错误代码仅在 ERROR = TRUE 的周期内有效。 STATUS OUT Word 16#700 0 错误代码(请参见错误消息 (页 8908)) 执行 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 背景数据块中的公共静态变量。 表格 4-384 背景数据块中的静态变量 变量 数据类型 标准 说明 S7- 1200/15 00 S7- 300/40 0/ WinAC ICHAR_GAP Word 0 字符间的Zui长字符延迟时间。此参数以毫秒为单位指定,并且 增加了所接收字符之间的预期周期。将此参数的相应位时间数 添加到 Modbus 默认值 35 位时间(3.5 字符时间)。 RETRIES Word 2 返回“无响应”错误代码 0x80C8 之前主站执行的重复尝试次 数 EN_SUPPLY_V OLT Bool 0 启用对电源电压 L+ 缺失的诊断。