跳到主要内容

禾川 X3E · 500µs CSP

单轴 CiA 402 CSP 使用案例。一台禾川 X3E,总线周期 500 µs(2000 Hz)。主站每个周期写目标位置 0x607A

工程:HCFA_X3E_QuarterTurn

多轴齿轮 / 凸轮见 运动控制

做什么

界面三个按钮:连接 → 使能 → 开始

开始后电机按节拍转:100 ms 走 1/4 圈,停 400 ms,再走下一圈。每个 500 µs 周期都要写出 0x607A(停顿时也写,保持终点)。

驱动禾川 X3E
周期500 µs
模式CSP(0x6060 = 8
轴数1
配置主站工具导出的 .deni 放到程序目录

使能顺序:0x604006 → 07 → 0F。停止:0x6040 = 0

PDO

  • 输出 9 字节:60406060607A60B8
  • 输入 25 字节:603F60416064606160B960BA60F460FD213F

过程映像映射成结构体。改字段就是改 PDO。

周期回调

using System;
using System.Runtime.InteropServices;
using DarraEtherCAT_Master;

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct X3eIn
{
public ushort ErrorCode;
public ushort StatusWord;
public int ActualPosition;
public sbyte ModeDisplay;
public ushort ProbeStatus;
public int ProbePos1;
public int FollowingError;
public uint DigitalInputs;
public ushort VendorStatus;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct X3eOut
{
public ushort ControlWord;
public sbyte Mode;
public int TargetPosition;
public ushort ProbeFunction;
}

master.Config.LoopCycle = 500000;

var t0 = DateTime.UtcNow;
int origin = 0;
int quarter = ppr / 4;
bool originLocked = false;

master.Events.ProcessDataCyclicSync += _ =>
{
ref var input = ref master.Slaves[0].PDO.InputsMapping<X3eIn>();
ref var output = ref master.Slaves[0].PDO.OutputsMapping<X3eOut>();
if (!originLocked) { origin = input.ActualPosition; originLocked = true; }

long ms = (long)(DateTime.UtcNow - t0).TotalMilliseconds;
int target = QuarterTarget(origin, quarter, ms);

output.ControlWord = 0x000F;
output.Mode = 8;
output.TargetPosition = target;
};

QuarterTarget 在开源工程 PdoQuarterStep.cs