『7x24小时有问必答』
搞西门子PLC的人,迟早要和S7通讯打交道。
两台PLC要交换数据,你兴冲冲打开博途,结果发现:
PUT、GET、TSEND、TRCV、BSEND、BRCV、TCON、TDISCON……
指令一大堆,单边双边分不清楚,DB块优化非优化搞不明白,连接ID、TSAP、本地远程——一头雾水。更崩溃的是:通讯连不上。
查了一下午,最后发现是服务器端忘了勾选"允许远程PUT/GET访问"  。

一、先搞清楚:S7通讯到底是什么?

S7通讯是西门子S7系列PLC之间的一种专有通讯协议,基于MPI、PROFIBUS或以太网传输,是西门子生态里最"亲儿子"的通讯方式。
可以把它理解为:两台西门子PLC之间的"内部电话"。
不用走Modbus那种"通用但笨重"的路线
不用走OPC UA那种"高级但复杂"的路线
直接在博途里拖指令、配参数,就能跑起来
但S7通讯内部,其实分了两种完全不同的模式
模式
角色关系
典型指令
谁编程
单边通讯
客户端/服务器
PUT / GET
只有客户端编程
双边通讯
伙伴/伙伴
BSEND/BRCV 或 TSEND_C/TRCV_C
双方都要编程

很多人混淆这两种模式,导致通讯配半天连不上。记住一句话:单边是"我读你",双边是"咱俩商量着来"。

二、单边通讯(PUT/GET):80%的场景用它就够了

2.1 什么是单边通讯?

单边通讯 =  只有客户端主动发起读写,服务器端被动接受,不用写任何代码。打个比方:
你去餐厅吃饭。你(客户端)看菜单点菜、叫服务员加水——这些都是你主动发起的。餐厅(服务器)只需要把菜准备好、把水备好,不需要主动找你说话。
这就是单边通讯的本质:客户端说了算,服务器只管准备好数据。

2.2 PUT和GET分别干什么?

指令
功能
数据流向
PUT
把本地数据写到对方
本地 → 远程
GET
从对方读取数据到本地
远程 → 本地

注意一个关键点:  PUT/GET是同一个连接上同时进行的,不需要建两条连接。就像一条双向车道,去和回走的是同一条路。

2.3 实操步骤(以S7-1200对S7-1200为例)

第一步:开权限(最容易忘!)
双方CPU → 设备组态 → 属性 → 防护与安全 →  勾选"允许来自远程对象的PUT/GET通信访问"
️ 这一步不勾,后面全白配。S7-1200默认关闭此选项,出于安全考虑。
第二步:组态S7连接
网络视图 → 点"连接"图标 → 选"S7连接" → 选中客户端CPU → 右键"添加新的连接" → 选择服务器CPU → 勾选"主动建立连接"
连接建好后,记住本地连接ID(默认W16100),后面编程要用。
第三步:准备DB块(必须非优化!)
在双方各建一个DB块,右键 → 属性 →  关闭"优化的块访问"
为什么?因为PUT/GET指令用的是绝对地址寻址(PDB1.DBX0.0 BYTE 10),优化DB块没有固定偏移量,指令找不到地址。
第四步:编程
在客户端OB1中调用PUT和GET:
第五步:下载、诊断
分别下载到两台CPU,点击PUT/GET指令上的诊断图标,确认连接已建立。

2.4 单边通讯的限制

限制项
说明
单次最大数据量
240字节
(S7-1200/1500),分段可更大但效率低
服务器端能力
只能被动,不能主动推送
安全性
较弱——客户端可以直接写服务器数据,无确认机制

一句话总结:  数据量不大、单向采集为主、追求快速部署 → PUT/GET搞定。

三、双边通讯(BSEND/BRCV):大数据量和双向交互的正确答案

3.1 为什么需要双边通讯?

单边通讯有个"隐患":客户端不经过对方同意,就能改对方的数据。
这在某些场景是危险的。比如产线A往产线B写互锁信号,B根本不知道A什么时候写、写了什么,万一数据错位呢?
双边通讯就是为了解决这个问题:一方发数据(BSEND),另一方必须主动接收(BRCV),数据才能落地。打个比方:
单边通讯是"快递直接扔你家门口"。双边通讯是"快递员到了,你得签收,东西才算送到"。

3.2 双边通讯的核心特点

特点
说明
双方都要编程
发送方调BSEND,接收方必须调BRCV
数据量大
单次可传输大数据(理论无上限,受CPU内存限制)
数据分段传输
长数据自动分包,接收方自动重组
双向对等
连接建立后,双方都可以主动发送
更安全
接收方不编程,数据就落不了地

3.3 双边通讯的指令配对

发送指令
接收指令
说明
BSEND
BRCV
S7双边通讯(S7-300/400经典方案)
USEND
URCV
无连接双边通讯(不常用)

BSEND/BRCV 必须成对出现。  一方调了BSEND,另一方必须同时调BRCV,否则数据传不过去。

3.4 实操要点

第一步:组态双边S7连接
和单边不同,双边连接需要双方都配置连接
在连接属性中,取消勾选"单向"
一端勾选"主动建立连接",另一端不勾选
双方都要编译下载
第二步:编程

3.5 单边 vs 双边,到底选哪个?

对比维度
单边(PUT/GET)
双边(BSEND/BRCV)
编程复杂度
低,只编客户端
高,双方都要编
单次数据量
≤240字节
可达数千字节
安全性
弱,可直接写对方
强,需对方配合接收
服务器端停机影响
不影响服务器运行
双方都要在线
适用场景
数据采集、监控、HMI透传
大数据传输、双向互锁、协同控制

选型口诀:小数据看监控用PUT/GET,大数据双向联动用BSEND/BRCV。

四、S7-1200/1500的新选择:OUC开放式通讯

从S7-1200开始,西门子引入了OUC(开放式用户通信)  ,本质上是基于标准TCP/IP的通讯方案。

4.1 OUC的指令族

指令
功能
TCON
建立连接(TCP/UDP/ISO-on-TCP)
TSEND_C
发送数据(带连接管理)
TRCV_C
接收数据(带连接管理)
TDISCON
断开连接

4.2 OUC vs 传统S7通讯

对比维度
S7通讯(PUT/GET、BSEND/BRCV)
OUC(TSEND_C/TRCV_C)
协议基础
西门子专有S7协议
标准TCP/UDP/ISO-on-TCP
连接方式
博途网络视图组态
程序块内动态建连(TCON)
跨网段
有限制
TCP天然支持路由
与非西门子设备通讯
不支持
支持(TCP/UDP通用协议)
连接资源
固定预留
动态分配,可释放
编程难度
中等
较高(需手动管理连接生命周期)

OUC的优势在于灵活:  可以动态建连、断连,适合连接大量设备但不同时通信的场景。比如你的PLC要和10台设备通信,但同一时刻只和2台交互——OUC可以复用连接资源,S7通讯则不行。

五、通讯不上的排查清单,配了半天通讯不通?按这个顺序查:

排查顺序
检查项
常见错误
物理网络
IP不在同一网段、网线没插好、交换机VLAN隔离
PUT/GET权限
服务器端没勾"允许远程PUT/GET访问"
DB块类型
用了优化DB块,PUT/GET找不到地址
连接ID
编程中的ID和组态中的本地ID不一致
时钟存储器
没启用时钟存储器,REQ没有上升沿触发
连接诊断
连接根本没建立(看诊断图标)
地址范围
ADDR/SD/RD地址超出DB块实际长度
固件版本
S7-1200 V1.0不支持PUT/GET,需升级到V2.0+

排查口诀:先量线,再对表,查权限,看连接,验地址。

六、S7通讯其实没那么复杂,核心就三条路:

很多人卡在"配不上",其实不是技术难,是细节没到位:
权限忘了勾
DB块用了优化
连接ID对不上
触发位没有上升沿
这些坑,每一个都值得你在第一次调试时多花30秒检查。
通讯这东西,配对了就是通的,配错了就是不通的——没有中间状态。所以,别急,按步骤来。
你目前在用哪种S7通讯方式?遇到过什么坑?评论区聊聊。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码