此功能块位于CODESYS SoftMotion 函数库 ⇘ SM3_CNC.Bibliothek。 SMC_Interpolator 功能块用于将 SMC_GEOINFO 对象描述的连续路径转化为按照预定速度和时间预编译的点信息。经过此过程之后位置点可以被IEC程序(例如:驱动器-轴-位置)识别并发送到驱动器。
提示! 在路径结束位置变量 ⇘ SMC_OUTQUEUE为空。如果想再次执行相同的路径,或者通过译码器以及路径预编译重新转化 CNC 程序为 SMC_OUTQUEUE 结构体,或者使用函数 ⇘ SMC_RESTOREQUEUE (也是SM_CNC.lib一部分)。后者的处理要求 OUTQUEUE 缓冲区足够大并能包含所有路径。 |
名称 |
类型 |
初始值 |
描述 |
---|---|---|---|
VAR_IN |
|||
bExecute |
BOOL |
FALSE |
当为 TRUE,功能块被激活 |
poqDataIn |
Pointer TO ⇘ SMC_OUTQUEUE |
0 |
这个变量指向 SMC_OUTQUEUE-结构体对象,包含未经过圆滑处理的 SMC_GEOINFO-对象;通常情况下指向预处理模块 ⇘ SMC_CheckVelocities的..DataOut 输出 |
bSlow_Stop |
BOOL |
FALSE |
如果这个变量被置位 FALSE,路径将不会停止。否则, SMC_Interpolator 将会根据速度编译定义(byVelMode,)将速度值减小为 0 并且当前 GEOINFO-对象具有最大延迟 (dDecel,参阅下文) 并等待直到 bSlow_Stop 被复位为 FALSE。 |
bEmergency_Stop |
BOOL |
FALSE |
一旦输入为 TRUE,SMC_Interpolator 将导致一个紧急停止,这意味着位置将会被保留。因此,速度将会立即被设置为 0 。 |
bWaitAtNextStop |
BOOL |
FALSE |
一旦这个变量被置为 FALSE (默认),路径的处理将不会停止。否则,SMC_Interpolator 将会在下次定期停止时保持此位置,这意味着在位置点速度为 0 ,通常发生在路径角和暂停位置直到 bWaitAtNextStop 将会被复位为 FALSE。 |
dOverride |
LREAL |
1 |
这个变量可以用于处理超调。变量 dOverride 的值不允许小于 0.01。 特定对象的预定速度将会通过超调 dOverride 进行缩放;因此预定的速度可以在线模式下进行放大或者缩小。例如如果 dOverride=1 (默认) 程序中定义的预定义速度值将会被执行,如果 dOverride=2 那么速度值将会加倍。 请注意:速度超调可以在任何时候进行修改,但是如果当前的处理过程中没有加速度或者减速度,那么修改将不会执行! |
iVelMode |
SMC_INT_VELMODE |
TRAPEZOID |
此输入用于定义速度轮廓,定义在 ⇘ “SMC_INT_VELMODE (ENUM)” |
dwIpoTime |
DWORD |
0 |
这个变量需要在每次调用时进行设置,需要以 μsec 定义循环时间。 |
dLastWayPos |
LREAL |
0 |
该输入允许用户测量由插补运算计算出的路径。输出 dWayPos 为 dLastWayPos 的总和当前循环内的长度。如果 dLastWayPos=0 ,dWayPos 将会显示当前路径元素的长度。如果 dLastWayPos 被设置为与 dWayPos 相同, dWayPos 将会使当前路径始终递增,并且结果将会是覆盖路径的总长。因此, dLastWayPos 可以被复位为 0 或者在任何时候设置为其他不同值。 |
bAbort |
BOOL |
FALSE |
该输入被设置为 TRUE 将终止离线处理。 |
bSingleStep |
BOOL |
FALSE |
次输入将会影响两个路径之间的插补运算 (同样作用在切线之间的转换) 为一个周期时间内的过渡。如果 bSingleStep 在移动过程中被设置为 TRUE ,那么插补将会停止在此对象的结尾处,可以在没有处理减速度值的情况下到达目标位置。 如果插补应该在下个可能的位置停止 (例如速度为 0 的点), bWaitAtNextStop 必须使用。 |
bAcknM |
BOOL |
FALSE |
这个输入可以用作一个附加操作 (M-操作)。如果输入为 TRUE,这个操作将会被删除并且路径处理将会继续。 |
bQuick_Stop |
BOOL |
FALSE |
如果此输入为 TRUE,插补将会较小速度到0,直到 bQuick_Stop 被复位为 FALSE。减少值会根据速度预编译文件 (byVelMode,参阅下文)进行定义并且减速度值是由 dQuickDeceleration 定义的最大值以及当前路径中的延迟。如果一个二次速度曲线模式被使用,那么加加速度将会被MAX(dJerkMax, dQuickStopJerk)限制。 |
dQuickDeceleration |
LREAL |
0 |
用于 bQuick_Stop 的减速值 |
dJerkMax |
LREAL |
允许的最大加加速度:值用于二次速度模式。必须是整数并且在插补期间不能改变。 |
|
dQuickStopJerk |
LREAL |
如果选择一种速度模式,那么跳跃的加加速度将会导致一个紧急停止。 |
|
VAR_OUT |
|||
bDone |
BOOL |
FALSE |
这个变量在输入数据 (poqDataIn) 被完全处理时将会被设置为 TRUE 。此后,功能块在下次复位前将不会执行任何动作。如果输入 bExecute 为FALSE, bDone 将会被复位为 FALSE。 |
bBusy |
BOOL |
FALSE |
TRUE,功能块的处理没有完成。 |
bError |
BOOL |
FALSE |
功能块内部发生错误信号。 |
wErrorID |
SMC_ERROR |
SMC_NOERROR |
错误ID |
piSetPosition |
SMC_POSINFO |
|
这个结构体变量SMC_POSINFO将会影响当前设置位置。其中包含下一个位置的坐标以及附件轴的状态。 |
iStatus |
SMC_INT_STATUS |
IPO_INIT |
这个枚举变量反应功能块的当前状态 ⇘ SMC_INT_STATUS 可能的状态:
|
bWorking |
BOOL |
FALSE |
这个输出与功能块SMC_ControlAxisByPos的输入 bEnable 相连接。 当为 TRUE列表的处理已经启动并且没有完成(IPO_ACCEL 或者 IPO_CONSTANT 或IPO_DECEL 或 IPO_WAIT)。另外,bWorking 将会被设置为 FALSE。 |
iActObjectSourceNo |
INT |
-1 |
当前 DataIn-队列处理的 SMC_GEOINFO 组件 iSourceLine_No 。如果 SMC_Interpolator 没有工作 (任何时候) (Working = FALSE),变量值将被设置为 "-1"。 |
dVel |
LREAL |
0 |
这个变量包含在给定的时间Ipo_Time从预处理位置到达Set_Position的当前速度值。 |
vecActTangent |
SMC_VECTOR3D |
|
这个结构体中包含位置 Set_Position 中定义的方向,如果 Vel = 0 ,vecAct_Tangent 将会被填充为 0 。 |
iLastSwitch |
INT |
0 |
此输出包含最后一个开关的序号。注意:如果在一个循环中包含多个开关,只有最后一个将会被提及。 |
dwSwitches |
DWORD |
0 |
这个 DWORD 描述了所有开关1 到32 的状态。DWORD 的 Bit0 对应开关 1,Bit31 对应开关 32 。因此,与 iLastSwitch 不同,所有的开关都将被关注。 |
dWayPos |
LREAL |
|
参阅上文 ( dLastWAyPos输入) 获取更多帮助。 在每次 SMC_Interpolator 调用将会预算并提供给予的参数,速度历史以及最后的路径位置- 子路径位置点,如果第一个 GEOINFO 对象被处理,那么他就将会从 poqDataIn-SMC_OUTQUEUE 结构体中移除 。 |
wM |
WORD |
0 |
如果插补处理到一个 M-对象,例如,一个附加操作的线性描述,这个输出将会将变量关联到 M-函数并且插补将会停止直到输入 bAcknM 允许。 |