为什么调用FC6 “AG_RECV”时会出现状态字”80B1”

n

1问题描述
使用CP342-5进行PROFIBUS FDL广播通信的时候,S7-300侧调用FC6 "AG_RECV"接收数据。当发送的长度小于66字节时,虽然FC6 "AG_RECV"的数据接收缓冲区长度和发送长度一致,还会出现错误,状态字显示为"80B1H"。查看STEP7帮助,含义为目标区域太短。具体现象如图1所示。n

为什么调用FC6 "AG_RECV"时会出现状态字"80B1"
图1 具体现象n

2错误原因
出现上面的现象是因为在PROFIBUS网络属性中激活了“周期发送总线参数”这个选项(见图2)。一旦激活了此选项,那么CP模板会周期性的以广播的方式发送PROFIBUS网络参数,而且这个广播报文的长度是66字节。由于PROFIBUS FDL广播通信是SDN(Send Data with No Acknowledge)方式,数据接收是无条件的。因此,FC6 "AG_RECV"会接到通信伙伴以广播方式发送的两组数据,一组是8字节的真正要通信的数据,另一组就是66字节的总线参数。所以才会出现"80B1H"目标区域太短的错误。n

为什么调用FC6 "AG_RECV"时会出现状态字"80B1"
图2 PROFIBUS网络属性n

3 解决办法
可以有两个办法解决此问题。
办法一:取消激活PROFIBUS网络属性页中“周期发送总线参数”这个选项。
办法二:通过程序对数据进行判断。PROFIBUS FDL广播通信有一个特点,那就是发送 数据的前四个字节作为报文头必须保留,系统会自动在里面加上数据发送方的信息。接收方通过接收到的数据的报文头可以判断出数据源。报文头的定义如下:
1) 第一个字节:PROFIBUS站地址
2) 第二个字节:LSAP
3) 第三个字节:常数W#16#7F表示SDN方式
4) 第四个字节:空
因此,可以直接将FC6 "AG_RECV"的接收数据缓冲区开到最大240个字节。这样,不论是实际的通信数据报文还是总线参数报文长度都允许。然后再通过程序判断,当接收到的报文头中发送方的站地址和LSAP与Netpro中数据发送方FDL广播连接配置一致时再将数据从缓冲区中复制出来(见图3,图4)。n

为什么调用FC6 "AG_RECV"时会出现状态字"80B1"
图3 FDL连接属性n

为什么调用FC6 "AG_RECV"时会出现状态字"80B1"
图4 程序处理n

关键词
CP342-5,FC6 "AG_RECV",FDL,广播,80B1n

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc327840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论