西门子FC6 AG_RECV状态80B1:原因与解决办法

需积分: 9 2 下载量 39 浏览量 更新于2024-09-05 收藏 426KB PDF 举报
在处理西门子S7-300系列PLC中的通信问题时,遇到FC6 "AG_RECV" 函数调用时状态字显示为 "80B1" 的情况,该问题通常发生在使用CP342-5模块进行PROFIBUS FDL(Fast Data Link)的广播通信时。具体来说,当发送的数据长度小于66字节,尽管接收缓冲区的大小与发送长度匹配,但依然会触发此错误,因为激活了 "周期发送总线参数" 功能,使得CP342-5模块周期性地以广播形式发送网络参数,这部分数据的长度固定为66字节。 PROFIBUS FDL采用SDN(Send Data with No Acknowledge)模式,这意味着接收端在没有确认请求的情况下会接收所有发送的数据,包括报文头和实际数据。报文头由四个字节组成,包含发送方的站地址等信息,这是PROFIBUS FDL广播通信的一个特性。当接收FC6 "AG_RECV" 时,由于收到的是两组数据,一组是8字节的实际数据和一组66字节的参数,导致系统识别目标区域过短,从而产生 "80B1H" 的错误状态。 解决这个问题有两条途径:首先,可以禁用 "周期发送总线参数" 选项,这样就不会周期性地发送额外的参数信息;其次,可以通过编程逻辑,在接收过程中检查并过滤掉前四个字节的报文头,只处理实际数据部分,从而避免错误的发生。这样可以确保FC6 "AG_RECV" 接收的数据与预期一致,避免状态字 "80B1" 的出现。 总结来说,理解FC6 "AG_RECV" 在PROFIBUS FDL广播通信中的行为以及其状态字含义对于调试此类问题至关重要。通过调整网络配置或优化程序逻辑,可以有效避免 "80B1" 状态字的显示,确保通信的稳定性和准确性。