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 并手动选择与控制器固件匹配的版本。

建议在导入库后立即执行一次 Build → Build Solution,确认无编译错误再继续。若出现“未解析的引用”,通常是库未正确安装到 TwinCAT 库仓库,可通过 Tools → Library Repository 检查。

三、视觉接口配置:从相机到 PLC 的数据通道

视觉接口配置的核心是建立“触发—拍照—结果回传”的闭环。在 I/O → Devices 下右键 Scan Devices,系统会自动识别 GigE 相机并生成一个 Camera 设备节点。在该节点下添加一个 Process Image,将相机输出的坐标数据(示例中为 X_Coord、Y_Coord、Angle)映射到 PLC 的输入变量。映射关系如下表所示:

相机输出字段PLC 变量数据类型说明
X_CoordstVisionResult.fXREAL目标 X 坐标(mm)
Y_CoordstVisionResult.fYREAL目标 Y 坐标(mm)
AnglestVisionResult.fAngleREAL目标旋转角(°)
TriggerAckbVisionDoneBOOL拍照完成标志

在 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 负载或调整任务周期。

TwinCAT 3 工程结构:XPlanar 与视觉协同数据流 PlcTask(1 ms) MAIN 程序 XPlanar 动子控制 坐标写入 / 运动指令 优先级 20 VisionTask(2 ms) PRG_Vision 程序 触发拍照 / 结果解析 坐标回传至全局变量 优先级 15 Tc3_XPlanar 库 FB_XPlanarStator FB_XPlanarMover Tc3_Vision 库 FB_VisionTrigger FB_VisionResult GigE 相机 Process Image 映射 X / Y / Angle / Done 调用功能块 调用功能块 结果回传 触发信号 坐标请求 全局变量区 stVisionResult / bVisionDone 图例 数据/触发流 共享变量访问

五、验证工程可运行性

完成上述配置后,按 F5 激活配置并进入运行模式。在 PLC → MAIN 中在线观察 bVisionTrigger 是否按 2 ms 周期翻转,stVisionResult.fX 是否在相机拍照后更新为有效坐标。若 bDone 始终为 FALSE,应检查相机触发线是否接好、过程映像映射是否正确。若 XPlanar 动子无动作,需确认 FB_XPlanarMover 的 Enable 输入已置位,且定子已使能。

一个常见的实时性问题是:视觉结果回传后,PlcTask 在下一个周期才读取,导致动子运动滞后 1 ms。对于大多数协同场景,1 ms 的滞后可以接受;若要求更严格,可将视觉结果处理直接放在 PlcTask 中,但需确保相机通信不阻塞任务。此时建议使用 FB_VisionResult 的非阻塞读取模式,并在任务中增加超时判断。

切勿在 PlcTask 中执行耗时超过 500 μs 的操作(如文件读写、网络等待)。若必须执行,应将其放入较低优先级的 VisionTask 或独立的后台任务中,否则会导致 XPlanar 运动控制周期抖动,甚至触发看门狗错误。