拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

西门子S7通信TSAP配置详解:从默认值到手动修改

西门子S7通信TSAP配置详解:从默认值到手动修改 搞自动化通信的老伙计们对TSAP应该不陌生这词儿听着简单但它坑起人来是真不含糊。我最早被TSAP折腾是在一套S7-300的旧产线上PLC程序下载好、IP地址也能Ping通可上位机就是怎么都连接不上连西门子自己的Step7都在线一会儿断一会儿后来一查通讯处理器里的TSAP参数跟我上位机组态里填的对不上。那时候就意识到TSAP配置这玩意儿平时不起眼关键时刻能卡住整个项目的调试进度。这篇东西我就围绕西门子S7通信里的TSAP从默认值到手动修改把原理、实操和排障思路一次讲透。适合正在学S7通信的PLC程序员、做上位机集成的工程师以及所有被S7连接失败折磨过的现场调试人员。看完你会知道TSAP那个参数到底在说什么为什么要改它以及各系列CPU在改法上的区别。1. TSAP到底是什么——先别急着改参数很多人一上来直接问“TSAP怎么改”然后照着网上零星教程把02.00改成03.00结果照样连不上原因就是没搞懂TSAP在S7通信里扮演的角色。所以这一节我们先不讲改先讲清楚它是什么。1.1 从“端口102”说起S7通信的寻址链条西门子S7 PLC的以太网通信走的是ISO-on-TCP协议TCP端口固定是102。与传统Modbus TCP直接走TCP端口不同S7协议在TCP之上加了一层面向连接的封装这一层引用了RFC1006协议规范它的作用是在TCP流中提供消息边界和会话管理。问题在于一台PLC有CPU、有通讯处理器CP、有HMI连接、有编程器连接大家都走TCP 102端口进来PLC怎么区分这些连接分别是谁发起的这就需要TCP端口之上的额外寻址层。RFC1006协议就定义了一个叫做“传输选择器”Transport Selector的字段用来标识上层的服务访问点。这里的“传输选择器”就是TSAP。TSAP的全称是Transport Service Access Point翻译过来是“传输服务访问点”。你可以把整个寻址链条理解成IP地址负责找到PLC这张网卡TCP 102端口负责找到PLC里的ISO-on-TCP服务而TSAP负责在ISO-on-TCP服务之上找到具体的通信伙伴。缺了任何一环连接都建立不起来。1.2 TSAP的两个字节里藏着什么TSAP在实际参数配置里看起来像是“03.01”这种格式两个字节用点号分隔。很多人搞不明白这两个字节分别代表什么这里拆开看。第一个字节叫“资源标识符”Resource Identifier它标志着连接请求来自哪类设备或服务。0x01一般代表编程设备PG0x02代表操作员面板OP/HMI0x03代表S7基本通信比如CPU与CPU之间的通信。第二个字节是“字符串标识符”用于区分同一资源下的不同连接实例。所以03.01的意思就是“S7基本通信的第一个连接”03.02就是“S7基本通信的第二个连接”02.01是“HMI的第一个连接”01.00是“编程设备的默认连接”。理解了这层逻辑后面自定义修改才不会瞎填。还有一个细节值得注意很多人在搜索引擎里把TSAP打成“TASP”结果搜出来一堆无关内容。TSAP不是TASP字母顺序别搞反了找资料的时候用TSAP作为关键词才准。1.3 TSAP配对的核心规则TSAP配置的关键不是单独看一端而是看两端是否配对。S7通信建立连接时客户端会发一个连接请求帧里面携带“本地TSAP”和“远程TSAP”两个字段服务器收到请求后会检查这两个字段是否与自己配置的一致。这里的配对规则是客户端填写的本地TSAP必须等于服务器端认为的“对方TSAP”客户端填写的远程TSAP必须等于服务器端自己的本地TSAP。听起来绕实际很简单假设PLC侧的本地TSAP是03.01上位机侧的远程TSAP就要填03.01上位机侧的本地TSAP是03.02那PLC侧看上位机这个连接时也要对应03.02。也就是说TSAP两侧要镜像匹配不能只改一方。现场最常见的错误就是只改了PLC或只改了上位机导致握手时报“TSAP不匹配”错误。另外还要注意TSAP配置里出现的是十六进制数值03.01就是0x0301不是十进制3.1。有些软件界面会直接显示十六进制格式有些会帮你转成点分形式看的时候要留意。2. 各大系列CPU的默认TSAP速查与差异西门子旗下S7-200 SMART、S7-300/400、S7-1200/1500这几大系列虽然都叫S7但TSAP的默认值和开放程度完全不一样。这一节把各系列的默认TSAP整理出来并说明各自在配置权限上的差异。2.1 S7-200 SMART固定02.00基本不用动S7-200 SMART是西门子中小型PLC的主力它的以太网通信和200系列老产品已经完全不同。在Micro/WIN SMART编程软件里通过向导配置S7通信时TSAP字段通常被隐藏起来由系统自动分配为02.00。本地连接资源固定02.00远程伴侣固定01.00。这算是一个半自动的机制用户不需要去理解TSAP只要按照向导填写IP地址和传输区域即可。就算是第三方上位机通过S7协议去读S7-200 SMART的数据对应的远程TSAP也基本都是写01.00本地TSAP写02.00。这个系列的TSAP基本不是问题点只要照抄默认值就行。不过需要注意S7-200 SMART在同时建立多个S7连接时每个连接的TSAP其实会自动递增。虽然界面不展示但如果你用抓包工具查看会看到第一个连接的本地TSAP是02.00第二个连接就可能是02.01。这也是为什么有些上位机软件需要在连接参数里手填TSAP时反而容易填错的地方。2.2 S7-300/400默认03.01可以改也最常改S7-300/400这代产品是TSAP配置的重灾区。老款CPU的以太网接口不是你今天看到的RJ45网口直接集成在CPU上大多数是通过CP343-1、CP443-1这类通讯处理器扩展出来的。在这些通讯处理器的组态里TSAP是可以被显式配置的。S7-300/400在Step7 V5.x里的默认TSAP一般是03.01但在某些CPU固件版本和通讯处理器固件版本组合下默认可能是03.00或者03.02。这就是为什么网上有人照抄03.01成功了有人没成功——因为他们用的硬件版本不一样。在TIA博途里组态S7-300/400时默认TSAP同样是03.01但如果项目里做了多个S7连接每个连接的TSAP会顺序分配成03.01、03.02、03.03这样。S7-300/400允许用户在组态界面手动修改这些值所以这也是自定义TSAP修改最常遇到的系列。2.3 S7-1200/1500系统自动管理改的入口有限到了S7-1200/1500时代TSAP这类细节被大幅简化。CPU集成了以太网接口编程组态全部走TIA博途默认情况下TSAP由系统自动分配本地TSAP通常是03.01远程TSAP是03.02。这里的“远程TSAP是03.02”不是固定的而是根据通信伙伴自动生成的。比如你用TIA博途自带的在线诊断连S7-1200系统会临时分配一个动态TSAP等断开后自动释放。S7-1200/1500的S7通信连接资源由系统统一管理用户在界面上能看到TSAP值但一般不让手动修改也不需要改。这个设计说实话比S7-300/400时代省心太多但副作用是一旦第三方上位机软件需要手填TSAP去连S7-1200/1500很多人反而不知道填什么。这时候就记住本地TSAP统一填03.01远程TSAP统一填03.02基本不会错。2.4 默认TSAP速查总表为了方便现场快速查询我这里整理了一张常见的默认TSAP速查表PLC系列组态环境本地TSAP远程TSAP能否自定义S7-200 SMARTMicro/WIN SMART02.0001.00不开放系统自动S7-300/400Step7Step7 V5.x / NetPro03.0103.01可以手动改S7-300/400TIATIA博途03.0103.02可以手动改S7-1200/1500TIA博途03.0103.02通常不开放修改注意上表中S7-300/400的远程TSAP在不同组态环境下显示不一样这其实跟组态软件内部的连接资源分配机制有关但真实通信时只要两侧镜像匹配就能正常建连。这张表不是让你死记硬背而是让你在配置前先有个底当前项目用的是哪个系列TSAP大概在哪个范围。3. 从默认到自定义TSAP修改的完整实操理解默认值只是第一步真正考验人的是“自定义修改”。这一节围绕为什么改、怎么改、改完要注意什么一条龙讲清楚。3.1 为什么非要改TSAP——三个真实场景先看场景一一套S7-300系统CPU里跑着S7通信同时还有一台HMI触摸屏和一个WinCC上位机都要去访问同一块数据区。默认情况下HMI和WinCC都用03.02这个TSAP结果就会冲突第二个设备连不上。这时候必须把其中一个连接改成03.03或者03.04错开资源标识。场景二S7-300/400 PLC之间做S7通信CPU A作为客户端去读CPU B的数据。CPU A的本地TSAP占03.01远程TSAP填CPU B的03.01但CPU B同时还要被编程器连接编程器默认也占用03.00。如果两边没协调好CPU B就会拒绝CPU A的连接请求。这时候只能把CPU A这个连接的远程TSAP改成CPU B的03.02让开编程器的资源。场景三第三方上位机比如用S7通信协议库开发的自主软件需要同时建立多个S7连接。每个连接在PLC侧占用不同的TSAP如果不修改PLC的连接资源很快就被重复的TSAP占满。所以必须在组态里给每个连接分配合法的TSAP。这三个场景其实暴露了TSAP修改的核心目的在同一个PLC上用不同的TSAP区分不同的通信伙伴实现多连接协同工作而不互相冲突。3.2 TIA博途里修改S7-300/400的TSAP重点TIA博途环境下修改S7-300/400的TSAP是整个流程里最核心也最容易被界面细节绊住的操作。我一步步说。第一步打开项目进入“网络视图”。在左侧项目树里双击“设备与网络”进入网络视图界面。此时你应该能看到PLC_1、HMI_1和其他设备之间的连线。第二步建立S7连接。如果还没有创建连接从右侧的“连接”标签里拖拽一个“S7连接”到PLC_1和上位机或者另一台PLC之间。弹窗里选“S7连接”类型。第三步双击连接线打开“连接属性”。这里需要重点看两个区域“本地端点”和“伙伴端点”。每个区域下面都有“地址”和“TSAP”字样。第四步在“伙伴端点”里把“TSAP”从默认值手动改成你需要的值。比如原来是03.02改成03.03。需要注意TIA博途里TSAP的输入框可能不是直接让你输入“03.03”这种点分格式而是分别填“资源标识符(十六进制)”和“字符串标识符(十六进制)”两个框前者填03后者填03效果就等于03.03。第五步编译并下载到PLC。下载完成后去上位机侧把对应连接参数的TSAP改成一样然后测试连接。这里有个经验要点在TIA博途里修改TSAP时如果“伙伴端点”栏是灰色不可编辑状态通常是因为连接类型选错了。S7连接和HMI连接对TSAP的开放程度不同HMI连接往往只能选预定义值而S7连接可以自由输入。3.3 Step7 V5.x环境下的NetPro改法老项目里还在用Step7 V5.x的人不少这个环境的TSAP修改跟TIA博途不太一样它的入口在NetPro网络组态工具里。打开项目后选中PLC站点点击“硬件组态”进入HW Config双击通讯处理器CP343-1或CP443-1的属性对话框切换到“属性”选项卡你会看到“地址”参数其中就包含TSAP。这里可以直接输入新的TSAP值。改完后编译保存系统会提示你刷新NetPro里的连接返回NetPro重新生成连接数据确认两侧TSAP一致后就能下载。Step7 V5.x的TSAP修改更底层灵活性更大但坑也更多。因为NetPro里连接是逻辑的实际物理路由在HW Config里两边都得改漏掉一边就会出现组态在线不一致的报错。改完以后建议做一个“编译所有块”和“将组态下载至PLC”的完整操作别只下CPU通讯处理器也要一起下。3.4 上位机侧怎么与PLC侧保持一致PLC侧改好只是完成一半上位机侧如果没跟上照样连不上。西门子自家的WinCC、WinCC OA、HMI面板以及第三方软件比如用LibNoDave、Snap7这类开源库开发的程序都有各自的TSAP配置入口。WinCC里通常在变量管理器的S7协议组里新建连接时可以看到“TSAP”字段默认值可能是03.01或03.02你需要手动改成与PLC侧镜像匹配的值。Snap7这类库在连接函数里通常通过TSAP变量传入比如Cli_ConnectTo函数里修改remoteTSAP参数即可。关键规则再强调一遍客户端本地TSAP 服务端视角的客户端TSAP客户端远程TSAP 服务端的本地TSAP。实际操作中最简单的方法就是全程只改“远程TSAP”让“本地TSAP”保持默认值。比如PLC侧本地TSAP是03.01你在上位机侧就把远程TSAP填03.01本地TSAP按软件默认值不动这样镜像就对了。3.5 修改TSAP时的注意事项与限制第一确认CPU/CP固件支持。老版本CP343-1固件对TSAP范围有限制某些固件版本只支持TSAP从03.01到03.10超出范围就会拒绝连接。修改前最好去西门子官网查一下对应型号的手册。第二别占用了系统保留资源。S7-300/400的CPU通常保留01.00给PG设备02.00给HMI设备03.00以上给S7通信。如果你把TSAP改成01.00编程器在线连接就会出问题。原则上不要在组态里占用系统保留值。第三TSAP修改后要重新编译下载不只是下载PLC程序网络组态HSI/NetPro数据也要同步下载到通讯处理器里。很多人改了TSAP后只在PLC程序里下载了一遍通讯处理器里还是旧参数导致看起来改了实际没生效。出现这种情况可以尝试通过ProSave或者通讯处理器的“恢复出厂设置”再重新下载完整组态。4. 常见通信问题排查与拆解TSAP配置相关的故障很多时候表面上不报TSAP错而是报“连接超时”、“伙伴不响应”这类模棱两可的信息。这一节我按思路拆解并给出可落地的排查方法。4.1 连不上时的标准排查顺序先说一个我自己的固定排查顺序从底层往上层走一般10分钟内能定位90%的问题。第一步物理链路和IP。Ping一下PLC的IP地址确保网络通。Ping不通的话检查IP、网线、交换机端口跟TSAP无关。Ping得通但延迟很高检查是否有IP冲突或交换机环路。第二步TCP 102端口可达性。用Telnet或者端口扫描工具测试PLC的102端口是否开放。如果102端口不通说明PLC侧ISO-on-TCP服务没有正常启动可能是通讯处理器固件问题或者连接资源被占满。第三步排除其他调试软件占用。如果你开着Step7、TIA博途在线监控连接这些调试工具本身会占用PLC的连接资源和TSAP导致你的上位机程序连不上。这种问题最容易混淆因为拔掉调试线后程序突然就正常了。第四步检查TSAP。经过上面三步后问题还定位不了基本就是TSAP不匹配。用抓包工具过滤一下TSAP请求响应对照两边配置。4.2 利用抓包工具快速定位TSAP错误Wireshark是排查S7通信问题最直观的工具。无线网卡抓包干扰大建议用有线连接在PLC和上位机之间可以加一个交换机做端口镜像或者直接在电脑上抓包。抓包时过滤规则用“tcp.port 102”重点看S7通信建立阶段的两个关键帧连接请求帧CR和连接确认帧CC。CR帧里会携带客户端发起的本地TSAP和远程TSAPCC帧里是服务器的确认结果。如果CR帧里的TSAP符合你的组态设置但CC帧里服务器返回了错误代码那就说明PLC侧拒绝了该TSAP可能是连接资源冲突或者TSAP值不在允许范围内。如果CR帧本身就没有发出那问题出在客户端的TSAP配置上根本没组对。我之前遇到过一个奇葩案例抓包看到TSAP请求里面填的是03.00但我PLC组态里明明写的是03.01。排查了半天发现是上位机软件版本缓存了旧配置重装软件后正常。所以抓包看到的现象一定要结合软件的实际配置文件去核对有时候界面显示的不等于程序实际发送的。4.3 高频报错与解决方法速查表现场常见的TSAP相关故障和解决办法我整理成一张表方便你直接对照处理现象可能原因解决方法连接建立超时不报具体错误PLC侧TSAP与上位机侧不匹配抓包确认双方TSAP镜像调整提示“伙伴不响应”、“远程设备无应答”TCP 102端口不通或连接资源被占满确认无其他调试软件占用Telnet测试102端口编程软件能连第三方上位机连不上编程器占用了01.00、HMI占用02.00资源冲突将上位机的远程TSAP改为03.01之后的值多个上位机同时连同一PLC第二个连不上多个连接使用相同TSAP导致冲突为每个上位机分配独立TSAP03.02、03.03等S7-1200/1500通信被拒绝用户组态时修改了系统自动管理的TSAP恢复默认TSAP或改用基于名称的连接机制这些高频问题的共同点就是对TSAP的配对关系和资源独占性理解不到位。配置时留个习惯每次修改TSAP记录一张表格标注哪台设备占用了哪个TSAP避免后期排查时靠猜。4.4 一个来自现场的真实排障记录去年有个项目S7-1500配合第三方上位机客户反映上位机偶尔连不上PLC重启上位机软件后又能连上。我们远程排查发现PLC侧连接资源里常常有残留连接没释放导致TSAP资源被占满。这不是TSAP值写错而是上位机软件在连接异常断开时没有正确关闭S7连接。PLC侧S7连接有超时机制默认可能需要几十秒才会释放。解决思路是在上位机软件里增加异常断线后的主动重连逻辑同时缩短S7连接监控超时时间另外把上位机连接的TSAP固定分配一个独立值避免跟HMI等设备抢资源。这个案例说明TSAP问题不完全只是“填对值”就能解决还涉及连接生命周期的管理。排查时要有全局视角。5. 配置TSAP前先养成这几个习惯最后分享几个我在实际项目里攒下来的习惯虽然不复杂但对减少问题很有帮助。第一在项目初始阶段就做一张TSAP分配表。表格列字段包括设备名称、IP地址、PLC侧TSAP、上位机侧TSAP、功能描述、负责人。PLC项目调试到后期如果TSAP已经被占满再想插一个连接进来会很痛苦提前做资源规划能省去很多麻烦。第二每次修改TSAP后第一时间同步更新上位机组态和文档。现场工程师最容易犯的错就是只改PLC不跟上位机或者改了配置但不更新图纸最后别人接手项目时完全无法定位。第三S7-1200/1500的项目尽量用基于名称的连接S7-1500支持符号寻址用PLC变量名代替硬件地址TSAP这类细节尽量交给系统管理。实在需要手填的时候再用本文提到的默认值方案。第四第三方软件连接前先用西门子自带工具做一个“连通性测试”。比如TIA博途的“可访问设备”扫描能确认PLC侧S7协议服务正常。这个测试如果通过排障范围可以直接缩小到TSAP配置或上位机软件层。TSAP配置本身不难难的是在庞杂的通信参数里找到它、理解它、并跟对端保持一致的步调。希望这篇东西能帮你少走弯路调试顺利。
返回列表