4. TwinCAT 3开发环境搭建
在开始编写任何 XPlanar 与视觉协同的控制逻辑之前,必须先建立一个结构清晰、实时性可控的 TwinCAT 3 工程。本节以一个典型的“单动子 + 单相机”协同场景为例,完整走通从新建工程到实时任务可运行的全过程。示例中使用的 PLC 项目名为 XPlanarVision_Demo,目标控制器为搭载 TwinCAT 3.1.4024 的工业 PC,XPlanar 系统包含 1 个定子(6 个动子位)和 1 个动子,视觉部分使用一台 GigE 相机。
一、新建 TwinCAT 3 工程与目标系统连接
打开 Visual Studio 后,通过 文件 → 新建 → 项目 选择 TwinCAT XAE Project (XML format),命名为 XPlanarVision_Demo。工程创建后,解决方案资源管理器中会出现 SYSTEM、MOTION、PLC、SAFETY 等节点。此时工程仍处于本地配置模式,需要先与目标控制器建立连接:在 SYSTEM → General 中点击 Choose Target System,输入目标 IP(示例为 192.168.10.20),选择 Run Mode 后激活配置。连接成功的标志是 SYSTEM 节点下出现目标系统的实时状态,且 Real-Time 页面可看到 CPU 占用与任务列表。
需要特别注意的是,XPlanar 对实时性要求较高,建议在 SYSTEM → Real-Time → Settings 中把实时核(RT CPU)单独分配给一个物理核心,并将 Base Time 设为 1 ms。若目标机为多核 CPU,可将 PLC 任务绑定到 CPU 1,视觉通信任务绑定到 CPU 2,避免与 Windows 系统争抢资源。
二、导入 XPlanar 库与视觉接口库
XPlanar 的功能通过 TwinCAT 3 的库(Library)方式提供。在 PLC → References 上右键选择 Add Library,在库仓库中依次添加以下两个核心库:
Tc3_XPlanar:提供 XPlanar 定子、动子、位置控制、力控制等核心功能块,如FB_XPlanarStator、FB_XPlanarMover。Tc3_Vision:提供与视觉系统交互的接口功能块,如FB_VisionTrigger、FB_VisionResult,用于触发拍照和接收坐标结果。
如果视觉系统采用第三方相机(如 Basler、Cognex),则还需导入对应的 Tc3_Vision_Vendor 库,或通过 Tc3_GiGECamera 库直接访问 GigE 相机。导入完成后,在 References 下应能看到库版本号,例如 Tc3_XPlanar 1.2.3.0。若版本不匹配,编译时会报“库版本冲突”,此时需在库属性中勾选 Specific Version 并手动选择与控制器固件匹配的版本。
Tools → Library Repository 检查。三、视觉接口配置:从相机到 PLC 的数据通道
视觉接口配置的核心是建立“触发—拍照—结果回传”的闭环。在 I/O → Devices 下右键 Scan Devices,系统会自动识别 GigE 相机并生成一个 Camera 设备节点。在该节点下添加一个 Process Image,将相机输出的坐标数据(示例中为 X_Coord、Y_Coord、Angle)映射到 PLC 的输入变量。映射关系如下表所示:
| 相机输出字段 | PLC 变量 | 数据类型 | 说明 |
|---|---|---|---|
| X_Coord | stVisionResult.fX | REAL | 目标 X 坐标(mm) |
| Y_Coord | stVisionResult.fY | REAL | 目标 Y 坐标(mm) |
| Angle | stVisionResult.fAngle | REAL | 目标旋转角(°) |
| TriggerAck | bVisionDone | BOOL | 拍照完成标志 |
在 PLC 侧,需要声明一个与相机数据结构对应的 STRUCT,并通过 AT %I* 地址与过程映像绑定。示例代码如下:
TYPE ST_VisionResult :
STRUCT
fX : REAL;
fY : REAL;
fAngle : REAL;
bDone : BOOL;
END_STRUCT
END_TYPE
VAR_GLOBAL
stVisionResult AT %I* : ST_VisionResult;
bVisionTrigger AT %Q* : BOOL;
END_VAR
触发信号 bVisionTrigger 由 PLC 输出到相机,相机完成拍照后置位 bDone,PLC 在下一个周期读取坐标。这一过程必须在同一个实时任务中完成,否则会出现数据错位。
四、实时任务设置与任务绑定
在 SYSTEM → Real-Time → Tasks 下新建两个任务:PlcTask(周期 1 ms)和 VisionTask(周期 2 ms)。PlcTask 负责 XPlanar 动子运动控制,VisionTask 负责视觉触发与结果处理。将 MAIN 程序分配给 PlcTask,将视觉处理程序 PRG_Vision 分配给 VisionTask。任务优先级建议 PlcTask 设为 20,VisionTask 设为 15,确保运动控制优先执行。
任务绑定完成后,在 PLC → Instance 中确认 Task 列已正确关联。若未关联,程序不会执行。最后激活配置并进入 Run Mode,观察 Real-Time 页面中两个任务的 Cycle Time 是否稳定在设定值附近。若出现明显抖动(如超过设定值 20%),需检查 CPU 负载或调整任务周期。
五、验证工程可运行性
完成上述配置后,按 F5 激活配置并进入运行模式。在 PLC → MAIN 中在线观察 bVisionTrigger 是否按 2 ms 周期翻转,stVisionResult.fX 是否在相机拍照后更新为有效坐标。若 bDone 始终为 FALSE,应检查相机触发线是否接好、过程映像映射是否正确。若 XPlanar 动子无动作,需确认 FB_XPlanarMover 的 Enable 输入已置位,且定子已使能。
一个常见的实时性问题是:视觉结果回传后,PlcTask 在下一个周期才读取,导致动子运动滞后 1 ms。对于大多数协同场景,1 ms 的滞后可以接受;若要求更严格,可将视觉结果处理直接放在 PlcTask 中,但需确保相机通信不阻塞任务。此时建议使用 FB_VisionResult 的非阻塞读取模式,并在任务中增加超时判断。