Skip to main content

使用 SM_Drive_PosControl 对控制器进行位置控制

PosControl.project 安装目录下的示例项目 CODESYS 在下面 ..\CODESYS SoftMotion\Examples.

在大多数情况下,伺服控制接管驱动器的位置控制,以及功率控制和转速控制。但是,在某些用例中,控制器会接管轴的位置控制。此示例演示了速度控制设备(例如,带有位置反馈的变频器)如何通过以下方式进行位置控制 CODESYS SoftMotion.

要求是一个由设定的速度控制并返回其当前位置的设备。在此示例中,10V 模拟输出端子 EL4031 与用作变频器速度设定值的信号一起使用。编码器端子 EL5101 用于位置反馈。

通过 SM_Drive_PosControl 控制轴位置

  1. 添加位置控制轴类型 SM_Drive_PosControl 以下 SoftMotion 通用轴池 在设备树中。

  2. 将模拟端子 (EL4031) 和编码器 (EL5101) 的端子添加到设备树中。

    设备树:

    _sm_img_example_poscontrol_1.png

    提示

    必须从制造商处下载并安装现场总线设备的设备描述。

  3. 打开 SM_Drive_PosControl 编辑器中的设备并使用值指定通用参数 Modulo 360.0一般的 标签。

  4. 点击 缩放/映射 标签。电机每转的增量数取自编码器的数据表。在这个例子中, 4096 增量 (1) 是电机转一圈。因为您在应用程序中使用角度,所以您指定值 360 (2) 对于 申请单位.

    设置:

    _sm_img_example_poscontrol_2.png
  5. 切换到 SoftMotion 驱动器:位置控制回路 选项卡并指定以下参数:

    • D 2.0

      死区时间决定了接收到的实际位置(编码器)相移到轴的设定位置的周期数。死区时间取决于应用的组件,并且必须通过反复试验来确定。

    • Kp 0.0

      比例常数是位置误差(设定位置与实际位置之间的偏差)乘以稍后添加到设定速度的系数。现在将此值设置为 0.稍后您将通过实验确定该值。

    • Bit width: 16

      根据使用的组件接收实际值的位宽,可以设置为 16、24 或 32 位值。将值设置为 16 因为使用的组件产生的位置为 UINT.

    • _cds_icon_option_deactivated.pngmax

      关闭位置误差监控开关。如有必要,您可以重新打开它。选中该复选框并指定最大允许滞后。如果在操作期间超过该值,则轴进入错误状态。

    • δ/δt

      该参数的值为 1,仅在非常特殊的情况下才应更改。它定义了设定速度和位置推导之间的关系。取值范围是 0 到 1:

      0: 的价值 fSetVelocity 用作源。

      1:设定位置的数值推导用作来源。

    控制回路:

    _sm_img_example_poscontrol_3.png
  6. 现在您设置发送到执行器的速度值。为此,您必须知道应用单位的最大速度和传输数据的相应原始值。在这个例子中,最大速度是通过输出值来实现的 16#7FFF,这对应于每秒 10 圈的速度。根据设置,这也对应于每秒 3600 度。

    设置:

    _sm_img_example_poscontrol_5.png

变量到输入和输出的映射

将带有轴数据的变量映射到 I/O 模块。轴的可用循环数据位于数据结构中 inout.您可以在输入和输出设备的设备编辑器中以编程方式或直接建立此连接。

  1. 将输出(设定速度)连接到 EL4031 设备。在编辑器中打开设备并单击 EtherCAT I/O 映射 标签。分配变量 out.iSetVelocity 轴的输出。在 32 位输出的情况下, out.diSetVelocity 用来。

    映射:

    _sm_img_example_poscontrol_7.png
  2. 以同样的方式进行位置输入。在编辑器中打开EL5101设备,将位置输入值设置为 in.wActPosition.对于 32 位输入,将值设置为 in.dwActPosition.映射:

    _sm_img_example_poscontrol_8.png
  3. 为使控制使能、快速停止和限位开关动作,相应的输入 SMC_PosControlInput 必须由驱动器的值定义。的输出 SMC_PosControlOutput 必须传输到驱动器(参见下面的说明)。例如,如果驱动器不支持快速停止,则 SM_Drive_PosControl.in.bDriveStartRealState := TRUE 必须设置和 SM_Drive_PosControl.out.bDriveStart 可以忽略。在这个例子中, bDriveStartRealStatebRegulatorRealState 必须在应用程序中设置。

SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;

确定系统的死区时间

现在设置轴的在线模式并设置控制参数。

重要

请注意,轴可能会失去控制。因此,您必须采取相应的安全预防措施。

然后尝试在没有位置控制的情况下操作轴。fKp 已设置为 0.0,并且缩放设置已验证。将轴切换到 MC_Power 并开始 MC_MoveVelocity.轴现在以 1 U/s 的编程速度移动。在出现偏差的情况下,您必须相应地更正缩放比例。

  1. 结束运动,例如 MC_MoveRelative, 并启动跟踪功能。

  2. 通过测量设定位置和实际位置之间的时间差来确定系统的死机时间。

    MC_MoveRelative,设置最大速度和大加速度。开始采样跟踪 MC_MoveRelative.现在确定设定位置的开始运动与实际位置的第一反应之间的时间差。

    痕迹:

    _sm_img_example_poscontrol_6.png
  3. 确定死机时间 D,将此时差除以周期时间(D = 时差/循环时间)。 SoftMotion Drive:位置控制 选项卡,在控制回路中指定此值 D

  4. 现在尝试确定 fKp. 的正确设置。为此,请更改观察列表中变量 <drive>.controller.fKp 的值。

    设置 fKp 变为一个较小的数字(例如,0.0001),然后逐步增加该值。使用采样轨迹检查每次变化的行为。一旦检测到波动,就达到了上限。现在减小其值 fKp 增加大约 10%,然后在 SoftMotion Drive:位置控制 控制回路中的选项卡 Kp

    现在你可以使用轴了。

功能块 SMC_PosControlInput

图书馆: SM3_Drive_PosControl

2. 输入 (VAR_INPUT)

姓名

数据类型

初始值

描述

bLimitPos

BOOL

正向限位开关(仅限有限轴)

自从那 SoftMotion 版本 4.12.0.0,限位开关监控在默认情况下处于启用状态。对于旧版本,必须通过设置手动启用此 bHWLimitEnableTRUE。这通常是通过写入相应的参数号来完成 1206 通过以下方式 MC_WriteBoolParameter

TRUE:限位开关未启动

FALSE:限位开关启动

bLimitNeg

BOOL

负向限位开关

TRUE:限位开关未启动

FALSE:限位开关启动

wActPosition

WORD

当前位置(实际位置)为 16 位值

dwActPosition

DWORD

当前位置(实际位置)为 32 位值

bExternalError

BOOL

外部错误

bRegulatorRealState

BOOL

TRUE: 轴被控制

bDriveStartRealState

BOOL

FALSE: 轴入 Quick Stop

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: 只要 bDelayActivationTRUE, SM3_Drive_PosControl 不切换到通讯状态 100.

用例:值保持在 TRUE 直到应用的编码器产生有效的位置值。



功能块:SMC_PosControlOutput

图书馆: SM3_Drive_PosControl

3. 输出 (VAR_OUTPUT)

姓名

数据类型

初始值

描述

bRegulatorOnIn

BOOL

TRUE: 应该控制轴。

bDriveStart

BOOL

FALSE:轴应执行快速停止。

diSetVelocity

DINT

设定速度

iSetVelocity

INT

设定速度



功能块:SMC_SetPosControlParams

图书馆: SM3_Drive_PosControl

改变一个参数 SM3_Drive_PosControl

4. 输入 (VAR_INPUT)

姓名

数据类型

初始值

描述

Axis

AXIS_REF_POSCONTROL

轴参考

bExecute

BOOL

TRUE:激活功能块的执行

fKp

LREAL

-1

滞后的比例增益

小于 0 的值将被忽略。

fPartVelPilotControl

LREAL

-1

速度控制系数 fSetPosition

0:无速度先导控制; 1:直接输出 fSetVelocity.小于 0 的值将被忽略。

fDeadTime

LREAL

-1

之间的周期时间滞后 fSetPositionfActPositioin

该值不得为 0。小于 0 的值将被忽略。

fMaxPositionDiff

LREAL

-1

最大位置滞后

0 禁用最大位置滞后的检查。小于 0 的值将被忽略。



5. 输出 (VAR_OUTPUT)

姓名

数据类型

初始值

描述

bDone

BOOL

功能块的执行已结束。

bError

BOOL

TRUE: 功能块中发生错误。

ErrorID

SMC_ERROR

错误识别



2. 例子

轴驱动参数 SM_Drive_PosControl 设置。

PROGRAM PLC_PRG
VAR
        fbSetPosControlParams : SMC_SetPosControlParams;
END_VAR

fbSetPosControlParams.fKp := 1;
fbSetPosControlParams.fPartVelPilotControl :=0;
fbSetPosControlParams.fDeadTime :=0.1;
fbSetPosControlParams.fMaxPositionDiff :=1;

fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);