Codesys与伺服驱动器的EtherCAT配置
1. 环境准备与主站添加
打开 Codesys 编程环境,新建 一个标准工程。在设备仓库中,找到 并 添加 EtherCAT 主站控制器。
- 在项目树中,右键点击 “Device” 选项。
- 选择 “Add Device”,在弹出的对话框中 展开 “Fieldbuses” 列表。
- 选中 “EtherCAT” 并 点击 “Add Device” 按钮。
- 确认 主站已添加到项目树中,通常显示为 “EtherCAT Master”。
2. 安装从站设备描述文件(ESI)
EtherCAT 从站需要 XML 格式的设备描述文件(ESI)才能被主站识别。不同品牌的伺服驱动器需提前从官网下载对应的 XML 文件。
- 点击 菜单栏中的 “Tools” 选项,选择 “Device Repository”。
- 点击 “Install” 按钮,浏览 并 选中 伺服驱动器的 XML 描述文件。
- 点击 “Open” 完成安装,关闭 对话框。
3. 扫描与添加伺服驱动器
将伺服驱动器通过网线与主站连接,并确保驱动器处于“Ready”状态,供电正常。
- 切换 视图至 “Online” 模式,或 点击 项目树中 EtherCAT Master 图标前的 “+” 号。
- 右键点击 “EtherCAT Master”,选择 “Scan Devices”。
- 系统自动扫描网络,选中 扫描到的伺服驱动器,点击 “OK” 确认添加。
- 若弹出对话框询问是否自动映射 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 变量表中。
- 双击 项目树中的伺服驱动器设备,打开 其配置界面。
- 切换 到 “PDO” 或 “Process Data” 选项卡。
- 在 “RxPDO” (主站发往从站) 区域,勾选 以下关键输出项:
Control Word(控制字,索引通常为0x6040)Target Position(目标位置,索引通常为0x607A)Target Velocity(目标速度)
- 在 “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. 下载与调试
程序编写完成后,需下载至控制器并监控变量变化。
- 点击 工具栏中的 “Build” 按钮,确认 无编译错误。
- 点击 “Online” -> “Login”,将程序下载至 PLC。
- 点击 “Start” 按钮,观察 项目树中 EtherCAT 主站与从站的状态灯是否变绿。
- 打开 监控窗口,强制 修改
bEnable变量为TRUE,观察 伺服电机是否按预期动作。

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