用于 Modbus的 ET 200S 1SI (S7-300, S7-400) 作为 Modbus 主站进行发送和接收 (S7-300, S7-400)说明 通过 S_SEND 和 S_RCV 指令在模块和 CPU 之间传送数据。 如果要输出数据,通过输入 REQ 中的沿激活S_SEND 指令。 EN_R=1 时,S_RCV 指令已设置为准备好接收数据。所有读取函 数代码均需要 S_RCV。 使用Modbus 主站协议发送和接收数据 必须激活 S_SEND 和 S_RCV 指令才能执行 Modbus主站作业。数据要输出到模块时,通过 REQ 输入处的边沿信号激活 S_SEND 指令。EN_R=1 时,S_RCV指令已准备好从模块接收数 据。所有读取函数代码操作均需要 S_RCV。下图显示了执行 Modbus 作业时参数 S_SEND 和S_RCV 的整体特性。仅适用于 ASCII 驱动程序: XON 或 CTS = ON 的等待时间已结束。通信伙伴发生故障、过慢或已离线。检查通信伙 伴;您可能需要更改参数分配。 070B 仅适用于 3964(R):由于两个伙伴均为高优先级,无法解 决初始化冲突。 更改参数分配。 070C 仅适用于 3964(R):由于两个伙伴均为低优先级,无法解 决初始化冲突。 更改参数分配。 0802 仅适用于 3964(R): 建立连接时出错: •在空闲模式下,收到了一个或多个随机 代码(NAK 或 STX 除外),或 • 收到 STX 后,伙伴在没有等待响应 DLE的情况下发送了更多字符。 伙伴通电后: • 伙伴接通电源时,模块收到一个未定义 的字符。 可以在传输线路中互连接口测试器(FOXPG) 来调 试伙伴设备。 0805 仅适用于 3964(R): 接收时出现逻辑错误: 收到 DLE后,又收到一个随机代码(DLE 或 ETX 除外)。 检查伙伴是否总是复制报文报头和数据字符串中 的 DLE,或连接是否用 DLEETX 终止。可以在传 输线路中互连接口测试器 (FOXPG) 来调试伙伴设 备。 0806 超过字符延时时间 (ZVZ): •在字符延时时间内未收到两个连续字 符,或 仅适用于 3964(R): • 1. 在字符延时时间内,未收到在建立连 接时发送 DLE后的第一个字符。 伙伴设备过慢或发生故障。可以在传输线路中互 连接口测试器 (FOXPG) 来调试伙伴设备。 0807 仅适用于3964(R): 报文长度非法: 收到一个长度为零的报文。 收到长度为零的报文并非错误。检查通信伙伴为何发送不含用户数据的报文。
仅适用于 3964(R): 块检查字符(BCC) 中出错: 内部计算的 BCC 的值与在终止连接时伙伴 接收到的 BCC 不匹配。检查连接是否被严重破坏;此时也可以不时地查 看错误代码。可以在传输线路中互连接口测试器 (FOXPG) 来调试伙伴设备。 0809仅适用于 3964(R): 重复次数必须设置为相同的值。 在通信伙伴方声明一个与您模块中相同的块等待时间。检查通信设备是否发生故障;您可能需要 使用转换为传输线路的接口测试设备。 080A 没有可用的空闲接收缓冲区:没有可用于接收数据的缓冲区空间。 提高 S_RCV 指令的调用率。 080C 传输错误: • 检测到传输错误(奇偶校验/停止位/溢出错误)。 仅适用于 3964(R): • 如果在发送或接收操作过程中发生此错 误,则启动重复操作。 •如果在空闲模式下收到一个损坏的字 符,则会立即报告错误,以便可以及早 检测到传输线路上的干扰。 • 如果 SFLED(红灯)亮起,则两个通 信伙伴之间的连接电缆断路。 传输线路上的干扰造成消息帧重复,降低了 用户数据的吞吐量。漏检错误的风险也会增 加。更改系统设置或电缆接线。检查通信伙伴的 电缆,或验证双方设备对波特率、奇偶校验和停 止位数目的设置是否匹配。080D BREAK: 到伙伴的接收线路断路。 重新连接或接通伙伴电源。 0810 仅适用于 ASCII 驱动程序: 奇偶校验错误:• 如果 SF LED(红灯)亮起,则两个通 信伙伴之间的连接电缆断路。 检查通信伙伴的电缆,或验证双方设备对波特率、奇偶校验和停止位数目的设置是否匹配。 更改系统设置或电缆接线。 0811 仅适用于 ASCII 驱动程序: 字符帧错误: • 如果SF LED(红灯)亮起,则两个通 信伙伴之间的连接电缆断路。 检查通信伙伴的电缆,或验证双方设备对波特率、奇偶校验和停止位数目的设置是否匹配。 更改系统设置或电缆接线。 0812 仅适用于 ASCII 驱动程序: 在模块发送 XOFF或将 CTS 设置为 OFF 后 收到更多字符。 重新组态通信伙伴或更快速地读取模块数据。仅适用于 ASCII 驱动程序: DSR =OFF 或 CTS = OFF 在传输之前或传输期间,伙伴已将 DSR 或 CTS 信 号切换为“OFF”。 检查伙伴对 RS232C 伴随信号的控制。 0850 接收消息帧的长度大于 224 个字节或定义 的消息帧长度。 调整伙伴的消息帧长度 0B01接收缓冲区占用超出整体的 2/3 1E0D “作业因暖启动、热启动或复位而中止” 1E0E 调用 SFC DPRD_DAT时出现静态错误。 SFC 的 RET_VAL 返回值可用于评估背景数 据块的 SFCERR 变量。 从背景数据块中装载 SFCERR变量。 1E0F 调用 SFC DPWR_DAT 时出现静态错误。 SFC 的 RET_VAL 返回值可用于评估背景数 据块的SFCERR 变量。 从背景数据块中装载 SFCERR 变量。 1E10 调用 SFC RD_LGADR 期间出现静态错误。 SFC的 RET_VAL 返回值可用于评估背景数 据块的 SFCERR 变量。 从背景数据块中装载 SFCERR 变量。 1E11 调用SFC RDSYSST 期间出现静态错误。 SFC 的 RET_VAL 返回值可用于评估背景数 据块的 SFCERR 变量。从背景数据块中装载 SFCERR 变量。 1E20 参数超出范围。 修改指令的输入以使其位于有效的范围内。 1E41 在指令参数LEN 中指定的字节数无效 值必须在 1 到 224 个字节的范围内。 判断 SFCERR 变量 有关属于事件类别 30 的错误事件(1E) 0EH、(1E) 0FH、(1E) 10H 和 (1E) 11H 的更多详细信息, 可在 SFCERR 变量中获得。可以从相应指令的背景数据块中装载 SFCERR 变量。 《用于 S7-300/400 系统和标准功能的系统软件》参考手册中有关“DPRD_DAR”和 SFC15 “DPWR_DAT”系统功能的章节中说明了在 SFCERR变量中输入的错误消息。说明 发送和接收顺序 用户程序与接口模块之间的接口在半双工模式下运行时,必须遵守以下事项: 对 Modbus主站读取作业进行肯定确认后,必须先通过调用 S_RCV 指令从接口模块获取接 收数据,才能启动新的 Modbus 主站发送作业。S_RCV:接收数据 (S7-300, S7-400) 说明 S_RCV 指令根据 DB_NO 和 DBB_NO参数指定的内容将数据从 ET 200S 1SI 模块传送至 S7 数据区。为进行数据传输,可在循环或者时间控制的程序的静态(无条件)操作中调用 S_RCV 指令。 工作原理 参数 EN_R处的(静态)信号状态“1”启动对要从 ET 200S 1SI 模块读取的数据的检查。 可以 通过在参数 EN_R处设置信号状态“0”以及在参数 R 处设置信号状态“1”来取消激活的传输。 (由于参数 EN_R设为“1”后可能无法启动传输,除了将 EN_R 设为“0”之外还应将参数 R 设 为“1”以取消激活的传输。)终止已取消的接收请求,生成一条错误消息(STATUS 输 出)。 在参数 EN_R 处设置信号状态“0”之后,会禁用接收功能。数据传输可能会进行多次 调用(程序周期),具体取决于数据量。 如果指令检测到参数 R 的信号状态为“1”,则将取消当前的传输作业,并将S_RCV 指令复位 为初始状态。在参数 R 处设置信号状态“1”之后,会禁用接收功能。 如果信号状态恢复为“0”,则从头开始重新接收取消的消息帧。 参数 LADDR 指定要寻址的 ET 200S 1SI 的地址。 输出 NDR指示“作业已完成且无错/数据已接收”(已读取全部数据),ERROR 指示错误事 件。 如果发生错误,会在 STATUS中显示相应的错误编号。 如果接收缓冲区占用超过其容 量的 2/3,则在每次调用 S_RCV 时,STATUS都会返回警告。如果无错误或警告处于未决状态, 则 STATUS 的值为“0”。 复位 S_RCV 指令后,还会输出 NDR 和ERROR/STATUS (LEN == 16#00)(请参见时序图)。 如果出现错误,则复位二进制结果 BR。如果块已完成且无错,则二进制结果的状态为“1”。