文章目录

Codesys与伺服驱动器的EtherCAT配置

发布于 2026-03-25 11:32:05 · 浏览 9 次 · 评论 0 条

Codesys与伺服驱动器的EtherCAT配置


1. 环境准备与主站添加

打开 Codesys 编程环境,新建 一个标准工程。在设备仓库中,找到添加 EtherCAT 主站控制器。

  1. 在项目树中,右键点击 “Device” 选项。
  2. 选择 “Add Device”,在弹出的对话框中 展开 “Fieldbuses” 列表。
  3. 选中 “EtherCAT” 并 点击 “Add Device” 按钮。
  4. 确认 主站已添加到项目树中,通常显示为 “EtherCAT Master”。

2. 安装从站设备描述文件(ESI)

EtherCAT 从站需要 XML 格式的设备描述文件(ESI)才能被主站识别。不同品牌的伺服驱动器需提前从官网下载对应的 XML 文件。

  1. 点击 菜单栏中的 “Tools” 选项,选择 “Device Repository”。
  2. 点击 “Install” 按钮,浏览选中 伺服驱动器的 XML 描述文件。
  3. 点击 “Open” 完成安装,关闭 对话框。

3. 扫描与添加伺服驱动器

将伺服驱动器通过网线与主站连接,并确保驱动器处于“Ready”状态,供电正常。

  1. 切换 视图至 “Online” 模式,或 点击 项目树中 EtherCAT Master 图标前的 “+” 号。
  2. 右键点击 “EtherCAT Master”,选择 “Scan Devices”。
  3. 系统自动扫描网络,选中 扫描到的伺服驱动器,点击 “OK” 确认添加。
  4. 若弹出对话框询问是否自动映射 I/O,选择 “No”,手动配置更可靠。

4. EtherCAT状态机机制

EtherCAT 通信状态的切换是驱动器运行的前提。主站会自动引导从站经历 Init、Pre-Op、Safe-Op 和 Op 四个阶段。只有进入 Op 状态,实时数据交换才真正开始。

graph LR A["状态: Init"] --> B["状态: Pre-Op"] B --> C["状态: Safe-Op"] C --> D["状态: Op"] D -- "发生错误" --> E["状态: Init"] B -- "配置失败" --> E

检查 通信状态的方法:点击 项目树中的驱动器节点,在右侧监控界面观察 “State” 一栏。若未显示 OP,需检查网线连接或 XML 文件版本。


5. PDO映射配置

过程数据对象(PDO)定义了主站与驱动器之间实时交换的数据。必须将控制字、状态字、目标位置等变量映射到 PLC 变量表中。

  1. 双击 项目树中的伺服驱动器设备,打开 其配置界面。
  2. 切换 到 “PDO” 或 “Process Data” 选项卡。
  3. 在 “RxPDO” (主站发往从站) 区域,勾选 以下关键输出项:
    • Control Word (控制字,索引通常为 0x6040)
    • Target Position (目标位置,索引通常为 0x607A)
    • Target Velocity (目标速度)
  4. 在 “TxPDO” (从站发往主站) 区域,勾选 以下关键输入项:
    • Status Word (状态字,索引通常为 0x6041)
    • Actual Position (实际位置,索引通常为 0x6064)
    • Error Code (错误代码)

常用CANopen对象映射关系如下表所示:

对象名称 索引 方向 功能说明
Control Word 0x6040 Output (Rx) 控制驱动器启停、使能
Status Word 0x6041 Input (Tx) 反馈驱动器当前状态
Target Position 0x607A Output (Rx) 设定运动目标位置
Actual Position 0x6064 Input (Tx) 反馈当前实际位置
Modes of Operation 0x6060 Output (Rx) 设定运动模式(位置/速度/转矩)

6. 编写控制程序

展开 驱动器节点,找到自动生成的 I/O 映射变量(如 Axis1_ControlWord)。在程序中通过状态机逻辑控制驱动器的使能与运动。

定义 状态机控制变量:

PROGRAM PLC_PRG
VAR
    (* 状态机步骤变量 *)
    nStep : INT := 0;
    (* 定时器用于延时检测 *)
    tTimer : TON;
    (* 映射变量假设已自动生成,此处为示例 *)
    wControlWord AT %QW0 : WORD;
    wStatusWord AT %IW0 : WORD;
    nTargetPos AT %QD2 : DINT;
    bEnable : BOOL;
END_VAR

编写 控制逻辑代码:

(* 标准状态机控制逻辑 *)
CASE nStep OF
    0: (* 初始化:等待驱动器就绪 *)
        (* 状态字Bit0为1表示准备就绪 *)
        IF (wStatusWord AND 16#0001) <> 0 THEN
            nStep := 1;
        END_IF;

    1: (* 发送 shutdown 命令 *)
        (* 控制字写入 16#0006 *)
        wControlWord := 16#0006;
        nStep := 2;

    2: (* 等待 Switch On Disabled 状态 *)
        (* 状态字Bit2为1 *)
        IF (wStatusWord AND 16#0004) <> 0 THEN
            nStep := 3;
        END_IF;

    3: (* 发送 Switch On 命令 *)
        (* 控制字写入 16#0007 *)
        wControlWord := 16#0007;
        tTimer(IN := TRUE, PT := T#100MS);
        IF tTimer.Q THEN
            tTimer(IN := FALSE);
            nStep := 4;
        END_IF;

    4: (* 使能完成,进入 Operation Enabled *)
        (* 控制字写入 16#000F *)
        wControlWord := 16#000F;
        (* 状态字Bit1为1表示已使能 *)
        IF (wStatusWord AND 16#0001) <> 0 THEN
            nStep := 5;
        END_IF;

    5: (* 运动控制阶段 *)
        (* 此处可设置目标位置并触发运动 *)
        nTargetPos := 10000;
        (* 控制字Bit4置1触发新位置设定 *)
        wControlWord := 16#001F;
END_CASE

7. 下载与调试

程序编写完成后,需下载至控制器并监控变量变化。

  1. 点击 工具栏中的 “Build” 按钮,确认 无编译错误。
  2. 点击 “Online” -> “Login”,将程序下载至 PLC。
  3. 点击 “Start” 按钮,观察 项目树中 EtherCAT 主站与从站的状态灯是否变绿。
  4. 打开 监控窗口,强制 修改 bEnable 变量为 TRUE观察 伺服电机是否按预期动作。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文