ARTICLE DETAIL

资讯详情

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

TwinCAT数据采集实践:PLC-Recorder搭档ADS协议高效搞定

TwinCAT数据采集实践:PLC-Recorder搭档ADS协议高效搞定 做工厂数据采集这几年我最大的感触是TwinCAT 设备本身很皮实真正让人上火的往往不是 PLC 程序而是怎么把它里面的数据稳定地拿出来。早先我干过不少“笨活”——在 Visual Studio 里写着 ADS 客户端处理重连、解析符号文件、再往数据库里灌数据一个项目下来光通信代码就够喝一壶。后来接触了 PLC-Recorder配合倍福的 ADS 协议从连上控制器到数据落库很多时候确实就一杯茶的功夫。这篇就把我实际跑的这套流程完整拆开讲重点放在 ADS 通信的那些细节坑、PLC-Recorder 的配置步骤以及现场最容易出问题的几个点适合正在选型或刚打算做 TwinCAT 数据采集的工程师直接参考。1. 为什么我不建议你亲自写 ADS 客户端去采集数据1.1 ADS 协议本身不难但工程化很考验人ADSAutomation Device Specification是倍福设备之间、以及外部系统与 TwinCAT 运行时通信的核心协议。它跑在 TCP/IP 之上端口默认是 48898主要用来传输 AMS 报文。说白了ADS 就是一把“钥匙”帮你打开 TwinCAT 运行时里变量的门。如果只是想临时读几个变量自己用 C# 或者 Python 写个 ADS 客户端确实很快。ADS 库有官方提供的也有社区封装的读一个整数、写一个布尔几行代码就搞定。但一旦进入长期采集项目画风就变了PLC 重启后客户端要自动重连而且要稳定地重连不能每次都丢数据。网络抖动导致通信中断时本地的数据要缓存下来等链路恢复后再补传。点位一多语句式的单点读取根本扛不住必须用 ADS 的批量读取Symbol download / multi-read机制。变量类型要和数据库字段一一对应REAL、LREAL、BOOL、ARRAY 处理起来麻烦得很。历史数据要写到数据库里插入频率、批量提交、索引维护都要自己调。这些“脏活累活”才是数据采集项目里真正耗时的地方。不是 ADS 协议难而是工程化难。1.2 自研采集方案与专用采集工具的对比我遇到过不少团队一开始觉得“ADS 这么简单自己写个服务就行了”结果做着做着就变成了“通信没问题但数据为什么丢”“重启后为什么不自动恢复”“点位改了几十个代码和配置对不上了”。最后要么返工要么混着用。这里把自研方案和 PLC-Recorder 这类专用采集工具做个对比维度自研 ADS 采集客户端PLC-Recorder 采集工具符号解析要自己解析 .tpy / 符号文件处理数据类型映射导入符号文件或者在线读取自动识别类型断线缓存要自己写内存或文件队列自带本地缓存和补传机制分组周期采集要自己实现调度器支持按通道分组设置不同采集周期数据落库要写数据库插入与批量提交逻辑支持常见关系库和时序库自动建表状态监测要自己加工位状态、质量戳自带变量质量标记和历史状态记录后续维护每次功能变更都要改代码界面改配置即可远程调整比较方便当然这不代表自研没有任何价值。如果只需要采三五个变量或者要做深度定制、把采集逻辑嵌到自己的产品里自研无可厚非。但如果是产线设备长期数据采集、要稳定运行几个月甚至几年我更推荐用现成工具把基础链路跑通把精力放在数据分析和工艺优化上别跟通信较劲。2. 动手前必须搞清楚的 ADS 通信关键概念2.1 AmsNetId、AmsPort、静态路由是通信三件套ADS 通信和普通 TCP 通信不太一样。你光知道控制器的 IP 地址还不够ADS 的目标地址由两部分组成AMS NetId类似于“设备身份证”格式是 x.x.x.x.x.x共 6 段通常是 IP 地址加后缀比如 192.168.0.10.1.1。它不要求和 IP 完全一样但必须在路由表里被正确声明。AMS Port类似于“端口号”表示访问目标设备上的哪个服务。倍福 TwinCAT 3 里PLC 运行时默认是 851系统服务是 10000老版本 System Manager 是 100。这两个值合起来ADS 路由器才知道把报文送到哪里。如果你的软件只知道 IP、不知道 AMS NetId或者路由表里根本没有这条记录那通信就会超时。静态路由是另一个容易忽略的点。ADS 路由器的工作方式有点像企业内部的名片交换A 机器要访问 B 机器A 的路由表里要有 B 的信息B 的 AMS NetId 对应哪个 IP同时 B 的路由表里最好也要有 A 的信息否则双向通信可能不完整。实际项目中我一般手动在 TwinCAT 的路由配置里把双方都加一遍宁多勿少。别完全依赖自动广播发现现场网络如果有多个网卡、VLAN 隔离或者防火墙策略广播常常会失败。2.2 PLC 的运行状态和 Windows 环境会直接影响采集结果ADS 链路通了不代表变量值就能正常读到。有个很基础的坑——PLC 程序必须处于 Run运行模式。如果 TwinCAT 只停在 Config 模式或者 PLC 任务没启动你连接可能正常但读上来的变量要么是初始值要么数据质量直接标记为无效。所以做采集前第一件事就是确认 TwinCAT 系统状态是 Run而且任务确实在跑。Windows 环境这里得单独拎出来说。TwinCAT 的实时扩展对系统要求很苛刻尤其是在 Windows 11 上经常会出现报错代码 0x1024或者 TwinCAT System 日志里报“Sending AMS command Init4\RTime: Start Interrupt”失败。这一类问题的根源多半是 Windows 的虚拟化安全功能VBS、内存完整性、Hyper-V 或者内核隔离占用了 CPU 的虚拟化中断资源导致 TwinCAT 的实时任务没法正常启动。如果你是在普通 Windows 11 工作站上跑建议先做两件事打开“Windows 安全中心” - “设备安全性” - “内核隔离”把“内存完整性”关掉。用管理员身份运行命令提示符执行bcdedit /set hypervisorlaunchtype off然后重启。另外别指望在 Hyper-V 或者普通虚拟机里跑 TwinCAT 实时任务能有多稳定。官方对这类虚拟化环境的支持有限EtherCAT 主站对网卡实时性要求也高虚拟机里的虚拟网卡很难满足。如果只是做仿真测试倒无所谓生产环境强烈建议用实体机 倍福兼容的 Intel 千兆网卡并且给网卡安装 TwinCAT 实时网卡驱动。2.3 路由器、防火墙和网卡驱动的“隐形劫持”ADS 通信走的是 AMS Router路由器本身监听 TCP/UDP 48898 端口。很多工程师在虚拟机或公司局域网里测试时发现 ADS 连不上第一个怀疑是工具的问题其实绝大多数都是 Windows 防火墙把 48898 端口拦了或者路由器把广播包隔离了。遇到 ADS 连接超时先去看防火墙再把两端路由表核对一遍最后才轮到怀疑采集软件。网卡驱动这块多网卡环境要尤其小心。笔记本既连着无线网又插着有线网ADS 报文可能会从错误的网卡出去导致路由不可达。现场调试时尽量只保留一条和 PLC 通信的网卡或者手动配置路由把流量固定到指定接口上。3. PLC-Recorder 连接倍福控制器一步一步配置实录3.1 新建 ADS 通道时那几项参数到底该填什么PLC-Recorder 这类工具装好之后一般会提供一个 Web 配置界面通过浏览器访问就能操作。我习惯的流程是从“设备管理 / 通道管理”开始新建一个通道协议选择“倍福 ADS”。这里要填的核心参数就三个目标 AMS NetId控制器里实际使用的 AMS NetId比如 192.168.0.10.1.1。目标 IP 地址控制器的网卡 IP也就是你能 ping 通的那个地址。AMS 端口号访问 PLC 变量用 851访问系统服务用 10000。有个细节很多人第一次会卡住如果 TwinsCAT 项目里有多个 PLC 任务实例比如 PLC1、PLC2它们的端口通常是 851、852、853 这样递增的。你新建通道之前最好确认要采集的是哪个 PLC 实例别对着 851 一顿操作结果数据采到一半发现读的是另一个任务。参数填好后先不要着急保存点位直接点“测试连接”确认到底能不能和目标通信。如果这里超时后面全部免谈。3.2 符号表导入把 TwinCAT 里的点位搬到采集软件来连接成功后下一步就是把点位清单导进来。手动一个个建点的做法我不是很推荐几百个变量手动维护累不说还容易把数据类型搞错。我在生产项目里通常走两条路从 TwinCAT 项目里导出符号文件。在 TwinCAT XAE 环境中右键 PLC 工程选择“导出符号”或“Save Symbols”生成 .tpy 或 XML 格式的符号文件然后在 PLC-Recorder 里导入。如果条件允许直接用采集工具在线读取控制器里的符号表。这种方法适合项目还在频繁调试、点位经常变动的阶段随时刷新就行。导入之后工具会自动把 REAl、LREAL、BOOL、INT、ARRAY 这些数据类型识别出来你只需要在变量树里勾选要采集的点位顺便给点起个别名、设置工程单位或者换算倍率。这一步相当于把 PLC 里的原始变量翻译成一个更友好的“数据字典”后面写报表、做看板都会方便很多。这里有个实操经验变量别名最好在第一次配置时就定好规范。比如Line01_Motor01_Speed这种带产线、设备、信号含义的命名方式比直接叫GVL_Motor_Speed要直观得多。等数据进了数据库字段名就是别名等到做数据分析时才去猜字段含义就太晚了。3.3 分组采集周期和数据存储配置点位导入之后别急着启动先把采集周期分组规划好。TwinCAT 设备上的变量变化频率差异很大伺服轴状态、电流这一类实时性高的信号可能要求 10ms 甚至更快而温度、液位、产量统计这类过程量1 秒或者几秒采一次就足够了。把不同频率的变量拆到不同的采集组是后期系统稳定性的关键。你要是把所有几百个点都按 10ms 的频率去采不仅 ADS 通信压力大数据库写入量也会成倍增长最后要么通道阻塞要么数据堆积。我自己常用的分组方式是快组轴状态、运行模式、电流、速度周期 50ms 或 100ms点位控制在几十个以内。慢组温度、压力、计数、配方参数周期 1s 或 5s。采集周期分组设置好之后再配数据存储。PLC-Recorder 支持 SQL Server、MySQL、PostgreSQL 等主流关系型数据库也支持时序数据库。在配置界面填上数据库地址、账号、库名它一般会自动建表。位号表、历史数据表这些结构不用你手动设计工具会按通道和点位自动生成。3.4 启动通道后的验证清单配置完成启动通道。很多人走到这一步以为就完事了其实我一般会盯三件事通道状态是不是“运行中”变量质量戳是不是正常有没有出现大面积的“Bad Quality”。数据库里是不是已经开始有数据持续写入且数值范围和 PLC 在线监视的数值对得上。停掉 PLC 或断开网络模拟一次故障确认断开后本地缓存和恢复重连是否正常。全部通过了这套链路才算真正跑通。回到标题说的“5 分钟搞定”如果路由、环境都正常这个时间完全够用要是卡住基本都卡在路由和环境上所以我花了大量篇幅先讲那些基础概念。4. 数据落地数据库、MQTT 与时序库的选择思路4.1 关系数据库适合什么场景写入时要注意什么如果你要对接的是 MES 系统、设备管理系统或者后续要对数据进行复杂的联表查询SQL Server、MySQL、PostgreSQL 这类关系数据库还是很合适的。PLC-Recorder 配置好连接串之后会自动建好数据表字段就是点位别名值为实际数值同时有时间戳和变量质量标记。关系库写入量大以后有一个明显的瓶颈索引维护和磁盘 IO。数据量上去之后查询还好说写入线程要先锁表再插入会导致延迟。我的做法是分库分表或者定期归档历史数据到独立的分区表。另一个小技巧是建议给采集软件一个独立数据库账号别和生产系统账号混用避免误操作或者权限问题波及产线。4.2 时序数据库更适合高频采集场景当点位多、频率高比如几千个点在 100ms 周期一直写关系数据库就会很难受。这时候需要时序数据库比如 TimescaleDB、TDengine、InfluxDB 之类的。时序库对“时间戳 标签 数值”这种模型做了大量优化写入和压缩性能都远好于普通关系库。数据量估算上有个简单公式可以参考单日数据量 采集点数 × 每秒采样次数 × 单条记录字节数 × 86400 秒。假设 500 个点、1 秒一次、单条记录约 50 字节算下来一天就有 2GB 左右一年就是 700GB。如果采样频率提到 100ms直接量级增长。所以高频点位尽量精简存储周期也要尽早规划数据保留策略比如原始数据保存 90 天之后转存压缩采样数据或直接丢弃。4.3 MQTT 上云适合跨地域汇总与轻量接入有些项目不是本地建库而是要把设备数据统一上云甚至多个分厂的数据汇聚到一个平台。这时候 MQTT 是更顺手的选择。PLC-Recorder 支持把采集到的数据通过 MQTT 发布到 Broker云端做订阅消费再落到时序库或大数据平台。MQTT 方案有个天然优势弱网环境下消息队列有 QoS 机制丢失率比裸 TCP 低。但要注意MQTT 协议本身不保证重复消息去重所以下游订阅方最好按“设备 ID 时间戳 点位 ID”做幂等处理。4.4 断线缓存和数据补传是长期稳定运行的核心保障数据采集最怕的不是断线而是断线期间的数据丢失。生产环境网络总有波动PLC 偶尔重启也很正常关键是采集工具要有本地缓存机制。PLC-Recorder 在这方面做得比较省心通信中断时会先把数据缓存到本地恢复后再按时间顺序补报到数据库或 MQTT。验收这个功能时我建议一定要实际模拟一次“拔网线”测试。断网半小时重连后看数据库时间戳是否有缺口如果补传造成的数据顺序错乱看下游是否能按时间戳重新排序。5. 现场最常见的坑从 TwinCAT 10000 报错到 ADS 连不上5.1 “TwinCAT System (10000): Sending AMS command” 报错到底在说什么现场最容易遇到的一个报错是事件日志或系统监控里出现类似“TwinCAT System (10000): Sending AMS command Init4\RTime: Start Interrupt ...”这样的消息。这个报错信息字面上是在说 TwinCAT 发送 AMS 命令时出问题实际上绝大多数和网络传输没关系而是实时任务没有成功启动常见原因是 CPU 虚拟化资源被 Windows 的安全功能占用了。排查时我按下面的顺序来先看 Windows 功能里是否启用了 Hyper-V、虚拟机监控程序Windows 安全中心里是否开了内核隔离和内存完整性。这些占了 VT-x 的虚拟化中断TwinCAT 抢不到资源就会报错。用bcdedit /set hypervisorlaunchtype off关闭 hypervisor 启动项重启。如果还是不行进 BIOS 检查 CPU 虚拟化技术VT-x / AMD-V是否开启。有些机器出厂默认是关的。最后确认 TwinCAT 版本和 Windows 版本的兼容性比如 TwinCAT 3.1 4024 系列对 Win11 22H2 之后的版本支持是逐步完善的版本太老会碰上莫名其妙的问题。5.2 ADS 连接超时先按链路自查再怀疑工具ADS 连不上很多人第一反应是“这个软件能不能用”其实大部分情况是链路自身没通。我在现场排查的固定套路先在 TwinCAT 系统工具栏里选择“Choose Target”输入控制器的 IP看能不能搜索到目标。这一步能验证底层网络通不通。在目标控制器上确认 AMS NetId 和实际 IP 地址然后在本地和远程各加一条静态路由确保双方路由表里都有对方的信息。检查 Windows 防火墙是否放行 48898 端口的 TCP/UDP 通信。测试时最直接的办法是先把防火墙临时关闭确认通后再细化策略。用 ADSPing 之类的诊断工具对控制器的 AMS NetId 做一次点对点探测能 ping 通说明路由器层面没问题问题大概率出在端口或应用层。这一步一步排除完绝大多数 ADS 超时问题都能定位。你会发现最后往往不是采集工具的锅。5.3 变量值全是 0 或者质量标记异常先别急着调参数还有一种很迷惑的现象通道状态看着正常数据也在采集但变量值全是 0或者一会儿正常一会儿无效。遇到这种情况我一般会从这几个角度查PLC 任务是不是真的在运行。只激活了配置但没把系统切到 Run变量就是初始值。符号文件和当前 PLC 工程是否匹配。重新编译后变量地址或符号索引发生了变化老符号文件读出来的数据可能就颠三倒四。数据类型是否映射正确。比如把 LREAL 当成 REAL 读值会完全不对把 BOOL 当成 INT 读逻辑直接错乱。采集周期是不是比 PLC 任务周期还短。比如 PLC 任务周期是 50ms你却设了 10ms 去采读到的很可能只是同一个扫描周期里的旧值甚至读到中间缓冲区的半更新状态。这些内容在界面上不一定能直接看出来需要你把单个点位拎出来单独监视对比 PLC 在线监视值很快就能发现是哪一层出了问题。6. 采集性能、数据量估算和延伸场景经验6.1 采集周期的选择不是越快越有价值量化设备数据时很多工程师容易陷入“采样频率越高越好”的误区。实际上频率太高不仅增加 CPU 和网络负担还会产生大量冗余数据。要根据你的业务场景反向推导MES 报表和产量统计1 秒采样已经足够5 秒也行。设备状态监测和预警100ms 到 500ms 之间视信号变化速度而定。伺服轴电流、速度、转矩这类过程变量50ms 到 100ms 通常能反映趋势如果想看更细的机电耦合动态那已经是高速采集的范畴普通 ADS 周期读取不太适合需要走 EtherCAT 分布式时钟或专用的高速记录方案。ADS 通信本身支持批量读取一包报文能同时取回很多变量效率远比单点轮询高。但批量读取也有上限点位很多时最好分组每组控制在几十到一两百个变量之间避免单包过大导致延迟波动。6.2 多设备、多协议环境的扩展AX5000 伺服、注塑机、机床怎么办很多产线不只有倍福 PLC还会有倍福伺服、注塑机、加工中心等设备。这里说几个常见的扩展方向倍福 AX5000 伺服驱动器通过 ADS 可以读到驱动器的运行状态、报警代码、电流、扭矩等信息前提是知道 NC 轴或驱动器对象的地址结构。服务器报警代码这块我习惯先对照官方手册把报警码段背熟现场分析故障能快很多。海天注塑机这类设备不同批次的控制器支持接口差异很大有的是 OPC UA有的是现场总线有的提供专用网关协议。如果设备只支持 ADI 或 EUROMAP那别硬套 ADS选 PLC-Recorder 支持的 OPC UA 通道或网关转发方案更合适。发那科机床走的是 FOCAS 协议和 ADS 完全不是一回事。需要单独开发或使用支持 FOCAS 的采集驱动别想着一把梭哈全用一个协议解决。所以我的建议是先按设备类型把协议梳理清楚再统一到一个数据平台。TwinCAT 设备用 ADS 通道是成本最低、效率最稳的选择其他设备就各走各的专有协议最后在数据库或 MQTT 层汇合。6.3 长期运行的维护习惯一次配置不是一劳永逸的。PLC 工程重新编译、点位增加或者任务重命名都可能导致采集配置失效。我养成的习惯是每次 PLC 程序变更后重新同步或导入一次符号表并比对点位清单差异。定期看一眼通道的平均响应时间和数据质量统计提前发现网络劣化或通信堵塞趋势。数据保留策略和磁盘空间监控要提前做好别等数据库写满了才发现。这套流程从 ADS 路由、PLC-Recorder 配置到数据落地我前前后后在好几个项目里跑过稳定性和效率都还不错。尤其适合那些想把倍福设备数据快速接进 MES、看板或云平台的场景。你在实施时要是卡在哪个环节建议先别急着看采集软件回头把路由表、Windows 环境、PLC 运行状态这三样基础项捋一遍多半能快速定位。
返回列表