指令 | 功能 | 数据流向 |
| 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通讯方式?遇到过什么坑?评论区聊聊。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!