首页 / 资讯中心 / 文章详情

TwinCAT 2.0现场维护:CX控制器PLC编程与故障排查

TwinCAT 2.0现场维护:CX控制器PLC编程与故障排查 ★ FEATURED ARTICLE
简介《TwinCAT 2.0 从入门到精通》是面向Beckhoff CX、CPxxxx、Cxxxx系列控制器用户及TwinCAT 2自学工程师的PDF教程作者Lizzy Chen结合近15年倍福技术工作经验编写非官方发行侧重软件配置与项目实践帮助读者跨越TwinCAT相对传统PLC更高的上手门槛。压缩包仅含1个PDF文件大小5.55MB便于在电脑或移动设备上随查随用。教程内容覆盖系统概述与选型安装、PLC编程入门、开发环境与常见错误、系统备份和桌面接管、掉电保持/数据存储/配方、Lib扩展中的温控与PID、EtherCAT和K-Bus I/O以及ADS、串口、Modbus、TcpIp等通信配置并给出不少避免常见错误的操作提示。已有213人学习适合需要系统梳理TwinCAT 2使用细节、对照实际项目查漏补缺的初、中级自动化工程师书中也提示了向TwinCAT 3迁移的必要性。1. 接手一台跑着老程序的 CX 控制器这份 PDF 能替你省掉哪几个月上个月帮人看一台跑了七年的 CX 控制器硬盘里只剩一个没有注释的 PLC 工程和一份《TwinCAT 2.0 从入门到精通》的 PDF原厂英文手册散在十几个文件里谁也没读完。这种场面在存量设备上很常见控制器还在产线上转能改它的人已经离职了。这份资料是某资深工程师把自己十几年现场经验攒出来的中文教程非官方发行最后版本停在 3.1操作截图基于 TwinCAT 2.11 的某个 Build从系统概述、PLC 编程、IO 接线一路写到通讯、HMI 和数据库对接上册不涉及运动控制。它适合两类人手上管着基于 Windows 的控制器、需要自己装环境写程序的一线工程师以及从传统 PLC 转过来、被开放两个字搞懵的人。如果你只做 TwinCAT 3 或者纯 NC PTP 项目这份东西的边际价值有限下册才讲运动控制。2. 原理先立住分时多任务、数据区与 IO 映射到底怎么跑很多人装完软件就急着点下载结果卡在连不上和跑飞两个坑里反复横跳。这两个问题的根都不在操作步骤上而在对运行机制的误解。TwinCAT 2 跑在 Windows 上但它的 PLC 任务并不是 Windows 线程随便调度的那种东西它有自己的实时核、自己的任务表、自己的数据区。把这一层搞清楚后面所有配置项才知道为什么要那么填。2.1 分时多任务1ms 周期不是改个数字就能跑TwinCAT 的实时性来自一个插在 Windows 驱动层的实时扩展Windows 本身被降级成一个优先级最低的大任务。实时核按设定的周期去触发 PLC 任务多个任务之间按优先级分时抢占。这句话听起来像教科书但落到现场就三个可见的现象一是任务周期设得再小实际循环时间也会被任务体本身的执行时间顶住二是优先级低的任务在高优先级任务忙的时候会被推迟表现出来就是我这个任务明明设了 2ms示波器上看却是 5ms 一次三是 Windows 那边一旦有驱动或杀毒软件长时间霸占 CPU实时核拿不到时间片整个系统会报溢出。判断实时性好不好别靠感觉。System Manager 里能看到每个任务的 Cycle Time 和 CPU 占用连续观察几分钟看实际周期抖动。我一般的判断标准是实际周期抖动不超过设定周期的 20%且没有出现丢失周期的计数增长才算能上产线。低于 1ms 的周期要额外注意它对 CPU 型号、任务体大小、以及有没有关掉 Windows 的节能策略都很敏感不是所有工控机都能扛。PROGRAM PLC_PRG VAR tStart : TIME; tCycle : TIME; nCount : UDINT; fbTrig : R_TRIG; END_VAR fbTrig(CLK : TRUE); (* 每个扫描周期都触发 *) IF fbTrig.Q THEN nCount : nCount 1; tCycle : TIME() - tStart; (* 用系统毫秒计数粗算周期 *) tStart : TIME(); END_IF这段代码不精确但足够在现场做第一轮粗判TIME()返回的是毫秒级计数连续两个扫描周期相减就能看出任务实际间隔。nCount用UDINT是为了避免长时间运行后溢出回绕如果你要连续跑几天最好再加一个日计数器。真正精确的周期测量还是得靠 Scope后面第 5 章会说。这段代码的用途是在没有任何工具的情况下先确认你的任务到底跑多快别被配置界面上的数字骗了。任务的划分方式也影响结果。常见做法是按功能拆一个快任务跑 IO 刷新和联锁逻辑周期 14ms一个慢任务跑数据处理、配方、通讯周期 2050ms。快任务里只放必要的逻辑别塞字符串处理和循环慢任务里可以放心做重活但要注意它和快任务共享的变量需要一致性保护比如用标志位做双缓冲或者干脆把整块数据拷贝一次。这是血泪经验有人把串口收发的解析写在 1ms 任务里平时看不出问题一旦收到长帧就偶尔丢周期查了半个月才发现是任务体太长。2.2 PLC 数据区变量住哪、掉电丢不丢、首扫描怎么判PLC 变量不是凭空存在的每个变量都有它的存储位置。全局变量和程序里的静态变量默认在掉电丢失的 RAM 区控制器一断电这些值就归零。要让数据掉电保持有两条路一是在声明时指定保持属性让它落到非易失区二是自己写存储逻辑把关键数据定期写到文件或者 EEPROM。前者省事但有容量和写次数限制后者灵活但要自己管文件格式和异常恢复。现场最常见的翻车是调试时发现某个计数值一直对断电重启后全变 0于是怀疑程序逻辑其实只是变量没设保持。改法很简单把需要保持的变量单独放到一个保持区或者加上属性声明然后重新下载——注意改保持属性通常需要把程序重新下载并做一次冷复位热复位不一定生效。PROGRAM PLC_PRG VAR bFirstCycle : BOOL : TRUE; (* 首扫描标志 *) nTotal : UDINT; (* 需要掉电保持时改放保持区 *) fbInit : R_TRIG; END_VAR IF bFirstCycle THEN bFirstCycle : FALSE; (* 这里放上电初始化限位复位、通讯参数装载、配方默认值 *) nTotal : 0; END_IFbFirstCycle这种写法是判断系统刚上电的土办法稳当但要注意它只在上电后的第一个扫描周期为真如果程序是被热复位、不是冷复位它的表现可能和你想的不一样。更靠谱的做法是用系统提供的首扫描标志变量那类隐含变量在资料第 3 章有专门一节讲包括哪些是只读的、哪些会随复位方式变化。这类细节在原厂手册里往往一句话带过但对排查为什么重启后行为不一样极其关键。还有一个容易被忽略的点数据区的布局。结构体里成员的定义顺序、类型大小会直接影响它和其他设备通讯时的字节流。你眼睛数着是 6 个字节编译器排出来可能是 8 个。我一般的习惯是凡是这个结构体要往外发就用长度函数核对一遍实际字节数对不上就调顺序或者补填充别靠猜。2.3 选型与 IOCX/CP 控制器、EtherCAT 和 K-Bus 怎么分工控制器选型这件事教程第 1 章有专门的选型设计和接线章节讲得很细但核心逻辑就几条。控制器分两类一类是出厂就预装好软件、你只需要拿笔记本连上去编程的嵌入式控制器另一类是你自己在一台工控机上装软件。前者的好处是稳定、开机即用坏处是配置固定、升级要换硬件后者的好处是算力随便挑、能跑 HMI 和数据库坏处是要自己管操作系统、管驱动、管备份。场景特征倾向选择理由点数少、逻辑固定、柜内空间紧紧凑型嵌入式控制器免装系统开机即跑维护成本低需要跑 HMI、配方、数据库工控机加软件授权算力可配能装第三方软件高速多轴、分布式 IO控制器加 EtherCAT总线周期短拓扑灵活老设备改造、点少且慢控制器加 K-Bus 模块接线简单成本低IO 侧的两条路线要分清楚。EtherCAT 是走网线的高速总线从站串起来刷新周期可以做到很短适合分布式布点和对同步有要求的场合K-Bus 是背板式的模块化扩展插在控制器后面接线省事但扩展距离受限。常见误用是把 K-Bus 模块拉到很远的地方去做分布式 IO结果信号质量出问题还以为是程序写错了。另一个误用是 EtherCAT 拓扑随便串从站数量一多、分支一乱排查起来很痛苦建议在图纸阶段就把拓扑画清楚留好诊断口。接线这部分教程里有截图它把一些简单的截屏抽出来放附件正文只写步骤。这个做法对读者其实挺友好——正文读起来快需要看图的时候再去翻附件。你如果拿到的是纯 PDF也建议把附件目录单独建个文件夹放好后面调试时按章节号找比翻全书快得多。3. 把环境跑通从装软件到第一个 PLC 程序开机自启原理懂了接下来就是纯操作。这一章按真实的上机顺序走先装环境再配通链路然后建工程、下载、验证最后把程序固化到控制器上让它断电重启还能自己跑起来。每一步我都会标出哪里最容易错因为这些地方我基本都错过一遍。3.1 安装与授权Build 版本、试用期和注册顺序安装前先把三件事做掉关掉杀毒软件的实时防护断开不必要的网卡确认系统是教程支持的 Windows 版本。这台机器如果是产线上的控制器安装之前务必做一次系统备份别嫌麻烦。安装过程本身没什么可讲的一路下一步装完重启。真正需要注意的是版本教程的截图和代码基于 TwinCAT 2.11 的某个具体 Build如果你装的是更晚的补丁版本界面可能微调别因为找不到某个按钮就以为装错了。授权这块更容易翻车。软件装完通常有一段试用期试用期过了不注册控制器会进入一种能连上但跑不起来的状态表现是程序下载成功但任务不运行或者运行几秒后停掉。判断方法很直接打开授权管理界面看状态别靠猜。注册顺序我一般是这样# 1. 确认本机与控制器网络可达把 IP 换成你现场的 ping 172.16.1.10 -n 4 # 2. 确认本机网卡和目标在同一网段且没有第二条网卡抢路由 ipconfig /all # 3. 查看本机到目标的路由表确认走的是哪块网卡 route print这三条命令看着简单却能排掉现场一半的连不上。ping不通先看网线、看网口灯、看是不是交叉线ping通但软件连不上十有八九是路由或者 NetID 的问题而不是授权。授权问题一般出现在能连上、能看到控制器、但下载报错这个区别要记住能省很多时间。还有一个坑同一台电脑装过多个版本的开发环境卸载不干净会残留注册表项和服务导致新版装上去之后行为诡异。这种情况我的处理方式是彻底卸载、重启、清残留目录、再装不要试图覆盖安装。3.2 IP、NetID 与路由三件套缺一个就连不上这是新手最容易卡住的地方也是教程第 2 章花了篇幅讲的部分。三样东西要分清IP 地址是网络层的让两台机器能通NetID 是 TwinCAT 自己的寻址标识长这样172.16.1.10.1.1前四段是 IP后面两段标识这块控制器里的哪一个系统路由是让开发机知道我要找的那个 NetID 该往哪个 IP 发。三者对不上就会出现ping 得通但加不进路由或者路由加了但目标不可达。配置顺序建议这样走先把开发机和控制器设到同一网段掩码一致别设网关或者设成不冲突的值然后 ping 通接着在开发环境里添加路由填目标 IP 和 NetID系统会尝试建立连接并读取目标信息最后在控制器侧确认路由列表里能看到这台开发机。如果添加路由时提示认证失败多半是两边系统的账户策略或者防火墙的问题先在受控环境下临时放通调通后再收紧。# 添加路由前先确认本机网卡地址示例172.16.1.100/24 netsh interface ip show config # 确认目标端口可达TwinCAT 用到的通讯端口现场放通需谨慎 # 注意不要在生产网络上盲目扫端口先在隔离环境验证我不建议在产线上随手扫端口风险太大。更稳的做法是在实验室里把整套链路跑通一次记下每一步的现象然后到现场照着做出问题时对比实验室通、现场不通差异点往往就在网段、防火墙策略或者那块网卡的驱动上。另一个常见情况是开发机有无线网卡和有线网卡同时启用系统默认从无线走导致目标不可达。调试期间我一般会临时禁用无线调完再开。3.3 第一个 PLC 工程建、配、下、自启动第一个程序别写复杂的就写一个指示灯闪烁加一个计数器目的是验证编—配—下—跑整条链路。写法有很多种用定时器自复位是最直观的。PROGRAM PLC_PRG VAR fbTonic : TON; bLed : BOOL; nBlink : UDINT; END_VAR (* 定时器自复位每 500ms 翻转一次 *) fbTonic(IN : NOT fbTonic.Q, PT : T#500MS); IF fbTonic.Q THEN bLed : NOT bLed; nBlink : nBlink 1; END_IF这段代码里IN : NOT fbTonic.Q是关键它让定时器到点后自己断开、下一个周期重新计时形成周期振荡。PT是预设时间改成T#1S就是 1 秒周期。bLed要映射到一个实际输出点映射在 System Manager 里做把变量和输出通道绑定然后下载配置。如果只是仿真验证可以不映射用变量监视表看bLed翻转。下载顺序是先编译 PLC 程序、确认无错误再在 System Manager 里激活配置然后登录 PLC、下载程序、运行。注意激活配置这一步会让控制器短暂停止产线上做这个操作要安排停机窗口。下载完之后用变量监视表确认bLed在翻转nBlink在增长链路就算通了。最后是自启动。程序下载到控制器只是进了 RAM断电重启就没了。要让它开机自己跑得做两件事一是在 PLC 编程环境里创建引导工程把当前程序固化到控制器的引导区二是在系统配置里确认控制器上电后进入运行模式。引导工程这一步最容易被忘表现出来就是我在的时候好好的一断电再开就不动了。做完之后建议真的断一次电验证别只看界面提示。3.4 上传下载与比较把现场改过的程序收回来现场最尴尬的情况是设备在客户那里跑着程序被人改过你手上只有一份旧版源码。这时候直接下载会把改动覆盖掉。正确做法是先上传再比较。上传的前提是控制器里还留有源程序如果当初下载时没勾选保留源码上传回来的可能是没法读的编译结果那就只能靠比较工具看差异或者重新写。比较功能很实用它能告诉你在线程序和本地工程在哪些程序块、哪些变量上有差异。我的习惯是每次到现场第一件事就是把控制器里的程序和配置各上传一份存到一个带日期和版本号的文件夹里然后再动手改。这个习惯救过我很多次。另外配置文件的上传和 PLC 程序是分开的两个操作别只做一个配置丢了同样跑不起来。提示上传回来的程序务必和现场运行的程序做一次一致性确认方法是在线状态下比较而不是只看文件时间戳。4. 现场翻车记录连不上、跑飞、掉配置的五个高频坑这一章全是现象、原因、解决没有理论。五条坑我都真实遇到过或者看着同事在边上踩过。看的时候对号入座能省一晚上。4.1 通讯与连接类路由、NetID、防火墙坑一ping 得通软件里加不进路由。现象命令行 ping 目标 IP 正常开发环境里添加路由时提示找不到设备或者超时。原因目标控制器上运行的服务没有响应或者开发机的路由表里这个目标的出口不是你以为的那块网卡。还有一种情况是目标 NetID 填错了一段比如把172.16.1.10.1.1写成了172.16.1.10.1.2。解决先在控制器侧确认它的 NetID 和 IP别信记录本再用路由表命令确认出口网卡最后检查开发机有没有第二条启用的网卡在抢路由。三条都对还不行就在隔离环境里临时关掉防火墙试一次确认是不是策略拦了确认完立刻恢复。坑二白天好好的晚上产线一开就掉线。现象调试期间连接稳定产线设备一启动通讯时断时续。原因电磁干扰或者网络里有大量广播。工业现场的网络和办公网不一样交换机、线缆、走线路径都会影响。另一种可能是 IP 冲突某台设备的地址和控制器撞了。解决先换一根屏蔽好一点的网线走线避开变频器和动力线再看交换机端口有没有大量错误包最后排查 IP 冲突把控制器和开发机的地址都换成明确没人用的。这个坑我踩过一次最后发现是动力线和新拉的网线绑在同一个线槽里。4.2 运行与数据类周期、保持区、结构体对齐坑三程序跑着跑着某个任务的周期越来越长。现象刚下载时任务周期正常运行几小时后明显变慢示波器上能看到周期抖动变大。原因任务体里做了会累积的事情比如往数组里不断追加数据、字符串不停拼接、日志不清理。内存占用上来之后执行时间自然变长。另一种是通讯任务在等超时超时时间设得太长把整个任务拖住。解决把任务体拆开重的活挪到慢任务所有数组和缓冲区都设上限满了就覆盖最旧的通讯超时时间按实际响应时间设别用默认值。改完观察至少一个班次别改完看五分钟就说好了。坑四断电重启后配方和计数全丢了。现象运行中数据正常断电再上电保持数据归零。原因变量没设保持属性或者设了属性但下载时没做冷复位保持区没重建。还有一种情况是电池失效某些控制器靠电池维持保持区电池没电了数据自然保不住。解决先确认变量确实落在保持区再确认下载后做过一次冷复位最后检查控制器电池状态。这三步按顺序走别跳。坑五和第三方设备通讯数据总是差几个字节。现象协议文档上写的是 12 字节你发出去对方解析错位或者对方发来的数据你解析出来是乱值。原因结构体的成员对齐和填充导致实际长度和预期不一致或者字节序没处理。前者是本地问题后者是协议问题。解决用长度函数核对结构体的实际字节数对不上就调整成员顺序或者显式补填充字节字节序问题在收发两端各做一次转换别指望对方迁就你。这类问题在资料里有专门一节讲数据格式与对齐值得翻一翻。注意结构体长度核对这件事不要靠数成员类型大小来推算编译器可能会插入填充字节一定要用运行时函数取实际值。5. 收尾技巧用 Scope 抓波形、用 Boot 文件夹留后悔药前面讲的都是能跑这一章讲跑得明白、改得回来。两个习惯一个用于观察一个用于恢复。先说观察。变量监视表只能看到某个瞬间的值看不到趋势。判断一个控制逻辑对不对很多时候要看波形这个信号是不是比那个信号晚了一个周期这个输出有没有抖动这个计数是不是匀速增长。TwinCAT 自带的示波器工具就是干这个的用法不复杂新建一个记录配置把要观察的变量加进去设好采样周期启动然后看曲线。几个参数值得注意采样周期要小于你关心的信号变化周期否则会混叠观察数组变量时要指定索引范围别整块加进去远程观察时先把路由配好原理和第 3 章一样。(* 在程序里留一个触发标志配合示波器的触发功能使用 *) VAR bTrigger : BOOL; nSample : INT; END_VAR nSample : nSample 1; IF nSample 1000 THEN bTrigger : TRUE; (* 第 1000 个周期触发一次记录 *) nSample : 0; END_IF用一个计数变量做触发比手动点开始记录靠谱得多尤其是在抓偶发问题的时候。你可以让它每 N 个周期触发一次配合循环记录等于给系统装了个黑匣子。触发条件也可以换成某个报警位置位、某个值超限看你要抓什么。再说恢复。控制器的系统盘里有个引导目录存放的是上电后加载的配置和程序。这个目录的价值在于升级或者改程序之前把整个目录拷一份出来出问题的时候拷回去比重新配置一遍快得多也不用担心记不住当初改了哪些参数。我的做法是每次改动前拷一份命名带上日期和改动说明放在一个单独的移动盘里别放在控制器本机——本机盘坏了就一起没了。操作节点备份内容存放位置首次调试完成引导目录全量 PLC 源码移动盘双份每次参数调整前引导目录全量移动盘按日期归档程序版本升级前引导目录 源码 配置文件移动盘标注版本号这两个习惯说起来简单坚持下来不容易。我自己的教训是早年改一个配方参数觉得就改一个数不用备份结果改完发现原来的值也记不清了最后是从一台同型号设备的备份里翻出来的。从那以后我每次动控制器不管改动多小都强制走一遍拷引导目录、存源码、记改动说明这三步哪怕只改一个数字。麻烦三分钟省下的是半天。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站