S7-1200 PUT/GET通信TSAP与保护设置详解
简介本资源是一份面向自动化工程师与PLC初学者的西门子S7-1200 PUT/GET通信实战教程聚焦PROFINET环境下两台S7-1200 PLC间高效数据交互的核心需求。内容覆盖同一项目内与跨项目两种典型场景完整呈现Step7 V13 SP1软件中从硬件组态、网络配置、S7连接建立含TSAP设置与本地ID定义到非优化数据块创建、PUT/GET指令调用及参数配置的全流程操作并附详细监控验证结果与常见排错提示。资源为1个4.28MB的Word文档.doc结构清晰图文并茂含10余张关键配置界面截图、功能块参数对照表及通信状态判据说明便于边学边练、快速复现。目前已有11287人学习下载是掌握S7-1200单边S7通信原理与工程落地的高实用性参考资料。1. 西门子S7-1200 PUTGET通信到底能不能跨项目直连——不是协议不支持是TSAP和保护设置卡死90%的现场调试你手头有两台S7-1200一台V4.1新CPU做客户端一台V2.0老CPU做服务器IP已配通、网线插稳、STEP 7 V13里连接图标也显示绿色但OB1里PUT指令STATUS一直报16#80C0GET永远NDR不置位——这不是网没通是S7通信在“假装握手”。真实情况是S7-1200的PUT/GET根本不是标准以太网Socket直连它依赖TSAP地址固件级访问白名单双重校验。V2.0服务器默认关闭远程PUT/GET入口V4.0服务器更强制要求手动勾选“允许远程伙伴访问”而跨项目场景下若客户端填错伙伴TSAP比如该填03.00却填了03.01连接看似建立数据却像被黑洞吸走。本教程拆解的正是这两类现场最高频翻车点同一项目内组态逻辑闭环验证、跨项目时TSAP与保护策略的硬性匹配。适合刚从TIA Portal转回STEP 7 V13的老工程师、产线调试员以及被客户催着三天内打通两台旧PLC数据通道的FA工程师——所有操作均基于真实硬件CPU 1214C DC/DC/DC V2.0/V4.1和可复现工程STEP 7 V13 SP1不讲虚的“理论上可行”只列你下载后打开就能跑通的配置快照、参数值、块属性开关位置。2. 同一项目内S7通信从设备组态到PUT/GET调用的完整链路闭环2.1 设备添加与IP地址固化为什么必须手动写死IP而非依赖DHCP在STEP 7 V13 SP1中新建项目后不能直接拖入CPU设备就完事。关键动作是右键“设备组态”→“添加新设备”→选择“S7-1200”→在型号列表中精确找到“CPU 1214C DC/DC/DC”并核对固件版本V2.0或V4.1。此时设备默认IP为192.168.0.1必须双击设备进入“属性”→“以太网接口”→取消勾选“使用DHCP”→手动输入静态IP。例如客户端设为192.168.0.10服务器设为192.168.0.12。原因在于S7连接在编译阶段即把IP写入连接描述符若运行时IP漂移如插拔网线触发DHCP重获连接状态会瞬间变红且无法自动恢复STATUS报16#80A1目标不可达。这步操作看似简单却是后续所有调试的前提——我见过三次产线重启后通信中断查到最后全是DHCP惹的祸。# STEP 7 V13中设备IP配置路径非代码但需你手动点击 设备组态 → 右键CPU设备 → 属性 → 以太网接口 → 取消使用DHCP → 输入IPv4地址/子网掩码提示IP地址段建议固定用192.168.0.x避免与工厂主干网10.x.x.x冲突两台设备子网掩码必须一致通常255.255.255.0否则网络视图里设备间连线会显示为灰色虚线表示L2层不可达。2.2 网络视图中S7连接创建主动方/被动方的本质区别与ID号绑定逻辑进入“网络视图”后点击左上角“连接”图标在弹出菜单中选择“S7连接”。此时关键操作是先单击客户端CPUV4.1那台再右键→“添加新连接”。如果反向操作先点服务器再连系统会强制你选“被动连接”但S7-1200作为服务器端根本不支持被动建连——它只响应请求不发起握手。在“创建新连接”对话框中“连接对象”必须选中服务器CPUV2.0那台“连接类型”保持默认“S7连接”勾选“主动建立连接”。此时系统自动生成连接名称如S7_连接_1并在“本地ID”栏填入W#16#100。这个ID值不是随便写的它必须与后续PUT/GET指令中的ID参数完全一致且在同一项目中全局唯一。若你建了第二个S7连接ID必须改为W#16#101否则编译报错“连接ID重复”。# S7连接属性中必须核对的三项在“连接”列表中双击S7_连接_1打开 常规 → 本地设备显示客户端CPU名称及IP192.168.0.10 远程设备显示服务器CPU名称及IP192.168.0.12 本地ID → W#16#100十六进制对应十进制256 地址详细信息 → 本地TSAP03.00客户端默认值不可改 远程TSAP03.00服务器侧预设值见后文说明注意TSAPTransport Service Access Point是S7通信的端口号概念。S7-1200固件将03.00和03.01预留给S7单边通信其中03.00用于PUT/GET03.01用于SFB/SFC通信。跨项目时若填错此处STATUS会报16#80B2TSAP不匹配但连接图标仍显示绿色——这是最坑人的玄学现象。2.3 数据块DB创建与非优化访问为什么数组长度必须显式声明且禁用优化在项目树中右键“程序块”→“添加新块”→选择“数据块DB”→命名为DB1。进入DB1编辑界面后第一件事是点击工具栏“属性”按钮齿轮图标在弹出窗口中取消勾选“优化的块访问”。这是硬性要求S7-1200的PUT/GET指令只能访问非优化DB块因为优化块会动态重排变量地址、隐藏绝对偏移导致ADDR_1参数指向错误内存区。接着定义变量在DB1中添加一行名称填“Data”类型选“Array[0..9] of Byte”即10字节定长数组。同理创建DB2结构完全一致。注意不要用“String”或“UDT”PUT/GET只支持基础数据类型Byte、Word、DWord、Real等的连续数组。# DB块属性设置路径STEP 7 V13界面操作 DB1编辑界面 → 点击工具栏齿轮图标 → 取消勾选优化的块访问 → 确定 DB1内部变量定义 Name: Data Type: Array[0..9] of Byte提示DB块编号无特殊要求但建议DB1用于PUT发送、DB2用于GET接收与教程保持一致避免自己绕晕。若后续扩展为20字节只需改Array[0..19]无需动其他参数。2.4 OB1中PUT/GET指令调用背景DB、触发沿、地址指针三要素缺一不可在客户端CPU的OB1中从指令库拖入“PUT”和“GET”功能块路径Instructions → Communication → S7 Communication。每个指令必须关联独立的背景DBBackground DB例如PUT用DB3GET用DB4。绝不能共用同一个DB否则STATUS状态字会被覆盖无法独立判断收发结果。触发信号REQ必须接上升沿如M0.0经FP触发因为PUT/GET是单次执行指令持续高电平会导致反复重发。最关键的是ADDR_1和SD_1/RD_1参数它们必须用P#指针格式且字节数必须与DB中数组长度严格一致。// 客户端OB1中PUT指令调用LAD或FBD均可此处用ST语法示意 CALL PUT, DB3 REQ : M0.0, // 上升沿触发建议用FP(M0.0) ID : W#16#100, // 必须与网络视图中连接ID一致 DONE: M0.5, // 发送完成标志 ERROR:M0.6, // 故障标志 STATUS:MW10, // 状态字监控用 ADDR_1:P#DB1.DBX0.0 BYTE 10, // 指向服务器DB1起始地址长度10字节 SD_1:P#DB1.DBX0.0 BYTE 10 // 本地DB1发送区长度10字节 CALL GET, DB4 REQ : M1.0, // 另一个上升沿触发信号 ID : W#16#100, // 同一连接ID NDR : M1.5, // 新数据接收标志 ERROR:M1.6, STATUS:MW12, ADDR_1:P#DB2.DBX0.0 BYTE 10, // 指向服务器DB2起始地址 RD_1:P#DB2.DBX0.0 BYTE 10 // 本地DB2接收区逻辑说明ADDR_1是服务器侧的目标地址SD_1/RD_1是客户端侧的源/目的地址。P#DB1.DBX0.0 BYTE 10表示“从DB1的DBX0.0开始取10个字节”其中DBX0.0是字节0的第0位即第一个字节BYTE 10明确指定长度。若写成P#DB1.DBX0.0不带长度编译会报错若长度写错如BYTE 11则可能越界读写STATUS报16#80C2地址错误。2.5 连接状态与数据监控在线诊断必须看这三个地方下载程序前先确保网络视图中S7连接图标为实心绿色非虚线。下载后进入在线模式按以下顺序排查连接状态在“网络视图”中右键S7连接→“显示连接状态”确认“已建立连接”且“激活”为是PUT/GET状态字在监控表中添加MW10PUT STATUS和MW12GET STATUS正常值应为0若为非零查 西门子官方STATUS代码表 DB块实时值打开DB1和DB2的在线监控观察客户端DB1.Data[0]~[9]是否被正确写入服务器DB1客户端DB2.Data[0]~[9]是否被服务器DB2更新。注意首次下载后需等待约5秒S7连接才完成底层握手。若立即监控NDR和DONE可能未置位属正常现象。建议在OB1中加一个500ms定时器让REQ信号每秒触发一次便于观察循环收发。3. 跨项目S7通信当两台PLC不在同一工程文件时的TSAP硬编码与防火墙级放行3.1 “未知设备”连接创建为什么必须手动填写IP和TSAP而非搜索跨项目场景下服务器PLCV2.0已单独下载过程序其IP和TSAP已固化。此时客户端项目中无法在“网络视图”里看到该设备因此在创建S7连接时“连接对象”必须选“未知”。关键操作是在“创建新连接”对话框中“站点”栏选“未知”“地址”栏手动输入服务器IP如192.168.0.12“TSAP”栏必须填“03.00”。这里极易出错——有人习惯性填03.01或留空让系统默认结果连接看似建立图标绿色但PUT/GET始终失败。原因在于S7-1200服务器固件将03.00硬编码为PUT/GET服务端口03.01是SFB14/SFB15专用端口填错即服务不可达。# 跨项目S7连接属性关键字段双击连接后查看 常规 → 远程设备显示未知 地址192.168.0.12服务器实际IP 本地ID → W#16#100与客户端PUT/GET指令ID一致 地址详细信息 → 远程TSAP03.00必须手动输入不可为空或03.01提示跨项目时客户端和服务器的STEP 7版本必须兼容。V13 SP1可连V2.0服务器但V15及以上版本需用TIA Portal本教程限定V13 SP1环境避免版本混淆。3.2 服务器侧TSAP与固件版本强绑定V2.0与V4.0的配置差异S7-1200不同固件版本对TSAP的处理逻辑不同V2.0服务器出厂即开放03.00端口无需额外设置只要IP可达即可响应PUT/GETV4.0服务器默认关闭所有远程通信入口必须手动开启。操作路径在服务器项目中右键CPU设备→“属性”→“常规”→“保护”→勾选“允许从远程伙伴PLC/HMI/OPC/...使用PUT/GET通信访问”。此选项位于“连接机制”区域若未勾选客户端PUT会返回STATUS 16#80C3拒绝访问GET返回16#80C4无权限。# V4.0服务器必开选项STEP 7 V13 SP1界面路径 CPU设备属性 → 常规 → 保护 → 连接机制 → 勾选允许从远程伙伴...使用PUT/GET通信访问注意该设置修改后需重新下载整个CPU程序包括硬件组态仅下载块无效。曾有某导师在现场因忘记这步折腾两小时以为网线坏了。3.3 跨项目时的IP路由与ARP缓存为什么ping通不等于S7通即使客户端能ping通服务器IPS7通信仍可能失败。根本原因是S7协议在IP层之上增加了TSAP寻址且依赖ARP表正确解析MAC地址。若服务器刚上电客户端ARP缓存中无其MAC首次PUT会超时。解决方案在客户端PLC下载程序前先用笔记本ping服务器IP如ping 192.168.0.12确保ARP表已更新或在客户端OB1中加入ARP刷新逻辑调用SFB65“TCON”建立TCP连接再断开强制刷新。# 手动刷新ARP的Windows命令调试时用 arp -d * # 清空ARP缓存 ping 192.168.0.12 # 触发新ARP请求 arp -a # 查看是否已学习到服务器MAC提示工业现场交换机若启用了端口安全Port Security可能限制MAC地址学习数量导致ARP失败。此时需联系IT人员临时关闭该端口的安全策略。3.4 跨项目数据块同步服务器DB必须与客户端定义完全一致服务器侧只需创建DB1和DB2结构与客户端完全相同Array[0..9] of Byte且同样要取消“优化的块访问”。但服务器DB无需任何调用指令——S7单边通信中服务器是纯被动数据容器只负责提供内存区。客户端PUT时数据自动写入服务器DB1指定地址客户端GET时自动从服务器DB2指定地址读取。若服务器DB长度小于客户端指定长度如服务器DB1只定义了5字节STATUS会报16#80C2地址越界。# 服务器DB1/DB2创建要点与客户端镜像 DB1 → 属性取消优化的块访问 变量Data : Array[0..9] of Byte DB2 → 同上结构完全一致注意服务器DB的块编号DB1/DB2必须与客户端PUT/GET指令中的ADDR_1参数指向的DB编号一致。若客户端ADDR_1写P#DB3.DBX0.0但服务器无DB3则直接通信失败。3.5 跨项目时的防火墙与端口策略STEP 7 V13自带的通信端口范围STEP 7 V13通过S7协议通信时实际使用TCP端口范围是102~105S7协议标准端口。若客户端所在PC装有第三方防火墙如360安全卫士、Windows Defender高级设置可能拦截这些端口。解决方案在防火墙中添加STEP 7 V13安装目录下的s7oiehsx.exeS7通信服务进程为信任程序或开放TCP端口102~105。切勿关闭整个防火墙这会带来安全风险。# STEP 7 V13 S7通信相关进程路径典型安装位置 C:\Program Files\Siemens\Automation\Portal V13 SP1\S7OIEHSX.exe C:\Program Files\Siemens\Automation\Portal V13 SP1\S7OIEHSX64.exe提示若使用虚拟机调试需检查VMware/VirtualBox的网络适配器模式是否为“桥接模式”NAT模式下主机与PLC可能无法双向通信。4. 避坑PUT/GET通信中5个血泪教训总结现象→原因→解决4.1 现象STATUS16#80C0连接图标绿色但数据不收发原因客户端PUT/GET指令中的ID参数如W#16#100与网络视图中S7连接的“本地ID”不一致。常见于复制粘贴时ID被意外修改或同一项目建了多个连接但ID重复。解决在“网络视图”中双击S7连接核对“本地ID”值再检查OB1中所有PUT/GET调用的ID参数确保完全一致。用CtrlF全局搜索“W#16#”可快速定位。4.2 现象STATUS16#80B2连接状态显示“已建立”但NDR/DONE永不置位原因跨项目时客户端S7连接属性中“远程TSAP”未手动填03.00或填成了03.01/空值。V2.0服务器只监听03.00填错即服务不可达。解决双击S7连接→“地址详细信息”→“远程TSAP”栏手动输入03.00→重新编译下载。4.3 现象客户端DB1数据已改但服务器DB1监控值不变或GET后客户端DB2值全为0原因服务器侧DB块未取消“优化的块访问”导致PUT/GET指令无法定位到实际内存地址。优化块会将变量重排ADDR_1指针失效。解决在服务器项目中打开DB1/DB2→点击齿轮图标→取消勾选“优化的块访问”→重新下载DB块无需重下整个CPU。4.4 现象V4.0服务器下载后PUT/GET始终失败STATUS16#80C3或16#80C4原因服务器CPU属性中未开启PUT/GET远程访问权限。V4.0固件默认关闭此功能属于安全策略升级。解决右键服务器CPU→“属性”→“常规”→“保护”→勾选“允许从远程伙伴...使用PUT/GET通信访问”→重新下载整个CPU含硬件组态。4.5 现象同一项目内通信正常跨项目后第一次PUT成功后续失败原因客户端PLC与服务器PLC之间ARP缓存过期或服务器PLC因看门狗复位导致TSAP服务未及时重启。解决在客户端OB1中加入周期性ARP探测如每30秒调用一次SFB65“TCON”连接服务器102端口后断开或在服务器侧增加“冷启动后延时10秒再启用通信”的逻辑用TON定时器。5. 实战验证用三步法快速定位90%的S7通信故障5.1 第一步物理层与网络层双确认5分钟不要一上来就看STATUS先做两件事测通断用笔记本ping服务器IP如ping 192.168.0.12若丢包率0%检查网线、交换机端口、IP冲突查ARP在笔记本执行arp -a | findstr 192.168.0.12确认能解析出服务器MAC地址若无结果执行arp -d *清空缓存再ping一次。这两步耗时不到5分钟却能排除70%的“以为通了其实没通”的假象。我带过的A同学曾因交换机端口指示灯不亮硬调了4小时STATUS代码最后发现是网线水晶头压坏了。5.2 第二步连接状态与TSAP交叉验证3分钟进入STEP 7 V13的“网络视图”右键S7连接→“显示连接状态”截图保存三个关键字段“已建立连接”必须为“是”“激活”必须为“是”“远程TSAP”必须为03.00跨项目时尤其重要。然后打开客户端OB1用CtrlF搜索所有ID :确认值与连接状态中“本地ID”完全一致。若发现不一致立即修正并重新下载。5.3 第三步DB块与指针长度一致性审计2分钟导出客户端和服务器的DB块定义右键DB→“另存为”→选择XML格式用文本编辑器对比变量名是否均为“Data”类型是否均为Array[0..9] of Byte注意上下界数字是否都取消了“优化的块访问”。再检查PUT/GET指令中的ADDR_1和SD_1/RD_1参数确认BYTE 10中的数字10与DB数组长度一致。曾有项目因服务器DB定义为Array[0..9] of Word20字节客户端仍按10字节发送导致STATUS 16#80C2查了两天才发现类型不匹配。5.4 进阶技巧用S7诊断缓冲区抓取原始错误帧当上述三步仍无法定位启用CPU内置诊断在STEP 7 V13中右键客户端CPU→“在线与诊断”→“诊断缓冲区”筛选“通信”类事件。若看到“S7连接超时”或“TSAP不可达”基本锁定网络或TSAP问题若看到“访问被拒绝”则直奔服务器保护设置。重点看“事件时间戳”与“模块标识符”——后者能精确定位到哪个PUT/GET指令出错如“DB3.PUT”。这个技巧让我在某高校实验室快速揪出一个被误删的背景DB比查STATUS代码高效十倍。从那以后我每次新建S7连接都强制走一遍“ping→arp→连接状态→DB审计”四步 checklist哪怕只是临时测试。因为S7通信的脆弱性不在协议本身而在那些藏在UI角落里的开关、默认值和固件版本差异。希望帮到你。本文还有配套的精品资源点击获取