做了几年设备数据采集,倍福TwinCAT这套东西给我的感觉一直是“性能很强,但上位机接入有点门槛”。很多做MES、做设备数字化改造的工程师,一看TwinCAT的ADS通信文档,看到端口号、AMS NetId、符号寻址这些名词,头皮就发麻。这文章我直接给你一套能在5分钟内跑通的方案,用PLC-Recorder这个工具配合ADS通信协议,把TwinCAT里的PLC变量数据捞出来,存成CSV或者转发给数据库,Windows平台上一路踩坑过来,我把它整理成保姆级步骤,照着做就能成功。
1. 方案选型思路:为什么是PLC-Recorder加ADS而不是别的
先说结论:在倍福TwinCAT场景下做数据采集,合适路径不算多,PLC-Recorder搭配ADS是目前性价比和上手速度最平衡的组合,没有之一。
1.1 常见TwinCAT取数方案,对比之后才有结论
刚接触TwinCAT数据采集时,你可能会先碰到这么几类方案,我挨个说下我的真实体感:
第一类是自己写C#或C++程序调ADS动态库。这是最“原汁原味”的路子,TwinCAT官方SDK就是干这个的,功能完全不受限,什么都能做。但问题是,你至少得熟悉Visual Studio开发环境、了解ADS的端口分配规则、处理数据类型转换,还得自己解决数据记录、断线重连、文件导出这一堆周边问题。一个功能完整的采集程序写下来,开发加调试,一周时间是非常正常的。而且后续设备型号一换、变量一增删,你又得去改代码,维护成本全在自己头上。
第二类是用OPC UA统一架构去采集。TwinCAT有TF6100这个OPC UA服务器功能包,属于收费授权。配置起来比ADS直接上手要友好,很多第三方软件都支持OPC UA客户端接入。但这里有个现实问题:OPC UA网关有性能损耗,尤其是高频采集场景,比如1毫秒或者100微秒级别的数据变化,OPC UA的吞吐量和实时性都跟不上,再加上授权费用,小项目里通常不太划算。
第三类就是PLC-Recorder这种专用采集软件。它底层也是走ADS协议,相当于把第一类方案里的所有开发工作做成了配置化操作,你不用写一行代码,只要把变量地址填进去、设置好采集频率,就能直接拿数据。它的核心优势我在实操里总结为三点:
- 对TwinCAT的版本兼容性做得细,从TwinCAT 2到TwinCAT 3都能用,还支持通过无线网卡连接控制器,现场调试省很多事。
- 数据通道和类型映射是自动处理的,PLC里是REAL还是INT,是数组还是结构体,软件会帮你做转换,不用手工解析。
- 支持把采集结果实时转发给数据库、MES系统或者第三方面板,不用再单独开发数据链路。
1.2 我为什么最终在项目中锁定了这套组合
去年我接手一条锂电池卷绕设备的数字化改造项目,产线上6台TwinCAT 3控制器需要采集温度、张力、速度、报警码这几个维度数据,采样要求不低于10毫秒,采集周期要连续跑30天以上不停机。如果用OPC UA方案,服务器授权费加上配套硬件,预算起码多出大几千;如果用自研ADS程序,光调试那6台设备不同版本变量的兼容性,我估计就得花掉两个星期。
最后用的就是PLC-Recorder专业版加ADS通信的方式。整个过程配置完大概花了不到半天时间,后来连续跑了两个月,数据一条没丢。这里不是给软件打广告,而是这套组合在实际项目里确实经住了考验:部署快、运行稳、排障直接。
对适合的人来说,这套方案尤其推荐给下面这三类朋友:
- 做设备数据采集的电气工程师,TwinCAT程序能看懂,但不擅长写上位机代码。
- 负责工厂数字化改造的自动化工程师,需要用最快速度把产线数据跑起来,验证数据价值后再做二次开发。
- 设备厂商的售后调试人员,需要短期记录设备运行曲线来定位故障原因,要求工具轻量、配置快速。
如果你是这三类人之一,下面这套保姆级教程正好解决你的痛点。
2. ADS通信核心原理:别急着动手,先把AMSNetId和端口搞清楚
带过好几个新手同事,我发现他们卡住的地方基本不在软件配置,而是对ADS通信的几个概念没吃透。这里花5分钟把这个最关键的底子打好,后面配置就是顺水推舟的事。
2.1 ADS协议到底是怎么把数据从PLC传到PC的
ADS这个缩写全称是Automation Device Specification,中文一般叫自动化设备规范。它是倍福专门为TwinCAT系统设计的设备间通信协议,可以通俗地把ADS理解成倍福生态里的“普通话”:无论你是上位机软件、触摸屏还是另一个控制器,只要说的都是“ADS方言”,就能和设备交换数据。
ADS通信有三要素,缺一不可:AMS NetId、AMS Port、变量地址。
AMS NetId有点像IP地址,只不过它是设备在倍福ADS世界里的唯一标识。一个标准的AMS NetId长这样:192.168.3.1.1.1,前四段一般和控制器的实际IP地址保持对应关系,后面两段是设备编号和端口号逻辑。很多人在配置时直接把电脑的IP地址填进去,结果连不上,就是因为没理解NetId和IP是两码事。
AMS Port则用来标识数据到底要发给TwinCAT的哪个模块,你可以理解为PLC程序里的“房间号”。常见的有这几个:
| 端口号 | 对应的TwinCAT模块 |
|---|---|
| 851 | PLC Runtime 1(第一个PLC任务) |
| 852 | PLC Runtime 2(第二个PLC任务) |
| 350 | 系统服务 |
| 10000/10001 | 用于从TwinCAT 3的XAE环境获取信息 |
我们做PLC数据采集,90%情况用的都是851端口,也就是PLC Runtime 1。如果你项目里创建了第二个PLC任务,那就用852。
变量地址的意思是,PLC里声明的每个变量在ADS世界里都对应一条地址记录,TwinCAT 3时代更常用的是“符号路径”,比如MAIN.ActualSpeed,表示访问MAIN程序块里的ActualSpeed变量,路径精确到每个程序块的嵌套结构。
2.2 TwinCAT 2和TwinCAT 3的差异,你配置时最容易踩坑
这里必须单独强调:TwinCAT 2和TwinCAT 3在这套机制上有明显差异,如果你按照3的经验去配置2的设备,大概率会出问题。
TwinCAT 2时代,变量访问默认采用ADS IndexGroup和IndexOffset方式,简单说就是通过一种“地址编号”直接去内存里读取数据。这种方式读起来速度很快,但要求你事先从PLC里导出变量地址表,而且一旦程序编译后有变动,地址表就得重新导出,否则数据就会错乱。
TwinCAT 3时代则主推符号路径访问,直接把MAIN.变量名这种可读性极强的路径拿来做寻址。PLC程序修改后,只要变量名不变,地址路径就还是有效的,这对我们做采集的来说省了太多事。
PLC-Recorder对这两种寻址模式都做了适配,老设备选TwinCAT 2模式,新设备选TwinCAT 3模式,基本不用你自己去手动填那些复杂的地址编号。但前提是,你要能正确识别出你面对的是哪个版本的TwinCAT。一个最简单的判断方法:看控制器开机界面或者工程文件后缀,TwinCAT 2工程的解决方案文件后缀是.sln但项目文件后缀通常涉及.twincat,TwinCAT 3工程则统一是.sln加.tsproj。另外,TwinCAT 3的System Manager配置界面和TwinCAT 2差别很大,一看便知。
2.3 ADS通信的“网段限制”,配置前必须确认
ADS通信底层走的是TCP/IP协议,但又不是普通的TCP通信。它要求在同一个广播域内才能实现自动发现,如果你的PC和控制器的IP不在同一个网段,直接配置是无法通信的。
有个简单的经验:先给控制器的网卡手动设置一个固定IP,比如控制器是192.168.3.1,那PC的网卡就设置成192.168.3.50,最后一位错开就行,子网掩码255.255.255.0。这个操作看似简单,但我在项目现场发现,很多人在配置PLC-Recorder前根本没有给PC网卡设IP,一直是动态获取状态,结果软件扫描不到设备,然后就开始怀疑软件有问题。
另外提一嘴,如果你的PC装了虚拟机软件,像VMware或者VirtualBox,这些软件装好以后会添加虚拟网卡,有时候会干扰ADS通信。我遇到过几次,把虚拟网卡禁用掉以后,PLC-Recorder立刻就能找到控制器了。这个问题比较隐蔽,配置前先检查一下。
3. PLC-Recorder保姆级实操:从安装到拿到第一份数据的完整路径
概念理清了,现在进入实战环节。我按自己项目的配置顺序一步步写,你照着做,5分钟足够跑通基础配置。这里用PLC-Recorder 4.x版本界面做说明,其他版本大同小异。
3.1 安装与首次启动,哪些选项必须“带脑子”选
在开始之前,确定你的Windows系统版本,Win10和Win11都能跑得很流畅,Win7的话建议提前确认下运行库是否完整。安装包下载后直接下一步安装,没有坑,但安装路径建议统一放在某个专门盘符的目录下,比如D:\PLCRecorder,别装到C盘系统盘。因为采集软件会随着运行产生大量数据文件,放在C盘容易把系统盘占满,拖慢系统性能。
首次启动时,软件会让你选择授权模式:试用版、单机版还是专业版。试用版通常有在线时长或者数据量限制,但这个阶段你是可以完整测试功能的。如果你只是临时采集一天数据,试用版完全够用;如果要长期运行,建议直接申请正式授权。
进入主界面后,有几件事是先做掉:
第一个是设置数据存储路径,默认路径可能在安装目录下,时间长了文件一大就不好管理,我一般单独建一个D:\PLCRecorderData文件夹。
第二个是设置数据文件切割规则。PLC-Recorder是按时间段来分文件存储的,你可以按小时、按天或者按固定文件大小来分割。用于长期记录的场景,我习惯按天分割,文件管理最清晰;高频采集的场景,一天的数据量可能几个GB,那就按小时切,方便几天后导出分析。
第三个是检查软件服务是否已经启动。PLC-Recorder是支持后台服务模式运行的,哪怕你不打开主界面,采集服务也会在系统后台按照配置好的任务继续工作。这一点对长期无人值守的设备采集极其重要,我有一次配好任务后直接关掉了主界面,隔了一周来看,数据一直在正常写入,正是因为服务模式一直在后台跑。
3.2 设备连接配置:三要素填写,不成功你就来找我
这个环节是整个教程的核心,也就是ADS通信参数的配置。
在PLC-Recorder主界面找到“设备管理”或“连接设备”入口,点击添加设备。这里你需要填写上面说过的三要素,我逐项说:
第一项是设备名称,这个随便填,但建议起个有意义的名字,比如卷绕机1号,以后在多个设备之间切换时好区分。
第二项是AMS NetId。这个怎么获取?如果你是直接在开发电脑上运行TwinCAT,打开TwinCAT系统管理器,在“SYSTEM”节点的“Real Time”设置里能看到本机的AMS NetId。如果你是通过局域网连接远程控制器,一般可以在控制器的TwinCAT工程文件里找到,或者在TwinCAT开发环境的“Choose Target System”弹窗里查看设备列表。还有一个最直接的办法:在运行窗口输入cmd打开命令行,输入ipconfig查看控制器IP,然后结合工程设置里的NetId规律去推断,但这个方法只适用于固定网络结构的现场,不建议新手到处试。
第三项是端口号,一般情况填851就行,对应PLC Runtime 1。如果你是双PLC任务架构,那就填852。还有一个细节:如果你连接的是TwinCAT 2系统,选851同样适用,但寻址模式需要切换,稍后我会在“变量配置”里说。
填完这三项,点击“测试连接”。如果显示连接成功,说明底层的ADS通道已经打通,这一步顺利的话,后面就一片坦途。如果失败,大概率问题出在网段不一致、防火墙拦截或者AMS NetId填错,排查方法放在第5章节。
3.3 变量配置:从“我来取”到“帮它取”的思维转变
连接测试通过后,进入变量配置环节。这里有个设计思路要提前讲清楚:PLC-Recorder不是让你手动敲一堆变量名的,它有“在线浏览”功能,可以直接读取PLC程序里的符号表,让你像在文件管理器里看文件一样去勾选变量。
在变量配置界面,添加一组“采集点”,然后点击“浏览PLC符号”之类的按钮,软件会通过ADS通信把PLC所有任务程序块下的变量列表拉出来。你会看到类似这样的结构:
MAIN ├── ActualSpeed : REAL ├── SetSpeed : REAL ├── Temperature : ARRAY [1..6] OF REAL ├── CurrentState : INT └── AlarmCode : UINT勾选你需要的变量,配置就完成了一大半。相比手动输入变量名,这种方式最大的好处是保证路径绝对正确,你不需要去背MAIN.ActualSpeed这种路径层次,也不容易打字打错。
有一个细节值得注意:变量引用的时间段问题。如果你在采集过程中重新编译了PLC程序,TwinCAT会自动把变量句柄重新映射,PLC-Recorder这里绝大多数情况也能自动适配。但个别情况下,比如设备重启后,连接会自动重连,变量路径若发生变化,有可能出现“变量无效”的提示,这时重新勾选一次就行。
TwinCAT 2的配置会稍微多一步:你需要先在TwinCAT 2系统管理器里,用“PLC -> Symbols”功能导出符号表文件,通常是.tpy后缀,然后在PLC-Recorder里导入这个文件,软件才能识别变量列表。这个操作虽然多一步,但比手输地址可靠得多。
3.4 采样周期设置:不是越快越好
采样周期的设置是我很想多说两句的地方,因为它直接决定你的数据文件大小和系统负载。
PLC-Recorder支持的采样频率可以很高,但你用不用得上是另一回事。我见过不少同事上来就把所有变量都设成1毫秒采样,以为“越快越好”,结果数据文件一天几个G,分析的时候软件打开都卡,最后还得降频重采,白白浪费时间。
我的经验是这样:区分信号的物理本质来设置不同采样频率:
- 温度信号、液位信号,惯性大,变化慢,100毫秒到1秒采样一次足够。
- 电机转速、张力波动,属于中速信号,10毫秒到50毫秒采样一次合适。
- I/O状态、报警码、急停信号,这一类注意,虽然变化是离散的,但为了捕捉准确的跳变时刻,建议用最快档位去采,比如1毫秒或者事件触发模式。
PLC-Recorder支持对每个变量单独设置采集频率,不要怕麻烦,分成几个组来配置,效果最佳。这样既能捕捉到快信号的瞬态变化,又不会让慢信号的数据拖垮文件体积。
对了,还有一个采样的“零漂”问题。ADS通信的采样并不是完全的并行采集,多个变量之间存在微小的时序差,但这个差异一般在微秒级别,对于绝大多数工艺分析场景来说完全可以忽略。如果你真要做精密分析,比如伺服电机的电流波形,那就需要更专业的方案,比如TwinCAT的Scope View或者通过EtherCAT从站直接镜像数据,这不是普通数据采集工具能覆盖的范畴。
3.5 启动采集与验证:拿到第一份数据
所有配置完成后,点击“启动采集”。这里我给个建议:正式启动之前,先让设备跑一个短暂的测试,比如跑个1分钟,然后去数据文件目录看一眼,确认文件已经生成、行数在正常增长、变量值变化符合实际物理规律。
怎么看数据是否正常?直接打开生成的CSV文件,里面每一行是一条带时间戳的记录,每个变量单独一列。比如你采集的是卷绕机张力,设定值是50N,那你在运行平稳阶段看到数值稳定在49~51之间,那就说明整条链路完全正常,数据质量很高。
如果你发现变量值全部是0或者某一个固定值,先别怀疑传感器,大概率是变量路径未正确关联,回到变量配置里重新勾选一次就行。
当你看到数据文件里的记录每一条都有时间戳、数值在正常范围内波动的时候,这套ADS采集链路就已经完整打通了,后面你自己要接数据库、接看板、接MES,都是在这个基础之上再加几层。
4. 高频采集与数据转发的进阶配置:让数据真正用起来
基础链路打通以后,很多人会接着问:怎么把数据接到我的数据库或者MES系统里去?PLC-Recorder在这块内置了不少现成的对接模块,我在项目中实际用过两种,这里展开说说。
4.1 数据库转发:把实时数据变成业务数据
PLC-Recorder支持多种数据库类型,常见的MySQL、SQL Server、PostgreSQL都在支持范围内,甚至还包括时序数据库InfluxDB。配置路径大同小异,核心就三步:
第一步,在软件里找到“数据转发”或“数据输出”的配置界面,添加一个数据库连接。
第二步,填入数据库的IP地址、端口、库名、用户名、密码。要注意,如果你的数据库跑在另一台服务器上,确认这台软件电脑和数据库服务器之间网络是通的,防火墙端口也放行。
第三步,选择要转发的采集点,然后映射数据库表字段。PLC-Recorder会自动帮你创建一个数据表结构,不过我更推荐你提前在数据库里建好表,指定字段类型和索引,因为自动建的表往往字段类型偏宽松,写入性能会差一些,这一点在数据量大的时候体现得比较明显。
数据库转发的写入频率建议不要太高。我碰到过一个项目,同事把转发间隔设成了500毫秒一次,结果是数据库在高峰期处理不过来,出现写入积压。我调整成2秒批量写入,每次写入一批数据,数据库压力骤减,数据完整性反而更好。
4.2 Modbus TCP服务器模式:给老旧系统开一扇门
有些现场还没有上数据库,老旧的上位机系统只支持Modbus TCP协议读取数据。这时候PLC-Recorder有一个很实用的功能:把它配置成Modbus TCP服务器,可以充当一个“翻译官”。
具体做法是,在软件里启用Modbus TCP服务器功能,软件会监听一个本地端口。然后你把需要往外发的变量(来自TwinCAT的实时值)绑定到Modbus寄存器地址上。这样老旧上位机只要按照Modbus TCP客户端去读这个软件电脑的寄存器,就能获得TwinCAT的数据了。
这个模式我使用下来的体验是:配置稍繁琐,但胜在不改任何上位机代码。它解决了一个非常现实的问题——很多产线上的监控软件写于十年甚至更早之前,适配新的通信协议成本极高,用PLC-Recorder做中间转换层,几天就能把数据接出去。
4.3 与第三方看板工具联动:数据可视化的一条捷径
数据采集完成的最终目的通常是可视化展示。虽然PLC-Recorder自带趋势图界面,但很多工厂领导想看的是简洁的生产看板,这时候数据转发给第三方工具是更常见的路径。
如果你用的是IoTDB、InfluxDB这类时序数据库,再配一套Grafana,效果立竿见影。PLC-Recorder把数据持续写入InfluxDB,Grafana直接对接读数据,做折线图、柱状图、热力图都没问题,刷新频率可以做到1秒级别。
如果你对接的是MES或者自己内部开发的上位机,那直接用它的API接口或数据库转发功能就行,原理一致,烦恼点都在网络连通和数据格式统一上。
我见过一些失败的案例,数据没接好,最后发现不是采集端的问题,而是数据中心端表的字段设计不合理,比如同时把不同设备的数据混在一张表里,查询速度慢得离谱。建议大家在开始转发数据前,先按设备、按数据类型分好表,索引建起来,后面分析会顺畅很多。
5. 常见问题与排查技巧实录:我踩过的坑,你别再踩了
这套方案用久了,总会遇到一些奇奇怪怪的问题。我把真实排查经历里最有价值的几条整理出来,做成一份速查表,尤其适合现场调试时快速对照。
5.1 连接类问题速查:连通是第一道坎
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
| 测试连接提示“Timeout” | 网卡IP不在同一网段 | 设置PC网卡固定IP,与控制器同网段 |
| 能Ping通地址但连不上 | Windows防火墙拦截了ADS端口 | 在防火墙入站规则中放行PlcRecorder程序或对应端口 |
| 找到多个设备但目标设备不显示 | 控制器AMS NetId与工程配置不一致 | 在TwinCAT工程里重新选择目标设备并绑定NetId |
| 有虚拟机软件时连不上控制器 | 虚拟网卡抢占了路由表 | 在Windows网络适配器设置中禁用虚拟网卡 |
| 测试连接成功但重启后失效 | 软件服务未设为开机自启 | 在系统服务中将PLC-Recorder服务设为自动启动 |
这些问题里,最容易被忽略的就是防火墙。PLC-Recorder安装时一般会提示“允许访问网络”,如果你点了“取消”,那Windows防火墙默认就会拦截它向外发起的连接,包括ADS,后果就是连接超时。排查手法很简单:把软件加入防火墙“允许的应用”,然后重新测试连接。
5.2 数据类问题速查:通了之后怎么保证质量
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
| 数据全部为0或固定值 | 变量路径未正确关联 | 回到变量配置,重新浏览并勾选变量 |
| 数据采集一段时间后出现断点 | 路由器或交换机端口休眠 | 在交换机端口配置中关闭EEE省电模式 |
| 数值偶尔跳变异常 | 电磁干扰或接地问题 | 检查通信线屏蔽层是否单端可靠接地 |
| 文件数据量超出预期 | 采样频率设置过高 | 按信号类型分组设置合理的采样周期 |
| 采集软件长时间运行后占用内存飙升 | 旧版本存在资源泄漏 | 升级到最新版本并定期查看服务状态 |
有一个比较隐蔽的问题值得单独说:PLC程序在线修改后,比如你通过TwinCAT在线改了某个变量的初始值或者上传了新的程序,可能会短暂出现连接中断。这不一定是软件问题,而是TwinCAT在重新初始化Runtime时断开了所有连接。PLC-Recorder会在下个周期自动重连,一般不用人工干预。如果你发现重连后取数速度变慢了,可能是连接数太多导致,清掉无效的旧连接就好。
5.3 我的一些真实心得:这些问题说明书里不会写
踩过不少坑以后,分享一下我做这类项目的几个保障数据质量的私房技巧。
现场调试时一定要带一台干净的最简Windows系统笔记本,别装那些所谓的“优化软件”和全家桶软件。这些后台程序可能在关键时刻抢占CPU资源,导致采集软件偶尔卡顿,对于毫秒级采样的项目来说,这足以影响数据完整性。我自己的调试电脑,除了采集软件和TwinCAT,其他非必要软件一概不装。
数据文件的“备份”策略要提前规划好。机器长时间运行,数据文件增长速度很快。我一般是在存储磁盘空间用掉70%的时候,就自动把历史数据转存到NAS或者移动硬盘,防止硬盘满导致的写入失败。时间长了你会发现,这种小事不提前处理,后期返工代价极大。
最后是时间同步。很多数据后续要用来跟其他系统做工艺复盘,时间戳必须准确。建议在现场PC上开启Windows时间自动同步,并指向同一台NTP服务器,各台设备之间的时间误差控制在1秒以内。这个细节如果你忽略了,等后期做多台设备数据对比分析时就会非常头疼。
一套完整的TwinCAT数据采集方案,说复杂也复杂,说简单也简单。关键就三件事:把ADS通信三要素配对,把变量路径选对,把采样频率设得合理,剩下的交给PLC-Recorder就行。我自己做项目时的习惯是,每配好一台设备,马上跑一个短测试,确认数据曲线和自己预判的物理过程一致后再批量部署,这样能省掉后面90%的返工。如果你手头正好有TwinCAT设备要接数据,照着上面的步骤跑一遍,相信你也能很快看到那些跳动的曲线落到屏幕上。