跳转至

PCO 位置比较输出

PCO(Position Compare Output)在轴经过指定位置时由驱动器硬件直接输出脉冲,与上位机无关,时间精度由 FPGA 保证。通过 Controller.Commands[TaskId].PCO 访问,全部指令随任务运动流按序执行(配置先于其后的运动生效)。

配置流程

var commands = controller.Commands[TaskId.T01];
commands.PCO.Unit(PcoUnitMode.EngineeringUnits);   // 单位:用户单位(EU)
commands.PCO.Config("X", 10);                      // 每 10 EU 触发一次
commands.PCO.Pulse("X", 100);                      // 脉宽 100 µs
commands.PCO.Window("X", 200, 800);                // 只在 200~800 区间内输出
commands.PCO.Arm("X");                             // 打开(Arm)
// …运动…
commands.PCO.Disarm("X");                          // 关闭

PCOCommands 方法

所有带轴参数的方法都有 int(轴号)与 string(轴名)两个重载,下表以 string 为例。

Unit

public void Unit(PcoUnitMode Mode)

设置 PCO 距离单位。全局生效,重启后复位为 EngineeringUnits。单位影响 Config / ConfigVector 的间隔与 Window 的上下限换算。

Config

public void Config(string Axis, double Distance, PcoDirection Direction = PcoDirection.Both)

标量触发模式:轴每走过 Distance 输出一次脉冲。Distance 必须大于 0。

ConfigVector

public void ConfigVector(string AxisA, string AxisB, double Pitch)

矢量触发模式:按两轴合成轨迹长度每 Pitch 触发一次。两轴须在同一驱动器且 CountsPerUnit 相同;方向仅支持双向(无方向参数)。标量配置会覆盖矢量配置,反之亦然。

Pulse

public void Pulse(string Axis, double WidthUs)
public void Pulse(string Axis, double WidthUs, double PeriodUs)
public void Pulse(string Axis, double WidthUs, double PeriodUs, int Count)

脉冲波形:脉宽 ≥ 0.02 µs;周期 ≥ 脉宽(缺省 = 脉宽,即单次脉冲);次数 1~255(缺省 1)。

Window

public void Window(string Axis, double Low, double High)

窗口门控:只在 Low ~ High 位置区间内输出脉冲(单位随 Unit)。须先 Config

WindowOff

public void WindowOff(string Axis)

关闭窗口门控。

Arm

public void Arm(string Axis)

打开 PCO:内部先 Disarm 再 Arm 产生锁存沿,按已写入的间隔/波形/窗口配置开始输出。须先 Config;打开后轴状态字 PcoArmed 位置位(见 Status)。

Disarm

public void Disarm(string Axis)

关闭 PCO,停止输出。

Count

public int Count(string Axis)

读取轴所在驱动器的 PCO 已触发脉冲计数(即时 SDO 读,不经指令队列,自上次 Arm 起累计)。

枚举

PcoUnitMode

数值 说明
EngineeringUnits 0 用户单位(EU),默认
EngineeringUnitsPerThousand 1 EU / 1000
Counts 2 编码器 counts

PcoDirection

数值 说明
Both 0 双向触发(默认)
Positive 1 仅正向
Negative 2 仅负向

注意事项

  • 配置经内核代理写入驱动器 SDO,写入超时 2 s,超时任务报 ProgramTimeout
  • 同一驱动器只有一套 PCO 引擎;Config / ConfigVector 互为覆盖关系,Arm 前最后一次配置生效。

相关页面