3. TwinCAT 3开发环境搭建
在开始编写任何包装逻辑之前,必须先把 TwinCAT 3 的工程骨架搭起来。这一节的目标不是“装好软件”,而是让一台装有 TwinCAT 3 XAE(eXtended Automation Engineering)的工控机,能够识别到 XTS 系统的真实硬件,并把运动控制任务放进一个可预测的实时环境中。整个过程可以拆成四条相互依赖的线索:项目与解决方案的创建、XTS 系统在 I/O 树中的配置、EtherCAT 硬件扫描与拓扑确认、以及实时任务与 CPU 核的绑定。下面按实际工程顺序展开,并给出可直接参考的示例参数。
一、创建 TwinCAT 3 项目与解决方案
打开 Visual Studio(TwinCAT 3 以 VS 为外壳),选择“文件 → 新建 → 项目”,在 TwinCAT 模板下选择 TwinCAT XAE Project (XML format)。建议命名规范为 XTS_Packaging_Line01,解决方案名与项目名保持一致,便于后续版本管理。创建完成后,解决方案资源管理器会出现 SYSTEM、MOTION、PLC、SAFETY、I/O 等节点。此时先不要急着写代码,第一步是确认目标系统(Target System)指向本机或目标控制器:在 SYSTEM 上右键 → Choose Target System,选择 Local (127.0.0.1) 或实际 CX 控制器 IP。若使用本地仿真,可先选 Local,但 XTS 硬件调试必须切回真实控制器。
接着设置 Real-Time 优先级与 CPU 亲和性。在 SYSTEM → Real-Time 下,可以看到 CPU 列表与已分配的核。典型做法是:把 Windows 系统与 TwinCAT 工程环境放在 CPU0,把 XTS 运动控制任务放在 CPU1 或 CPU2,避免与操作系统抢占。示例:CPU1 分配给 RT-CPU1,Base Time 设为 1 ms,任务优先级设为 20(数值越小优先级越高,需结合系统实际调整)。这一步决定了后续运动任务能否稳定运行。
二、XTS 配置:从 I/O 树到耦合器
XTS 系统由 XTS 电机模块(Motor Module)、供电模块(Power Supply)、耦合器/控制器(Coupler) 以及 动子(Mover) 组成。在 TwinCAT 中,XTS 不是通过“新建一个 XTS 对象”来配置的,而是通过 EtherCAT 从站扫描后,在 I/O 树中形成对应的设备节点。因此,XTS 配置的核心是:先扫描,再确认拓扑,最后映射过程数据。
在 I/O → Devices 上右键 → Scan,选择目标网卡(例如 Intel I210 或 Realtek GbE)。扫描前需确认 EtherCAT 网线已连接 XTS 耦合器的 IN 口,且耦合器供电正常。扫描成功后,I/O 树会出现类似 Device 1 (EtherCAT) 的节点,展开后可见 Box 1 (XTS Coupler)、Box 2 (XTS Power Supply)、Box 3 (XTS Motor Module) 等。若扫描不到,优先检查网卡是否被 TwinCAT 驱动接管(在 Device → Adapter 中查看),以及耦合器 RUN 灯是否常亮。
扫描完成后,需要核对 拓扑顺序:EtherCAT 从站按物理连接顺序排列,XTS 的供电模块通常位于耦合器之后、电机模块之前。若顺序错误,可在 Device 上右键 → EtherCAT → Reload Device Descriptions,或手动调整 Box 顺序。随后在 Box (XTS Coupler) 的 Process Data 中,确认 Mover Position、Mover Velocity、Status Word、Control Word 等 PDO 已勾选。这些过程数据是后续 PLC 与运动控制之间交换信息的通道。
三、I/O 扫描后的关键检查点
扫描完成并不等于配置正确。需要逐项确认以下内容:第一,设备状态。在 Device 上右键 → EtherCAT → State Machine,查看是否进入 OP 状态。若停留在 PREOP 或 SAFEOP,通常是 PDO 映射不完整或从站描述文件缺失。第二,过程数据长度。在 Box → Process Data 中,确认输入/输出字节数与 XTS 手册一致,例如耦合器输入 32 字节、输出 16 字节(示例值,需以实际设备为准)。第三,分布式时钟。XTS 对同步精度要求较高,需在 Device → EtherCAT → Distributed Clocks 中启用 DC,并设置 Sync Unit 为 XTS Coupler。若 DC 未启用,动子位置可能出现周期性抖动。
此外,建议在 I/O → Devices → Device 1 → Box 1 的 CoE 中检查 0x1C12 与 0x1C13 的 PDO 分配,确保 Mover Position 与 Mover Velocity 已正确挂载。若后续 PLC 中读取到的位置值始终为 0,优先回到这里排查。
四、实时任务设置与 PLC 任务绑定
XTS 包装设备对实时性要求较高,通常需要将 PLC 任务与运动任务放在同一个实时核上,并设置合适的任务周期。在 SYSTEM → Real-Time 中,先确认 Shared Memory 与 CPU Isolation 已按需启用。然后在 PLC → Project → Tasks 中,右键 Add New Item → Task,创建 PlcTask_XTS。双击该任务,在 Task 选项卡中设置:
- Cycle Time:1 ms(与 XTS 运动周期匹配,示例值)
- Priority:20(数值越小优先级越高,需与系统任务协调)
- CPU Affinity:CPU1(与运动任务同核)
- Watchdog:启用,超时时间设为 5 ms
接着在 MOTION → NC-Task 中,将 NC-Task 的 Cycle Time 也设为 1 ms,并绑定到 CPU1。这样 PLC 与 NC 在同一核上以相同周期运行,减少跨核通信延迟。若使用 TC3 Motion 的 XTS 轴,还需在 MOTION → Axes 下添加 XTS Axis,并将其 Setpoint Generator 与 NC-Task 关联。
SYSTEM → Real-Time → CPU Usage 观察各核负载,确保实时核负载低于 70%。
五、编译、激活与验证
完成上述配置后,点击 Build → Build Solution,确认无错误。然后点击 Activate Configuration(或按 Ctrl+Shift+F5),TwinCAT 会提示重启系统进入 Run Mode。激活后,在 I/O 树中观察各 Box 是否变为 OP 状态,Mover Position 是否随动子移动而变化。若位置值正常刷新,说明 I/O 扫描与过程数据映射已生效;若 PLC 任务周期稳定在 1 ms 且无 Watchdog 报警,说明实时任务设置正确。
最后,建议在 PLC 中新建一个 MAIN 程序,写入最简单的读取代码,例如将 Mover Position 映射到全局变量 gMoverPos,并在 Online → Write Values 中观察数值变化。这一步是后续包装逻辑开发的起点,也是验证整个工程骨架是否可用的最小闭环。