我现在碰到一个问题, S7 300 和 S7 400 通讯问题。首先我来描述一下问题:
1、 S7 300 和 S7 400 PLC建立S7 连接。
2、 S7 300 调用库函数 FB35 往 S7 400 发送数据, S7 400 通过 SFB14 接收数据。如下两图是
程序的最初状态。

上面是400里面的程序。

上面是300里面的程序。
DB13是 300 PLC里面的块
DB141是 400 PLC里面的块
3、 现在我遇到一个问题, 就是我需要增加通讯的数据量, 从 34 字节增大到 72 字节。 我在DB13、DB141里面分别增加对应的数据, 增加的长度和类型完全一致。
我就将 P#db13.dbx0.0 byte 34 ----> P#db13.dbx0.0 byte 72
p#db141.dbx0.0 byte 34 ----> p#db141.dbx0.0 byte 72
然后下载程序,监控发现300里面状态正常, 400里面SFB14的 NDR引脚一直为0, 且Error一直在0和1之间闪烁。 400不能正常的接收数据。
然后我将 byte 72 改成 48 通讯成功。
4、接下来我就打西门子热线,说是 SFB14/SFB15、FB34/FB35的最大通讯数据量为160字节, 然后我就将程序修改成如下形式。

修改后的400的PLC程序, 调用SFB14

修改后的300 PLC通讯程序 调用 FB35,
改成上面的情况后, 400 PLC里面可以正常的接收数据, 但是存在一个问题,就是400 PLC程序
里面SFB 14 的反馈的状态不对, Error 一直在闪烁, 0 和 1 之间跳变。 而且返回的状态status的值
没有手册里面的值, 出现了 16#19的值。如下图所示。

5、 现在我又将程序恢复到最初的状态,结果现在通讯也不正常啦。 在300 PLC里面一直正常,
而在400 PLC里面 SFB 14的 Error 一直闪烁, 而status 则会出现很多其他的状态,比方说
上面的 16#19 这个状态。
6、不知道有没有人对这个比较了解的,为什么会这样,还有就是可以确定的是DB13、DB141的数据类型和长度完全一样, DB13 == DB141 。
7、现在不能改成其他通讯 有没有人遇到过这样的情况。
求指教。
8、顺便说一句,原程序是西门子公司的人开发的。