使用 SM_Drive_PosControl 对控制器进行位置控制
见 PosControl.project
安装目录下的示例项目 CODESYS 在下面 ..\CODESYS SoftMotion\Examples
.
在大多数情况下,伺服控制接管驱动器的位置控制,以及功率控制和转速控制。但是,在某些用例中,控制器会接管轴的位置控制。此示例演示了速度控制设备(例如,带有位置反馈的变频器)如何通过以下方式进行位置控制 CODESYS SoftMotion.
要求是一个由设定的速度控制并返回其当前位置的设备。在此示例中,10V 模拟输出端子 EL4031 与用作变频器速度设定值的信号一起使用。编码器端子 EL5101 用于位置反馈。
通过 SM_Drive_PosControl 控制轴位置
添加位置控制轴类型
SM_Drive_PosControl
以下 SoftMotion 通用轴池 在设备树中。将模拟端子 (EL4031) 和编码器 (EL5101) 的端子添加到设备树中。
设备树:
提示
必须从制造商处下载并安装现场总线设备的设备描述。
打开
SM_Drive_PosControl
编辑器中的设备并使用值指定通用参数 Modulo360.0
在 一般的 标签。点击 缩放/映射 标签。电机每转的增量数取自编码器的数据表。在这个例子中,
4096
增量 (1) 是电机转一圈。因为您在应用程序中使用角度,所以您指定值360
(2) 对于 申请单位.设置:
切换到 SoftMotion 驱动器:位置控制回路 选项卡并指定以下参数:
D 2.0
死区时间决定了接收到的实际位置(编码器)相移到轴的设定位置的周期数。死区时间取决于应用的组件,并且必须通过反复试验来确定。
Kp 0.0
比例常数是位置误差(设定位置与实际位置之间的偏差)乘以稍后添加到设定速度的系数。现在将此值设置为
0
.稍后您将通过实验确定该值。Bit width: 16
根据使用的组件接收实际值的位宽,可以设置为 16、24 或 32 位值。将值设置为
16
因为使用的组件产生的位置为UINT
.max
关闭位置误差监控开关。如有必要,您可以重新打开它。选中该复选框并指定最大允许滞后。如果在操作期间超过该值,则轴进入错误状态。
δ/δt
该参数的值为 1,仅在非常特殊的情况下才应更改。它定义了设定速度和位置推导之间的关系。取值范围是 0 到 1:
0
: 的价值fSetVelocity
用作源。1
:设定位置的数值推导用作来源。
控制回路:
现在您设置发送到执行器的速度值。为此,您必须知道应用单位的最大速度和传输数据的相应原始值。在这个例子中,最大速度是通过输出值来实现的
16#7FFF
,这对应于每秒 10 圈的速度。根据设置,这也对应于每秒 3600 度。设置:
变量到输入和输出的映射
将带有轴数据的变量映射到 I/O 模块。轴的可用循环数据位于数据结构中 in
和 out
.您可以在输入和输出设备的设备编辑器中以编程方式或直接建立此连接。
将输出(设定速度)连接到 EL4031 设备。在编辑器中打开设备并单击 EtherCAT I/O 映射 标签。分配变量
out.iSetVelocity
轴的输出。在 32 位输出的情况下,out.diSetVelocity
用来。映射:
以同样的方式进行位置输入。在编辑器中打开EL5101设备,将位置输入值设置为
in.wActPosition
.对于 32 位输入,将值设置为in.dwActPosition
.映射:为使控制使能、快速停止和限位开关动作,相应的输入
SMC_PosControlInput
必须由驱动器的值定义。的输出SMC_PosControlOutput
必须传输到驱动器(参见下面的说明)。例如,如果驱动器不支持快速停止,则SM_Drive_PosControl.in.bDriveStartRealState := TRUE
必须设置和SM_Drive_PosControl.out.bDriveStart
可以忽略。在这个例子中,bDriveStartRealState
和bRegulatorRealState
必须在应用程序中设置。
SM_Drive_PosControl.in.bDriveStartRealState := TRUE; SM_Drive_PosControl.in.bRegulatorRealState := TRUE;
确定系统的死区时间
现在设置轴的在线模式并设置控制参数。
重要
请注意,轴可能会失去控制。因此,您必须采取相应的安全预防措施。
然后尝试在没有位置控制的情况下操作轴。fKp
已设置为 0.0,并且缩放设置已验证。将轴切换到 MC_Power
并开始 MC_MoveVelocity
.轴现在以 1 U/s 的编程速度移动。在出现偏差的情况下,您必须相应地更正缩放比例。
结束运动,例如
MC_MoveRelative
, 并启动跟踪功能。通过测量设定位置和实际位置之间的时间差来确定系统的死机时间。
在
MC_MoveRelative
,设置最大速度和大加速度。开始采样跟踪MC_MoveRelative
.现在确定设定位置的开始运动与实际位置的第一反应之间的时间差。痕迹:
确定死机时间
D
,将此时差除以周期时间(D = 时差/循环时间)。 SoftMotion Drive:位置控制 选项卡,在控制回路中指定此值D
。现在尝试确定
fKp
. 的正确设置。为此,请更改观察列表中变量<drive>.controller.fKp
的值。设置
fKp
变为一个较小的数字(例如,0.0001),然后逐步增加该值。使用采样轨迹检查每次变化的行为。一旦检测到波动,就达到了上限。现在减小其值fKp
增加大约 10%,然后在 SoftMotion Drive:位置控制 控制回路中的选项卡Kp
。现在你可以使用轴了。
功能块 SMC_PosControlInput
图书馆: SM3_Drive_PosControl
姓名 | 数据类型 | 初始值 | 描述 |
---|---|---|---|
|
| 正向限位开关(仅限有限轴) 自从那 SoftMotion 版本 4.12.0.0,限位开关监控在默认情况下处于启用状态。对于旧版本,必须通过设置手动启用此
| |
|
| 负向限位开关
| |
|
| 当前位置(实际位置)为 16 位值 | |
|
| 当前位置(实际位置)为 32 位值 | |
|
| 外部错误 | |
|
|
| |
|
|
| |
|
|
| |
|
|
用例:值保持在 |
功能块:SMC_PosControlOutput
图书馆: SM3_Drive_PosControl
姓名 | 数据类型 | 初始值 | 描述 |
---|---|---|---|
|
|
| |
|
|
| |
|
| 设定速度 | |
|
| 设定速度 |
功能块:SMC_SetPosControlParams
图书馆: SM3_Drive_PosControl
改变一个参数 SM3_Drive_PosControl
轴
姓名 | 数据类型 | 初始值 | 描述 |
---|---|---|---|
|
| 轴参考 | |
|
|
| |
|
| -1 | 滞后的比例增益 小于 0 的值将被忽略。 |
|
| -1 | 速度控制系数 0:无速度先导控制; 1:直接输出 |
|
| -1 | 之间的周期时间滞后 该值不得为 0。小于 0 的值将被忽略。 |
|
| -1 | 最大位置滞后 0 禁用最大位置滞后的检查。小于 0 的值将被忽略。 |
姓名 | 数据类型 | 初始值 | 描述 |
---|---|---|---|
|
| 功能块的执行已结束。 | |
|
|
| |
|
| 错误识别 |
轴驱动参数 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);