ARTICLE DETAIL

资讯详情

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

TwinCAT 3实战笔记:从软PLC基础到伺服与HMI开发

TwinCAT 3实战笔记:从软PLC基础到伺服与HMI开发 简介这份Beckhoff TwinCAT3电机控制实例资源面向工业自动化与运动控制开发者围绕力传感器与力矩传感器反馈的闭环控制场景集中演示PID、阻抗、导纳以及混合控制等策略的工程实现适合需要进阶TwinCAT3运动控制、柔顺控制或机器人交互控制的工程师与学习者参考。压缩包共92个文件主体为54个compiled-library编译库与11个tcpou程序组织单元另有XML配置、TC Scope测量工程、TwinCAT系统管理工程及PLC项目文件整体约28.13MB目录结构清晰便于直接加载到TwinCAT3环境进行研读与二次开发。目前已有667人学习。代码按测量、NC、PLC等模块组织结合Scope示波工程可直观观察控制效果有助于理解传感器数据采集、控制律实现和项目联调的关键细节。 做自动化这行这两年你要是还没听过 Beckhoff 和TwinCAT 3多少有点说不过去。这套基于 Visual Studio 的软 PLC 平台把逻辑控制、运动控制、视觉、IoT 全塞进了同一个实时环境里和传统 PLC 的工作方式差别挺大。很多朋友找“beckhoff twincat3 实例”多半是想找个现成项目直接抄结果被 ADS、EtherCAT、NC 轴这些术语劝退。这篇就当成一份带了现场经验的实战笔记从第一个能跑的 PLC 实例开始再聊到伺服、IO 和 HMI最后把我踩过的坑整理出来。适合刚接触软 PLC、准备上手倍福的新手也适合已经在其他品牌 PLC 上有经验、想快速迁移过来的人。1. TwinCAT 3 到底是什么为什么大家都在学1.1 它不是“一个 PLC 软件”而是一套实时控制平台TwinCAT 3 的全称很长但实际上你只需要记住两件事XAE工程环境和 XAR运行时环境。XAE 就是个藏在 Visual Studio 里的插件负责编程、调试、诊断XAR 是装在 Windows 上的实时内核负责真正跑控制逻辑。两者通过 ADS 通讯这套架构让它既能做传统 PLC 的事又能直接调用 Windows 生态的算力。我第一次接触时最大的误解是把它当成“另一个编程软件”。其实真正跑程序的不是 VS 界面而是后台那个实时内核。打个比方VS 窗口相当于操作台XAR 才是真正在车间干活的机器。这个观念不转过来后面调试会一直绕弯。1.2 TwinCAT 2 到 TwinCAT 3变的不是版本号很多人以为 TwinCAT 3 只是界面更好看实际不是。TwinCAT 2 用自带 IDE语言受限面向对象基本没有TwinCAT 3 直接拥抱 Visual Studio不仅支持 IEC 61131-3 里那套 ST、LD、FBD、SFC、CFC还能混写 C/C 和 MATLAB/Simulink 代码。这意味着复杂算法可以不用在 PLC 里硬抠直接用高级语言写完集成进去。这对做非标设备特别友好。以前一个算法要翻译成 ST 语法来回验证大半天现在直接把 C 代码封装成模块在 TwinCAT 3 里调用就行。单位里做视觉的同事再也不用“配合”我做痛苦翻译生成一个 DLL 丢给我我挂进实时任务就能用。1.3 这套系统到底适合谁用我的判断是做传统 PLC 但项目里运动控制需求多、设备复杂度高、需要跟 Windows 上位机深度打交道的场景TwinCAT 3 的优势非常明显。加上它支持 EtherCAT现场布线比脉冲线省太多一个网口就能串几十个伺服。如果你对手头项目的定位是单机小设备、点数几十个、逻辑简单那传统 PLC 够用不必折腾但如果你面临的是多轴联动、视觉定位、数据追溯这些需求TwinCAT 3 值得认真学。2. 从安装到跑通第一个 PLC 实例2.1 版本选择与安装顺序安装这事看起来简单但至少有三分之一的新手卡在这一步。先说版本目前主流是 TwinCAT 3.1 4024.x对应 Visual Studio 2019 或者更新版本具体要看倍福官方说明。建议直接去官网下载安装包别用来历不明的整合包。安装顺序我一般是这样先装 Visual Studio 2019并把 C 桌面开发组件勾上后面编译某些模块会用。关闭杀毒软件再安装 TwinCAT XAE。为什么因为 XAR 要装内核驱动杀软经常会拦。安装完重启确保 Windows 时钟和时区自动否则许可证校验可能抽风。安装完成后把 TwinCAT 的快捷方式用管理员身份运行。这一步不能偷懒不然后面很多权限类报错会让你怀疑人生。2.2 新建项目、写 ST 代码、激活运行第一个实例别搞复杂我用一个带自锁和延时停止的功能块来讲。打开 VS新建 TwinCAT XAE Project在弹出的窗口里选“Local”作为目标系统。然后在 PLC 目录下添加一个 Standard PLC Project里面会自动生成 MAIN我们就在 MAIN 里写代码。PROGRAM MAIN VAR bStart : BOOL : FALSE; bStop : BOOL : FALSE; bRun : BOOL : FALSE; tOff : TON; tOffTime : TIME : T#3S; END_VAR // 自锁逻辑 IF bStart AND NOT bStop THEN bRun : TRUE; END_IF IF bStop THEN bRun : FALSE; END_IF // 3秒后自动停止 tOff(IN : bRun, PT : tOffTime); IF tOff.Q THEN bRun : FALSE; END_IF写完按 F7 编译然后“Activate Configuration”再点登录Log In。注意这两个动作是分开的激活配置是把当前工程下发到实时内核登录是让 VS 开始在线监控。最后按 F5 让 PLC 运行。如果你在 MAIN 里建了两个显示变量在线状态下能直接看到数值变化这就是 PLC 实例跑通的最低闭环。2.3 环境启动的常见坑启动时报错说没有找到 TwinCAT 系统服务八成是运行库没装上重新运行安装包里的 Setup 一次。激活配置时报 0x2A00 之类的错误先看是否管理员权限运行 VS。代码里用了T#3S这种时间字面量注意 ST 语法里时间和日期必须有#符号写错一个字符编译直接报错这是新手最常犯的低级错误。3. 实例进阶伺服驱动对接与点动控制3.1 为什么先拿伺服练手逻辑程序跑通之后很多人的目标是运动控制。原因很简单设备里只要有一台伺服整个项目就会从“纯逻辑”升级为“逻辑轴控制”这也是 TwinCAT 3 相比传统小型 PLC 最值得学的地方。网上搜“twincat3与台达伺服驱动”的帖子特别多因为台达伺服在中低端市场普及率极高做项目时经常碰到。我用台达伺服举个例子思路可以平移到任何支持 EtherCAT 的驱动器。控制协议上走的是 CoECANopen over EtherCAT也就是把 CANopen 里的对象字典搬到 EtherCAT 里。你不需要记全部对象只要能找到控制字、状态字、目标位置、实际位置这几个关键对象就行。3.2 网线接上不算完参数要对齐EtherCAT 最方便的地方是接线只需要一根网线但第一次调试时很多人以为扫描到从站就完事了。实际上你要做三件事在 TwinCAT 的 IO 目录下扫描 EtherCAT 从站确认驱动器的 ESI 文件正确加载。给驱动器分配 SDO/PDO 参数确认控制模式设成“位置模式”或“速度模式”。在运动控制里新建一个“轴”Axis和对应的驱动器绑定。这里面比较考验人的是单位换算。假设你用的台达驱动器每转需要 10000 个脉冲减速比 1:1丝杠导程 10 毫米那么电机转一圈滑台走 10 毫米对应位置反馈就是 10000 个计数单位。如果你希望程序里输入 1 代表 1 毫米那么在 NC 轴的比例因子里要设置成1 用户单位 10000 / 10 1000 个位置计数这个公式手写一遍就懂了。很多项目最后定位不准查来查去都是这里的问题驱动器和 PLC 两边单位没对齐。3.3 一个点动实例的完整流程我建议新手先用系统自带的“虚拟轴”来练不需要接真实伺服也能看到轴状态变化。在 Motion 目录添加 NC Axis映射到一台虚拟驱动器。然后编写调用 MC 库的标准点动程序。VAR stAxis : AXIS_REF; mPower : MC_POWER; mMoveVelo : MC_MoveVelocity; bPowerEn : BOOL : TRUE; bJogPlus : BOOL : FALSE; bJogMinus : BOOL : FALSE; END_VAR mPower(Enable : bPowerEn, Axis : stAxis); mMoveVelo(Execute : bJogPlus OR bJogMinus, Axis : stAxis, Velocity : 20, Direction : SEL(bJogPlus, mcDirection_Negative, mcDirection_Positive));这段代码里SEL是选择函数条件为 TRUE 返回第一个值FALSE 返回第二个。实际调试时要注意两个方向的点动尽量不要同时触发最好在 HMI 层做互锁。MC_POWER是轴使能没有它后面的运动指令不会执行。这些函数来自 Tc2_MC2 库首次使用前记得在 Library Manager 里添加。下一步就是把虚拟轴替换成真实轴。替换前先断电把驱动器的 EtherCAT 通讯参数设好重新扫描后在轴的配置页面里选择“已扫描到的伺服驱动器”。第一次使能时把速度设低一点10mm/s 都行安全第一。4. 把实例扩展成能用的小项目IO 与 HMI4.1 EtherCAT IO 模块的接线与配置点动跑通后离完整设备还差一步IO。倍福的设备上EtherCAT 网络的下一级经常挂着远程 IO 模块比如常见的 EL 系列端子模块或者你见过的一些第三方 EtherCAT IO 模块比如很多现场会碰到类似 SC8P052IO 这种远程输出模块的命名。不管用哪家的模块配置思路都一样扫描后分配输入输出变量然后映射到 PLC 变量地址。拿一个最简单的“输入控件输出”来举例。扫描完成后你会在 IO 下看到类似 EL1008 输入模块和 EL2008 输出模块。双击输出模块里的 Channel 1在“Variable”列表里给它映射一个全局 PLC 变量比如bOutput1。同样输入模块映射bInput1。然后在程序里写bOutput1 : bInput1;激活运行后外部按钮一按输出继电器跟着动作。这个在教科书里叫“映射”在现场我们常叫“对点”。如果你遇到类似 SC8P052IO 这类模块扫描后显示“未知设备”的情况一般是缺 ESI 文件去模块厂商官网下载对应 XML 文件放到 TwinCAT 的 EtherCAT 设备描述目录重新扫描即可。4.2 用 TwinCAT HMI 给程序加个操作界面前面几个实例都还停在“PLC 层面”现实中客户要的是能操作的屏幕。TwinCAT HMI 是一套基于 Visual Studio 的开发环境做出来的页面是 HTML5 的不依赖专用的 HMI 硬件普通工控机浏览器就能打开。上手比想象中简单。新建一个 TwinCAT HMI 项目后右键“Parameters”可以添加来自 PLC 的变量。比如添加bRun、bJogPlus。然后在页面上拖一个按钮绑定bJogPlus的写入动作再拖一个圆形指示灯背景颜色绑定bRun的状态。点击 PublishHMI Server 会跑起来用浏览器输入工控机 IP 就能看到画面。这里有个细节值得注意如果 HMI 和 PLC 运行在同一个系统上通讯没问题如果 HMI 在另外一台电脑必须保证局域网能 ping 通而且 ADS 的端口 48898 不能被防火墙挡掉。有次我在客户现场怎么都连不上最后发现是 Windows 防火墙把工控机的 ADS 端口禁了放行后一切正常。4.3 一个小项目整合的关键点当我把按钮、指示灯、伺服点动、IO 点全部连起来后才算是一个“能演 demo”的小系统。这个阶段你会真正理解 TwinCAT 3 的编程模型所有东西都是变量变量在 PLC 里计算IO 负责与外部物理世界交互HMI 负责展示和操作轴控制负责运动。一套简单的项目结构可以是PLC 里放两个 POUMC 逻辑和 HMI 数据管理。所有 HMI 需要读写的变量集中放到一个统一的数据结构里不要满工程乱建。每个轴建立一个对应的 FB 去封装轴的控制字、状态字、报警在 FB 内部管理。这样拆出来的项目后面扩展第二台、第三台设备时基本就是复制修改不用推倒重来。5. 常见问题排查与避坑记录5.1 激活失败与配置下发报错你可能会在 Activate Configuration 时看到类似“Error during activating configuration: ...”的提示。多数情况是实时内核状态不对先点“Restart TwinCAT System”再试。如果仍然报错看错误码比如 0x1800 一般是配置里有模块参数不合法0x1A03 是设备不响应。我遇到最多的是这类情况工程在一台电脑上编辑拿到另一台工控机直接激活结果 EtherCAT 拓扑对不上。最好的习惯是现场重新扫描一次 IO确认从站顺序和数量无误再激活。5.2 扫描不到设备或目标IDE 和目标系统建立不了连接原因很简单ADS 路由没通。TwinCAT 的路由表里需要添加目标机的 AMS NetId 和 IP。第一次用的时候很多人忘记检查网卡是否启用“TwinCAT Real-Time Ethernet”兼容驱动。在 TwinCAT 的网卡设置里把对应网卡加进去并选择“Real-Time”模式这个操作不完成EtherCAT 扫描永远是空的。另外如果用的是笔记本调试注意无线网卡和虚拟机的网卡容易干扰建议把无关网卡全部禁用。5.3 程序逻辑很常见的数据类型问题做运动控制时很多变量是 LREAL 或 DINT但 HMI 或 IO 映射里经常要 BOOL、BYTE、WORD。比如你判断一台伺服是否到达位置驱动器状态字里某一位是布尔位但整个状态字读进来是一个 WORD。想提取其中一个位我常用WORD_TO_BOOL(状态字 AND 16#0001)这种方式或者直接用位访问操作。还有个小经验ST 里布尔变量赋给 INT 是不允许的需要显式转换。编译报错时别急着怀疑硬件先看是不是类型的锅。新手阶段百分之八十的报错都是类型不匹配。5.4 几条实战中养成的习惯调试 TwinCAT 3 项目时我每次都会做的几件事备份好用版本、标记输入输出映射表、在程序里加心跳变量并用 HMI 显示。心跳变量能快速判断“是程序死了还是画面卡了”这个技巧救过我好几次。另外下载程序的“Login”之后PLC 还没有立即处于运行态必须再点一次 F5。很多新手就是在这里卡住以为程序下载完了控制逻辑就该动结果设备纹丝不动其实是 PLC 还没运行。我自己的项目习惯是给每条轴建一个标准功能块把使能、复位、报警、点动、绝对运动全部封装到里面。这样不管接台达、松下还是倍福自家伺服外面调用的接口都一样以后换驱动品牌不用改动上层逻辑只改 FB 内部实现。如果你准备深入做运动控制项目建议把 Tc2_MC2 和 Tc3_MC3 库的常用功能块都过一遍。实测下来MC_Power、MC_Home、MC_MoveAbsolute这三个是最常用的先吃透它们再去看插补和凸轮。最后一个建议调试时给自己写个小脚本一键切换虚拟轴和真实轴开发阶段会轻松很多。本文还有配套的精品资源点击获取
返回列表