两台 S7-1500 分别放在两个 TIA Portal 项目里,不能在同一张网络视图中直接选择对方。采用 BSEND/BRCV 时,重点不是合并工程,而是让两端的 S7 连接描述相互对应,再把发送指令与远端接收指令配成一对。 [1] [2]
下面面向已经会组态 CPU、编写循环程序的读者,先核对 PLC_1 → PLC_2 的一次五字节传输,再检查反向。界面取自 Siemens 的 TIA Portal V17 例程:1516 侧为 6ES7516-3FN01-0AB0,1510SP 侧为 6ES7510-1SJ01-0AB0,固件均为 V2.9。为便于区分,下文分别称为 PLC_1 和 PLC_2;原图两个项目中的 CPU 名称却都可能显示为 PLC_1,要结合项目和型号辨认。 [1]
这是一篇官方例程导读,不是本站已经跑通的仿真或实机教程。指令含义另以 STEP 7 V20(11/2024)帮助核对,涉及版本差异的地方单独说明;不展开跨网段路由、吞吐量优化或功能安全通信设计。
一、分开看连接角色和数据方向
“双边”表示双方都要有相应的组态与程序配合;一侧调用 BSEND,另一侧通过 BRCV 接收,并不要求每次都双向发送。“主动建立连接”则是连接角色:本例由 PLC_1 主动、PLC_2 被动,不能把被动侧理解成只允许接收数据。 [1] [3] [7]
编辑前先确认两侧的实际接口、IP 地址和项目归属。随后分别检查三件事:连接是否在线、一次发送与接收是否完成、业务逻辑拿到的是否为完整新数据。任何一层通过,都不能代替后面一层的判断。
二、在两个工程中配好连接的两端
1. 创建未指定伙伴连接,记录本地 ID
在 PLC_1 项目的设备和网络 → 网络视图 → 连接中选择 S7 连接,右键本机 CPU,执行“添加新的连接”。伙伴选“未指定”,本地接口选实际用于通信的接口;添加后应能在连接表中找到该对象。图 1 用于辨认创建入口,不是配置已经全部完成的证明。 [1]

不要混淆“未指定伙伴”和“单端组态”。未指定是说本工程没有远端设备对象;Configured at one end(单端组态)是另一项连接属性。V20 帮助明确说明,BSEND/BRCV 不能使用单端组态连接。创建后继续完成端点和特殊连接属性检查,不能停在创建对话框的初始状态。 [7]
选中连接,在“常规”中填写 PLC_2 的实际伙伴 IP;到“本地 ID”查看本机程序应引用的连接编号。原例程为 W#16#100,不是所有项目都必须使用这个值。修改 ID 前先确认现有通信块的引用关系。 [1] [7]

这一小步的核对结果应当具体到“哪一个本地接口、哪一个伙伴地址、哪一条本地连接”。接口或地址尚未确认时,先停在组态检查,不急着修改收发程序。
2. 核对 TSAP,不能只抄一个“10”
TSAP(传输服务访问点)描述连接端点。原例程的图 6 明确标出了取消 SIMATIC-ACC 勾选,并使用机架/插槽 0/1、连接资源 10、TSAP 10.01。界面的资源栏注明“十六进制”,这里的 10 不是“十条可用连接”。 [1] [6]

这组值用于读懂原 V17 示例,不能推广成所有 S7-1500 的固定参数。V20 帮助另列出 SIMATIC-ACC 形式,并说明 TSAP 结构与伙伴有关。实际工程显示不同结构时,先查同版本帮助和两侧生成的端点,不为贴合旧截图而强制改成 10.01。 [6]
3. 配置另一侧,交叉对照本地与伙伴
在 PLC_2 所属项目创建对应连接:本地接口属于 PLC_2,伙伴 IP 指向 PLC_1。本地 ID 仍引用本机连接,不要求两台 PLC 的数值必须相同;原例程只是恰好都使用 W#16#100。 [1] [2]
对照两端地址详细信息,检查PLC_1 本地 TSAP ↔ PLC_2 伙伴 TSAP,再检查PLC_2 本地 TSAP ↔ PLC_1 伙伴 TSAP。图 4 展示第二侧;图里的 PLC_1 名称属于它所在的另一个项目,不是要把伙伴错误地指回自身。 [1] [6]

最后进入各自连接属性的特殊连接属性 → 主动建立连接:本例 PLC_1 勾选,PLC_2 不勾选。逐侧确认实际状态,不依赖创建时的默认值。原例程文字与不同版本帮助对默认状态的表述并不完全一样,角色约定应以实际组态为准。 [1] [7]
三、连接在线后,再核对数据区
下载前:备份两侧工程,确认允许维护以及下载影响;测试数据区必须与设备启动、复位和危险输出隔离。原例程使用 F-CPU,但本篇只讨论普通 S7 数据交换,不把它作为功能安全通信方案。未取得设备维护授权时,停留在离线核对。
分别编译并下载两端相关组态,再查看网络视图中该 S7 连接的在线状态。官方例程用绿色图标展示已建立连接;这时只能进入程序检查,还不能宣告数据传输通过。连接未建立,就先查接口、伙伴地址、TSAP、角色及下载状态。 [1]

不应为了“先试通”而默认开启 Permit access with PUT/GET communication from remote partners(允许远程伙伴通过 PUT/GET 访问)。Siemens 的 V20 帮助说明,该许可关闭时,仍可使用需要双方组态或编程的 BSEND/BRCV;其他访问保护条件仍须按 CPU 与固件核对。 [8]
原例程为发送和接收各准备 Array[1..5] of Byte。先核对数组符号、元素类型和容量,再把它们接入指令;不要把截图里的 DB 编号和偏移地址直接搬到已有设备。下图显示的是 1516 侧的数据区。 [1]

图中 send_len、rcv_len 的声明为 Int;补查的 V20 指令参数表则把 LEN 列为 WORD、InOut。这里保留资料差异,不宣称类型可以跨版本直接互换。实际声明和接线应以所选指令接口为准,编译不通过时先解决类型问题,不继续下载试错。 [1] [3] [4]
四、按数据方向配对 BSEND 与 BRCV
ID 选择本机连接,R_ID 标识这条连接上的收发指令对:发送端与对应接收端必须匹配,不同指令对不能占用同一标识。原图 18、20 的关系如下;表中的 1、2 是十进制数,不是本地连接 ID。 [1] [2]
| 数据方向 | 对应的两个调用 | R_ID |
|---|---|---|
| PLC_1 → PLC_2 | PLC_1 的 BSEND ↔ PLC_2 的 BRCV | 1 |
| PLC_2 → PLC_1 | PLC_2 的 BSEND ↔ PLC_1 的 BRCV | 2 |
以十六进制表示,上述配对值分别为 DW#16#00000001、DW#16#00000002。实际项目要先检查是否已有其他指令对使用这些值;每个调用的 ID 则仍填所属 PLC 的本地连接引用。 [2]
1. 发送端:触发一次,继续调用到任务结束
原例程从 OB1 的指令 → 通信 → S7 通信 → 其它调用通信块。读图时先找到 ID、R_ID 和数据区,再看控制与状态端口。1516 侧的发送配对值为 1,接收配对值为 2。 [1]

BSEND.REQ 的上升沿启动发送,SD_1 指向发送区,LEN 给出本次发送字节数;V20 帮助中 LEN = 0 表示发送 SD_1 指定的整个区域,不是发送零字节。长度不得超出发送区。 [3]
只给一次触发沿,不等于只执行一次块调用。BSEND 可能需要多次调用才能完成分段传输。任务执行期间保持所用发送区稳定,检查 DONE、ERROR 和 STATUS,不要不断覆盖发送区或重复提交新任务。 [3] [5]
2. 接收端:完整收到以后,才交给应用
1510SP 侧的 BRCV 用 R_ID 1 对应前面的发送;它自己的 BSEND 用 R_ID 2 对应反向。两个方向分别看,不要把同一台 PLC 内的两个块当成一对。下图还保留了原例程各自的实例 DB,不能只复制块外观而漏掉实例。 [1] [2]

BRCV.EN_R = 1 时启用接收,RD_1 指定接收区;接收可能跨越多次调用,任务期间不能改动 RD_1。LEN 表示已经收到的字节数,只有 NDR = 1 才表示全部分段无误接收。不能因为 LEN 已非零就提前使用半包数据。 [4]
在下一次可能更新接收区的调用之前,按程序调度完成读取,或复制到应用工作区;涉及中断程序时还要协调并发访问。分别为发送长度、接收长度保留变量,不能让同一个 LEN 变量同时承担两种用途。 [4] [5]
完成标志也不适合只靠监控表“盯着看”。官方示例建议保存 DONE/NDR 的成功状态和有效接收长度;可以进一步记录完成次数与最近状态,但这属于测试记录建议,不是原图已经实现的功能。 [9]
五、用两组可辨认的数据验证两个方向
测试前再次确认数据区与真实控制命令隔离。原例程的 M0.0、M10.0 是其发送触发地址,不授权在现有设备上直接修改或强制这些位。使用本项目已确认用途的测试变量,且先让两端通信块按要求循环执行。 [1]
为了与原图对照,下面沿用官方示例的两组十六进制字节:正向 0A 0B 0C 0D 0E,反向 AA BB CC DD EE。这是样例数据与建议核对步骤,不是本次实际测试结果。 [1]
- 先测 PLC_1 → PLC_2。接收端 EN_R 已启用后,在 PLC_1 准备第一组数据并提交一次 REQ 上升沿;任务中继续调用,暂不修改这组发送数据。
- 核对一次完整接收。预期 PLC_1 出现发送完成,PLC_2 出现 NDR,保存的接收长度为 5 字节且五个字节全部相符。缺少其中任何一项,就保留诊断并转到第六节,不以“接收区有值”代替通过。
- 确认能够接到下一批新值。上一任务完成、对端继续调用并处理数据后,让 REQ 回到 0 且被调用识别,再准备下一次上升沿。换成另一组约定值,观察完成记录和接收内容确实更新。
- 再测 PLC_2 → PLC_1。使用反向 R_ID 配对和第二组数据,独立核对接收端、长度与内容。单向成功不代替反向测试;测试结束撤销临时触发,记录最终配置。
官方测试画面可以帮助确认左右方向和数组对应关系,但它不能替代当前设备的完成事件、长度和实测记录。 [1]

若继续做通信中断与恢复测试,应另行取得允许中断的维护条件。恢复后既要看连接,也要看新一轮完成事件;接收区保留旧值不等于收到新数据。正式应用还需要按项目要求定义更新序号、超时和旧命令处理,本篇五字节例程不包含这些业务保护。
六、在哪一层失败,就先检查哪一层
连接不在线时,先查双方连接描述是否下载、地址和端点是否对应。连接在线但收发未完成时,再保存具体指令名、ERROR、STATUS 和显示进制,用同版本帮助解释;不要仅凭 STATUS 非零就判定故障,也不要用取消访问保护替代诊断。 [3] [4] [8]
下面仅摘选与本篇路径直接相关的 V20 状态,不是完整错误码表。十六进制值由官方十进制值换算,比较时必须同时看 ERROR。 [3] [4]
| 指令与 ERROR | STATUS:十进制 / 十六进制 | 下一项检查 |
|---|---|---|
BSEND,ERROR = 1 |
3 / 16#0003 |
对端 R_ID 是否匹配,BRCV 是否已经调用。 |
BSEND,ERROR = 1 |
6 / 16#0006 |
对端是否因 EN_R 为 0 而禁用接收。 |
BSEND,ERROR = 1 |
7 / 16#0007 |
上次传输后,对端 BRCV 是否继续调用。 |
BRCV,ERROR = 1 |
4 / 16#0004 |
RD_1 类型、长度与接收区容量。 |
BSEND,ERROR = 0 |
11 / 16#000B |
旧任务仍忙,新任务未启动;不是新任务完成。 |
若 DONE/NDR 已出现,但业务仍拿到错误或陈旧数据,检查数据区的读写时机与并发访问。把两侧工程版本、连接参数、R_ID、实际长度、测试数据和诊断保存到同一份记录中;一次传输通过只证明这次测试条件,不代表正式业务的时序与异常处理已经验收。 [4] [5] [9]
资料来源
1. Siemens:S7-1500 之间 S7 双边通信(不同项目中)。TIA Portal V17 示例;§1.2~1.7、§2~3,原图 3、5、6、13、15、17、18、20、21;界面、环境和样例数据。
2. Siemens:Useful information about the instructions for S7 communication。STEP 7 V20,11/2024;Addressing parameters、Status parameter;ID、R_ID、参数供应与完成事件。
3. Siemens:BSEND: Send data in segments (S7-1500)。STEP 7 V20,11/2024;Functional description、Parameters、Parameters ERROR and STATUS;发送触发、发送区、长度及诊断。
4. Siemens:BRCV: Receive data in segments (S7-1500)。STEP 7 V20,11/2024;Description、Parameters、Parameters ERROR and STATUS;接收调用、长度和完整接收条件。
5. Siemens:Data consistency (S7-1200, S7-1500)。STEP 7 V20,11/2024;Ensuring data consistency;通信区与程序并发访问的边界。
6. Siemens:S7 connection — address details。STEP 7 V20,11/2024;Structure of the TSAP、TSAP structure, dependent on partner、Value ranges of connection resource;不把 V17 示例的 TSAP 写成通用默认值。
7. Siemens:S7 connection — general settings。STEP 7 V20,11/2024;Local ID、Special connection properties;单端组态与主动建连不是一回事。
8. Siemens:Restriction of communication services (S7-1500)。STEP 7 V20,11/2024;Permit access with PUT/GET communication from remote partners;PUT/GET 许可与 BSEND/BRCV 的区别。
9. Siemens:Program example for BSEND & BRCV。STEP 7 V20,11/2024;Behavior of CPU 1、Behavior of CPU 2;完成状态和有效接收长度的保存。
图片与权利说明:正文复用媒体库中与上述官方例程对应的 9 张截图,未生成或改绘软件界面。图中的设备名称、地址、参数和观察结果属于官方示例,不是本站现场记录。第三方图片权利归原权利人,不纳入本站原创文字的 CC BY-NC-SA 许可;本次未取得额外转载授权证明。
本次修订:以两端配对和一次完整传输为主线,补充原图中的 SIMATIC-ACC 设置、跨项目同名设备辨认、长度类型差异及分方向验证;删去重复的连接角色截图,不添加正文目录。资料版本与定位见上方,保留首次发布时间。
Comments NOTHING