Single Axis Motion/zh-hans

From SoftMC-Wiki
Jump to: navigation, search
语言: [[::Single Axis Motion|English]]  • [[::Single Axis Motion/zh-hans|中文(简体)‎]]
IMPORTANT.svgIMPORTANT
This entry is outdated and requires revision.

简介

softMC主要支持三种类型的运动:

  • 单轴运动
  • 主从轴运动
  • 多轴运动

运动发生器控制softMC中的所有运动。该软件设备从softMC任务接收命令,并在每个伺服周期为驱动器生成位置和速度命令。 两个主要的单轴运动命令是JOGMOVE。softMC还提供了同步运动命令的执行以及即时更改运动配置文件的方法。此外,softMC提供了启动和停止运动的多种模式。

由于运动总线通信,所有的运动命令都会受到固有的系统延迟。发送命令需要一个周期时间。需要第二个周期时间来接收位置反馈。 因此,最小系统延迟至少为2个运动总线周期(对于EtherCAT,通常为4个周期)。 如果在驱动器中启用了微插补,则会有1个周期时间的延迟。另外,不确定的延迟可能来自伺服系统依赖于机械系统的驱动调谐和动力学。

运动发生器

softMC中所有运动的基础是运动发生器。当您发出运动命令(如'JOGMOVE)到一个轴上时,运动生成器是在软件中创建的。 该运动发生器控制在运动命令中指定的轴的位置和速度命令。每隔一定时间(通常为2或4 ms),运动发生器更新这些命令。 在运动结束时,运动发生器被终止。 下图显示了运动发生器的正常运行。

caption

运动条件

在softMC生成运动之前,必须满足几个条件:

控制任务必须附加到受控轴上。

控制轴必须使能。

系统和轴运动标志开启。

在任务可以向轴发送运动命令之前,轴必须附加到任务上。传动装置也需要附加到做任务上。这可以防止其他任务尝试控制轴。要附加轴,在控制任务使用 ATTACH 命令:

Program
Attach A1

如果轴上没有附加其他任务,则立即附加轴。 如果另一个任务已经附加了轴,则会产生错误。可以使用TRY CATCH 来等待轴未附加。

只要任务有轴附加,任何其他任务都不可以控制该轴。当附加轴的任务完成时,它应该与轴分离:

Detach A1

如果在该轴的运动轨迹正在进行时发出DETACH,则DETACH将延迟执行直到该运动完成。 如果任务以某些轴为依据结束,则所有轴都将自动分离。

如果从终端窗口发出运动命令,则要附加轴的要求是一个例外。 在这种情况下,假设轴未附加任何其他任务,轴将在运动命令的持续时间内自动附加到终端窗口。

通过在终端窗口中键入以下命令来使能驱动器:

System.Enable = ON
A1.Enable = ON

尽管没有连接驱动器,但模拟轴也需要使能。启用驱动器还需要两个其他信号:DRIVEON HALTRESTART。 这些信号通常为ON。 这些信号保持符合SERCOS协议。 在非SERCOS应用程序中,它们不能被softMC程序使用。
有关访问驱动器控制位的更多详细信息,请参见此处:

准备运动系统的最后一步是打开运动标志。 有两个运动标志必须在:系统运动标志和轴运动标志。 例如:

System.Motion = ON
A1.Motion = ON

这些代码行包含在ControlStudio自动安装程序中。

在许多应用中,硬件开关与运动标志相关。 softMC没有硬件运动输入。 但是,您可以使用softMC事件来创建此功能。 以下示例显示了使用输入外部数据输入1来控制系统运动标志的任务:

Program
OnEvent MOTION_ON System.DIn.1 = ON
 System.Motion = ON 
End OnEvent
OnEvent MOTION_OFF System.DIn.1 = OFF
 System.Motion = OFF 
End OnEvent
End Program

运动发生器的目的是将运动命令(JOGMOVE)转换为定期更新的位置和速度命令系列。 该系列称为运动曲线。 位置和速度命令通过运动总线(EtherCAT,CAN,SERCOS)发送到受控驱动器。 驱动器中的所有伺服回路(位置,速度和电流)都被关闭。 下图显示了JOG命令的速度部分的曲线。

caption

运动曲线必须定期更新。 softMC通常每个运动总线周期更新运动曲线(如果驱动器支持此更新速率,则可能时更新速率为1 ms)。 softMC和驱动器之间的循环数据随着轴数量的增加而变长,因此具有20个以上轴的EtherCAT应用可能需要重新配置PDO才能从PDOs. TBD中删除未使用的对象。

运动缓存

每个轴的运动发生器一次只能处理一个运动指令,因为轴只能处理一个位置或速度指令。 但是,您可以向发生器发送第二个运动命令,直到当前运动命令完成(运动缓存)为止。

运动缓冲由 STARTTYPE控制。 如果 STARTTYPE设置为GENERATORCOMPLETED,缓冲的运动曲线将在当前配置文件完成后立即开始。 如果 STARTTYPE设置为INPOSITION,则缓冲的运动曲线将在当前运动曲线完成并且位置反馈已稳定后启动。 在这两种情况下,第二个命令保持在运动生成器中,以在满足适当条件之后立即开始。

您还可以指定运动生成器不缓存,但是立即处理新的运动命令。 当您要对运动曲线进行实时更改(更改当前命令的结束位置)时,这很有用。 为此,将 STARTTYPE 设置为IMMEDIATE(IMMED)或SUPERIMMEDIATE(SIMM)。

覆盖与固定

轴有许多特性,如加速和减速。 这些属性通常是直接设置的:

ConveyorAxis.Acc = 100

此设置是永久性的。它一直持续到下一次该属性被赋值为止。为了方便起见,softMC还支持将属性设置为命令的一部分的覆盖值。在这种情况下,该设置仅用于当前命令。

例如:

ConveyorAxis.Acc = 100
Jog ConveyorAxis 1000 ACC = 10

即使传送带轴的加速度在第一行规定为100,JOG加速度为10(覆盖值)。运动命令没有指定覆盖加速度,加速度为固定值。

覆盖值在运动命令中广泛使用。 可以覆盖的值在下面以及参考手册中进行了说明。

加速度曲线

单轴运动命令MOVEJOG产生加速度曲线由以下限制:

ACCELERATION (ACC)

DECELERATION (DEC)

SMOOTHFACTOR (SMOOTH)

加速减速限制到小于电机和负载的加速能力。SMOOTH通过平滑运动有助于限制或减少机器上的机械磨损。

有两种类型的加速度曲线 - 正弦曲线和梯形曲线。 在正弦曲线中,加速度平滑地增加,而在梯形轮廓中,加速度在每个样本中的增加。 使用SMOOTHFACTOR设置加速度增加平滑度。

手动

当您要使电机以与当前位置无关的恒定速度移动时,请使用JOG。速度可以为负,以产生相反方向的运动。例如:

Jog ConveyorAxis 2000

生成以下曲线:

caption

您可以选择使用TIMEJOG限制JOG运行的时间。TIMEJOG必须放在与JOG相同的行上。 TIMEJOG以毫秒为单位指定,包括加速时间。 时间到期后,减速开始。 当TIMEJOG为-1时,JOG将无限期地继续。 TIMEJOG默认为-1。 例如:

Jog ConveyorAxis 2000 TimeJog = 1000

生成以下曲线。

caption 以下轴属性可以作为 JOG的一部分覆盖:

TIMEJOG

ACCELERATION

DECELERATION

SMOOTHFACTOR

JERK

VELOCITYRATE

ACCELERATIONRATE

DECELERATIONRATE

JERKRATE

停止

STOP 在运动缓存中停止运动。在命令中,必须指定轴。例如:

Stop ConveyorAxis

通常,'STOP 设置为以DECELERATIONMAX的速率立即停止运动。 但是,您可以使用STOPTYPE修改STOP的影响。 STOPTYPE可以取三个值:

StopType = Immediate or IMMEDDECELERATIONMAX立即停止轴。

StopType = EndMotion当前运动命令结束时停止轴清除缓存运动。

StopType = Abort立即停止当前动作,无需恢复停止的动作。 只有当前运动命令停止,才能生成命令。

STOPTYPE默认为IMMED。 如果STOPTYPE = ENDMOTION,则执行STOP之前,当前运动完成。 对于JOGTIMEJOG = -1 (无限期继续), STOPTYPE = ENDMOTION没有意义,因为JOG永远不会结束。 在STOP期间,存储缓存中的当前和未决移动,以允许使用PROCEED恢复这些运动。

STOP使用模态最大减速度和最大加加速度。 STOPTYPE作为STOP的一部分被覆盖。

继续

任务停止附加到轴上的运动时,重新启动运动很简单。逻辑包含在任务内,但是当另一个任务停止运动时,情况更加复杂。例如,系统应该防止任何任务重新启动运动,除了停止它的任务。 为了控制STOP后的运动重新启动,softMC支持PROCEED

PROCEED有两个目的:提高安全性,并允许运动继续沿着原始路径。提高安全性是通过不允许没有停止发出 PROCEED的动作的任务轴的运动重启。 路径控制由<''axis''>.PROCEEDTYPE提供。 PROCEEDTYPE可以设置为以下三种模式之一:CONTINUE,NEXT MOTION和CLEARMOTION。 关键的操作规则是:

  1. 当任务停止与其附加的轴的运动时,允许PROCEED,但不是必需的。
  2. 当从终端窗口发出STOP并且被停止的轴被附加到任务时,运动停止,并且在执行下一个动作或DETACH时该任务被暂停。 命令的任务和动作只有在从终端窗口发出PROCEED 之后才能重新启动。 在PROCEED 发出之前,从终端窗口命令运动。
  3. 当从一个任务发出STOP 并且被停止的轴被附加到另一个任务时,运动停止,并且在执行下一个动作或DETACH时该任务被暂停。 只有在从停止运动的任务发出PROCEED 之后,它所命令的任务和动作才会重新启动。 不能从停止运动的任务中指定运动。
  4. 当从终端窗口发出STOP命令,从终端窗口发出命令时,运动停止,无法继续。 在这种情况下,唯一可用的继续类型是来自终端的CLEARMOTION

PROCEED有三种方式重新启动动作。使用 PROCEEDTYPE指定运动生成器应如何进行:

ProceedType = Continue这将导致运动发生器继续停止的缓冲区中的挂起的运动命令。

ProceedType = NextMotion'这使运动发生器中止当前运动并直接进入停止的运动缓存中的运动。

ProceedType = ClearMotion这将清除运动缓存区。 停止的运动缓存区中的所有运动命令都将中止。 这是默认值。

运动

MOVE是最常见的点到点移动。 基本运动是三段运动:

从零速度加速到VelocityCruise

在VelocityCruise继续巡航

从VelocityCruise减速到VelocityFinal

三段运动的关键部分是在正确的时间开始减速,使电机速度变为零(如果VELOCITYFINAL = 0),就像位置指令到达最终位置一样。 例如,以下命令:

Move ConveyorAxis 100 VCruise = 2000

生成以下曲线

caption

最终和增量与绝对移动的位置

POSITIONFINAL(移动结束)始终在MOVE中指定。 PFINAL的含义取决于ABSOLUTE(ABS)。 这允许点对点运动指定两种方式:

最终位置被指定为运动结束时的实际电机位置。 最终的位置等于 PFINAL

Incremental (Absolute = FALSE)最终位置参考起始位置。 最终位置等于从运动开始的PFINAL和PCMD的总和。所以:

CutAxis.Absolute = TRUE
Move CutAxis 100

将CutAxis移动到位置100.另一方面:

CutAxis.Absolute = FALSE
Move CutAxis 100

将CutAxis从当前位置移动100个单位。

ABSOLUTE默认为FALSE。 您可以随时更改ABSOLUTE,虽然效果不会发生,直到您发出下一个MOVE

稳定时间

softMC主动查看轴是否稳定到位置。 在几乎所有应用中,电机位置反馈从位置指令稍微延迟。运动完成后,实际位置需要一段时间才能到达指定位置;这个时间叫做稳定时间。

考虑如下所示的点对点动作。 VELOCITYCOMMAND (VCMD)以实线显示,VELOCITYFEEDBACK (VFB)以细线显示。两条曲线之间的区域是跟随误差。正如你所看到的,在 VFB结束时需要很少的时间来解决这个问题。 实际所需时间因系统而异。更高的带宽系统具有较短的建立时间,但是所有的系统都需要一些时间来解决。典型的时间范围从几毫秒到几十毫秒。

caption

理想情况下,稳定时间允许电机移动到逼近零位置误差。 但是,您必须允许位置误差从不达到零的条件。 在softMC上,您可以使用<axis>.POSITIONERRORSETTLE (<axis>.PESETTLE)指定低到足够低:

CutAxis.PESettle = 0.01

在运动发生器完成以零速度结束的运动之后,它主动监视轴上的位置误差,以查看它是否在±PESETTLE之间。

在某些应用中,必须确保位置误差保持在PESETTLE以下一段指定的时间之后,轴才能被认定为轴。 softMC允许您使用<''axis''>.TIMESETTLE (以毫秒为单位)指定此时间段。 TIMESETTLEMAX设置允许轴达到最大时间。 在此期间,如果位置误差超过TSETTLE,则定时器被复位。 如果位置错误在TSETTLE指定的时间内在PESETTLE范围内,则<''axis''>.ISSETTLED标志为TRUE(1)。 否则为FALSE(0)。

点到点的运动

当运动缓存区为空时,点对点运动立即开始。 如果需要延迟下一个运动命令的开始,您有两个选项:使用 DELAY插入固定的延迟时间,或根据条件使用STARTTYPE来延迟。

使用DELAY 强制运动发生器在运动之间等待一段固定的时间。例如:

Move MainAxis 100
Delay 1000
Move MainAxis 200

在两个运动之间强制延迟1秒。 DELAY的单位为毫秒,必须大于零。DELAY不会延迟执行您的程序。 如果要延迟执行程序,请使用 SLEEP

如果要延迟新运动的开始,直到上一个运动满足条件,请使用STARTTYPE,有四个选择:

StartType = GeneratorCompleted (GCom)当STARTTYPE = GCOM时,一旦运动生成器完成当前的运动,新的运动就会开始。 GENERATORCOMPLETED等于3.该命令引起系统延迟2个SERCOS周期时间。

StartType = InPosition (InPos)当STARTTYPE = INPOS时,运动发生器延迟执行新的运动命令,直到当前的运动完成并且位置误差被设定为接近零。INPOSITION等于2.该命令不受额外的系统延迟,但与命令相关的任何延迟都是由于用户指定的用于运动稳定时间的参数。

StartType = Immediate (Immed)当STARTTYPE = IMMED时,新的移动将覆盖当前的移动。 在对配置文件进行实时更改时使用此功能,例如更改当前移动的终点,而不会使系统休息。 例如,注册应用程序经常使用此功能。 IMMEDIATE恒定等于1.该命令每次执行引起系统延迟5 SERCOS周期。 这次需要将上一个运动与新的运动相结合。

StartType = SuperImmediate (Simm)SUPERIMMEDIATE是IMMEDIATE的变体。主要区别在于SUPERIMMEDIATE通过在线进行预先计算来消除5个SERCOS周期的延迟,而不是在运动管理器中离线处理。 SUPERIMMEDIATE恒定等于5.系统中一次SUPERIMMEDIATE的数量受系统负载和运动类型的限制。 SUPERIMMEDIATE最适合短,高速运动。

链接多个运动都以零速度结束时,通常需要STARTTYPE = INPOS。 这迫使运动发生器在开始下一个运动之前等待位置稳定。 如果位置曲线在第二次运动时启动太早,则电机可能永远不会停下来。 例如,下图显示了当STARTTYPE未正确设置为GCOM而不是INPOS时出现此问题。

caption

正如你所看到的那样,电机速度不会变为零,因为在速度反馈稳定在零之前,第二个运动速度指令为正。通常,期望的性能是在第二次运动开始之前速度达到零。 为此,控制器需要等待轴位置误差在开始第二次运动之前稳定。 这通过将 STARTTYPE设置为INPOS来完成。 如下图所示。

caption

如您所见,电机会停止,因为在继续下一个命令之前,softMC等待的跟随误差足够小。

MainAxis.PESettle = 0.01
MainAxis.Tsettle = 10
Move MainAxis 100Move MainAxis 200 StartType=InPos

通常,MOVE的结束速度默认为零。 但是,您可以指定非零结束速度(Non-Zero End Moves)。 为此,请使用<''axis''>.VELOCITYFINAL。 必须在与MOVE相同的行上指定VELOCITYFINAL。 例如,

A1.VelocityCruise = 2000
Move A1 100 VelocityFinal = 1000

or

Move A1 100 VelocityCruise = 2000 VelocityFinal = 1000

同样生成以下曲线。

caption

您很少想要使用非零最终速度的单次运动,因为运动持续到指定的结束位置并突然开始减速为零。 最终位置未指定。 通常,使用非零最终速度的运动来构建多步骤曲线。

在运动缓存区中组合非零终点运动可产生多步运动。 例如:

Program 
Attach A1 
Call AxisSetup 
Call SercosSetup
Sys.En = On
A1.En = On
Sys.Motion = On
A1.Motion = On
A1.Abs = Off
A1.StartType = Gcom
‘Do Two-step Move
Move A1 100 VCruise = 20 VFinal = 10
Move A1 100 VCruise = 10 VFinal = 0
‘Wait for move to complete and axis to settle out
While A1.IsSettled = 0
Sleep 10‘Sleep in loop to keep from overloading CPU resources
End While
‘Disable, detach and exit
A1.En = Off
Detach A1
End Program

生成以下曲线。

caption

在上面的例子中,A1.STARTTYPE = GCOM。当第一个运动生成时,第二个运动开始。当链接非零终点运动到另一个运动时,必须使用STARTTYPE = GCOM。 您不能使用STARTTYPE = IMMED或SIMM,因为新的运动会立即覆旧的运动。 您不能使用STARTTYPE = INPOS,因为您希望运动曲线的第二部分在第一部分完成后立即开始。如果第二次运动是增量的,等待INPOS的延迟会增加错误。 对于任何运动类型,运动可能无限期地延迟,因为运动的电机永远不会到位置,除非系统被专门调整为这样做。

您可以组合非零终点运动,以根据需要执行多个步骤来生成运动曲线。 但是,有一些限制::

  1. STARTTYPE为非零终点运动时(VELOCITYFINAL<>0)必须为GCOM。
  2. VELOCITYCRUISEVELOCITYFINAL总为正值。方向由目标位置设置。
  3. 在当前运动的PFINAL 之前,后续运动的PFINAL必须足够远,以便加速度限制可以实现曲线。生成的曲线总是到达目标位置。如果加速度和smooth限制阻止达到所需的最终速度,则以最终速度尽可能接近所需值终止运动。

您可以更改正在进行的运动的结束位置或速度。 您可以通过设置STARTTYPE = IMMED并发出第二个运动来执行此操作。例如,如果要发出运动,请等待几秒钟,更改结束位置,而不更改速度。为此,你可以写成:

CutAxis.StartType = Immed
CutAxis.Absolute = On
Move CutAxis 150
Sleep 3000
Move CutAxis 100

生成的曲线如下

caption

作为第二个例子,如果你想改变巡航速度而不改变最终位置,你可以写为:

CutAxis.StartType = IMMED
Move CutAxis 150
Sleep 3000
Move CutAxis 150 VCruise = 1500

您可以更改正在执行的任何运动的最终位置,巡航速度和最终速度。 但是,您必须遵守以下规则:

  1. STARTTYPE必须为IMMED或SIMM
  2. 方向根据目标位置设定。对于手动操作,根据速度的标志。
  3. 运动命令中新的和旧的VELOCITYCRUISE和VELOCITYFINAL必须为正。
  4. 如果后续运动更改了PFINAL或VFINAL,则必须仍然可以使用轴加速度限制创建运动曲线

多轴同步

softMC可以同步许多单轴MOVE,以便它们都同时启动。当您有多个轴具有大部分独立的运动,但必须同时启动时,这很有用。 它也可用于三个轴以上的协作。 组运动(稍后介绍)提供更紧密的协调,但有一个运动曲线。

同步由STARTTYPE = SYNCSTART(SYNC)控制。 该功能允许您使用运动命令加载运动生成器,但生成延迟运动,直到发出SYNCSTART命令。 例如,以下顺序:

Move MainAxis 300 VCruise = 1200 StartType = Sync

Sleep 1000 ‘Program delayed between Move Commands

Move AuxAxis 100 VCruise = 1000 StartType = Sync

SyncStart MainAxis AuxAxis

生成以下曲线

caption

您可以根据需要同步多个轴,包括模拟轴。 由于每个SYNCSTART指定其同步的轴,因此可以独立同步多组轴。

该命令引起2个SERCOS周期时间的最小系统延迟,但是延迟可能更大,这取决于同步在一起的运动数量和系统的总负载。

如果您已将同步运动加载到运动生成器中并需要将其删除,请使用SYNCCLEAR。 例如,如果在发出SYNCCLEAR之前输入了以下命令:

SyncClear MainAxis

MainAxis运动被删除。 这只会影响后续的运动。 您只能使用SYNCCLEAR清除待处理的运动。 一旦运动执行,SYNCCLEAR就没有任何效果。 在这种情况下停止轴就像非同步运动那样执行。

您可以重写以下轴属性作为“MOVE”'的一部分:

ABSOLUTE

ACCELERATION

DECELERATION

SMOOTHFACTOR

VELOCITYCRUISE

VELOCITYMAX

STARTTYPE

VELOCITYRATE

ACCELERATIONRATE

DECELERATIONRATE

JERKRATE

速度覆盖

softMC可以加速或减慢所有运动命令。 这可以单独应用于整个机器,也可以单独应用于各个轴。 该功能在机器开发中广泛使用,因为它可以在单个命令中调整整个机器速度。 由于可以从终端发出命令,您可以在不修改程序的情况下以各种速度观察机器的操作。

softMC上的所有轴都由SYSTEM.VELOCITYOVERRIDE (SYSTEM.VORD)控制。例如:

System.VelocityOverride = 25

立即将所有当前正在执行的 MOVEJOG以及任何后续命令的速度命令降低到当前值的25%。 由于速度由VORD控制,所以所有轴的加速度都按比例调整。 MOVE的最终位置不受影响。

如果要覆盖单个轴而不是整个机器的速度,可以使

<''axis''>.VORD.VELOCITYOVERRIDE (<''axis''>.VORD)。它以与SYSTEM.VORD相同的方式使用,但它仅适用于一个轴。<''axis''>.VORD可以根据需要应用于多个或少数轴,并且为一个轴指定的倍率不依赖于其他轴。如果您同时使用 SYSTEM.VORD<''axis''>.VORD ,则轴速度会被减小到两个覆盖属性的乘积,如下所示:

System.VOrd = 66 ‘将整个系统降低到2/3速度

MainAxis.VOrd = 50 ‘将MainAxis减少1/3的速度

在这个例子中,整个系统减少到66%,而MainAxis的系统速度减少50%,则降低到33%。 直到速度开始改变有5个周期的延迟,以确保速度平滑改变。

运动示例

本节提供了应用于常见机器功能的运动控制技术几个示例。


回零

大多数机器轴需要建立一个软件的回零参考位置。用户指定的回零程序通常在机器的上电周期或手动模式下运行。 软件回零参考位置(0000 ...)由使用HOMEOFFSET(与硬件零位置距离)的任何标记脉冲(用于控制器和轴线力学之间的完整性的回零程序建立)。

驱动器直接驱动的轴上的硬件零位置通常由编码器(增量,正弦编码器或ENDAT编码器)的每转一次的标记脉冲或旋转变压器的过零位置分配。 然而,对于具有齿轮比(齿轮,皮带或滚珠丝杠等)的机床,控制器与引导程序的轴向力学之间的关系(完整性)需要更复杂的过程。 在这些情况下,通常在轴上放置一个微动开关或接近开关,用于指示硬件零位的参考位置。

NOTE-Info.svgNOTE
This home-position switch is placed on one end of the axis (inside the mechanical end of the travel-limits of the axis) with the switch tripping mechanism designed such that switch-circuit is closed on one side of the hard home-position and open on the other side of the hard home-position.

The switch-circuit (high/low) provides the controller-input information for the direction of the home position.) Other machine axes may use absolute-position-device designs, so the integrity between the controller and axis mechanics is established automatically on the power-up of the machine . The machine position-integrity is established similarly to an axis that only rotates 360°.

The homing process itself is done by the drive and the softMC is just initiating it. All home parameters and commands are defined by the drive command set and can differ depending on the used motion bus. For EtherCAT please see also:


Registration

Registration applications are those that start motion and then modify the profile, based on a subsequent event. These applications generally involve discrete product processing, such as are common in the packaging, printing and converting industries. The event is usually generated by sensing a position on the product being processed (usually a mark is printed on the product and detected by an optical sensor). The mark is normally referred to as a registration mark.

A common registration application is cutting a product package, such as a bag or label from a web (reel). The web is printed with many copies of the product package. The controller begins to unwind the product package from the web. During this motion, the controller waits for a registration mark to be detected. After the mark is detected, the profile is modified, based on the position at which the mark was detected. Commonly, the profile comes to rest a fixed distance after the mark position where the package can be cut. There are numerous variations of this type of application. The key element is that the end position of the move cannot be calculated until after the move starts. This requires that the profile be started and then modified on-the-fly.

The softMC combines the ability to change the position end points on-the-fly and the ability to command the drive to capture a position. Registration is similar to homing except that in homing you go back to the mark, but in registration you go forward to a fixed distance after the mark. The following example shows a typical registration example:

Program
'Prepare drive to captureVCruise = 3000
Cycle:Move FeedAxis 50 'wait for captureMove FeedAxis [capture position] + 10 StartType=IMMED
End Program

This example generates the next profile.

caption


The move starts and the registration mark is detected about 40% of the way to the end. After a small amount of processing time, the second move is loaded over the current move. The axis comes to rest at a fixed offset after the registration mark.

The more accurately the position is determined, the more accurate the cut is with respect to the registration mark. If the process is feeding material at 10 ft/s, and the capture accuracy is ±3 microseconds, the mark is:

10 (ft/sec) * 3 µs = 3.225e-5 ft or about 0.0004 in.

The original line was set to go much farther than the actual resultant move. This technique is commonly used because you can monitor the end position and, if the move is completed before the registration mark is detected, it indicates the mark was missed.

Gating

Many applications require motion to be gated to an external switch. In these cases, you need to start a move after the gating input transitions with as little delay as possible. One way you can accomplish this on the softMC is by starting the move with events containing synchronized motion. For example:

Program
Attach MainAxis
Move MainAxis 100 Absolute=FALSE StartType=SYNC
While System.Din.1=False; ‘Wait for input to change
 Sleep 1
End While
SyncStart MainAxis ‘Start the axis up by disable
End Program

This program moves MainAxis 100 units when DIN.1 transitions high. Motion on MainAxis starts as soon after the transition of DIN.1 as possible. OnEvent can also be used.

Clamping

Clamping applications typically process discrete parts but the end point of a move is unknown. Clamping is often applied when the length of the part is not accurately known or when the thickness of material is unknown. In clamping, the controller moves an axis at low torque until the end of the material is detected. Then the torque level is increased, either to measure the part more accurately or to hold the part for another axis to process.

The softMC allows you to change torque limits on the drive and uses events to monitor position error to sense the end of the piece (below).

Program
Dim Shared PartFoundFlag As Long
OnEvent PartFound Abs(ClampingAxis.pe ) > 0.25
Stop ClampingAxis
[Set torque for heavy torque]
Sleep 30 ‘allow 30 ms for settling
PartFoundFlag=TRUE
Return
End OnEvent
eventon PartFound
[set torque for light torque]
PartFoundFlag=FALSE
Move ClampingAxis Vcruise=10
While (PartFoundFlag=FALSE)
Sleep 10End While
REM Process part here
Return
End Program

This program works by starting a slow move with low torque. The move continues until position error is greater than 0.25 units. When the axis runs into a stop, position error accumulates because the profile continues. You must be careful to set the threshold of the event greater than the position error of normal operation. The threshold of the event must also be smaller than the drive's maximum following error to avoid drive error before the event is triggered. Disable OnEvent during the acceleration of the move to avoid nuisance PartFound events.