
写好的HMI程序死活连不上PLC双击“Activate Configuration”后弹出来一堆ADS错误最常见的就是6和1861。明明昨天还能通信今天把程序一改、路由器一配直接报错整个调试节奏全被打乱。这个场景在倍福TwinCAT3开发里太常见了尤其是刚接触路由配置的工程师几乎都绕不开这两个错误码。今天这篇就专门聊聊ADS通信错误1861和6到底在说什么怎么一步步把TwinCAT3的路由配置弄明白以及排查时最容易忽略的几个坑。不管你是第一次连接CX系列嵌入式控制器还是想在开发机上做本地模拟调试这篇文章的思路都能直接拿来用。我会按“先理解错误本质→再逐层排查→最后按部就班配好路由”的顺序来讲确保你读完以后能自己动手解决绝大多数同类问题。1. 错误1861和错误6先搞懂它们到底在说什么1.1 错误6是“找不到设备”问题出在路由这一层ADS是倍福设备之间通信的底层协议全称是Automation Device Specification。它把不同设备组织成一张“设备网络”每个设备有一个唯一的AMS NetId相当于设备的门牌号。当你在TwinCAT3里访问另一台控制器时消息不是直接飞过去的而是要经过AMS Router路由器转交Router手里有一张路由表记录着“哪个AMS NetId走哪个IP地址”。错误60x00000006Target device not found翻译过来就是“目标设备找不到”也就是说Router在自己的路由表里根本查不到你要访问的这个AMS NetId。最常见的两个原因目标设备的AMS路由条目压根没添加到本机路由表里条目添加了但AMS NetId填写错误尤其是后两段写错。AMS NetId的格式是“A.B.C.D.E.F”六段数字例如192.168.1.1.1.1。它跟Windows里的IP地址不是一回事只是默认按IP生成后面多出两段标识。很多工程师图省事手动把NetId改成顺嘴的数字结果和对方设备里实际配置的对不上路由器自然找不到。注意AMS NetId的六段数字中后两段通常习惯用1.1但并非强制。关键是两端设备里记录的NetId必须完全一致差一位都不行。我习惯用一个生活化的类比来解释如果说TCP/IP通信里的IP地址是“城市名”那么AMS NetId就是“城市里的街道名”而ADS端口则是“具体门牌号”。路由配置要做的就是告诉Router去哪个城市、哪条街道找哪个门牌。1.2 错误1861是“设备找到了但端口不通”问题出在服务这一层错误1861十六进制0x0745Target port not found跟错误6不一样。它意味着路由层已经通过了——Router知道这个设备在哪IP能通AMS NetId也能查到——但是连接目标设备上的某个具体ADS端口时失败了。ADS通信里的“端口”指的不是TCP端口而是设备内的协议服务Port每个服务监听一个固定的ADS端口号。最常用的是ADS端口号对应服务851PLC RuntimePLC程序运行环境852NC轴控853NC PTP854CNC900TwinCAT System Service10000以上用户自定义服务所以报1861的时候第一反应应该是目标设备上对应的那个服务到底有没有在运行如果目标设备上压根没激活过配置或者PLC Runtime没有启动那么851端口就没有进程在监听Router一访问就报“目标端口不存在”。还有一个容易被忽略的场景开发机上做本地模拟时TwinCAT项目里配置了PLC程序但从未执行过“激活配置”或者激活后马上又切回了Config模式此时851端口也不会持续提供服务连接时同样会报1861。1.3 两个错误为什么常常一起出现如果你在TwinCAT里配置路由后马上用程序连接经常先看到错误6手动补充路由之后又变成错误1861这是非常典型的“排查顺序推进”现象。TwinCAT建立一次ADS连接其实要经过两层握手第一层是路由握手客户端把AMS NetId发给RouterRouter查自己的路由表。查不到就报错误6。第二层是服务握手路由找到了继续确认目标设备上有对应的ADS端口在监听。没有服务在监听就报错误1861。所以当路由配置完全没做时先报6当你补齐路由但目标设备上没有运行对应的服务就会接着报1861。把这两层分开理解排查思路的骨架就立住了。2. 动手前先做好三层基础排查别急着加路由2.1 第一层网络层先通不通无论报哪个错误第一件事永远是确认物理链路通不通。命令行里ping对方的IP地址。ping通了说明网线、交换机、网卡配置基本正常ping不通就先处理IP地址、网段、网线的问题再做后面的步骤。ping通了以后再验证端口。ADS的PLC Runtime监听TCP 851端口但我一般不建议用telnet硬测因为ADS协议不是简单的HTTP文本协议telnet连上去只会显示一堆乱码。更实用的是直接在目标设备上执行netstat -an | findstr 851Windows系统能看到LISTENING状态就说明路由服务和端口都正常。提示这里的“目标设备”可能是CX系列嵌入式控制器如CX5140也可能就是你自己电脑上安装的TwinCAT。很多初学者用本机模拟调试时也报1861原因往往就是想连的851端口没有Real-time进程在跑后文会专门讲。2.2 第二层用Router对话框看路由表现状打开TwinCAT Router对话框的方式是双击系统托盘里的TwinCAT图标蓝色小图标选择Router → Routes弹出路由管理界面里面能看到本机已知的所有AMS路由条目。每一条路由都有AMS NetId、IP地址和状态标识。在路由界面里可以先试一下“Test”已有条目。如果状态不是OK而是显示Failed或No device found那么问题基本锁定在路由配置层。这里也分享一个小习惯在动手添加路由之前先记录一下当前已有的路由表内容。很多项目组会用同一个IP段路由表里堆积着各种历史条目改来改去容易弄混。2.3 第三层把环境信息收集齐再动手我在排查ADS通信问题前会先列一张信息清单每次照着填能省掉大量来回试错的时间信息项示例说明开发机IP192.168.0.10网卡IPv4地址开发机AMS NetId192.168.0.10.1.1查看Router对话框目标设备IP192.168.0.100如CX5140的CX IP目标设备AMS NetId192.168.0.100.1.1目标设备的系统标识TwinCAT版本TwinCAT 3.1.4024.x版本差异会导致兼容问题防火墙状态Windows防火墙/第三方851端口是否放行目标设备服务状态Remote/Config/StopPLC Runtime是否已启动这些东西看着琐碎但多数通信故障都藏在这里。有一次同事跟我说路由加不上我让他先把开发机和CX的IP、NetId发我结果发现他把AMS NetId填成了192.168.0.100.0.0后两位没有按设备实际的来路由器当然不认。3. 路由配置实操从报错到连通的完整过程3.1 手动添加路由的标准步骤以开发机连接CX5140为例假设你的开发机是Windows TwinCAT3目标设备是一台CX5140嵌入式控制器两者通过网线直连或同一个交换机相连IP都在同一网段。第一步打开Router对话框选择“Add Route”。输入目标设备的IP地址例如192.168.0.100。此时TwinCAT会尝试读取对方的AMS NetId如果网络畅通且目标设备的TwinCAT服务在运行屏幕上会自动带出192.168.0.100.1.1这样的值。如果自动识别不出来就手动输入目标设备的AMS NetId注意一定要跟目标设备里设置的一致。第二步选择连接类型。开发机连接嵌入式控制器通常选“CX Device”两台Windows PC之间通信选“PC”本地模拟也可以添加一条指向127.0.0.1的路由。选错类型偶尔会导致访问行为不一致建议按设备类型选择。第三步点击“Add Route”后TwinCAT会尝试建立连接。如果出现错误6说明目标设备不可达或NetId不正确如果添加成功路由条目的状态会变为OK。第四步回到Visual Studio里的TwinCAT XAE项目右键解决方案中的“TwinCAT Project” - “Change Target Platform”输入或选择目标设备的AMS NetId。这一步很多人会漏路由在系统层面配好了但项目还指向本机下载配置时自然各种报错。第五步激活配置。点击“Activate Configuration”或按快捷键切换到运行模式观察错误列表。如果这一步出现1861通常说明目标设备上对应的PLC Runtime没有起来或没有正确加载程序回到目标设备侧检查激活状态。实操心得添加路由时如果自动识别不到AMS NetId我的做法是先在目标设备上打开TwinCAT XAE shell如果是Windows系统或者用路由器搜索工具扫描CX系列还可以直接在系统设置里查看NetId避免靠猜。3.2 路由测试按钮的准确用法Router对话框里每个路由条目都有一个“Test”按钮。很多人点了以后看到红色失败就直接开启改IP模式其实绿色OK代表整个ADS链路路由目标服务都正常红色失败只代表当前设备不可达不一定全是IP问题。一个更细的测试技巧当路由状态显示OK时说明路由层和851端口都是通的。如果这时你的程序仍报1861那就要回头检查程序里访问的AmsNetId和端口号是不是写对了。很多自写的C# ADS客户端代码里写明port 851但在使用的库版本或上层封装里默认端口不是851就会单独报1861而TwinCAT自身项目访问时不会报因为XAE内部已经按服务端口映射。3.3 广播搜索的局限与替代方案Router对话框里有“Search”或“Broadcast Search”功能可以在局域网内广播搜索所有TwinCAT设备找到后一键添加。这个功能在实验室里很好用但在现场网络中经常失效原因有几个广播包可能被交换机隔离或防火墙丢弃广播只对同一网段有效跨网段根本搜不到有的设备禁用了广播响应。所以在工业现场我强烈建议放弃广播搜索直接用IP AMS NetId静态添加。在OT网络里IP地址规划通常是固定的设备台账上查一下目标设备的IP和NetId手动填进去比广播扫描可靠得多。这也是应对1861和6的最稳妥解。4. 最容易踩的四个坑防火墙、多网卡、服务没启动、目标没激活4.1 Windows防火墙与第三方安全软件拦截851端口Windows防火墙对TwinCAT的ADS通信影响极大。TwinCAT安装时通常会自动添加一些防火墙规则但企业环境的安全策略、第三方杀毒软件经常把相关规则禁掉尤其是851端口的入站规则。排查方法在开发机和目标设备上都执行netstat -an | findstr 851如果没有看到LISTENING输出就优先怀疑防火墙。临时验证时可以同时关闭开发机和目标设备的防火墙注意只在隔离测试网络里做看错误是否消失。如果消失再去防火墙入站规则里为TCP 851和UDP 48898广播发现端口添加允许规则。注意修改防火墙规则时建议按“程序”和“端口”双维度添加给TwinCAT安装目录下的TcXaeShell.exe、SystemServiceTcSystemService和RemoteManager各放行一次防止只放行了某个进程另一个进程访问时又被拦截。4.2 多网卡导致路由“走错路”开发笔记本通常既有有线网卡又有无线网卡。AMS Router在选择出口网卡时偶尔会“犯迷糊”如果无线网卡的IP跟有线网卡不在同一网段或者存在多个活动网卡ADS连接可能走了错误的网络路径导致超时和路由测试失败。解决办法有三个按推荐程度排序在Router对话框里给路由条目绑定静态IP让Router明确走某个网卡临时禁用无线网卡调试完再打开在Windows路由表里加一条静态路由把目标设备的IP段固定指向有线网卡。很多老工程师遇到错误6第一件事就是拔掉无线网卡别看操作粗暴实测确实有效。4.3 TwinCAT Router服务本身没启动另一个隐蔽的坑是Router服务没有运行。TwinCAT的很多功能依赖Windows服务比如“TwinCAT 3.1”服务或“TwinCAT System Service”。如果这些服务没有启动Router根本无法工作连localhost上的ADS通信都会失败。判断方法很简单打开Windows服务管理器services.msc查找TwinCAT相关服务确认状态是“正在运行”。如果服务停止右键启动。还有一种情况是服务虽然启动了但启动账户或依赖项有问题导致Router进程异常这种时候需要查看Windows事件日志里TwinCAT相关的错误记录。实操心得在开发机上做本地模拟时如果双击托盘图标发现系统状态一直是No Real-Time优先检查服务有没有起来。服务没起来路由配得再漂亮也没用。4.4 目标设备上PLC Runtime没有激活配置最后这个坑特别容易和1861绑定出现。当你把路由、IP、NetId全部配好项目也切换到了目标AMS NetId但报错还是出现那么大概率是目标设备上根本没有PLC Runtime在851端口提供服务。CX设备上如果从未用XAE激活过任何包含PLC任务的配置那么Router虽然可以ping通但你去访问851端口时就是“端口不存在”。我把这叫作“光有房子没有门牌号”——网络通畅不代表服务存在。此时需要把项目下载并激活到目标设备让PLC Runtime真正跑起来再去连ADS通信。另外有些CX设备配置里加载了多个RuntimePLC Runtime的端口可能不是默认的851而是通过System Manager设置改过。这种项目特有的端口偏移也会导致1861排查时需要到Target设备上确认实际使用的ADS端口号。5. 两个错误的定位对照表与实际排查顺序5.1 根据报错组合快速定位下面这个表格是我平时排查时报错、可能原因和优先检查项的浓缩可以直接拿来参考报错现象最可能原因优先检查路由测试报错误6路由条目缺失或AMS NetId错误Router路由表、目标NetId路由测试报错误1861目标设备对应服务未启动目标设备激活状态程序连接报1861代码里port或NetId配置不正确程序连接参数广播搜索找不到设备跨网段或广播被阻拦改用静态路由路由状态OK但程序报6XAE项目目标NetId没切换Change Target Platform多网卡环境路由时通时断Router方向选择错误静态IP绑定或禁用其他网卡这张表的精髓是分清“报错发生在哪一层”发生在路由测试阶段重点查NetId和IP发生在程序连接阶段重点查目标服务端口和项目目标NetId。层次感理清了就不容易大海捞针。5.2 从报错到连通我建议按这个顺序排查最后分享一套我自己的排查顺序未必是官方推荐的但实测效率很高第一步在开发机命令行ping目标IP。不通就先解决网络。第二步双击托盘TwinCAT图标打开Router对话框查看目标路由条目。没有条目就手动添加加完测试。测试仍失败看失败信息的错误码6去查NetId和IP1861去查目标设备服务状态。第三步若路由测试OK回到Visual Studio检查“Change Target Platform”里的AMS NetId是否和目标路由一致再激活配置看错误列表。第四步如果还报1861检查目标设备的激活状态、服务状态以及防火墙放行情况。每一步只做一项改动改了马上重测不要同时改IP又改NetId又关防火墙否则问题解决了也不知道是哪一步治好的。5.3 一套防患于未然的配置记录习惯坦白说ADS错误6和1861本身真不是难事难点在于很多人一看到错误码就慌上来就改PLC程序或者重装TwinCAT结果问题没解决还浪费时间。我个人排过很多次这类故障后最大的体会是先把错误码拆成“路由层”和“服务层”两个概念再按网络、路由、服务、项目的顺序逐层排查大多数问题十分钟内都能定位。我建议每个调试现场都做一份设备台账记录开发机、目标控制器、交换机端口、IP地址、AMS NetId、TwinCAT版本、防火墙规则这几项。哪怕只是写在笔记本上下次再遇到通信问题翻出来对照一下往往一眼就能找到答案。如果你在配置过程中还遇到其他衍生错误码比如0191TCP连接超时或10060连接超时排查思路也完全一样先确认网络通不通再确认路由对不对最后确认服务有没有监听。这几个错误码背后的排查逻辑是通用的希望这篇路由配置与故障排查实录能帮你少走一点弯路把时间花在真正该调的程序逻辑上。