Difference between revisions of "Single Axis Motion/zh-hans"
(BackToTop button) |
|||
(10 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | {{Languages}} | + | <div id="BackToTop" class="noprint" style="background-color:; position:fixed; bottom:32px; left:95%; z-index:9999; padding:0; margin:0;"> |
+ | <span style="color:blue; font-size:8pt; font-face:verdana,sans-serif; border:0.2em outset:#ceebf7; padding:0.1em; font-weight:bolder; -moz-border-radius:8px; "> | ||
+ | [[Image:TOP2.png|50px|link=#top]] </span></div> | ||
+ | {{Languages|Single_Axis_Motion}} | ||
{{Out-of-date}} | {{Out-of-date}} | ||
= 简介 = | = 简介 = | ||
Line 12: | Line 15: | ||
由于运动总线通信,所有的运动命令都会受到固有的系统延迟。发送命令需要一个周期时间。需要第二个周期时间来接收位置反馈。 因此,最小系统延迟'''至少为2个'''运动总线周期(对于EtherCAT,通常为4个周期)。 如果在驱动器中启用了微插补,则会有1个周期时间的延迟。另外,不确定的延迟可能来自伺服系统依赖于机械系统的驱动调谐和动力学。 | 由于运动总线通信,所有的运动命令都会受到固有的系统延迟。发送命令需要一个周期时间。需要第二个周期时间来接收位置反馈。 因此,最小系统延迟'''至少为2个'''运动总线周期(对于EtherCAT,通常为4个周期)。 如果在驱动器中启用了微插补,则会有1个周期时间的延迟。另外,不确定的延迟可能来自伺服系统依赖于机械系统的驱动调谐和动力学。 | ||
− | = | + | = 运动发生器 = |
− | + | softMC中所有运动的基础是运动发生器。当您发出运动命令(如'''JOG'''或'''MOVE''')到一个轴上时,运动生成器是在软件中创建的。 该运动发生器控制在运动命令中指定的轴的位置和速度命令。每隔一定时间(通常为2或4 ms),运动发生器更新这些命令。 在运动结束时,运动发生器被终止。 下图显示了运动发生器的正常运行。 | |
[[Image:Axystems;UserManual-41MotionGenerator.png|caption]] | [[Image:Axystems;UserManual-41MotionGenerator.png|caption]] | ||
− | == | + | == 运动条件 == |
− | + | 在softMC生成运动之前,必须满足几个条件: | |
− | + | 控制任务必须关联到受控轴上。 | |
− | + | 控制轴必须使能。 | |
− | + | 系统和轴运动标志开启。 | |
− | + | 在任务可以向轴发送运动命令之前,'''轴必须关联到任务上'''。传动装置也需要关联到做任务上。这可以防止其他任务尝试控制轴。要关联轴,在控制任务使用 '''ATTACH''' 命令: | |
<pre> | <pre> | ||
Program | Program | ||
Line 32: | Line 35: | ||
</pre> | </pre> | ||
− | + | 如果轴上没有关联其他任务,则立即关联轴。 如果另一个任务已经关联了轴,则会产生错误。可以使用'''TRY CATCH '''来等待轴未关联。 | |
− | + | 只要任务有轴关联,任何其他任务都不可以控制该轴。当关联轴的任务完成时,它应该与轴分离: | |
<pre> | <pre> | ||
Detach A1 | Detach A1 | ||
</pre> | </pre> | ||
− | + | 如果在该轴的运动轨迹正在进行时发出'''DETACH''',则'''DETACH'''将延迟执行直到该运动完成。 如果任务以某些轴为依据结束,则所有轴都将自动分离。 | |
− | + | 如果从终端窗口发出运动命令,则要关联轴的要求是一个例外。 在这种情况下,假设轴未关联任何其他任务,轴将在运动命令的持续时间内自动关联到终端窗口。 | |
− | ''' | + | '''通过在终端窗口中键入以下命令来'''使能驱动器''': |
<pre> | <pre> | ||
System.Enable = ON | System.Enable = ON | ||
Line 49: | Line 52: | ||
</pre> | </pre> | ||
− | ''' | + | 尽管没有连接驱动器,但模拟轴也需要'''使能'''。启用驱动器还需要两个其他信号:'''DRIVEON '''和'''HALTRESTART'''''。 这些信号通常为ON。 这些信号保持符合SERCOS协议。 在非SERCOS应用程序中,它们不能被softMC程序使用。 |
− | + | <br>有关访问驱动器控制位的更多详细信息,请参见此处: | |
− | <br> | ||
* [[:EtherCAT:Drive Control Bits|Drive Control Bits]] - Implementation of Drive Control Bits under EtherCAT | * [[:EtherCAT:Drive Control Bits|Drive Control Bits]] - Implementation of Drive Control Bits under EtherCAT | ||
− | + | 准备运动系统的最后一步是打开运动标志。 有两个运动标志必须在:系统运动标志和轴运动标志。 | |
− | + | 例如: | |
<pre> | <pre> | ||
System.Motion = ON | System.Motion = ON | ||
Line 61: | Line 63: | ||
</pre> | </pre> | ||
− | + | 这些代码行包含在ControlStudio自动安装程序中。 | |
− | + | 在许多应用中,'''硬件开关'''与运动标志相关。 softMC没有硬件运动输入。 但是,您可以使用softMC事件来创建此功能。 以下示例显示了使用输入外部数据输入1来控制系统运动标志的任务: | |
<pre> | <pre> | ||
Program | Program | ||
Line 75: | Line 77: | ||
</pre> | </pre> | ||
− | + | 运动发生器的目的是将运动命令('''JOG'''或'''MOVE''')转换为定期更新的位置和速度命令系列。 该系列称为'''运动曲线'''。 位置和速度命令通过运动总线(EtherCAT,CAN,SERCOS)发送到受控驱动器。 驱动器中的所有伺服回路(位置,速度和电流)都被关闭。 下图显示了JOG命令的速度部分的曲线。 | |
[[Image:Axystems;UserManual-411MotionConditions.png|caption]] | [[Image:Axystems;UserManual-411MotionConditions.png|caption]] | ||
<span style="color:#ff0000"> | <span style="color:#ff0000"> | ||
− | + | 运动曲线必须定期更新。 softMC通常每个运动总线周期更新运动曲线(如果驱动器支持此更新速率,则可能时更新速率为1 ms)。 softMC和驱动器之间的循环数据随着轴数量的增加而变长,因此具有20个以上轴的EtherCAT应用可能需要重新配置PDO才能从PDOs. TBD中删除未使用的对象。 | |
</span> | </span> | ||
− | == | + | == 运动缓存 == |
− | + | 每个轴的运动发生器一次只能处理一个运动指令,因为轴只能处理一个位置或速度指令。 但是,您可以向发生器发送第二个运动命令,直到当前运动命令完成(运动缓存)为止。 | |
− | + | 运动缓冲由 '''STARTTYPE'''控制。 如果 '''STARTTYPE'''设置为GENERATORCOMPLETED,缓冲的运动曲线将在当前运动曲线完成后立即开始。 如果 '''STARTTYPE'''设置为INPOSITION,则缓冲的运动曲线将在当前运动曲线完成并且位置反馈已稳定后启动。 在这两种情况下,第二个命令保持在运动生成器中,以在满足适当条件之后立即开始。 | |
− | + | 您还可以指定运动生成器不缓存,立即处理新的运动命令。 当您要对运动曲线进行实时更改(更改当前命令的结束位置)时,这很有用。 为此,将 '''STARTTYPE''' 设置为IMMEDIATE(IMMED)或SUPERIMMEDIATE(SIMM)。 | |
− | == | + | == 覆盖与固定 == |
− | + | 轴有许多特性,如加速度和减速度。 这些属性通常是直接设置的: | |
<pre> | <pre> | ||
ConveyorAxis.Acc = 100 | ConveyorAxis.Acc = 100 | ||
</pre> | </pre> | ||
− | + | 此设置是永久性的。它一直持续到下一次该属性被赋值为止。为了方便起见,softMC还支持将属性设置为命令的一部分的覆盖值。在这种情况下,该设置仅用于当前命令。 | |
− | + | 例如: | |
<pre> | <pre> | ||
ConveyorAxis.Acc = 100 | ConveyorAxis.Acc = 100 | ||
Line 103: | Line 105: | ||
</pre> | </pre> | ||
− | + | 即使传送带轴的加速度在第一行规定为100,'''JOG'''加速度为10(覆盖值)。运动命令没有指定覆盖加速度,加速度为固定值。 | |
− | + | 覆盖值在运动命令中广泛使用。 可以覆盖的值在下面以及参考手册中进行了说明。 | |
− | == | + | == 加速度曲线 == |
− | + | 单轴运动命令'''MOVE'''和 '''JOG'''产生加速度曲线由以下限制: | |
'''ACCELERATION''' ('''ACC''') | '''ACCELERATION''' ('''ACC''') | ||
Line 116: | Line 118: | ||
'''SMOOTHFACTOR''' ('''SMOOTH''') | '''SMOOTHFACTOR''' ('''SMOOTH''') | ||
− | + | 将'''加速'''和'''减速'''限制到小于电机和负载的加速能力。SMOOTH通过平滑运动有助于限制或减少机器上的机械磨损。 | |
− | + | 有两种类型的加速度曲线 - 正弦曲线和梯形曲线。 在正弦曲线中,加速度平滑地增加,而在梯形轮廓中,加速度在每个样本中的增加。 使用SMOOTHFACTOR设置加速度增加平滑度。 | |
− | == | + | == 手动 == |
− | + | 当您要使电机以与当前位置无关的恒定速度移动时,请使用'''JOG'''。速度可以为负,以产生相反方向的运动。例如: | |
<pre> | <pre> | ||
Jog ConveyorAxis 2000 | Jog ConveyorAxis 2000 | ||
</pre> | </pre> | ||
− | + | 生成以下曲线: | |
[[Image:Axystems;UserManual-415Jog.png|caption|480px]] | [[Image:Axystems;UserManual-415Jog.png|caption|480px]] | ||
− | + | 您可以选择使用'''TIMEJOG'''限制'''JOG'''运行的时间。'''TIMEJOG'''必须放在与JOG相同的行上。 '''TIMEJOG'''以毫秒为单位指定,包括加速时间。 时间到期后,减速开始。 当'''TIMEJOG'''为-1时,'''JOG'''将无限期地继续。 '''TIMEJOG'''默认为-1。 例如: | |
<pre> | <pre> | ||
Jog ConveyorAxis 2000 TimeJog = 1000 | Jog ConveyorAxis 2000 TimeJog = 1000 | ||
</pre> | </pre> | ||
− | + | 生成以下曲线。 | |
[[Image:Axystems;UserManual-415Jog2.png|caption]] | [[Image:Axystems;UserManual-415Jog2.png|caption]] | ||
− | + | 以下轴属性可以作为 '''JOG'''的一部分覆盖: | |
− | |||
'''TIMEJOG''' | '''TIMEJOG''' | ||
Line 157: | Line 158: | ||
'''JERKRATE''' | '''JERKRATE''' | ||
− | == | + | == 停止 == |
− | '''STOP ''' | + | '''STOP '''在运动缓存中停止运动。在命令中,必须指定轴。例如: |
<pre> | <pre> | ||
Stop ConveyorAxis | Stop ConveyorAxis | ||
</pre> | </pre> | ||
− | + | 通常,'''STOP'''设置为以'''DECELERATIONMAX'''的速率立即停止运动。 但是,您可以使用'''STOPTYPE'''修改STOP的影响。 '''STOPTYPE'''可以取三个值: | |
− | '''''StopType'' = ''Immediate'' | + | '''''StopType'' = ''Immediate'' 或 ''IMMED'''''以'''DECELERATIONMAX'''立即停止轴。 |
− | '''''StopType'' = ''EndMotion''''' | + | '''''StopType'' = ''EndMotion'''''当前运动命令结束时停止轴清除缓存运动。 |
− | '''''StopType'' = ''Abort''''' | + | '''''StopType'' = ''Abort'''''立即停止当前动作,无需恢复停止的动作。 只有当前运动命令停止,才能生成命令。 |
− | '''STOPTYPE''' | + | '''STOPTYPE'''默认为IMMED。 如果'''STOPTYPE''' = ENDMOTION,则执行'''STOP'''之前,当前运动完成。 对于'''JOG'''与'''TIMEJOG '''<nowiki>= -1 (无限期继续)</nowiki>, '''STOPTYPE''' = ENDMOTION没有意义,因为'''JOG'''永远不会结束。 在'''STOP'''期间,存储缓存中的当前和未决移动,以允许使用'''PROCEED'''恢复这些运动。 |
− | '''STOP''' | + | '''STOP'''使用模态最大减速度和最大加加速度。 '''STOPTYPE'''作为'''STOP'''的一部分被覆盖。 |
− | == | + | == 继续 == |
− | + | 任务停止关联到轴上的运动时,重新启动运动很简单。逻辑包含在任务内,但是当另一个任务停止运动时,情况更加复杂。例如,系统应该防止任何任务重新启动运动,除了停止它的任务。 为了控制'''STOP'''后的运动重新启动,softMC支持'''PROCEED'''。 | |
− | '''PROCEED''' | + | '''PROCEED'''有两个目的:提高安全性,并允许运动继续沿着原始路径。提高安全性是通过不允许没有停止发出''' PROCEED'''的动作的任务轴的运动重启。 路径控制由'''''<nowiki><''axis''>.</nowiki>''PROCEEDTYPE'''提供。 '''PROCEEDTYPE'''可以设置为以下三种模式之一:CONTINUE,NEXT MOTION和CLEARMOTION。 关键的操作规则是: |
− | # | + | # 当任务停止与其关联的轴的运动时,允许'''PROCEED''',但不是必需的。 |
− | # | + | # 当从终端窗口发出'''STOP'''并且被停止的轴被关联到任务时,运动停止,并且在执行下一个动作或DETACH时该任务被暂停。 命令的任务和动作只有在从终端窗口发出'''PROCEED '''之后才能重新启动。 在'''PROCEED '''发出之前,从终端窗口命令运动。 |
− | # | + | # 当从一个任务发出'''STOP '''并且被停止的轴被关联到另一个任务时,运动停止,并且在执行下一个动作或'''DETACH'''时该任务被暂停。 只有在从停止运动的任务发出'''PROCEED '''之后,它所命令的任务和动作才会重新启动。 不能从停止运动的任务中指定运动。 |
− | # | + | # 当从终端窗口发出'''STOP'''命令,从终端窗口发出命令时,运动停止,无法继续。 在这种情况下,唯一可用的继续类型是来自终端的'''CLEARMOTION'''。 |
− | + | '''PROCEED'''有三种方式重新启动动作。使用 '''PROCEEDTYPE'''指定运动生成器应如何进行: | |
− | '''''ProceedType'' = ''Continue''''' | + | '''''ProceedType'' = ''Continue'''''这将导致运动发生器继续停止的缓冲区中的挂起的运动命令。 |
− | '''''ProceedType'' = ''NextMotion'''' | + | '''''ProceedType'' = ''NextMotion''''这使运动发生器中止当前运动并直接进入停止的运动缓存中的运动。 |
− | '''''ProceedType'' = ''ClearMotion''''' | + | '''''ProceedType'' = ''ClearMotion'''''这将清除运动缓存区。 停止的运动缓存区中的所有运动命令都将中止。 这是默认值。 |
− | == | + | == 运动 == |
− | '''MOVE''' | + | '''MOVE'''是最常见的点到点移动。 基本运动是三段运动: |
− | + | 从零速度加速到VelocityCruise | |
− | + | 在VelocityCruise继续巡航 | |
− | + | 从VelocityCruise减速到VelocityFinal | |
− | + | 三段运动的关键部分是在正确的时间开始减速,使电机速度变为零(如果'''VELOCITYFINAL''' = 0),就像位置指令到达最终位置一样。 例如,以下命令: | |
<pre> | <pre> | ||
Move ConveyorAxis 100 VCruise = 2000 | Move ConveyorAxis 100 VCruise = 2000 | ||
</pre> | </pre> | ||
− | + | 生成以下曲线 | |
[[Image:Axystems;UserManual-418Move.png|caption]] | [[Image:Axystems;UserManual-418Move.png|caption]] | ||
− | === | + | === 最终和增量与绝对移动的位置 === |
− | '''POSITIONFINAL''' | + | '''POSITIONFINAL'''(移动结束)始终在'''MOVE'''中指定。 PFINAL的含义取决于ABSOLUTE(ABS)。 这允许点对点运动指定两种方式: |
− | + | 最终位置被指定为运动结束时的实际电机位置。 最终的位置等于 '''PFINAL'''。 | |
− | '''Incremental (''Absolute = FALSE)''''' | + | '''Incremental (''Absolute = FALSE)'''''最终位置参考起始位置。 最终位置等于从运动开始的PFINAL和PCMD的总和。所以: |
<pre> | <pre> | ||
CutAxis.Absolute = TRUE | CutAxis.Absolute = TRUE | ||
Line 220: | Line 221: | ||
</pre> | </pre> | ||
− | + | 将CutAxis移动到位置100.另一方面: | |
<pre> | <pre> | ||
CutAxis.Absolute = FALSE | CutAxis.Absolute = FALSE | ||
Line 226: | Line 227: | ||
</pre> | </pre> | ||
− | + | 将CutAxis从当前位置移动100个单位。 | |
− | '''ABSOLUTE''' | + | '''ABSOLUTE'''默认为FALSE。 您可以随时更改'''ABSOLUTE''',虽然效果不会发生,直到您发出下一个'''MOVE'''。 |
− | === | + | === 稳定时间 === |
− | + | softMC主动查看轴是否稳定到位置。 在几乎所有应用中,电机位置反馈从位置指令稍微延迟。运动完成后,实际位置需要一段时间才能到达指定位置;这个时间叫做稳定时间。 | |
− | + | 考虑如下所示的点对点动作。 '''VELOCITYCOMMAND''' ('''VCMD''')以实线显示,'''VELOCITYFEEDBACK''' ('''VFB''')以细线显示。两条曲线之间的区域是跟随误差。正如你所看到的,在 '''VFB'''结束时需要很少的时间来解决这个问题。 实际所需时间因系统而异。更高的带宽系统具有较短的建立时间,但是所有的系统都需要一些时间来解决。典型的时间范围从几毫秒到几十毫秒。 | |
[[Image:Axystems;UserManual-4182SettlingTime.png|caption]] | [[Image:Axystems;UserManual-4182SettlingTime.png|caption]] | ||
− | + | 理想情况下,稳定时间允许电机移动到逼近零位置误差。 但是,您必须允许位置误差从不达到零的条件。 在softMC上,您可以使用<''axis''>.POSITIONERRORSETTLE (<''axis''>.PESETTLE)指定低到足够低: | |
<pre> | <pre> | ||
CutAxis.PESettle = 0.01 | CutAxis.PESettle = 0.01 | ||
</pre> | </pre> | ||
− | + | 在运动发生器完成以零速度结束的运动之后,它主动监视轴上的位置误差,以查看它是否在±'''PESETTLE'''之间。 | |
− | + | 在某些应用中,必须确保位置误差保持在'''PESETTLE'''以下一段指定的时间之后,轴才能被认定为轴。 softMC允许您使用'''''<nowiki><''axis''></nowiki>'''.'''''TIMESETTLE '''(以毫秒为单位)指定此时间段。 '''TIMESETTLEMAX'''设置允许轴达到最大时间。 在此期间,如果位置误差超过'''TSETTLE''',则定时器被复位。 如果位置错误在'''TSETTLE'''指定的时间内在'''PESETTLE'''范围内,则'''''<nowiki><''axis''></nowiki>'''''.'''ISSETTLED'''标志为TRUE(1)。 否则为FALSE(0)。 | |
− | === | + | === 点到点的运动 === |
− | + | 当运动缓存区为空时,点对点运动立即开始。 如果需要延迟下一个运动命令的开始,您有两个选项:使用 '''DELAY'''插入固定的延迟时间,或根据条件使用'''STARTTYPE'''来延迟。 | |
− | + | 使用'''DELAY''' 强制运动发生器在运动之间等待一段固定的时间。例如: | |
<pre> | <pre> | ||
Move MainAxis 100 | Move MainAxis 100 | ||
Line 254: | Line 255: | ||
Move MainAxis 200 | Move MainAxis 200 | ||
</pre> | </pre> | ||
+ | 在两个运动之间强制延迟1秒。 '''DELAY'''的单位为毫秒,必须大于零。'''DELAY'''不会延迟执行您的程序。 如果要延迟执行程序,请使用 '''SLEEP'''。 | ||
− | + | 如果要延迟新运动的开始,直到上一个运动满足条件,请使用'''STARTTYPE''',有四个选择: | |
− | |||
− | |||
− | '''''StartType'' = ''GeneratorCompleted'' (GCom)''' | + | '''''StartType'' = ''GeneratorCompleted'' (GCom)'''当STARTTYPE = GCOM时,一旦运动生成器完成当前的运动,新的运动就会开始。 GENERATORCOMPLETED等于3.该命令引起系统延迟2个SERCOS周期时间。 |
− | '''''StartType'' = ''InPosition'' (''InPos)''''' | + | '''''StartType'' = ''InPosition'' (''InPos)'''''当STARTTYPE = INPOS时,运动发生器延迟执行新的运动命令,直到当前的运动完成并且位置误差被设定为接近零。'''INPOSITION'''等于2.该命令不受额外的系统延迟,但与命令相关的任何延迟都是由于用户指定的用于运动稳定时间的参数。 |
− | '''''StartType'' = ''Immediate (Immed)''''' | + | '''''StartType'' = ''Immediate (Immed)'''''当STARTTYPE = IMMED时,新的移动将覆盖当前的移动。 在对配置文件进行实时更改时使用此功能,例如更改当前移动的终点,而不会使系统停止。 例如,配准应用程序经常使用此功能。 IMMEDIATE恒定等于1.该命令每次执行引起系统延迟5 SERCOS周期。 这次需要将上一个运动与新的运动相结合。 |
− | '''''StartType'' = ''SuperImmediate (Simm)''''' | + | '''''StartType'' = ''SuperImmediate (Simm)'''''SUPERIMMEDIATE是IMMEDIATE的变体。主要区别在于SUPERIMMEDIATE通过在线进行预先计算来消除5个SERCOS周期的延迟,而不是在运动管理器中离线处理。 SUPERIMMEDIATE恒定等于5.系统中一次SUPERIMMEDIATE的数量受系统负载和运动类型的限制。 |
+ | SUPERIMMEDIATE最适合短,高速运动。 | ||
− | + | 当'''链接多个运动'''都以零速度结束时,通常需要STARTTYPE = INPOS。 这迫使运动发生器在开始下一个运动之前等待位置稳定。 如果位置曲线在第二次运动时启动太早,则电机可能永远不会停下来。 例如,下图显示了当'''STARTTYPE'''未正确设置为GCOM而不是INPOS时出现此问题。 | |
[[Image:Axsystems;UserManual-7-PointToPointMoves.png|caption]] | [[Image:Axsystems;UserManual-7-PointToPointMoves.png|caption]] | ||
− | + | 正如你所看到的那样,电机速度不会变为零,因为在速度反馈稳定在零之前,第二个运动速度指令为正。通常,期望的性能是在第二次运动开始之前速度达到零。 为此,控制器需要等待轴位置误差在开始第二次运动之前稳定。 这通过将 '''STARTTYPE'''设置为INPOS来完成。 如下图所示。 | |
− | |||
− | |||
[[Image:Axsystems;UserManual-8-PointToPointMoves.png|caption]] | [[Image:Axsystems;UserManual-8-PointToPointMoves.png|caption]] | ||
− | + | 如您所见,电机会停止,因为在继续下一个命令之前,softMC等待的跟随误差足够小。 | |
<pre> | <pre> | ||
MainAxis.PESettle = 0.01 | MainAxis.PESettle = 0.01 | ||
Line 284: | Line 283: | ||
</pre> | </pre> | ||
− | + | 通常,'''MOVE'''的结束速度默认为零。 但是,您可以指定非零结束速度('''Non-Zero End Moves''')。 为此,请使用'''''<nowiki><''axis''>.</nowiki>''VELOCITYFINAL'''。 必须在与MOVE相同的行上指定'''VELOCITYFINAL'''。 例如, | |
<pre> | <pre> | ||
A1.VelocityCruise = 2000 | A1.VelocityCruise = 2000 | ||
Line 295: | Line 294: | ||
</pre> | </pre> | ||
− | + | 同样生成以下曲线。 | |
[[Image:Axsystems;UserManual-9-PointToPointMoves.png|caption]] | [[Image:Axsystems;UserManual-9-PointToPointMoves.png|caption]] | ||
− | + | 您很少想要使用非零最终速度的单次运动,因为运动持续到指定的结束位置并突然开始减速为零。 最终位置未指定。 通常,使用非零最终速度的运动来构建多步骤曲线。 | |
− | + | 在运动缓存区中组合非零终点运动可产生多步运动。 例如: | |
<pre> | <pre> | ||
Program | Program | ||
Line 326: | Line 325: | ||
</pre> | </pre> | ||
− | + | 生成以下曲线。 | |
[[Image:Axsystems;UserManual-10-PointToPointMoves.png|caption]] | [[Image:Axsystems;UserManual-10-PointToPointMoves.png|caption]] | ||
− | + | 在上面的例子中,A1.STARTTYPE = GCOM。当第一个运动生成时,第二个运动开始。当链接非零终点运动到另一个运动时,必须使用STARTTYPE = GCOM。 您不能使用STARTTYPE = IMMED或SIMM,因为新的运动会立即覆旧的运动。 您不能使用STARTTYPE = INPOS,因为您希望运动曲线的第二部分在第一部分完成后立即开始。如果第二次运动是增量的,等待INPOS的延迟会增加错误。 对于任何运动类型,运动可能无限期地延迟,因为运动的电机永远不会到位置,除非系统被专门调整为这样做。 | |
− | + | 您可以组合非零终点运动,以根据需要执行多个步骤来生成运动曲线。 但是,有一些限制:: | |
− | # <nowiki> | + | # <nowiki>STARTTYPE为非零终点运动时(VELOCITYFINAL<>0)必须为GCOM。</nowiki> |
− | # '''VELOCITYCRUISE''' | + | # '''VELOCITYCRUISE'''和'''VELOCITYFINAL'''总为正值。方向由目标位置设置。 |
− | # '''PFINAL''' | + | # 在当前运动的'''PFINAL''' 之前,后续运动的'''PFINAL'''必须足够远,以便加速度限制可以实现曲线。生成的曲线总是到达目标位置。如果加速度和smooth限制阻止达到所需的最终速度,则以最终速度尽可能接近所需值终止运动。 |
− | + | 您可以更改正在进行的运动的结束位置或速度。 您可以通过设置STARTTYPE = IMMED并发出第二个运动来执行此操作。例如,如果要发出运动,请等待几秒钟,更改结束位置,而不更改速度。为此,你可以写成: | |
<pre> | <pre> | ||
CutAxis.StartType = Immed | CutAxis.StartType = Immed | ||
Line 347: | Line 346: | ||
</pre> | </pre> | ||
− | + | 生成的曲线如下 | |
[[Image:Axsystems;UserManual-11-PointToPointMoves.png|caption]] | [[Image:Axsystems;UserManual-11-PointToPointMoves.png|caption]] | ||
− | + | 作为第二个例子,如果你想改变巡航速度而不改变最终位置,你可以写为: | |
<pre> | <pre> | ||
CutAxis.StartType = IMMED | CutAxis.StartType = IMMED | ||
Line 359: | Line 358: | ||
</pre> | </pre> | ||
− | + | 您可以更改正在执行的任何运动的最终位置,巡航速度和最终速度。 但是,您必须遵守以下规则: | |
− | # | + | # STARTTYPE必须为IMMED或SIMM |
− | # | + | # 方向根据目标位置设定。对于手动操作,根据速度的标志。 |
− | # | + | # 运动命令中新的和旧的VELOCITYCRUISE和VELOCITYFINAL必须为正。 |
− | # | + | # 如果后续运动更改了PFINAL或VFINAL,则必须仍然可以使用轴加速度限制创建运动曲线 |
− | === | + | === 多轴同步 === |
− | + | softMC可以同步许多单轴'''MOVE''',以便它们都同时启动。当您有多个轴具有大部分独立的运动,但必须同时启动时,这很有用。 它也可用于三个轴以上的协作。 组运动(稍后介绍)提供更紧密的协调,但有一个运动曲线。 | |
− | + | 同步由STARTTYPE = SYNCSTART(SYNC)控制。 该功能允许您使用运动命令加载运动生成器,但生成延迟运动,直到发出SYNCSTART命令。 例如,以下顺序: | |
<pre> | <pre> | ||
Move MainAxis 300 VCruise = 1200 StartType = Sync | Move MainAxis 300 VCruise = 1200 StartType = Sync | ||
Line 379: | Line 378: | ||
SyncStart MainAxis AuxAxis | SyncStart MainAxis AuxAxis | ||
</pre> | </pre> | ||
− | + | 生成以下曲线 | |
[[Image:Axsystems;UserManual-12-SynchronizingMultipleAxes.png|caption]] | [[Image:Axsystems;UserManual-12-SynchronizingMultipleAxes.png|caption]] | ||
− | + | 您可以根据需要同步多个轴,包括模拟轴。 由于每个SYNCSTART指定其同步的轴,因此可以独立同步多组轴。 | |
− | + | 该命令引起2个SERCOS周期时间的最小系统延迟,但是延迟可能更大,这取决于同步在一起的运动数量和系统的总负载。 | |
− | + | 如果您已将同步运动加载到运动生成器中并需要将其删除,请使用'''SYNCCLEAR'''。 例如,如果在发出'''SYNCCLEAR'''之前输入了以下命令: | |
<pre> | <pre> | ||
SyncClear MainAxis | SyncClear MainAxis | ||
</pre> | </pre> | ||
− | + | MainAxis运动被删除。 这只会影响后续的运动。 您只能使用'''SYNCCLEAR'''清除待处理的运动。 一旦运动执行,'''SYNCCLEAR'''就没有任何效果。 在这种情况下停止轴就像非同步运动那样执行。 | |
− | + | 您可以重写以下轴属性作为“MOVE”'的一部分: | |
'''ABSOLUTE''' | '''ABSOLUTE''' | ||
Line 417: | Line 416: | ||
'''JERKRATE''' | '''JERKRATE''' | ||
− | == | + | == 速度覆盖 == |
− | + | softMC可以加速或减慢所有运动命令。 这可以单独应用于整个机器,也可以单独应用于各个轴。 该功能在机器开发中广泛使用,因为它可以在单个命令中调整整个机器速度。 由于可以从终端发出命令,您可以在不修改程序的情况下以各种速度观察机器的操作。 | |
− | + | softMC上的所有轴都由'''SYSTEM.VELOCITYOVERRIDE''' ('''SYSTEM.VORD''')控制。例如: | |
<pre> | <pre> | ||
System.VelocityOverride = 25 | System.VelocityOverride = 25 | ||
</pre> | </pre> | ||
− | + | 立即将所有当前正在执行的 '''MOVE'''和'''JOG'''以及任何后续命令的速度命令降低到当前值的25%。 由于速度由'''VORD'''控制,所以所有轴的加速度都按比例调整。 '''MOVE'''的最终位置不受影响。 | |
− | + | 如果要覆盖单个轴而不是整个机器的速度,可以使 | |
+ | |||
+ | 用'''''<nowiki><''axis''></nowiki>''.VORD.VELOCITYOVERRIDE''' ('''''<nowiki><''axis''></nowiki>''.VORD''')。它以与SYSTEM.VORD相同的方式使用,但它仅适用于一个轴。'''''<nowiki><''axis''></nowiki>''.VORD'''可以根据需要应用于多个或少数轴,并且为一个轴指定的倍率不依赖于其他轴。如果您同时使用 '''SYSTEM.VORD'''和'''''<nowiki><''axis''></nowiki>''.VORD''' ,则轴速度会被减小到两个覆盖属性的乘积,如下所示: | ||
<pre> | <pre> | ||
− | System.VOrd = 66 | + | System.VOrd = 66 ‘将整个系统降低到2/3速度 |
− | MainAxis.VOrd = 50 | + | MainAxis.VOrd = 50 ‘将MainAxis减少1/3的速度 |
</pre> | </pre> | ||
− | + | 在这个例子中,整个系统减少到66%,而MainAxis的系统速度减少50%,则降低到33%。 直到速度开始改变有5个周期的延迟,以确保速度平滑改变。 | |
− | = | + | = 运动示例 = |
− | + | 本节提供了应用于常见机器功能的运动控制技术几个示例。 | |
<!-- == Position Capture == | <!-- == Position Capture == | ||
Line 474: | Line 475: | ||
− | == | + | == 回零 == |
− | + | 大多数机器轴需要建立一个软件的回零参考位置。用户指定的回零程序通常在机器的上电周期或手动模式下运行。 软件回零参考位置(0000 ...)由使用'''HOMEOFFSET'''(与硬件零位置距离)的任何标记脉冲(用于控制器和轴线力学之间的完整性的回零程序建立)。 | |
− | + | 驱动器直接驱动的轴上的硬件零位置通常由编码器(增量,正弦编码器或ENDAT编码器)的每转一次的标记脉冲或旋转变压器的过零位置分配。 然而,对于具有齿轮比(齿轮,皮带或滚珠丝杠等)的机床,控制器与引导程序的轴向力学之间的关系(完整性)需要更复杂的过程。 在这些情况下,通常在轴上放置一个微动开关或接近开关,用于指示硬件零位的参考位置。 | |
− | {{Note| | + | {{Note|零点位置开关放置在轴的一端(轴的行程限制在内部),开关跳闸机构设计成使得开关电路在硬件零点起始位置的一侧闭合,并且在另一边的硬件零点位置打开。}} |
− | + | 开关电路(高/低)为零位置方向提供控制器输入信息。其他机床轴可以使用绝对位置设备设计,因此控制器与轴力学之间的完整性将自动建立在机器上电期间。机器位置完整性的建立与仅旋转360°的轴类似。 | |
− | + | 回零过程本身由驱动器完成,softMC只是初始化。 所有的回零参数和命令由驱动命令集定义,并且可以根据所使用的运动总线而有所不同。对于EtherCAT,请参考: | |
* [[EtherCAT:EC SLAVE HOME|EC SLAVE HOME]] | * [[EtherCAT:EC SLAVE HOME|EC SLAVE HOME]] | ||
Line 556: | Line 557: | ||
--> | --> | ||
− | == | + | == 配准 == |
− | + | 配准应用是基于后续事件开始运动然后修改运动曲线。 这些应用通常涉及离散产品处理,例如在包装,印刷和转换行业中常见的。该事件通常通过测量待处理产品上的位置(通常是印在产品上的标记并由光学传感器检测)来产生。 标记通常被称为配准标记。 | |
− | + | 常见的配准应用是从网(卷)切割产品包装,例如袋子或标签 网格上印有产品包装的许多副本。 控制器开始从网格展开产品包装。 在此运动期间,控制器等待检测到注册标记。 检测到标记后,基于检测到标记的位置修改运动曲线。 通常,轮廓在可以切割包装的标记位置之后静止一段距离。 这种类型的应用有许多变化。 关键因素是运动开始后才能计算运动的结束位置。这要求启动运动曲线,然后即时修改。 | |
− | + | softMC结合了即时更改位置终点的能力和命令驱动器捕获位置的能力。 配准类似于回零,但在回零时回到标记零位,而在配准时是前进到标记后的一个固定位置。 以下示例显示了典型的配准示例: | |
<pre> | <pre> | ||
Program | Program | ||
Line 568: | Line 569: | ||
End Program | End Program | ||
</pre> | </pre> | ||
− | + | 此示例生成下一个运动曲线。 | |
− | |||
[[Image:Axsystems;UserManual-13-Registration.png|caption]] | [[Image:Axsystems;UserManual-13-Registration.png|caption]] | ||
− | + | 运动开始,配准标记被检测到最后的40%。 经过少量的处理时间后,第二个运动将在当前运动中加载。 轴在配准标记后以固定的偏移量静止。 | |
− | + | 确定位置越准确,切割对准标记越准确。 如果加工是以10 ft / s进给材料,并且捕获精度为±3微秒,则标记为: | |
10 (ft/sec) * 3 µs = 3.225e-5 ft or about 0.0004 in. | 10 (ft/sec) * 3 µs = 3.225e-5 ft or about 0.0004 in. | ||
− | + | 原来的曲线比实际的走势更远。 通常使用这种技术,因为您可以监视结束位置,如果在检测到配准标记之前完成运动,则表示标记已被丢失。 | |
− | == | + | == 门控 == |
− | + | 许多应用需要运动来选择外部开关。 在这些情况下,您需要在门控输入转换尽可能少的延迟之后开始运动。 您可以在softMC上完成此操作的一种方法是启动包含同步运动的事件。例如: | |
<pre> | <pre> | ||
Program | Program | ||
Attach MainAxis | Attach MainAxis | ||
Move MainAxis 100 Absolute=FALSE StartType<nowiki>=SYNC</nowiki> | Move MainAxis 100 Absolute=FALSE StartType<nowiki>=SYNC</nowiki> | ||
− | While System.Din.1=False; | + | While System.Din.1=False; ‘等待输入改变 |
Sleep 1 | Sleep 1 | ||
End While | End While | ||
− | SyncStart MainAxis | + | SyncStart MainAxis ‘通过禁用启动轴 |
End Program | End Program | ||
</pre> | </pre> | ||
− | + | 当DIN.1转换为高电平时,该程序运动MainAxis 100个单元。MainAxis上的运动尽可能在DIN.1过渡之后开始,也可以使用'''OnEvent '''。 | |
− | == | + | == 装夹 == |
− | + | 装夹应用通常处理离散零件,但运动的终点是未知的。 当部件的长度不准确或材料的厚度未知时,通常应用装夹。 在装夹时,控制器以低扭矩运动轴,直到检测到材料的末端。 然后,扭矩增加,要么更精确地测量零件,要么保持零件以供另一轴处理。 | |
− | + | softMC允许您更改驱动器上的转矩限制,并使用事件来监视位置误差,以检测部件的末端(下图) | |
<pre> | <pre> | ||
Program | Program | ||
Line 622: | Line 622: | ||
</pre> | </pre> | ||
− | + | 该程序通过以低扭矩启动缓慢运动来工作。 运动持续到位置误差大于0.25个单位。 当轴进入停止状态时,由于运动曲线继续而导致位置错误累积。 您必须小心设置事件的阈值大于正常操作的位置误差。 事件的阈值也必须小于驱动器的最大跟随误差,以避免事件触发之前的驱动器错误。 在运动加速期间禁用'''OnEvent'''以避免造成PartFound事件的干扰。 | |
+ | |||
[[Category:Motion Control|Single Axis Motion]] | [[Category:Motion Control|Single Axis Motion]] |
Latest revision as of 09:03, 8 August 2017
语言: | English • 中文(简体) |
---|
IMPORTANT | |
This entry is outdated and requires revision. |
Contents
简介
softMC主要支持三种类型的运动:
- 单轴运动
- 主从轴运动
- 多轴运动
运动发生器控制softMC中的所有运动。该软件设备从softMC任务接收命令,并在每个伺服周期为驱动器生成位置和速度命令。 两个主要的单轴运动命令是JOG和MOVE。softMC还提供了同步运动命令的执行以及即时更改运动配置文件的方法。此外,softMC提供了启动和停止运动的多种模式。
由于运动总线通信,所有的运动命令都会受到固有的系统延迟。发送命令需要一个周期时间。需要第二个周期时间来接收位置反馈。 因此,最小系统延迟至少为2个运动总线周期(对于EtherCAT,通常为4个周期)。 如果在驱动器中启用了微插补,则会有1个周期时间的延迟。另外,不确定的延迟可能来自伺服系统依赖于机械系统的驱动调谐和动力学。
运动发生器
softMC中所有运动的基础是运动发生器。当您发出运动命令(如JOG或MOVE)到一个轴上时,运动生成器是在软件中创建的。 该运动发生器控制在运动命令中指定的轴的位置和速度命令。每隔一定时间(通常为2或4 ms),运动发生器更新这些命令。 在运动结束时,运动发生器被终止。 下图显示了运动发生器的正常运行。
运动条件
在softMC生成运动之前,必须满足几个条件:
控制任务必须关联到受控轴上。
控制轴必须使能。
系统和轴运动标志开启。
在任务可以向轴发送运动命令之前,轴必须关联到任务上。传动装置也需要关联到做任务上。这可以防止其他任务尝试控制轴。要关联轴,在控制任务使用 ATTACH 命令:
Program Attach A1
如果轴上没有关联其他任务,则立即关联轴。 如果另一个任务已经关联了轴,则会产生错误。可以使用TRY CATCH 来等待轴未关联。
只要任务有轴关联,任何其他任务都不可以控制该轴。当关联轴的任务完成时,它应该与轴分离:
Detach A1
如果在该轴的运动轨迹正在进行时发出DETACH,则DETACH将延迟执行直到该运动完成。 如果任务以某些轴为依据结束,则所有轴都将自动分离。
如果从终端窗口发出运动命令,则要关联轴的要求是一个例外。 在这种情况下,假设轴未关联任何其他任务,轴将在运动命令的持续时间内自动关联到终端窗口。
通过在终端窗口中键入以下命令来使能驱动器:
System.Enable = ON A1.Enable = ON
尽管没有连接驱动器,但模拟轴也需要使能。启用驱动器还需要两个其他信号:DRIVEON 和HALTRESTART。 这些信号通常为ON。 这些信号保持符合SERCOS协议。 在非SERCOS应用程序中,它们不能被softMC程序使用。
有关访问驱动器控制位的更多详细信息,请参见此处:
- Drive Control Bits - Implementation of Drive Control Bits under EtherCAT
准备运动系统的最后一步是打开运动标志。 有两个运动标志必须在:系统运动标志和轴运动标志。 例如:
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
运动发生器的目的是将运动命令(JOG或MOVE)转换为定期更新的位置和速度命令系列。 该系列称为运动曲线。 位置和速度命令通过运动总线(EtherCAT,CAN,SERCOS)发送到受控驱动器。 驱动器中的所有伺服回路(位置,速度和电流)都被关闭。 下图显示了JOG命令的速度部分的曲线。
运动曲线必须定期更新。 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(覆盖值)。运动命令没有指定覆盖加速度,加速度为固定值。
覆盖值在运动命令中广泛使用。 可以覆盖的值在下面以及参考手册中进行了说明。
加速度曲线
单轴运动命令MOVE和 JOG产生加速度曲线由以下限制:
ACCELERATION (ACC)
DECELERATION (DEC)
SMOOTHFACTOR (SMOOTH)
将加速和减速限制到小于电机和负载的加速能力。SMOOTH通过平滑运动有助于限制或减少机器上的机械磨损。
有两种类型的加速度曲线 - 正弦曲线和梯形曲线。 在正弦曲线中,加速度平滑地增加,而在梯形轮廓中,加速度在每个样本中的增加。 使用SMOOTHFACTOR设置加速度增加平滑度。
手动
当您要使电机以与当前位置无关的恒定速度移动时,请使用JOG。速度可以为负,以产生相反方向的运动。例如:
Jog ConveyorAxis 2000
生成以下曲线:
您可以选择使用TIMEJOG限制JOG运行的时间。TIMEJOG必须放在与JOG相同的行上。 TIMEJOG以毫秒为单位指定,包括加速时间。 时间到期后,减速开始。 当TIMEJOG为-1时,JOG将无限期地继续。 TIMEJOG默认为-1。 例如:
Jog ConveyorAxis 2000 TimeJog = 1000
生成以下曲线。
TIMEJOG
ACCELERATION
DECELERATION
SMOOTHFACTOR
JERK
VELOCITYRATE
ACCELERATIONRATE
DECELERATIONRATE
JERKRATE
停止
STOP 在运动缓存中停止运动。在命令中,必须指定轴。例如:
Stop ConveyorAxis
通常,STOP设置为以DECELERATIONMAX的速率立即停止运动。 但是,您可以使用STOPTYPE修改STOP的影响。 STOPTYPE可以取三个值:
StopType = Immediate 或 IMMED以DECELERATIONMAX立即停止轴。
StopType = EndMotion当前运动命令结束时停止轴清除缓存运动。
StopType = Abort立即停止当前动作,无需恢复停止的动作。 只有当前运动命令停止,才能生成命令。
STOPTYPE默认为IMMED。 如果STOPTYPE = ENDMOTION,则执行STOP之前,当前运动完成。 对于JOG与TIMEJOG = -1 (无限期继续), STOPTYPE = ENDMOTION没有意义,因为JOG永远不会结束。 在STOP期间,存储缓存中的当前和未决移动,以允许使用PROCEED恢复这些运动。
STOP使用模态最大减速度和最大加加速度。 STOPTYPE作为STOP的一部分被覆盖。
继续
任务停止关联到轴上的运动时,重新启动运动很简单。逻辑包含在任务内,但是当另一个任务停止运动时,情况更加复杂。例如,系统应该防止任何任务重新启动运动,除了停止它的任务。 为了控制STOP后的运动重新启动,softMC支持PROCEED。
PROCEED有两个目的:提高安全性,并允许运动继续沿着原始路径。提高安全性是通过不允许没有停止发出 PROCEED的动作的任务轴的运动重启。 路径控制由<''axis''>.PROCEEDTYPE提供。 PROCEEDTYPE可以设置为以下三种模式之一:CONTINUE,NEXT MOTION和CLEARMOTION。 关键的操作规则是:
- 当任务停止与其关联的轴的运动时,允许PROCEED,但不是必需的。
- 当从终端窗口发出STOP并且被停止的轴被关联到任务时,运动停止,并且在执行下一个动作或DETACH时该任务被暂停。 命令的任务和动作只有在从终端窗口发出PROCEED 之后才能重新启动。 在PROCEED 发出之前,从终端窗口命令运动。
- 当从一个任务发出STOP 并且被停止的轴被关联到另一个任务时,运动停止,并且在执行下一个动作或DETACH时该任务被暂停。 只有在从停止运动的任务发出PROCEED 之后,它所命令的任务和动作才会重新启动。 不能从停止运动的任务中指定运动。
- 当从终端窗口发出STOP命令,从终端窗口发出命令时,运动停止,无法继续。 在这种情况下,唯一可用的继续类型是来自终端的CLEARMOTION。
PROCEED有三种方式重新启动动作。使用 PROCEEDTYPE指定运动生成器应如何进行:
ProceedType = Continue这将导致运动发生器继续停止的缓冲区中的挂起的运动命令。
ProceedType = NextMotion'这使运动发生器中止当前运动并直接进入停止的运动缓存中的运动。
ProceedType = ClearMotion这将清除运动缓存区。 停止的运动缓存区中的所有运动命令都将中止。 这是默认值。
运动
MOVE是最常见的点到点移动。 基本运动是三段运动:
从零速度加速到VelocityCruise
在VelocityCruise继续巡航
从VelocityCruise减速到VelocityFinal
三段运动的关键部分是在正确的时间开始减速,使电机速度变为零(如果VELOCITYFINAL = 0),就像位置指令到达最终位置一样。 例如,以下命令:
Move ConveyorAxis 100 VCruise = 2000
生成以下曲线
最终和增量与绝对移动的位置
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结束时需要很少的时间来解决这个问题。 实际所需时间因系统而异。更高的带宽系统具有较短的建立时间,但是所有的系统都需要一些时间来解决。典型的时间范围从几毫秒到几十毫秒。
理想情况下,稳定时间允许电机移动到逼近零位置误差。 但是,您必须允许位置误差从不达到零的条件。 在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时出现此问题。
正如你所看到的那样,电机速度不会变为零,因为在速度反馈稳定在零之前,第二个运动速度指令为正。通常,期望的性能是在第二次运动开始之前速度达到零。 为此,控制器需要等待轴位置误差在开始第二次运动之前稳定。 这通过将 STARTTYPE设置为INPOS来完成。 如下图所示。
如您所见,电机会停止,因为在继续下一个命令之前,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
同样生成以下曲线。
您很少想要使用非零最终速度的单次运动,因为运动持续到指定的结束位置并突然开始减速为零。 最终位置未指定。 通常,使用非零最终速度的运动来构建多步骤曲线。
在运动缓存区中组合非零终点运动可产生多步运动。 例如:
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
生成以下曲线。
在上面的例子中,A1.STARTTYPE = GCOM。当第一个运动生成时,第二个运动开始。当链接非零终点运动到另一个运动时,必须使用STARTTYPE = GCOM。 您不能使用STARTTYPE = IMMED或SIMM,因为新的运动会立即覆旧的运动。 您不能使用STARTTYPE = INPOS,因为您希望运动曲线的第二部分在第一部分完成后立即开始。如果第二次运动是增量的,等待INPOS的延迟会增加错误。 对于任何运动类型,运动可能无限期地延迟,因为运动的电机永远不会到位置,除非系统被专门调整为这样做。
您可以组合非零终点运动,以根据需要执行多个步骤来生成运动曲线。 但是,有一些限制::
- STARTTYPE为非零终点运动时(VELOCITYFINAL<>0)必须为GCOM。
- VELOCITYCRUISE和VELOCITYFINAL总为正值。方向由目标位置设置。
- 在当前运动的PFINAL 之前,后续运动的PFINAL必须足够远,以便加速度限制可以实现曲线。生成的曲线总是到达目标位置。如果加速度和smooth限制阻止达到所需的最终速度,则以最终速度尽可能接近所需值终止运动。
您可以更改正在进行的运动的结束位置或速度。 您可以通过设置STARTTYPE = IMMED并发出第二个运动来执行此操作。例如,如果要发出运动,请等待几秒钟,更改结束位置,而不更改速度。为此,你可以写成:
CutAxis.StartType = Immed CutAxis.Absolute = On Move CutAxis 150 Sleep 3000 Move CutAxis 100
生成的曲线如下
作为第二个例子,如果你想改变巡航速度而不改变最终位置,你可以写为:
CutAxis.StartType = IMMED Move CutAxis 150 Sleep 3000 Move CutAxis 150 VCruise = 1500
您可以更改正在执行的任何运动的最终位置,巡航速度和最终速度。 但是,您必须遵守以下规则:
- STARTTYPE必须为IMMED或SIMM
- 方向根据目标位置设定。对于手动操作,根据速度的标志。
- 运动命令中新的和旧的VELOCITYCRUISE和VELOCITYFINAL必须为正。
- 如果后续运动更改了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
生成以下曲线
您可以根据需要同步多个轴,包括模拟轴。 由于每个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
立即将所有当前正在执行的 MOVE和JOG以及任何后续命令的速度命令降低到当前值的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 | |
零点位置开关放置在轴的一端(轴的行程限制在内部),开关跳闸机构设计成使得开关电路在硬件零点起始位置的一侧闭合,并且在另一边的硬件零点位置打开。 |
开关电路(高/低)为零位置方向提供控制器输入信息。其他机床轴可以使用绝对位置设备设计,因此控制器与轴力学之间的完整性将自动建立在机器上电期间。机器位置完整性的建立与仅旋转360°的轴类似。
回零过程本身由驱动器完成,softMC只是初始化。 所有的回零参数和命令由驱动命令集定义,并且可以根据所使用的运动总线而有所不同。对于EtherCAT,请参考:
配准
配准应用是基于后续事件开始运动然后修改运动曲线。 这些应用通常涉及离散产品处理,例如在包装,印刷和转换行业中常见的。该事件通常通过测量待处理产品上的位置(通常是印在产品上的标记并由光学传感器检测)来产生。 标记通常被称为配准标记。
常见的配准应用是从网(卷)切割产品包装,例如袋子或标签 网格上印有产品包装的许多副本。 控制器开始从网格展开产品包装。 在此运动期间,控制器等待检测到注册标记。 检测到标记后,基于检测到标记的位置修改运动曲线。 通常,轮廓在可以切割包装的标记位置之后静止一段距离。 这种类型的应用有许多变化。 关键因素是运动开始后才能计算运动的结束位置。这要求启动运动曲线,然后即时修改。
softMC结合了即时更改位置终点的能力和命令驱动器捕获位置的能力。 配准类似于回零,但在回零时回到标记零位,而在配准时是前进到标记后的一个固定位置。 以下示例显示了典型的配准示例:
Program 'Prepare drive to captureVCruise = 3000 Cycle:Move FeedAxis 50 'wait for captureMove FeedAxis [capture position] + 10 StartType=IMMED End Program
此示例生成下一个运动曲线。
运动开始,配准标记被检测到最后的40%。 经过少量的处理时间后,第二个运动将在当前运动中加载。 轴在配准标记后以固定的偏移量静止。
确定位置越准确,切割对准标记越准确。 如果加工是以10 ft / s进给材料,并且捕获精度为±3微秒,则标记为:
10 (ft/sec) * 3 µs = 3.225e-5 ft or about 0.0004 in.
原来的曲线比实际的走势更远。 通常使用这种技术,因为您可以监视结束位置,如果在检测到配准标记之前完成运动,则表示标记已被丢失。
门控
许多应用需要运动来选择外部开关。 在这些情况下,您需要在门控输入转换尽可能少的延迟之后开始运动。 您可以在softMC上完成此操作的一种方法是启动包含同步运动的事件。例如:
Program Attach MainAxis Move MainAxis 100 Absolute=FALSE StartType=SYNC While System.Din.1=False; ‘等待输入改变 Sleep 1 End While SyncStart MainAxis ‘通过禁用启动轴 End Program
当DIN.1转换为高电平时,该程序运动MainAxis 100个单元。MainAxis上的运动尽可能在DIN.1过渡之后开始,也可以使用OnEvent 。
装夹
装夹应用通常处理离散零件,但运动的终点是未知的。 当部件的长度不准确或材料的厚度未知时,通常应用装夹。 在装夹时,控制器以低扭矩运动轴,直到检测到材料的末端。 然后,扭矩增加,要么更精确地测量零件,要么保持零件以供另一轴处理。
softMC允许您更改驱动器上的转矩限制,并使用事件来监视位置误差,以检测部件的末端(下图)
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
该程序通过以低扭矩启动缓慢运动来工作。 运动持续到位置误差大于0.25个单位。 当轴进入停止状态时,由于运动曲线继续而导致位置错误累积。 您必须小心设置事件的阈值大于正常操作的位置误差。 事件的阈值也必须小于驱动器的最大跟随误差,以避免事件触发之前的驱动器错误。 在运动加速期间禁用OnEvent以避免造成PartFound事件的干扰。