参考工程示例中的PosControl.project! 此工程是伴随标准的CODESYS安装自动安装的。
通常情况下使用伺服驱动器,伺服驱动器本身具有位置和速度反馈以及附加的位置控制。但是此示例显示一个高速-控制器设备 (例如,一个频率控制) 并且位置反馈是通过CODESYS的位置控制实现的。
预先注意的是,通过速度对控制器进行设置并返回当前位置值是可行的。这个示例中是使用一个 10 V 模拟量输出电压模块 (Beckhoff EL4031),它输出的信号用于对变频器进行速度的设置,并通过位置编码器 (Beckhoff EL5101)返回实际的位置信息。
通过双击,可以打开SM_Drive_PosControl的设备编辑器并在表格基本以及比例/映射中对其进行设置。如果要对轴做一个正确的比例配置,你必须知道,编码器转一周的分辨率是多少。在这个示例中电机轴转一周编码器返回数据为 4096 - 如果要对度数进行操作 -这里设置度数为 360 度。
死区时间:是通过循环序号进行定义的,表明接受到的当前位置与轴的设置位置的一个相位偏移。参数取决于使用的组件并需要通过实验来确定(参阅下文)。
比例常数:这个一个比例常数并且位置错误必须是一个混合误差(设置位置和实际位置的误差)。处理之后此值会被添加到设置速度上。这个比例常数起始时被设置为0并根据实验确定。
当前的值可以被设定为 16, 24,或者 32 比特值。这必须通过控制功能块正确的设定,这里你必须设置值为 16 ,因为使用的组件返回的位置值是一个 UINT类型的数。
这个选项可以被关闭,如果在在需要的时候可以通过点击复选框重新选择。此外必须设定最大合法偏差。如果在操作过程中超过允许偏差,那么轴将会进入一个错误状态。
此处用于对速度和位置分别进行设定:通常情况下设定速度和设定位置是彼此相通的,所以这个区域只用于特殊用途。所以需要将滚动条移动到最下方使用原来的速度。
现在要进行速度比例的设定,将会产生对线圈的一个速度设定。针对这种情况需要知道应用单元中最大的速度单位以及转化工程中的相应值。在这个示例中,速度的输出值为 16#7FFF,相当于 10 转 / 根据设定的比例参数 3600 deg / s。
接下来的一步是设置总线上轴与驱动器之间的数据连接。轴可获得的数据存储在输入输出数据结构中。可以通过编程连接数据结构或者将它们映射到驱动器编辑器中的 I/O 设备映射中。如果要映射输出(旋转速度的设定)到抓手上首先要打开 EL4031 设备并且映射输出变量out.iSetVelocity 到EtherCAT I/O Mapping表格中的轴。如果输出类型为32 位宽那么必须使用变量out.diSetVelocity。
对于位置控制输入使用相同的方法。打开设备 EL5101 并映射位置输入变量到in.wActPosition (如果是 32 位宽度选择in.dwActPosition)。
如果要对轴进行操作首先应该选择以下输入参数。如果使用的组件提供这些数据(这也经常发生在使用现场总线连接一个变频器时) ,可以直接对他们进行映射,在这里这些简单变量实例是不可获取的,所以必须在应用程序中设置他们。
SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;
包含以下输入变量 ...
bLimitPos |
BOOL |
位置移动方向上限位开关 (只对线性轴适用);如果要激活这个控制, bHWLimitEnable 必须为 TRUE; 基本上这个功能可以通过 MC_WriteBoolParameter的参数 1206 写入实现) |
bLimitNeg |
BOOL |
反方向位置限制 |
wActPosition/ dwActPosition |
WORD/ DWORD |
当前位置 |
bExternalError |
BOOL |
附加错误 |
bRegulatorRealState |
BOOL |
TRUE: 轴在进行控制 |
bDriveStartRealState |
BOOL |
FALSE: 轴迅速停止 |
...以及输出变量
bRegulatorOn |
BOOL |
TRUE: 轴限位可以控制 |
bDriveStart |
BOOL |
FALSE: 轴快速停止开关 |
diSetVelocity / iSetVelocity |
DINT/INT |
设置速度 |
现在可以登录应用程序并对控制器参数进行一些设置。
提示! 请注意,轴可能会因为运动失控所以需要进行必要的保护措施。 |
首先要学会不适用位置控制的情况下对轴进行操作 (设置t fKp 为 0.0) 并修改我们的比例设置。首先通过 MC_Power启动轴并启动 MC_MoveVelocity。现在需要观察,轴通过程序编写的速度进行移动( 1 转 / s)。 如果运动不相符你必须通过比例修正。
现在停止运动 (例如MC_MoveRealtive) 并启动跟踪功能。
定义系统的死区时间必须进行实际位置和设定位置的一个偏移。为了实现这个目的设置MC_MoveRelative 一个最大的速度和加速度 (例如 108)。然后启动跟踪样条以及MC_MoveRelative。那么将会得到死区时间,现在可以测量运动起始时以及当前轴的实际位置之间的偏差。
周期时间除以绝对时间获得当前偏移周期的偏移时间。
现在可以尝试查找 fKP的当前设定。 针对这种情况,设置 fKp 为一个非常小的值 (例如 0.0001) 并重新进行测量。在每次改变时需要选择仿真样条动作。一旦你发现震荡,系统已经达到最高限制需要将值 fKP 减少 10%。这个值可以写到设备描述文件中现在这个轴就可以使用了。