Difference between revisions of "Basic Motion Elements/zh-hans"

From SoftMC-Wiki
Jump to: navigation, search
m (速度单位)
 
(49 intermediate revisions by the same user not shown)
Line 26: Line 26:
 
== 轴名 ==
 
== 轴名 ==
 
softMC可以根据轴的地址:A1,A2,A3...,依次类推,直至A32(最大的轴数是由制造商提供的用户许可代码限制的),自动为您配置好您所有的轴。您可以通过“轴名+.+轴属性”的方式获取  
 
softMC可以根据轴的地址:A1,A2,A3...,依次类推,直至A32(最大的轴数是由制造商提供的用户许可代码限制的),自动为您配置好您所有的轴。您可以通过“轴名+.+轴属性”的方式获取  
轴的属性。例如:每一个轴都有一个[[MC-Basic:axis.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]属性, 可以得到轴的当前的速度. 你可以通过'''?''' 来查询 [[MC-  
+
轴的属性。例如:每一个轴都有一个[[MC-Basic:element.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]属性, 可以得到轴的当前的速度. 你可以通过'''?''' 来查询 [[MC-  
 
Basic:axis.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]的值。ControlStudio 终端中的命令如下:
 
Basic:axis.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]的值。ControlStudio 终端中的命令如下:
 
<pre>
 
<pre>
Line 89: Line 89:
  
 
<''axis''>.''DIRECTION''' 用来乘以单位转换系数。
 
<''axis''>.''DIRECTION''' 用来乘以单位转换系数。
运动控制系数:(i.e., [[MC-Basic:axis.POSITIONFACTOR|'''POSITIONFACTOR''']], [[MC-Basic:axis.VELOCITYFACTOR|'''VELOCITYFACTOR''']],
+
运动控制系数:(i.e., [[MC-Basic:axis.POSITIONFACTOR|'''POSITIONFACTOR''']], [[MC-Basic:element.VELOCITYFACTOR|'''VELOCITYFACTOR''']],
  [[AXY:MC-Basic:axis.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']] , [[MC-Basic:axis.JERKFACTOR|'''JERKFACTOR''']]) 只能赋正值,
+
  [[MC-Basic:element.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']] , [[MC-Basic:element.JERKFACTOR|'''JERKFACTOR''']]) 只能赋正值,
 
  [[MC-Basic:axis.DIRECTION|'''DIRECTION''']] 决定它们的符号.
 
  [[MC-Basic:axis.DIRECTION|'''DIRECTION''']] 决定它们的符号.
 
  [[MC-Basic:axis.DIRECTION|'''DIRECTION''']] 能取两个值中的一个: 正向:-1  或者 反向: +1。
 
  [[MC-Basic:axis.DIRECTION|'''DIRECTION''']] 能取两个值中的一个: 正向:-1  或者 反向: +1。
Line 146: Line 146:
  
 
== 速度单位 ==
 
== 速度单位 ==
速度单位可以将softMC内部的速度单位(计数/ms)转换成您所需要的单位。它们是由[[MC-Basic:axis.VELOCITYFACTOR|'''VELOCITYFACTOR''' 或者 '''VFAC''']]控制的.
+
速度单位可以将softMC内部的速度单位(计数/ms)转换成您所需要的单位。它们是由[[MC-Basic:element.VELOCITYFACTOR|'''VELOCITYFACTOR''' 或者 '''VFAC''']]控制的.
通常,速度单位是位置单位/s,或者每分钟,或者rpm.如果您需要速度单位是您的位置单位/s,将[[MC-Basic:axis.VELOCITYFACTOR|'''VELOCITYFACTOR''']] 设置为:
+
通常,速度单位是位置单位/s,或者每分钟,或者rpm.如果您需要速度单位是您的位置单位/s,将[[MC-Basic:element.VELOCITYFACTOR|'''VELOCITYFACTOR''']] 设置为:
 
[[MC-Basic:axis.POSITIONFACTOR|'''POSITIONFACTOR''']] 除以1000 (将毫秒转成秒):
 
[[MC-Basic:axis.POSITIONFACTOR|'''POSITIONFACTOR''']] 除以1000 (将毫秒转成秒):
 
<pre>
 
<pre>
Line 170: Line 170:
 
<nowiki>= 8000 计数</nowiki>
 
<nowiki>= 8000 计数</nowiki>
  
[[MC-Basic:axis.VELOCITYFACTOR|'''VelocityFactor''']] 应该设为计数/转除以60000:
+
[[MC-Basic:element.VELOCITYFACTOR|'''VelocityFactor''']] 应该设为计数/转除以60000:
 
<pre>
 
<pre>
 
A1.VelocityFactor = 8000/60000
 
A1.VelocityFactor = 8000/60000
Line 176: Line 176:
  
 
== 加速度单位 ==
 
== 加速度单位 ==
加速度单位将softMC内部加速度单位(计数/毫秒<sup>2</sup>)转换成您的单位。它们是由:[[AXY:MC-Basic:axis.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''' 或  
+
加速度单位将softMC内部加速度单位(计数/毫秒<sup>2</sup>)转换成您的单位。它们是由:[[MC-Basic:element.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''' 或  
 
着'''<nowiki><</nowiki>''axis''>.AFAC''']]控制的。通常,加速度单位是速度单位/秒或者/分。如果您需要将加速度单位设为您的速度单位/秒,
 
着'''<nowiki><</nowiki>''axis''>.AFAC''']]控制的。通常,加速度单位是速度单位/秒或者/分。如果您需要将加速度单位设为您的速度单位/秒,
将[[AXY:MC-Basic:axis.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']] 设置为 [[MC-Basic:axis.VELOCITYFACTOR|'''VELOCITYFACTOR''']] 除以 1000 (将毫秒转为秒).  
+
将[[MC-Basic:element.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']] 设置为 [[MC-Basic:element.VELOCITYFACTOR|'''VELOCITYFACTOR''']] 除以 1000 (将毫秒转为秒).  
 
除以60000,将加速度单位设为速度单位/分:
 
除以60000,将加速度单位设为速度单位/分:
  
Line 190: Line 190:
 
设置加加速的系数也是必要的。即便您总是使用平滑系数。平滑系统可以自动根据速度和加速度值来定义加加速参数, 但是它只是系数前的一个值。因此,完整的加加速有效值会在内部计算  
 
设置加加速的系数也是必要的。即便您总是使用平滑系数。平滑系统可以自动根据速度和加速度值来定义加加速参数, 但是它只是系数前的一个值。因此,完整的加加速有效值会在内部计算  
 
。至少您需要设置:Jfac=Afac/1000 ,这个参数通常是可以正常工作的。
 
。至少您需要设置:Jfac=Afac/1000 ,这个参数通常是可以正常工作的。
[[MC-Basic:axis.JERKFACTOR|'''JERKFACTOR''']] 设置了您的加加速单位和内部加加速单位的转换系数。[计数/毫秒</nowiki><sup>3</sup>].   
+
[[MC-Basic:element.JERKFACTOR|'''JERKFACTOR''']] 设置了您的加加速单位和内部加加速单位的转换系数。[计数/毫秒</nowiki><sup>3</sup>].   
 
'''<nowiki><</nowiki>''axis''>.JERKFACTOR''' 必须包含位置和时间维度的转换系数。
 
'''<nowiki><</nowiki>''axis''>.JERKFACTOR''' 必须包含位置和时间维度的转换系数。
  
Line 196: Line 196:
 
softMC提供了平滑的,可用的加速度规划曲线,用来降低设备的抖动和磨损,并且可以允许高加速度升率。softMC允许您独立控制加速度和减速度,用来更进一步的降低抖动。|
 
softMC提供了平滑的,可用的加速度规划曲线,用来降低设备的抖动和磨损,并且可以允许高加速度升率。softMC允许您独立控制加速度和减速度,用来更进一步的降低抖动。|
  
[[AXY:MC-Basic:axis.ACCELERATION|'''ACCELERATION''']] 和 [[MC-Basic:axis.DECELERATION|'''DECELERATION''']] 控制加速的的升率。
+
[[MC-Basic:element.ACCELERATION|'''ACCELERATION''']] 和 [[MC-Basic:element.DECELERATION|'''DECELERATION''']] 控制加速的的升率。
 
以下代码可在中断中输入,设置A1轴的加速度和减速度:
 
以下代码可在中断中输入,设置A1轴的加速度和减速度:
 
<pre>
 
<pre>
Line 206: Line 206:
  
 
加加速是加速度的一阶导。快速运动通常会产生较大的加加速。大的加加速通常会引发设备共振,从而造成不必要的磨损和噪声。有的运动控制器简单的瞬间改变一个很大的加速度值,这样  
 
加加速是加速度的一阶导。快速运动通常会产生较大的加加速。大的加加速通常会引发设备共振,从而造成不必要的磨损和噪声。有的运动控制器简单的瞬间改变一个很大的加速度值,这样  
会产生一个很大的加加速度。softMC允许您通过轴的属性:[[MC-Basic:axis.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 或者 [[MC-  
+
会产生一个很大的加加速度。softMC允许您通过轴的属性:[[MC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 或者 [[MC-  
 
Basic:axis.JERK|'''''<nowiki><axis/group></nowiki>''.JERK''']]在所有的运动规划中限制加加速的值;
 
Basic:axis.JERK|'''''<nowiki><axis/group></nowiki>''.JERK''']]在所有的运动规划中限制加加速的值;
  
设置[[MC-Basic:axis.SMOOTHFACTOR|'''''<nowiki><axis/group></nowiki>''.SMOOTHFACTOR''']] ('''SMOOTH''')为0,指定梯形规划。
+
设置[[MC-Basic:element.SMOOTHFACTOR|'''''<nowiki><axis/group></nowiki>''.SMOOTHFACTOR''']] ('''SMOOTH''')为0,指定梯形规划。
如果您需要一个平滑的加速度规划,可以通过设置 [[MC-Basic:axis.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 为从'''1''' 到最大为 '''100'''的值来实现.
+
如果您需要一个平滑的加速度规划,可以通过设置 [[MC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 为从'''1''' 到最大为 '''100'''的值来实现.
如果[[MC-Basic:axis.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 很大(>=50),它可以将加速度变化时间提高一个或多个数量级。
+
如果[[elementMC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 很大(>=50),它可以将加速度变化时间提高一个或多个数量级。
  
在直线加速中,使用[[AXY:MC-Basic:axis.ACCELERATION|'''''<nowiki><axis/group></nowiki>''.ACCELERATION ''']] 以及 [[MC-Basic:axis.JERK   
+
在直线加速中,使用[[MC-Basic:element.ACCELERATION|'''''<nowiki><axis/group></nowiki>''.ACCELERATION ''']] 以及 [[MC-Basic:axis.JERK   
 
|'''''<nowiki><axis/group></nowiki>''.JERK ''']] 去限制速度,产生加速度曲线,可以消除扭矩的高频部分。这样可以减小设备共振,从而降低噪声、振动以及机械磨损。
 
|'''''<nowiki><axis/group></nowiki>''.JERK ''']] 去限制速度,产生加速度曲线,可以消除扭矩的高频部分。这样可以减小设备共振,从而降低噪声、振动以及机械磨损。
 
例如:
 
例如:
Line 222: Line 222:
  
 
另外,还有一些参数可以定义运动中加速/减速的时间。这些持续时间将被内部用来计算合理的运动参数,已尽可能的达到时间要求。
 
另外,还有一些参数可以定义运动中加速/减速的时间。这些持续时间将被内部用来计算合理的运动参数,已尽可能的达到时间要求。
[[ MC-Basic:axis.TIMEACCELERATION|'''''<nowiki><axis/group></nowiki>''.TIMEACCELERATION''']] and [[ MC-  
+
[[ elementMC-Basic:element.TIMEACCELERATION|'''''<nowiki><axis/group></nowiki>''.TIMEACCELERATION''']] and [[ MC-  
 
Basic:axis.TIMEDECELERATION|'''''<nowiki><axis/group></nowiki>''.TIMEDECELERATION''']] 可以用来基于时间的定义.
 
Basic:axis.TIMEDECELERATION|'''''<nowiki><axis/group></nowiki>''.TIMEDECELERATION''']] 可以用来基于时间的定义.
  
Line 230: Line 230:
 
有4个属性保存这些值:
 
有4个属性保存这些值:
  
* [[MC-Basic:axis.POSITIONCOMMAND| '''<nowiki><</nowiki>''axis''>.POSITIONCOMMAND''']]  或 [[MC-Basic:axis.POSITIONCOMMAND| '''<nowiki><</nowiki>''axis''>.PCMD''' ]]  
+
* [[MC-Basic:element.POSITIONCOMMAND| '''<nowiki><</nowiki>''axis''>.POSITIONCOMMAND''']]  或 [[MC-Basic:element.POSITIONCOMMAND| '''<nowiki><</nowiki>''axis''>.PCMD''' ]]  
* [[MC-Basic:axis.POSITIONFEEDBACK| '''<nowiki><</nowiki>''axis''>.POSITIONFEEDBACK''']] 或 [[MC-Basic:axis.POSITIONFEEDBACK| '''<nowiki><</nowiki>''axis''>.PFB''' ]]  
+
* [[MC-Basic:element.POSITIONFEEDBACK| '''<nowiki><</nowiki>''axis''>.POSITIONFEEDBACK''']] 或 [[MC-Basic:element.POSITIONFEEDBACK| '''<nowiki><</nowiki>''axis''>.PFB''' ]]  
* [[MC-Basic:axis.VELOCITYCOMMAND | '''<nowiki><</nowiki>''axis''>.VELOCITYCOMMAND ''']] 或 [[MC-Basic:axis.VELOCITYCOMMAND | '''<nowiki><</nowiki>''axis''>.VCMD''' ]]  
+
* [[MC-Basic:element.VELOCITYCOMMAND| '''<nowiki><</nowiki>''axis''>.VELOCITYCOMMAND ''']] 或 [[MC-Basic:element.VELOCITYCOMMAND| '''<nowiki><</nowiki>''axis''>.VCMD''' ]]  
* [[MC-Basic:axis.VELOCITYFEEDBACK| '''<nowiki><</nowiki>''axis''>.VELOCITYFEEDBACK''']] 或 [[MC-Basic:axis.VELOCITYFEEDBACK| '''<nowiki><</nowiki>''axis''>.VFB''' ]]  
+
* [[MC-Basic:element.VELOCITYFEEDBACK| '''<nowiki><</nowiki>''axis''>.VELOCITYFEEDBACK''']] 或 [[MC-Basic:element.VELOCITYFEEDBACK| '''<nowiki><</nowiki>''axis''>.VFB''' ]]  
  
  
 
只要运控总线正常,您可以随时读取这些属性。
 
只要运控总线正常,您可以随时读取这些属性。
  
位置误差是由位置命令和位置反馈之间的误差来定义的。当一个轴不动时:(例如:, [[MC-Basic:axis.ISSETTLED|'''ISSETTLED''']]), 简单的位置误差就生效了。然而,当轴在运动中时,  
+
位置误差是由位置命令和位置反馈之间的误差来定义的。当一个轴不动时:(例如:, [[MC-Basic:element.ISSETTLED|'''ISSETTLED''']]), 简单的位置误差就生效了。然而,当轴在运动中时,  
 
实际的位置误差并不等于即时的位置命令减去当时的位置反馈,因为当运动指令下发到反馈回来,总线中会有几个周期的延迟。
 
实际的位置误差并不等于即时的位置命令减去当时的位置反馈,因为当运动指令下发到反馈回来,总线中会有几个周期的延迟。
  
 
当softMC计算位置误差时,会自动算入通信的延迟。不同的运控总线和驱动器位置控制,会存在不一样的通信延迟。
 
当softMC计算位置误差时,会自动算入通信的延迟。不同的运控总线和驱动器位置控制,会存在不一样的通信延迟。
  
为了管理位置误差延迟问题,softMC提供了一个轴与轴组的位置延迟参数:[[MC-Basic:axis.POSITIONERRORDELAY|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORDELAY''']],该参数  
+
为了管理位置误差延迟问题,softMC提供了一个轴与轴组的位置延迟参数:[[MC-Basic:element.POSITIONERRORDELAY|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORDELAY''']],该参数  
 
允许您设置计算位置误差时的总线延迟的周期数。
 
允许您设置计算位置误差时的总线延迟的周期数。
  
Line 316: Line 316:
  
 
softMC会每个周期实时检查 '''realtime limits(实时限位)'''。这些限位的改变会作用在当前运动上。
 
softMC会每个周期实时检查 '''realtime limits(实时限位)'''。这些限位的改变会作用在当前运动上。
[[MC-Basic:axis.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']] 会被每个周期与 [[MC-Basic:axis.VELOCITYOVERSPEED|'''VELOCITYOVERSPEED''']]比对。
+
[[MC-Basic:element.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']] 会被每个周期与 [[MC-Basic:axis.VELOCITYOVERSPEED|'''VELOCITYOVERSPEED''']]比对。
  
 
'''Drive limits(驱动器限位)'''。改变这些设置会当前运动有效。例如: ILIM 限制了驱动器的输出峰值电流。这些限位与控制器限制的位置和速度的限位是相独立的。
 
'''Drive limits(驱动器限位)'''。改变这些设置会当前运动有效。例如: ILIM 限制了驱动器的输出峰值电流。这些限位与控制器限制的位置和速度的限位是相独立的。
Line 364: Line 364:
 
默认情况下,这两个限位开关是关闭的。您必须自己将其打开。
 
默认情况下,这两个限位开关是关闭的。您必须自己将其打开。
  
您应该设置您的系统所能允许的最大位置误差。您可以通过设置[[MC-Basic:axis.POSITIONERRORMAX|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORMAX''']]   
+
您应该设置您的系统所能允许的最大位置误差。您可以通过设置[[MC-Basic:element.POSITIONERRORMAX|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORMAX''']]   
 
('''''<nowiki><''axis''></nowiki>''.PEMAX''')来控制。
 
('''''<nowiki><''axis''></nowiki>''.PEMAX''')来控制。
  
Line 391: Line 391:
  
  
[[MC-Basic:axis.POSITIONERRORSETTLE|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORSETTLE''']], 定义了在什么0的多少范围内可以认为是已经稳定了。例如:您可以用:
+
[[MC-Basic:element.POSITIONERRORSETTLE|'''''<nowiki><''axis''></nowiki>''.POSITIONERRORSETTLE''']], 定义了在什么0的多少范围内可以认为是已经稳定了。例如:您可以用:
 
<pre>
 
<pre>
 
A1.PositionErrorSettle = 0.01
 
A1.PositionErrorSettle = 0.01
Line 402: Line 402:
 
去指定位置误差必须在0.01个单位以内,才能认为该轴已经到达了稳定状态。
 
去指定位置误差必须在0.01个单位以内,才能认为该轴已经到达了稳定状态。
  
* [[MC-Basic:axis.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']]在当运动控制器必须指定在什么足够接近0的范围内认为是稳定了的情况下使用。通常在两个运动之间,下一个运动在上一个运动已经完成了才开始使用。   
+
* [[elementMC-Basic:element.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']]在当运动控制器必须指定在什么足够接近0的范围内认为是稳定了的情况下使用。通常在两个运动之间,下一个运动在上一个运动已经完成了才开始使用。   
softMC可以自动完成这些设置,如果您使用 [[MC-Basic:axis.STARTTYPE|'''STARTTYPE''']]属性,当您按照本手册的“MOVE”指令运动一个轴的时候,您必须设置[[MC-Basic:axis.TIMESETTLE|TSETTLE]]>0 或者忽略掉 '''POSITIONERRORSETTLE''' 属性。
+
softMC可以自动完成这些设置,如果您使用 [[MC-Basic:element.STARTTYPE|'''STARTTYPE''']]属性,当您按照本手册的“MOVE”指令运动一个轴的时候,您必须设置[[MC-Basic:element.TIMESETTLE|TSETTLE]]>0 或者忽略掉 '''POSITIONERRORSETTLE''' 属性。
  
* [[MC-Basic:axis.TIMESETTLE |'''TIMESETTLE ''']](or '''TSETTLE''') 定义了位置误差必须保持在'''PESETTLE''' 以内多长时间才被认为是轴已经稳定了。
+
* [[MC-Basic:element.TIMESETTLE|'''TIMESETTLE ''']](or '''TSETTLE''') 定义了位置误差必须保持在'''PESETTLE''' 以内多长时间才被认为是轴已经稳定了。
 
当运动规划已经完成了,而且位置误差已经跌入了'''POSTIONERRORSETTLE'''以内,softMC等待'''TIMESETTLE'''毫秒才进入稳定状态。如果位置误差在稳定时间内超过了'''POSITIONERRORSETTLE''',那么计时器将会重置。
 
当运动规划已经完成了,而且位置误差已经跌入了'''POSTIONERRORSETTLE'''以内,softMC等待'''TIMESETTLE'''毫秒才进入稳定状态。如果位置误差在稳定时间内超过了'''POSITIONERRORSETTLE''',那么计时器将会重置。
  
* [[MC-Basic:axis.ISSETTLED|'''ISSETTLED''']] 是一个全局的逻辑属性(TRUE or FALSE) ,表示了该轴是否已经稳定。一个轴如果要达到稳定状态,必须满足一下条件:
+
* [[MC-Basic:element.ISSETTLED|'''ISSETTLED''']] 是一个全局的逻辑属性(TRUE or FALSE) ,表示了该轴是否已经稳定。一个轴如果要达到稳定状态,必须满足一下条件:
 
1,运动规划已完成。
 
1,运动规划已完成。
 
2,位置误差必须小于'''POSITIONERRORSETTLE'''且保持了'''TIMESETTLE'''毫秒
 
2,位置误差必须小于'''POSITIONERRORSETTLE'''且保持了'''TIMESETTLE'''毫秒
  
* [[AXY:MC-Basic:axis.ISMOVING|'''ISMOVING''']] 是一个指示运动状态的属性。
+
* [[MC-Basic:element.ISMOVING|'''ISMOVING''']] 是一个指示运动状态的属性。
 
有效的取值范围是:-1 到 3,各个含义如下:
 
有效的取值范围是:-1 到 3,各个含义如下:
  
Line 431: Line 431:
 
softMC中有几个关于轴速度的限制:  
 
softMC中有几个关于轴速度的限制:  
 
*[[MC-Basic:axis.VELOCITYOVERSPEED|VelocityOverspeed]]
 
*[[MC-Basic:axis.VELOCITYOVERSPEED|VelocityOverspeed]]
*[[MC-Basic:axis.VELOCITYMAX|VelocityMax]]
+
*[[MC-Basic:element.VELOCITYMAX|VelocityMax]]
*[[AXY:MC-Basic:axis.ACCELERATION|Acceleration]]
+
*[[MC-Basic:element.ACCELERATION|Acceleration]]
*[[MC-Basic:axis.DECELERATION|Deceleration]]
+
*[[MC-Basic:element.DECELERATION|Deceleration]]
  
  
Line 442: Line 442:
 
</pre>
 
</pre>
  
*[[MC-Basic:axis.VELOCITYMAX|'''VelocityMax''']]('''VMAX''')可以用来设置运动规划的最大速度命令。'''VELOCITYMAX''' 是以softMC速度单位为单位的,可以通过终端窗口或者配置程序”Config.prg”,进行设置。它是在运动开始的时候进行检查的。   
+
*[[MC-Basic:element.VELOCITYMAX|'''VelocityMax''']]('''VMAX''')可以用来设置运动规划的最大速度命令。'''VELOCITYMAX''' 是以softMC速度单位为单位的,可以通过终端窗口或者配置程序”Config.prg”,进行设置。它是在运动开始的时候进行检查的。   
 
例如:
 
例如:
  
Line 458: Line 458:
 
*[[Category talk:MC-Basic:axis.ACCELERATIONMAX|'''ACCELERATIONMAX''']]  是运动命令的加速度上限。以softMC加速度单位为单位。
 
*[[Category talk:MC-Basic:axis.ACCELERATIONMAX|'''ACCELERATIONMAX''']]  是运动命令的加速度上限。以softMC加速度单位为单位。
  
*[[MC-Basic:axis.DECELERATIONMAX|'''DECELERATIONMAX''']]  是运动命令的减速度上限。以softMC减速度单位为单位。
+
*[[MC-Basic:element.DECELERATIONMAX|'''DECELERATIONMAX''']]  是运动命令的减速度上限。以softMC减速度单位为单位。
  
 
== "Rate" (比例) 参数 ==
 
== "Rate" (比例) 参数 ==
Line 464: Line 464:
 
以下参数是用来按比例增加或者减小轴或者轴组的最大限制的:
 
以下参数是用来按比例增加或者减小轴或者轴组的最大限制的:
  
* [[MC-Basic:axis.VELOCITYRATE|'''<Axis/Group>.VelocityRate''']] 定义了轴速度的 最大比例,取值范围是:-1到100%。与加速度、减速度或者加加速独立。'''<nowiki><''axis''/''group''></nowiki>.VelocityRate''' 是模态或者节点。
+
* [[MC-Basic:element.VELOCITYRATE|'''<Axis/Group>.VelocityRate''']] 定义了轴速度的 最大比例,取值范围是:-1到100%。与加速度、减速度或者加加速独立。'''<nowiki><''axis''/''group''></nowiki>.VelocityRate''' 是模态或者节点。
  
* [[AXY:MC-Basic:axis.ACCELERATIONRATE|'''<Axis/Group>.AccelerationRate''']]定义了轴的加速度最大值比例,取值范围0.1到100%。与速度、减速度以及加加速相独立。'''<nowiki><''axis''/''group''></nowiki>.AccelerationRate''' 可以是模态或者节点。
+
* [[MC-Basic:element.ACCELERATIONRATE|'''<Axis/Group>.AccelerationRate''']]定义了轴的加速度最大值比例,取值范围0.1到100%。与速度、减速度以及加加速相独立。'''<nowiki><''axis''/''group''></nowiki>.AccelerationRate''' 可以是模态或者节点。
  
* [[MC-Basic:axis.DECELERATIONRATE|'''<Axis/Group>.DecelerationRate''']] 定义了轴的减速度最大值比例,取值范围0.1到100%。与速度、加速度以及加加速相独立。'''<nowiki><''axis''/''group''></nowiki>.DecelerationRate'''可以是模态或者节点。
+
* [[MC-Basic:element.DECELERATIONRATE|'''<Axis/Group>.DecelerationRate''']] 定义了轴的减速度最大值比例,取值范围0.1到100%。与速度、加速度以及加加速相独立。'''<nowiki><''axis''/''group''></nowiki>.DecelerationRate'''可以是模态或者节点。
  
* [[MC-Basic:axis.JERKRATE|'''<Axis/Group>.JerkRate''']] 定义了加加速相对于最大值的比例值,取值范围从0.1到100%。
+
* [[MC-Basic:element.JERKRATE|'''<Axis/Group>.JerkRate''']] 定义了加加速相对于最大值的比例值,取值范围从0.1到100%。
  
 
'''<nowiki><</nowiki>''axis''>.JerkRate'''可以使模态或者节点。
 
'''<nowiki><</nowiki>''axis''>.JerkRate'''可以使模态或者节点。
Line 549: Line 549:
  
  
如同轴一样,轴组也需要设置[[MC-Basic:group.VELOCITYFACTOR|'''VELOCITYFACTOR''']], [[AXY:MC-Basic:group.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']],
+
如同轴一样,轴组也需要设置[[MC-Basic:element.VELOCITYFACTOR|'''VELOCITYFACTOR''']], [[MC-Basic:element.ACCELERATIONFACTOR|'''ACCELERATIONFACTOR''']],
以及[[MC-Basic:group.JERKFACTOR|'''JERKFACTOR''']]。然而,却没有'''<nowiki><group></nowiki>.POSITIONFACTOR'''这个属性。
+
以及[[MC-Basic:element.JERKFACTOR|'''JERKFACTOR''']]。然而,却没有'''<nowiki><group></nowiki>.POSITIONFACTOR'''这个属性。
 
  基本上,设置''<nowiki><group></nowiki>''.VFAC = 1/1000, 设置 AFAC=VFAC/1000, 以及设置 JFAC=AFAC/1000即可。
 
  基本上,设置''<nowiki><group></nowiki>''.VFAC = 1/1000, 设置 AFAC=VFAC/1000, 以及设置 JFAC=AFAC/1000即可。
  
Line 566: Line 566:
 
</pre>
 
</pre>
  
[[AXY:MC-Basic:group.ACCELERATION|'''<nowiki><group>.</nowiki>ACCELERATION''']] 和 [[MC-Basic:group.DECELERATION|'''<nowiki><group></nowiki>.DECELERATION''']]
+
[[MC-Basic:element.ACCELERATION|'''<nowiki><group>.</nowiki>ACCELERATION''']] 和 [[MC-Basic:element.DECELERATION|'''<nowiki><group></nowiki>.DECELERATION''']]
 
应用在轴的联合运动中。例如:
 
应用在轴的联合运动中。例如:
 
如果MyGroup 是一个3轴的轴组,由Axis1, Axis2, 和 Axis3组成,那么:
 
如果MyGroup 是一个3轴的轴组,由Axis1, Axis2, 和 Axis3组成,那么:
Line 583: Line 583:
  
 
轴组的位置有别于单轴的位置。在有的情况下,单独轴的属性在轴组中被保持了,从而变成了一个2维或以上的向量。这种情况下,对应的属性为:
 
轴组的位置有别于单轴的位置。在有的情况下,单独轴的属性在轴组中被保持了,从而变成了一个2维或以上的向量。这种情况下,对应的属性为:
[[MC-Basic:group.POSITIONFEEDBACK|'''POSITIONFEEDBACK''']] 或者[[MC-Basic:group.POSITIONCOMMAND|'''POSITIONCOMMAND''']].  
+
[[MC-Basic:element.POSITIONFEEDBACK|'''POSITIONFEEDBACK''']] 或者[[MC-Basic:element.POSITIONCOMMAND|'''POSITIONCOMMAND''']].  
 
在其它的情况中,多轴的位置是单轴的位置的平方和的平方根。这样对应的属性是:
 
在其它的情况中,多轴的位置是单轴的位置的平方和的平方根。这样对应的属性是:
[[MC-Basic:group.POSITIONERRORMAX|'''POSITIONERRORMAX''']].
+
[[MC-Basic:element.POSITIONERRORMAX|'''POSITIONERRORMAX''']].
  
 
=== 点数据类型 (向量) ===
 
=== 点数据类型 (向量) ===
Line 628: Line 628:
  
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYCOMMAND |'''VELOCITYCOMMAND ''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYCOMMAND|'''VELOCITYCOMMAND ''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| point property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| point property
  
 
|-
 
|-
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYFEEDBACK|'''VELOCITYFEEDBACK''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| point property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| point property
  
 
|-
 
|-
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
  
 
|-
 
|-
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYFINAL|'''VELOCITYFINAL''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYFINAL|'''VELOCITYFINAL''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
  
 
|-
 
|-
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYMAX|'''VELOCITYMAX''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYMAX|'''VELOCITYMAX''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
  
 
|-
 
|-
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:group.VELOCITYOVERRIDE|'''VELOCITYOVERRIDE''']]
+
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| [[MC-Basic:element.VELOCITYOVERRIDE|'''VELOCITYOVERRIDE''']]
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
 
| style="border:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| scalar property
  
Line 664: Line 664:
 
:位置限制是由轴单独施加的,他们是在运动开始的时候检查的。如果目标点中的某一个点超过了限位,整个运动将不会执行。系统中没有轴组的位置限制。但是softMC中有一些关于轴组的位置限制参数:
 
:位置限制是由轴单独施加的,他们是在运动开始的时候检查的。如果目标点中的某一个点超过了限位,整个运动将不会执行。系统中没有轴组的位置限制。但是softMC中有一些关于轴组的位置限制参数:
  
:设置[[MC-Basic:group.POSITIONERRORMAX|'''POSITIONERRORMAX''']] ('''PEMAX''') ,可以设置系统的总共位置误差的最大值。最大是各轴的'''PEMAX'''的平方和的平方根。
+
:设置[[MC-Basic:element.POSITIONERRORMAX|'''POSITIONERRORMAX''']] ('''PEMAX''') ,可以设置系统的总共位置误差的最大值。最大是各轴的'''PEMAX'''的平方和的平方根。
  
 
<pre>
 
<pre>
Line 670: Line 670:
 
</pre>
 
</pre>
  
:设置 [[MC-Basic:group.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']],可以设置系统在运动中所能接受的在位置误差。
+
:设置 [[MC-Basic:element.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']],可以设置系统在运动中所能接受的在位置误差。
 
<pre>
 
<pre>
 
MyGroup.PositionErrorSettle = 1.0
 
MyGroup.PositionErrorSettle = 1.0
 
</pre>
 
</pre>
  
:[[MC-Basic:group.TIMESETTLE|'''TIMESETTLE ''']]('''TSETTLE''')是一个轴稳定状态前的稳定时间。
+
:[[MC-Basic:element.TIMESETTLE|'''TIMESETTLE ''']]('''TSETTLE''')是一个轴稳定状态前的稳定时间。
  
 
(<nowiki>POSITIONERROR<POSITIONERRORSETTLE</nowiki>). 当 '''MOVE'''/'''CIRCLE '''运动完成之后, softMC等待 <nowiki>POSITIONERROR < POSITIONERRORSETTLE</nowiki> 保持了'''TIMESETTLE'''毫秒之后,才认为进入了稳定状态。
 
(<nowiki>POSITIONERROR<POSITIONERRORSETTLE</nowiki>). 当 '''MOVE'''/'''CIRCLE '''运动完成之后, softMC等待 <nowiki>POSITIONERROR < POSITIONERRORSETTLE</nowiki> 保持了'''TIMESETTLE'''毫秒之后,才认为进入了稳定状态。
  
:[[MC-Basic:group.TIMESETTLEMAX|'''TIMESETTLEMAX''']] ('''TSETTLEMAX''')定义了运动完成后的所允许的稳定时间。
+
:[[MC-Basic:element.TIMESETTLEMAX|'''TIMESETTLEMAX''']] ('''TSETTLEMAX''')定义了运动完成后的所允许的稳定时间。
 
当'''MOVE'''/'''CIRCLE''' 运动完成之后,softMC等待'''TIMESETTLEMAX''' 毫秒以达稳定。如果位置误差停留在'''PESETTLE'''之上, 系统报错。
 
当'''MOVE'''/'''CIRCLE''' 运动完成之后,softMC等待'''TIMESETTLEMAX''' 毫秒以达稳定。如果位置误差停留在'''PESETTLE'''之上, 系统报错。
  
:[[MC-Basic:group.ISSETTLED |'''ISSETTLED ''']]是一个二进制属性 (ON or OFF),指示了轴组是否已经稳定了。
+
:[[MC-Basic:element.ISSETTLED|'''ISSETTLED ''']]是一个二进制属性 (ON or OFF),指示了轴组是否已经稳定了。
 
要达到稳定状态,运动规划必须已经完成,而且各轴的位置误差的正交组合必须在
 
要达到稳定状态,运动规划必须已经完成,而且各轴的位置误差的正交组合必须在
[[MC-Basic:group.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']]以内。稳定的时间条件必须达到。
+
[[MC-Basic:element.POSITIONERRORSETTLE|'''POSITIONERRORSETTLE''']]以内。稳定的时间条件必须达到。
  
 
*Velocity<br>
 
*Velocity<br>
:softMC中有一个关于速度的限制参数: [[MC-Basic:group.VELOCITYMAX|'''VELOCITYMAX''']] ('''VMAX''')设置了运动规划的最大轴组速度命令。在运动开始时进行检查。
+
:softMC中有一个关于速度的限制参数: [[MC-Basic:element.VELOCITYMAX|'''VELOCITYMAX''']] ('''VMAX''')设置了运动规划的最大轴组速度命令。在运动开始时进行检查。
 
例如:
 
例如:
 
<pre>
 
<pre>
Line 697: Line 697:
 
:有3个限制用来控制加速度,减速度,加加速。可以限制加速度规划时产生的速度突变。
 
:有3个限制用来控制加速度,减速度,加加速。可以限制加速度规划时产生的速度突变。
  
:[[AXY:MC-Basic:group.ACCELERATIONMAX|'''ACCELERATIONMAX''']]是加速度的上限,单位与softMC一致。
+
:[[MC-Basic:element.ACCELERATIONMAX|'''ACCELERATIONMAX''']]是加速度的上限,单位与softMC一致。
  
:[[MC-Basic:group.DECELERATIONMAX |'''DECELERATIONMAX ''']]是减速度的上限,单位与softMC一致。
+
:[[MC-Basic:element.DECELERATIONMAX|'''DECELERATIONMAX ''']]是减速度的上限,单位与softMC一致。
  
 
:实际的运行中,加速度和减速度受轴组中单独轴的限制。最大的所允许的这些轴的参数值在轴组中初始化。这种情况下,返回一个提示,并且只能当 [[MC-Basic:SYSTEM.MOTIONASSISTANCE|'''SYS.MOTIONASSISTANCE''']] 打开了,才能看到。
 
:实际的运行中,加速度和减速度受轴组中单独轴的限制。最大的所允许的这些轴的参数值在轴组中初始化。这种情况下,返回一个提示,并且只能当 [[MC-Basic:SYSTEM.MOTIONASSISTANCE|'''SYS.MOTIONASSISTANCE''']] 打开了,才能看到。
  
:加加速属性, [[MC-Basic:group.JERK|'''JERK''']], [[MC-Basic:group.JERKMAX|'''JERKMAX''']], 以及 [[MC-Basic:group.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 可以应用在轴组中,已达到平滑的运动效果。
+
:加加速属性, [[MC-Basic:element.JERK|'''JERK''']], [[MC-Basic:element.JERKMAX|'''JERKMAX''']], 以及 [[MC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']] 可以应用在轴组中,已达到平滑的运动效果。
  
 
== 轴组运动 ==
 
== 轴组运动 ==
Line 779: Line 779:
 
Stop GroupA
 
Stop GroupA
 
</pre>
 
</pre>
通常,[[MC-Basic:STOP|'''STOP''']]会被设置成立即停止运动。减速度为:[[MC-Basic:group.DECELERATIONMAX|'''DECELERATIONMAX''']] 或者[[MC-Basic:group.DECELERATIONSTOP|'''DECELERATIONSTOP''']]。然而,您可以修改[[MC-Basic:STOP|'''STOP''']],通过 [[MC-  
+
通常,[[MC-Basic:STOP|'''STOP''']]会被设置成立即停止运动。减速度为:[[MC-Basic:element.DECELERATIONMAX|'''DECELERATIONMAX''']] 或者[[MC-Basic:group.DECELERATIONSTOP|'''DECELERATIONSTOP''']]。然而,您可以修改[[MC-Basic:STOP|'''STOP''']],通过 [[MC-  
Basic:group.STOPTYPE|'''STOPTYPE''']]。 [[MC-Basic:group.STOPTYPE|'''<group>.STOPTYPE''']] 可以设置为:
+
Basic:group.STOPTYPE|'''STOPTYPE''']]。 [[MC-Basic:element.STOPTYPE|'''<group>.STOPTYPE''']] 可以设置为:
  
'''[[MC-Basic:group.STOPTYPE|STOPTYPE]]= IMMED'''  以 '''DECELERATIONMAX''' 立即停止各轴。当前路径不被保证。
+
'''[[MC-Basic:element.STOPTYPE|STOPTYPE]]= IMMED'''  以 '''DECELERATIONMAX''' 立即停止各轴。当前路径不被保证。
  
'''[[MC-Basic:group.STOPTYPE|STOPTYPE]]= ENDMOTION''' 当前运动结束后停止。
+
'''[[MC-Basic:element.STOPTYPE|STOPTYPE]]= ENDMOTION''' 当前运动结束后停止。
  
'''[[MC-Basic:group.STOPTYPE|STOPTYPE]]= ONPATH''' 立即停止,但是保证停止在轨迹规划的路径上。
+
'''[[MC-Basic:element.STOPTYPE|STOPTYPE]]= ONPATH''' 立即停止,但是保证停止在轨迹规划的路径上。
  
'''[[MC-Basic:group.STOPTYPE|STOPTYPE]]= ABORT'''  立即停止,不能回复当前路径。
+
'''[[MC-Basic:element.STOPTYPE|STOPTYPE]]= ABORT'''  立即停止,不能回复当前路径。
  
'''[[MC-Basic:group.STOPTYPE|STOPTYPE]]''' 默认设为IMMED.  
+
'''[[MC-Basic:element.STOPTYPE|STOPTYPE]]''' 默认设为IMMED.  
If [[MC-Basic:group.STOPTYPE|STOPTYPE]] = ENDMOTION, 在'''STOP'''命令执行前,完成当前运动。
+
If [[MC-Basic:element.STOPTYPE|STOPTYPE]] = ENDMOTION, 在'''STOP'''命令执行前,完成当前运动。
  
 
如果STOPTYPE = ONPATH, '''STOP'''执行在当前路径之上。停止的时候,不会以最大的减速度停止,而是以当前的运动规划的减速度停止。
 
如果STOPTYPE = ONPATH, '''STOP'''执行在当前路径之上。停止的时候,不会以最大的减速度停止,而是以当前的运动规划的减速度停止。
Line 797: Line 797:
 
=== [[MC-Basic:PROCEED|PROCEED]] ===
 
=== [[MC-Basic:PROCEED|PROCEED]] ===
 
当您应用了[[MC-Basic:STOP|'''STOP''']]之后, 您必须应用 [[MC-Basic:PROCEED|'''PROCEED''']] 去清除运动缓存。
 
当您应用了[[MC-Basic:STOP|'''STOP''']]之后, 您必须应用 [[MC-Basic:PROCEED|'''PROCEED''']] 去清除运动缓存。
您可以使用 [[MC-Basic:group.PROCEEDTYPE|'''PROCEEDTYPE''']]去指明用那种方式继续运动发生器:
+
您可以使用 [[MC-Basic:element.PROCEEDTYPE|'''PROCEEDTYPE''']]去指明用那种方式继续运动发生器:
 
   
 
   
'''[[MC-Basic:group.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''CONTINUE'''''  轨迹发生器继续当前停止的命令,直至完成。
+
'''[[MC-Basic:element.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''CONTINUE'''''  轨迹发生器继续当前停止的命令,直至完成。
  
'''[[MC-Basic:group.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''NEXTMOTION'''''  轨迹发生器丢弃当前运动,跳往下一个运动指令。
+
'''[[MC-Basic:element.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''NEXTMOTION'''''  轨迹发生器丢弃当前运动,跳往下一个运动指令。
  
  
'''[[MC-Basic:group.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''CLEARMOTION'''''  清除运动缓存,不再执行运动。这是默认设定的。
+
'''[[MC-Basic:element.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''CLEARMOTION'''''  清除运动缓存,不再执行运动。这是默认设定的。
  
'''[[MC-Basic:group.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''ABORT'''''  当前运动立即停止而且不需要 [[MC-Basic:PROCEED|'''PROCEED''']] 去启动下一个运动。只有当前运动停止之后,后面的命令才被生成。
+
'''[[MC-Basic:element.PROCEEDTYPE|'''PROCEEDTYPE''']] = ''ABORT'''''  当前运动立即停止而且不需要 [[MC-Basic:PROCEED|'''PROCEED''']] 去启动下一个运动。只有当前运动停止之后,后面的命令才被生成。
  
  
 
=== [[MC-Basic:MOVE|MOVE]] ===
 
=== [[MC-Basic:MOVE|MOVE]] ===
 
轴组的[[MC-Basic:MOVE|'''MOVE''']]指令与轴的 [[MC-Basic:MOVE|'''MOVE''']] 十分类似。有两种不同的方式。
 
轴组的[[MC-Basic:MOVE|'''MOVE''']]指令与轴的 [[MC-Basic:MOVE|'''MOVE''']] 十分类似。有两种不同的方式。
第一种,[[MC-Basic:group.POSITIONCOMMAND|'''POSITIONCOMMAND''']],  
+
第一种,[[MC-Basic:element.POSITIONCOMMAND|'''POSITIONCOMMAND''']],  
[[MC-Basic:group.POSITIONFEEDBACK|'''POSITIONFEEDBACK''']], 以及 [[MC-Basic:group.POSITIONFINAL|'''PFINAL''']] 是轴组的向量。
+
[[MC-Basic:element.POSITIONFEEDBACK|'''POSITIONFEEDBACK''']], 以及 [[MC-Basic:element.POSITIONFINAL|'''PFINAL''']] 是轴组的向量。
第二种,运动规划,包括 [[AXY:MC-Basic:group.ACCELERATION|'''ACCELERATION''']] 以及
+
第二种,运动规划,包括 [[MC-Basic:element.ACCELERATION|'''ACCELERATION''']] 以及
[[MC-Basic:group.DECELERATION|'''DECELERATION''']], 作用于所有的轴组内的轴。
+
[[MC-Basic:element.DECELERATION|'''DECELERATION''']], 作用于所有的轴组内的轴。
 
例如:
 
例如:
 
<pre>
 
<pre>
Line 824: Line 824:
 
您可以在 [[MC-Basic:MOVE|'''MOVE''']]指令中,覆盖以下属性:
 
您可以在 [[MC-Basic:MOVE|'''MOVE''']]指令中,覆盖以下属性:
  
[[AXY:MC-Basic:group.ABSOLUTE|'''ABSOLUTE''']]
+
[[MC-Basic:element.ABSOLUTE|'''ABSOLUTE''']]
  
[[MC-Basic:group.STARTTYPE|'''STARTTYPE''']]
+
[[MC-Basic:element.STARTTYPE|'''STARTTYPE''']]
  
[[AXY:MC-Basic:group.ACCELERATION|'''ACCELERATION''']]
+
[[MC-Basic:element.ACCELERATION|'''ACCELERATION''']]
  
[[AXY:MC-Basic:group.ACCELERATIONRATE|'''ACCELERATIONRATE''']]
+
[[MC-Basic:element.ACCELERATIONRATE|'''ACCELERATIONRATE''']]
  
[[MC-Basic:group.DECELERATION|'''DECELERATION''']]
+
[[MC-Basic:element.DECELERATION|'''DECELERATION''']]
  
[[MC-Basic:group.DECELERATIONRATE|'''DECELERATIONRATE''']]
+
[[MC-Basic:element.DECELERATIONRATE|'''DECELERATIONRATE''']]
  
[[MC-Basic:group.SMOOTHFACTOR|'''SMOOTHFACTOR''']]
+
[[MC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']]
  
[[MC-Basic:group.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
+
[[MC-Basic:element.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
  
[[MC-Basic:group.VELOCITYRATE|'''VELOCITYRATE''']]
+
[[MC-Basic:element.VELOCITYRATE|'''VELOCITYRATE''']]
  
[[MC-Basic:group.JERK|'''JERK''']]
+
[[MC-Basic:element.JERK|'''JERK''']]
  
[[MC-Basic:group.JERKRATE|'''JERKRATE''']]
+
[[MC-Basic:element.JERKRATE|'''JERKRATE''']]
  
[[MC-Basic:group.POSITIONFINAL|'''PFINAL''']] (运动的终点),常常在 '''MOVE'''中指明。然而,''' PFINAL''''' 的确切含义取决于'''<nowiki><</nowiki>''group''>.ABSOLUTE'''。
+
[[MC-Basic:element.POSITIONFINAL|'''PFINAL''']] (运动的终点),常常在 '''MOVE'''中指明。然而,''' PFINAL''''' 的确切含义取决于'''<nowiki><</nowiki>''group''>.ABSOLUTE'''。
 
这样允许了点到点的运动可以有两种方式指明:  
 
这样允许了点到点的运动可以有两种方式指明:  
 
'''''ABSOLUTE = TRUE'''''  结束位置是有绝对位置决定的。结束位置='''PFINAL''。
 
'''''ABSOLUTE = TRUE'''''  结束位置是有绝对位置决定的。结束位置='''PFINAL''。
Line 887: Line 887:
 
在上述实例中,该圆是XY平面上Z轴值有改变的圆。另外,您也可以覆盖这些[[MC-Basic:CIRCLE|'''CIRCLE''']]轴组属性:
 
在上述实例中,该圆是XY平面上Z轴值有改变的圆。另外,您也可以覆盖这些[[MC-Basic:CIRCLE|'''CIRCLE''']]轴组属性:
  
[[AXY:MC-Basic:group.ABSOLUTE|'''ABSOLUTE''']]
+
[[MC-Basic:element.ABSOLUTE|'''ABSOLUTE''']]
  
[[MC-Basic:group.STARTTYPE|'''STARTTYPE''']]
+
[[MC-Basic:element.STARTTYPE|'''STARTTYPE''']]
  
[[AXY:MC-Basic:group.ACCELERATION|'''ACCELERATION''']]
+
[[MC-Basic:element.ACCELERATION|'''ACCELERATION''']]
  
[[AXY:MC-Basic:group.ACCELERATIONRATE|'''ACCELERATIONRATE''']]
+
[[MC-Basic:element.ACCELERATIONRATE|'''ACCELERATIONRATE''']]
  
[[MC-Basic:group.DECELERATION|'''DECELERATION''']]
+
[[MC-Basic:element.DECELERATION|'''DECELERATION''']]
  
[[MC-Basic:group.DECELERATIONRATE|'''DECELERATIONRATE''']]
+
[[MC-Basic:element.DECELERATIONRATE|'''DECELERATIONRATE''']]
  
[[MC-Basic:group.SMOOTHFACTOR|'''SMOOTHFACTOR''']]
+
[[MC-Basic:element.SMOOTHFACTOR|'''SMOOTHFACTOR''']]
  
[[MC-Basic:group.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
+
[[MC-Basic:element.VELOCITYCRUISE|'''VELOCITYCRUISE''']]
  
[[MC-Basic:group.VELOCITYRATE|'''VELOCITYRATE''']]
+
[[MC-Basic:element.VELOCITYRATE|'''VELOCITYRATE''']]
  
[[MC-Basic:group.JERK|'''JERK''']]
+
[[MC-Basic:element.JERK|'''JERK''']]
  
[[MC-Basic:group.JERKRATE|'''JERKRATE''']]
+
[[MC-Basic:element.JERKRATE|'''JERKRATE''']]
  
  
Line 1,006: Line 1,006:
 
然而,每一个独立的运动都会受到通常的运动学的限制('''VMAX''', '''AMAX''', '''DMAX''', '''JMAX''')。这些混合方法是可以当第二段运动比第一段运动更早结束的时候交换运动的,那么第一段和第三段运动之间就将有连续的混合运动。虽然我们具有这个特性功能,但是在设计混合路径的时候,还请您务必小心。
 
然而,每一个独立的运动都会受到通常的运动学的限制('''VMAX''', '''AMAX''', '''DMAX''', '''JMAX''')。这些混合方法是可以当第二段运动比第一段运动更早结束的时候交换运动的,那么第一段和第三段运动之间就将有连续的混合运动。虽然我们具有这个特性功能,但是在设计混合路径的时候,还请您务必小心。
  
使用[[MC-Basic:group.BLENDINGFACTOR|'''BLENDINGFACTOR''']],您可以在第一段运动轨迹的任意点定义开始混合点(第二段运动)。
+
使用[[MC-Basic:element.BLENDINGFACTOR|'''BLENDINGFACTOR''']],您可以在第一段运动轨迹的任意点定义开始混合点(第二段运动)。
 
这是一个无纲量属性,定义了从哪儿开始混合的路径的百分比,0代表全路径混合,100代表不适用混合。
 
这是一个无纲量属性,定义了从哪儿开始混合的路径的百分比,0代表全路径混合,100代表不适用混合。
  

Latest revision as of 09:31, 13 September 2017

TOP2.png

元素

元素 是轴与轴组的统称. 在MC-Basic中, 所有可被控制运动的对象统称为元素。 对于轴与轴组而言,许多属性和命令都是类似的。

更深入的轴组与轴的描述有:轴组: 笛卡尔轴组机器人 以及轴关节: 轴关节

轴的配置

本章节阐述了轴在系统中是如何配置的。包括位置、速度以及加速度的单位。也包括了加速度轨迹以及轴的软限制的设置。


NOTE-Info.svgNOTE
关于如何在softMC控制器中定义轴参数的步骤指引及实例请参考:轴配置步骤.

轴定义

在softMC中,一个轴被看成是驱动器,电机以及一部分softMC的集合。

每个轴都有一个softMC定义的属性集合。这些属性被用来计算位置和速度命令,监控限位,存储轴的配置数据。softMC向驱动器下发指令,然后驱动器控制电机。所有这些部分综合起来就形 成一个运控轴。

下方的图表示了一个softMC轴:

caption

轴名

softMC可以根据轴的地址:A1,A2,A3...,依次类推,直至A32(最大的轴数是由制造商提供的用户许可代码限制的),自动为您配置好您所有的轴。您可以通过“轴名+.+轴属性”的方式获取 轴的属性。例如:每一个轴都有一个VELOCITYFEEDBACK属性, 可以得到轴的当前的速度. 你可以通过? 来查询 [[MC- Basic:axis.VELOCITYFEEDBACK|VELOCITYFEEDBACK]]的值。ControlStudio 终端中的命令如下:

? A1.VelocityFeedback 

您可以重命名一个轴. 通常根据轴的功能去命名,可以增加您程序的易读性及方便调试。 例如: 您可以输入:

A1.AxisName = ConveyorAxis

然后,您就可以通过以下方式来查询属性:

? ConveyorAxis.VelocityFeedback 

轴名只能在配置程序“Config.prg”中更改,您不可以任何时候都打印轴名。

驱动器地址

驱动器地址是轴的一个属性。虚拟轴没有驱动器地址也不需要驱动器地址。该参数定义了softMC中的轴的物理地址(运控总线中的拓扑顺序或者驱动器的DIP开关配置)。 如果我们想给轴1配置地址为5,那么我们可以在ControlStudio的终端中或者程序中输入以下命令:

A1.Dadd = 5 ‘ Assign drive address 5 to axis 1
NOTE-Info.svgNOTE
在EtherCAT中,EC_SETUP程序根据驱动器与softMC的连接方式来操作轴的DADD参数

在该实例中:DADDDRIVEADDRESS的缩写。 Axis.DriveAddress属性应该与驱动器的硬件配置地址保持一致。大部分的轴属性和常数都会有缩写形式,这样可以提高输入和编程的效率。

虚拟轴

虚拟轴是一个只在MC中存在的轴。它具有实轴的大部分功能,如:轨迹发生器、单位、位置和速度命令,反馈信号以及限位。然而,虚拟轴并不包含驱动器、电机或者反馈设备。

轴可以在CONFIG.PRG 或者 AUTOEXEC.PRG程序中有任何总线配置的时候配置成虚拟轴。 只需要将 SIMULATED属性设置为:ON:

A1.Simulated = ON

虚拟轴与实轴对运动控制器的资源需求是相当的。事实上,虚拟轴在控制器中是被包含在总轴数之中的。 例如: 一个3个实轴和1个虚拟轴的系统,需要一个4轴MC系统。虚拟轴在MC中是如实轴一样的使用。 它们具有手动控制和自动运动轨迹,可以生成凸轮轨迹,可以当做凸轮中的主动轴或者从动轴使用。 虚拟轴的参数,例如位置反馈是可以用来产生事件的。 在使用中,它们的位置和速度反馈就设置成它们的命令位置和命令速度。 虽然大部分轴的命令和参数对虚拟轴都适用,但是也有一些不可以适用。 虚拟轴不可以接受任何总线命令。驱动器的参数,例如位置环增益,就不可以在虚拟轴中设置。

使用前准备

在您准备开始使用之前,您必须确认以下工作:

安装并调试好驱动器. 根据步骤,安装和调试驱动器。运行ServoStudio,选择您的电机类型,然后调试轴,直至达到您的满意性能。

安装并检查您的softMC.

I/O接线. 连接光纤环,按照步骤,检查接线。

安装ControlStudio. ControlStudio中的终端窗口会被密集的使用,请注意,任何输入终端中的命令都会在断电之后丢失。可以将命令写在softMC程序中,断电重启之后即可重复使用 。


用户单位

softMC 支持用户单位,通过一个浮点型的转换系数来转换6中类型的属性:位置,速度,加速度,加加速度,外部位置,外部速度。

<axis>.DIRECTION' 用来乘以单位转换系数。 运动控制系数:(i.e., POSITIONFACTOR, VELOCITYFACTOR,

ACCELERATIONFACTOR , JERKFACTOR) 只能赋正值,
DIRECTION 决定它们的符号.
DIRECTION 能取两个值中的一个: 正向:-1  或者 反向: +1。

MC单位允许您在方便的单位下工作。所有的单位类型都是独立的。所以,位置单位是英寸,速度单位是英尺/分钟,加速度单位是rpm/秒。 轴的单位只能在轴下电的情况下更改。

位置单位

位置单位是由POSITIONFACTOR or PFAC控制的. softMC中:基于编码器系统的内部单位是编码器计数值,旋变系统中是65535个计数/转。编码器计数是编码器线数的4倍。 位置单位的设置,取决于每一个您选择的单位对应着多少个计数。 例如: 假设您有这样一个系统:

目标单位: 英寸

旋转电机 (与直线电机相反)

2000 线编码器

3:1 减速机

5 圈/英寸的丝杠

计算 POSITIONFACTOR (每英寸计数):

1 英寸 = 丝杠 5 圈 = 减速机15 圈 = 15 * 2000 线 = 15 * 2000 * 4 计数 = 120,000 计数

POSITIONFACTOR 设置成每英寸的计数是: 120000.

A1.PositionFactor = 120000

第二个例子:

将编码器改成旋变,丝杠单位改为米:

目标单位: 米

旋转电机

旋变反馈 (65536 计数/转)

3:1 减速机

2 圈/cm 丝杠

计算 POSITIONFACTOR (每米的计数为):

1 米 = 丝杠200圈 = 减速机600 圈 = 600 * 65536 计数 = 39,321,600 计数

POSITIONFACTOR 应该设置为:计数/米:: 39321600.

如果您使用ControlStudio自动计算, 需要提供 电机分辨率以及电机旋转角度/单位运动,然后ControlStudio将会自动完成计算。


速度单位

速度单位可以将softMC内部的速度单位(计数/ms)转换成您所需要的单位。它们是由VELOCITYFACTOR 或者 VFAC控制的. 通常,速度单位是位置单位/s,或者每分钟,或者rpm.如果您需要速度单位是您的位置单位/s,将VELOCITYFACTOR 设置为: POSITIONFACTOR 除以1000 (将毫秒转成秒):

A1.VelocityFactor = A1.PositionFactor/1000 ‘ 位置单位/秒

如果您想设置为用户位置单位/分钟, 除以 60000:

A1.VelocityFactor = A1.PositionFactor/60000 ‘ 位置单位/分

如果您需要rpm作为单位,您需要计算没转的计数,然后除以60000(将毫秒转成分钟):

目标单位: rpm

2000 线编码器

您首先需要确定每转的计数/英寸:

1 转 = 2000 线

= 2000 * 4 计数

= 8000 计数

VelocityFactor 应该设为计数/转除以60000:

A1.VelocityFactor = 8000/60000

加速度单位

加速度单位将softMC内部加速度单位(计数/毫秒2)转换成您的单位。它们是由:ACCELERATIONFACTOR 或 着<axis>.AFAC控制的。通常,加速度单位是速度单位/秒或者/分。如果您需要将加速度单位设为您的速度单位/秒, 将ACCELERATIONFACTOR 设置为 VELOCITYFACTOR 除以 1000 (将毫秒转为秒). 除以60000,将加速度单位设为速度单位/分:

A1.AccelerationFactor = A1.VelocityFactor/1000 ‘加速度单位 = 速度/秒

或者

A1.AccelerationFactor = A1.VelocityFactor/60000 ‘加速度单位 = 速度/分

加加速单位

设置加加速的系数也是必要的。即便您总是使用平滑系数。平滑系统可以自动根据速度和加速度值来定义加加速参数, 但是它只是系数前的一个值。因此,完整的加加速有效值会在内部计算 。至少您需要设置:Jfac=Afac/1000 ,这个参数通常是可以正常工作的。 JERKFACTOR 设置了您的加加速单位和内部加加速单位的转换系数。[计数/毫秒</nowiki>3]. <axis>.JERKFACTOR 必须包含位置和时间维度的转换系数。

加速度规划曲线

softMC提供了平滑的,可用的加速度规划曲线,用来降低设备的抖动和磨损,并且可以允许高加速度升率。softMC允许您独立控制加速度和减速度,用来更进一步的降低抖动。|

ACCELERATIONDECELERATION 控制加速的的升率。 以下代码可在中断中输入,设置A1轴的加速度和减速度:

A1.Acceleration = 1000
A1.Deceleration = 1000

您需要设置了加速的的单位之后,方可输入以上命令。您可以强加限制加速和减速的时间。 运动主要包括三个阶段:加速阶段,匀速阶段,减速阶段。

加加速是加速度的一阶导。快速运动通常会产生较大的加加速。大的加加速通常会引发设备共振,从而造成不必要的磨损和噪声。有的运动控制器简单的瞬间改变一个很大的加速度值,这样 会产生一个很大的加加速度。softMC允许您通过轴的属性:SMOOTHFACTOR 或者 [[MC- Basic:axis.JERK|<axis/group>.JERK]]在所有的运动规划中限制加加速的值;

设置<axis/group>.SMOOTHFACTOR (SMOOTH)为0,指定梯形规划。 如果您需要一个平滑的加速度规划,可以通过设置 SMOOTHFACTOR 为从1 到最大为 100的值来实现. 如果SMOOTHFACTOR 很大(>=50),它可以将加速度变化时间提高一个或多个数量级。

在直线加速中,使用<axis/group>.ACCELERATION 以及 [[MC-Basic:axis.JERK |<axis/group>.JERK ]] 去限制速度,产生加速度曲线,可以消除扭矩的高频部分。这样可以减小设备共振,从而降低噪声、振动以及机械磨损。 例如: 下图显示了softMC如何通过可控加加速产生了一个平滑的加速度曲线:

caption


另外,还有一些参数可以定义运动中加速/减速的时间。这些持续时间将被内部用来计算合理的运动参数,已尽可能的达到时间要求。 <axis/group>.TIMEACCELERATION and [[ MC- Basic:axis.TIMEDECELERATION|<axis/group>.TIMEDECELERATION]] 可以用来基于时间的定义.

位置与速度

对每个轴而言,位置与速度是最重要的两个命令与反馈信号。这些属性每个总线周期都会刷新一次,并且可以随时读取。这些属性是双精度的浮点数,速度单位已在上面讨论过。 有4个属性保存这些值:


只要运控总线正常,您可以随时读取这些属性。

位置误差是由位置命令和位置反馈之间的误差来定义的。当一个轴不动时:(例如:, ISSETTLED), 简单的位置误差就生效了。然而,当轴在运动中时, 实际的位置误差并不等于即时的位置命令减去当时的位置反馈,因为当运动指令下发到反馈回来,总线中会有几个周期的延迟。

当softMC计算位置误差时,会自动算入通信的延迟。不同的运控总线和驱动器位置控制,会存在不一样的通信延迟。

为了管理位置误差延迟问题,softMC提供了一个轴与轴组的位置延迟参数:<''axis''>.POSITIONERRORDELAY,该参数 允许您设置计算位置误差时的总线延迟的周期数。

softMC允许您将任意轴设置为旋转轴。旋转轴通常是执行机械的往复重复性运动。

例如:带动旋转平台的电机通常定义为旋转轴。这种情况下,旋转平台的单位一般定义为:度。而且在360°之后又重复。这样,位置总是在选装了360°之后又重复了。 而不是持续增加。这样的关键是正确且精准地设置翻转位置:(POSITIONROLLOVERPROLLOVER) 。


例如以下实例:旋转电机通过 5:3 减速机带动平台:

目标单位: 度
目标重复: 360°
减速机: 5:3
反馈: 2000 线编码器
该例中, 首先设置位置单位为度:
1 度 = 1/360 平台旋转圈
= 电机的(5/3) * (1/360)圈
= 2000 * (5/3) * (1/360) 线
= 4 * 2000 * (5/3) * (1/360) 计数
= 40000/1080

设置完单位之后,您必须打开旋转模式,并且是指翻转为360°,如下:

A1.PositionFactor = 40000/1080
A1.PositionRollover = 360
A1.PositionRolloverEn = On  ‘打开旋转运动

在该例中:反馈的位置永远都在360以内,但是,您仍然可以控制轴长距离运动,例如1000度,但是,一旦电机停下来,反馈仍然会是在360度以内。

当在电机持续保持单方向旋转的应用中使用旋转模式的时候,请注意务必保证利用所有softMC中可用的精度选项。因为在这种模式下,误差是多圈累积的。 例如:我们可能把上述实例中的A1.POSITIONFACTOR四舍五入到了37.037。而实际精度是1,000,000分之一。然而,在旋转了10,000转之后(2000rpm的速度,运行5分钟),那么1/1,000,000就可 能累积了好几度的误差。这就意味着,如果平台的位置是100°,那实际可能只转了97°。那么平台就已经漂移了。

在上述实例中,如果使用除式,那么计算就可以很准确。因为softMC是一个基于双精度的计算。如果您不能将一个比例用十进制精确表示的话,您应该使用softMC算术去计算。在例子中,使 用softMC的全精度(大概1/1014),那么电机需要旋转3x1011转才会累积一度的误差。这相当于用6000rpm的速度运行88年才能达到的。

所有的驱动器都会提供与外部或者附加编码器的接口。这些编码器是主反馈设备的补充。您需要对总线周期数据(EtherCAT:PDO)进行配置以支持该功能。在主-从操作(齿轮与凸轮)中,外部 位置是经常使用到的,例如在线性操作的电机上。

softMC通过轴的属性提供外部位置,POSITIONEXTERNALPEXT。该参数保存驱动器的外部编码 器输入的累积编码器运动,每运控总线周期刷新一次。

softMC允许您控制POSITIONEXTERNAL (PEXT)的单位。 可以通过设置POSITIONEXTERNALFACTOR来控制。 该操作与设置编码器位置单位一样。外部位置与速度单位只在总线设置了传输外部编码 器信号之后才生效。


softMC通过 VELOCITYEXTERNAL<''axis''>.VEXT提供外部速度信号。当总线设置了传输外部编码器信号之后 ,该参数保存外部编码器的累积运动/毫秒,同样是没总线周期刷新一次。

softMC允许您通过 <''axis''>.VELOCITYEXTERNALFACTOR<''axis''>.VEXTFAC控制VELOCITYEXTERNAL的单位。 该设置 步骤与设置位置单位一样的, 如果<''axis''>.VEXTFAC 只能当外部编码器信号输入例外。

限位

本节阐述了您可以加在softMC中的各种限位。这些限位可以帮助保护设备避免位置、速度、扭矩超限。 系统中一共有3种限位:

  • MC发生器限位
  • MC实时限位
  • 驱动器限位

可以通过几种方式设置限位。第一,有的限位是softMC设置的,有的是驱动器设置的。限位可以使实时检查的,也可以是后续检查的。

MC Generator limits(MC发生器限位) 限制运动控制发生器的后续命令。例如:如果您改变了一个加速度限位,这对当前运动是没有作用的。但是对后续的运动指令是由效的。如果轴 不是在jog模式,或者作为一个从轴操作,那么POSITIONMINPOSITIONMAX (位置限位)只会在运动开始时 检查一次。

softMC会每个周期实时检查 realtime limits(实时限位)。这些限位的改变会作用在当前运动上。 VELOCITYFEEDBACK 会被每个周期与 VELOCITYOVERSPEED比对。

Drive limits(驱动器限位)。改变这些设置会当前运动有效。例如: ILIM 限制了驱动器的输出峰值电流。这些限位与控制器限制的位置和速度的限位是相独立的。

轴位置限位

softMC中有许多与位置相关的限位: POSITIONMIN PMIN

POSITIONMAX PMAX

POSITIONMIN (PMIN) POSITIONMAX (PMAX) 规定了位置反馈的最大和最小值。 可以如下设定这些限位:

A1.PositionMin = -10
A1.PositionMax = 200.5

或者您也可以使用缩写形式:

A1.PMin = -10
A1.PMax = 200.5

位置限位必须在使用前打开。限位是通过POSITIONMINENABLE 以及 POSITIONMAXENABLE打开或 者关闭的。 位置单位前面章节已经讨论过了。

位置限位是通过两种方式检验的。 第一, 它们在运动发生器中检查。如果您发出一个超过了该限制的位置运动命令,系统会报错并且不会运动。第二种,可以在每一个总线周期内检查(一般 是2 或 4毫秒 )。如果运动位置超过了设定限位,那么系统报错。

如果轴的确因为超位置限位而报错且停下来了,那么softMC可以仍然允许您往回运动,回到限位区域内,该运动不会报错。

位置限位只在主-从控制模式下连续检查。有的情况下,当电机超出了PMIN or PMAX,softMC偶尔不会检查到超限。驱动器的位置/速度/扭矩环不稳定也可能造成位置超限报错。

您可以通过设置 POSITIONMINENABLEPOSITIONMAXENABLE的开关来选择是否只需要打开一种限位,或者两种都打开:

A1.PositionMinEnable = ON
A1.PositionMaxEnable = ON

或者,您也可以使用缩写:

A1.PMinEn = ON
A1.PMaxEn = ON

默认情况下,这两个限位开关是关闭的。您必须自己将其打开。

您应该设置您的系统所能允许的最大位置误差。您可以通过设置<''axis''>.POSITIONERRORMAX (<''axis''>.PEMAX)来控制。

请注意,您应该设置一个合适的PEMAX值,以匹配您应用的需求。如果实际的位置跟随误差 (PE) 超出了PEMAX,那么运动停止,轴会被下使能。


在正常运行时,如果偶尔产生了跟随位置误差超限,那么很有可能是由于设备零部件磨损、破坏、或者缺少润滑导致的。您应该根据设备正常运行时的界限去设置最大位置跟随误差,否则很 有可能会产生令人讨厌的报错。

在调试安装阶段,位置误差可能会经常报错,因为系统还不稳定。这种情况下,即使速度命令为0,电机页可能会飞车。所以,在系统上电前,需要将POSITIONERRORMAX设置为一个合理 的小的值。例如:您可以将其设置为电机的几圈,(或者直线电机上的几个英寸)。这样的话,如果调试还没稳定,系统也不会出太大问题。如果为了避免系统报跟随位置误差超限,而 把PEMAX设置成一个很大的值,那么,电机仍然有可能会飞车。

比例控制位置环是最简单的位置环控制。下图显示了一个比例控制的位置环:

caption

如您所见,速度命令与跟随误差是成比例的。大的速度命令需要大的位置跟随误差。首先,inches/min, mil单位看上去可能有点让人困惑。

下图显示的是一个典型的比例环的加速度与跟随误差的曲线图:

caption

100%前馈的好处是,它可以预测稳态误差。坏处是:当系统执行加速或者减速的时候,一般会导致过冲。有的情况下,这并不是问题,因为系统依然可以平滑地运行,或者有的过冲是可以接 受的。


<''axis''>.POSITIONERRORSETTLE, 定义了在什么0的多少范围内可以认为是已经稳定了。例如:您可以用:

A1.PositionErrorSettle = 0.01

或者,用缩写形式:

A1.PESettle = 0.01

去指定位置误差必须在0.01个单位以内,才能认为该轴已经到达了稳定状态。

  • POSITIONERRORSETTLE在当运动控制器必须指定在什么足够接近0的范围内认为是稳定了的情况下使用。通常在两个运动之间,下一个运动在上一个运动已经完成了才开始使用。

softMC可以自动完成这些设置,如果您使用 STARTTYPE属性,当您按照本手册的“MOVE”指令运动一个轴的时候,您必须设置TSETTLE>0 或者忽略掉 POSITIONERRORSETTLE 属性。

  • TIMESETTLE (or TSETTLE) 定义了位置误差必须保持在PESETTLE 以内多长时间才被认为是轴已经稳定了。

当运动规划已经完成了,而且位置误差已经跌入了POSTIONERRORSETTLE以内,softMC等待TIMESETTLE毫秒才进入稳定状态。如果位置误差在稳定时间内超过了POSITIONERRORSETTLE,那么计时器将会重置。

  • ISSETTLED 是一个全局的逻辑属性(TRUE or FALSE) ,表示了该轴是否已经稳定。一个轴如果要达到稳定状态,必须满足一下条件:

1,运动规划已完成。 2,位置误差必须小于POSITIONERRORSETTLE且保持了TIMESETTLE毫秒

  • ISMOVING 是一个指示运动状态的属性。

有效的取值范围是:-1 到 3,各个含义如下:

-1 = 该元素是一个从轴(齿轮或凸轮),或者是一个增量式的运动。否则,以下值生效:
0 = 该元素没有运行
1 = 该元素正在加速
2 = 该元素处于匀速段
3 = 该元素正在减速

例子:

While a1.ismoving > 0 ‘等待运动规划完成
End While

轴速度限制

softMC中有几个关于轴速度的限制:


  • VelocityOverspeed 定义了一个绝对的电机速度限制。当超出了这个速度限制,系统会产生一个错误,并将该轴立即停止。VELOCITYOVERSPEED 是以softMC的速度单位为单位并且可以在任意时刻设置。它是每个总线周期刷新一下。

例如:

A1.VelocityOverspeed = 4000
  • VelocityMax(VMAX)可以用来设置运动规划的最大速度命令。VELOCITYMAX 是以softMC速度单位为单位的,可以通过终端窗口或者配置程序”Config.prg”,进行设置。它是在运动开始的时候进行检查的。

例如:

A1.VelocityMax = 5000

有两个限位用来控制加速和减速,它们自己可以在加速度规划中限制速度的突变。

这些属性可以在终端窗口或者在用户任务中设置。 这些属性就是:

ACCELERATIONMAXDECELERATIONMAX.

  • ACCELERATIONMAX 是运动命令的加速度上限。以softMC加速度单位为单位。
  • DECELERATIONMAX 是运动命令的减速度上限。以softMC减速度单位为单位。

"Rate" (比例) 参数

以下参数是用来按比例增加或者减小轴或者轴组的最大限制的:

  • <Axis/Group>.VelocityRate 定义了轴速度的 最大比例,取值范围是:-1到100%。与加速度、减速度或者加加速独立。<''axis''/''group''>.VelocityRate 是模态或者节点。
  • <Axis/Group>.AccelerationRate定义了轴的加速度最大值比例,取值范围0.1到100%。与速度、减速度以及加加速相独立。<''axis''/''group''>.AccelerationRate 可以是模态或者节点。
  • <Axis/Group>.DecelerationRate 定义了轴的减速度最大值比例,取值范围0.1到100%。与速度、加速度以及加加速相独立。<''axis''/''group''>.DecelerationRate可以是模态或者节点。

<axis>.JerkRate可以使模态或者节点。

NOTE-Info.svgNOTE
在这些情况中,"rate"不是时间的改变量的意思。而是轴最大值得比例。

例如:

A1.VRate = 50 ‘ VelocityRate 50%
A1.ARate = 70 ‘ AccelerationRate 70%
A1.DRate = 80 ‘ AccelerationRate 80%
A1.JRate = 60 ‘ JerkRate 60%

配置确认

现在,您可以通过使用softMC的“MOVE”指令来检查系统。该指令将在后续章节中讨论。现在,只是用来确认以上配置参数是否正确的。

首先,使能您的驱动器。

使能

可以通过以下命令使能系统与轴:

System.Enable = ON

A1.Enable = ON

当运控总线在可操作模式下后。意味着驱动器已经连接好了,而且已经在softMC和驱动器之间有周期性的数据交换了。 (SERCOS: Phase = 4, EtherCAT: Operation)

您必须在使能任何驱动器之前,先使能系统: SYSTEM.ENABLE (SYS.EN) 。 这是因为当 SYSTEM.ENABLE 关闭的时候,会将系统中的所有轴的使能都关闭。

运动标记

下一步是准备一个运动标记打开的系统。 有两个运动标记必须打开:系统的运动标记以及轴的运动标记: SYSTEM.MOTION:

System.Motion = ON

A1.Motion = ON

运动

现在,您可以试着使用运动指令了。 例如: 输入:

Move A1 1000 VelocityCruise = 10

可以将A1轴以10的速度运动到1000的位置。您应该可以看到电机的运动了。使用一个手持速度计或者其他速度传感设备去验证这个速度是否正确。

连续增量式运动到几个位置(通过设置“Absolute”为OFF),同时验证位置单位是否正确:

Move 1000 VelocityCruise = 10 Absolute = Off

轴组

轴组允许您如同一个结构一样控制多个轴。有了轴组,位置的命令和反馈不再是单个信号了,而是一个向量。这些向量被称为“点”。点是浮点数的高阶集合,由大括号"{" 和"}"框住。

更多关于点的类型的细节,请参考: POINTS。速度和加速度不再直接作用于电机。但是他们作用在两个或更多电机组成的联动运动中。


设置

轴组是轴的组合。如果这些轴的标量属性(速度)要准确的话,必须是正交的。 例如,一个轴组可以用来控制一个x-y平台。

轴组可以支持2轴或者3轴的设备。事实上,任何数量的轴都可以加入在轴组之中。

为了配置好一个轴组,首先要配置要用在轴组里的轴。然后使用Common Shared 去形成一个轴组:

Common Shared MyGroup as Group AxisName = xAxis AxisName = yAxis

对于轴组中轴的数量,是没有限制的。所有的系统中的轴(包括虚拟轴)都可以成为轴组的一部分。


如同轴一样,轴组也需要设置VELOCITYFACTOR, ACCELERATIONFACTOR, 以及JERKFACTOR。然而,却没有<group>.POSITIONFACTOR这个属性。

基本上,设置<group>.VFAC = 1/1000, 设置 AFAC=VFAC/1000, 以及设置 JFAC=AFAC/1000即可。

加速度规划

如同单轴一样,softMC也提供了轴组的加速度规划。这样可以减低设备的振动和磨损。同时允许最大的加速度升率。您可以独立控制加速度和减速度升率。

加速与减速

<group>.ACCELERATION<group>.DECELERATION控制着轴组设备的加速度和减速度升率。 例如: 下面代码改变了轴组:MyGroupFor的加速和减速升率:

MyGroup.Acceleration = 1000
MyGroup.Deceleration = 1000

<group>.ACCELERATION<group>.DECELERATION 应用在轴的联合运动中。例如: 如果MyGroup 是一个3轴的轴组,由Axis1, Axis2, 和 Axis3组成,那么:

MyGroup.Acc = (Axis1.Accel2 + Axis2.Accel2 + Axis3.Accel2)?


轴组的加速度是轴的加速的正交组合。轴组的加速和减速是由单轴的值所限制的。

您可以加限制来约束轴组的加速和减速的时长:

<group>.TIMEACCELERATION<group>.TIMEDECELERATION 定义了加速段和减速段的时长。

轴组的位置

轴组的位置有别于单轴的位置。在有的情况下,单独轴的属性在轴组中被保持了,从而变成了一个2维或以上的向量。这种情况下,对应的属性为: POSITIONFEEDBACK 或者POSITIONCOMMAND. 在其它的情况中,多轴的位置是单轴的位置的平方和的平方根。这样对应的属性是: POSITIONERRORMAX.

点数据类型 (向量)

在轴组中,三个位置属性是点:位置命令,位置反馈,最后位置。 在各种情况下,点中的数量等于单轴的个数。 例如,您可以设置POSITIONFINAL,作为MOVE指令的一部分:

Move MyGroup {5.5, 6.5}

这个命令设定PFINAL的值,使得第一个轴为5.5 ,第二个轴为6.5。可以在终端中查询轴组的位置反馈: 例如:

? MyGroup.PFb

返回:

(5.600443e+003, 6.422422e+003)

这些点中的位置与用Common…As Group创建轴组时的顺序相同。 第一个申明的轴占据向量中第一的位置,第二个占据第二个位置,以此类推。


轴组的标量

其它的轴组位置属性是标量。这些属性是单独轴的属性的正交集合。 这些属性包括:

POSITIONERROR 

POSITIONERRORMAX

POSITIONERRORSETTLE

POSITIONTOGO

如果MyGroup 是由Axis1 和 Axis2组成, 而且 AXIS1.POSITIONTOGO = 1 和 AXIS2.POSITIONTOGO=1, 那么MYGROUP.POSITIONTOGO = 1.414, 是两个轴的对应属性的正交组合。

类似的,如果您设置了POSITIONERRORMAX 或者POSITIONERRORSETTLE, 那么轴组的位置误差是单个轴的位置误差的正交组合。


轴组的速度

轴组的标量速度属性永远是单个轴的速度的正交组合。轴组速度属性包括:

VELOCITYCOMMAND point property
VELOCITYFEEDBACK point property
VELOCITYCRUISE scalar property
VELOCITYFINAL scalar property
VELOCITYMAX scalar property
VELOCITYOVERRIDE scalar property

轴组限位

轴组的限位与轴的限位类似。可以通过两种方式施加限位:可以使实时的,也可以是滞后的。

  • Generator
发生器限制对运动规划发生器之后的命令有效。例如:如果您更改了一个加速度限制,它将会在之后的运动命令生效,但是对当前命令无效。
  • Realtime
softMC会实时地每个总线周期检查限位。例如:如果位置超差检查就是每一个总线周期进行检查的。
  • Position
位置限制是由轴单独施加的,他们是在运动开始的时候检查的。如果目标点中的某一个点超过了限位,整个运动将不会执行。系统中没有轴组的位置限制。但是softMC中有一些关于轴组的位置限制参数:
设置POSITIONERRORMAX (PEMAX) ,可以设置系统的总共位置误差的最大值。最大是各轴的PEMAX的平方和的平方根。
MyGroup.PEMax = 1.0
设置 POSITIONERRORSETTLE,可以设置系统在运动中所能接受的在位置误差。
MyGroup.PositionErrorSettle = 1.0
TIMESETTLE (TSETTLE)是一个轴稳定状态前的稳定时间。

(POSITIONERROR<POSITIONERRORSETTLE). 当 MOVE/CIRCLE 运动完成之后, softMC等待 POSITIONERROR < POSITIONERRORSETTLE 保持了TIMESETTLE毫秒之后,才认为进入了稳定状态。

TIMESETTLEMAX (TSETTLEMAX)定义了运动完成后的所允许的稳定时间。

MOVE/CIRCLE 运动完成之后,softMC等待TIMESETTLEMAX 毫秒以达稳定。如果位置误差停留在PESETTLE之上, 系统报错。

ISSETTLED 是一个二进制属性 (ON or OFF),指示了轴组是否已经稳定了。

要达到稳定状态,运动规划必须已经完成,而且各轴的位置误差的正交组合必须在 POSITIONERRORSETTLE以内。稳定的时间条件必须达到。

  • Velocity
softMC中有一个关于速度的限制参数: VELOCITYMAX (VMAX)设置了运动规划的最大轴组速度命令。在运动开始时进行检查。

例如:

Group.VelocityMax = 5000

实际的运行速度同样会受到单独轴的速度限制。最大允许的轴速度是轴组的初始速度。这种情况下,会返回一个提示并且只有在 SYS.MOTIONASSISTANCE 打开了才能看到。

  • Acceleration
有3个限制用来控制加速度,减速度,加加速。可以限制加速度规划时产生的速度突变。
ACCELERATIONMAX是加速度的上限,单位与softMC一致。
DECELERATIONMAX 是减速度的上限,单位与softMC一致。
实际的运行中,加速度和减速度受轴组中单独轴的限制。最大的所允许的这些轴的参数值在轴组中初始化。这种情况下,返回一个提示,并且只能当 SYS.MOTIONASSISTANCE 打开了,才能看到。
加加速属性, JERK, JERKMAX, 以及 SMOOTHFACTOR 可以应用在轴组中,已达到平滑的运动效果。

轴组运动

轴组是由运动发生器控制的。该软设备每一个总线周期从softMC任务接受命令以及向驱动器下发位置和速度指令。

由两种运动指令:MOVECIRCLE。softMC 也运动命令的执行的同步机制、on-the-fly更改运动规划、以及两个运动命令之间的平滑过渡。另外,softMC提供多种模式的启动和停止。

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

  1. 控制任务必须 ATTACH 轴组
  2. 轴组中所有轴必须被ENABLE'了.
  3. 系统和轴的运动标记必须为ENABLE了.

您可以在任何程序中声明一个轴组,然而,在大部分应用中,只需要在Config.prg执行一次。

A1.Name = xAxis
A2.Name = yAxis
Common Shared xyTable as Group AxisName = xAxis AxisName = yAxis


  • ENABLE

现在,您可以在命令窗口中用以下命令使能驱动器:

System.Enable = ON

MyGroup.Enable = ON
  • Motion Flags

最后一步就是把系统的运动标记打开。一共有两个运动标记,一个是系统的,一个是轴的。

例如:

System.Motion = ON
A1.Motion = ON
A2.Motion = ON
A3.Motion = ON

在轴组中,有一个轴组的运动标记,可以打开所有轴的运动标记。在很多应用中,一个硬件开关会与该运动标记绑定。softMC没有硬件输入,但是您可以用事件来实现这个功能。下面的例子演示了一个任务如何用外部的输入数字量去打开系统的运动标记:

Program MotionSwitch
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


  • 关联任务与轴组/轴

在一个任务能发送运动指令给轴组之前,轴组必须关联到一个任务之中。这样可以防止其它的任务试图去控制同一个轴组。想要关联一个轴组,可以在程序中使用ATTACH指令:

Attach MyGroup

如果没有其它的任务关联到该轴组,那么该轴组会被立即关联。如果不是,系统报错。

只要轴组被一个任务关联了,其它的任务都无法再关联该轴组。而且轴组中的轴也无法被其它任务单独控制了。 当一个任务完成了一个轴组的控制之后,应该解除关联。 例如:

Detach MyGroup

如果任务结束了,所有关联的轴组和轴都将自动地被解除关联。有一个例外,如果关联请求是由终端中输入命令实现的,假如该轴组没有被任何其他任务所关联,轴组将会自动地关联到终端的运动命令之中。


STOP

'STOP命令可以停止轴组在运动缓存中的运动。在该命令中,您必须指明轴组的名称:

Stop GroupA

通常,STOP会被设置成立即停止运动。减速度为:DECELERATIONMAX 或者DECELERATIONSTOP。然而,您可以修改STOP,通过 [[MC- Basic:group.STOPTYPE|STOPTYPE]]。 <group>.STOPTYPE 可以设置为:

STOPTYPE= IMMEDDECELERATIONMAX 立即停止各轴。当前路径不被保证。

STOPTYPE= ENDMOTION 当前运动结束后停止。

STOPTYPE= ONPATH 立即停止,但是保证停止在轨迹规划的路径上。

STOPTYPE= ABORT 立即停止,不能回复当前路径。

STOPTYPE 默认设为IMMED. If STOPTYPE = ENDMOTION, 在STOP命令执行前,完成当前运动。

如果STOPTYPE = ONPATH, STOP执行在当前路径之上。停止的时候,不会以最大的减速度停止,而是以当前的运动规划的减速度停止。

PROCEED

当您应用了STOP之后, 您必须应用 PROCEED 去清除运动缓存。 您可以使用 PROCEEDTYPE去指明用那种方式继续运动发生器:

PROCEEDTYPE = CONTINUE 轨迹发生器继续当前停止的命令,直至完成。

PROCEEDTYPE = NEXTMOTION 轨迹发生器丢弃当前运动,跳往下一个运动指令。


PROCEEDTYPE = CLEARMOTION 清除运动缓存,不再执行运动。这是默认设定的。

PROCEEDTYPE = ABORT 当前运动立即停止而且不需要 PROCEED 去启动下一个运动。只有当前运动停止之后,后面的命令才被生成。


MOVE

轴组的MOVE指令与轴的 MOVE 十分类似。有两种不同的方式。 第一种,POSITIONCOMMAND, POSITIONFEEDBACK, 以及 PFINAL 是轴组的向量。 第二种,运动规划,包括 ACCELERATION 以及 DECELERATION, 作用于所有的轴组内的轴。 例如:

MyGroup.VCruise = 2000
Move MyGroup {100, 100}

以2000的速度将轴组运动到位置:(100, 100)

您可以在 MOVE指令中,覆盖以下属性:

ABSOLUTE

STARTTYPE

ACCELERATION

ACCELERATIONRATE

DECELERATION

DECELERATIONRATE

SMOOTHFACTOR

VELOCITYCRUISE

VELOCITYRATE

JERK

JERKRATE

PFINAL (运动的终点),常常在 MOVE中指明。然而, PFINAL 的确切含义取决于<group>.ABSOLUTE 这样允许了点到点的运动可以有两种方式指明: ABSOLUTE = TRUE 结束位置是有绝对位置决定的。结束位置='PFINALINCREMENTAL'ABSOLUTE = FALSE 结束位置相对于起始位置。结束位置是PFINALPCMD相对于起始位置的和。 所以:

xyTableGroup.Absolute = TRUE
Move xyTableGroup {100, 200}

运动 xyTableGroup 到 (100, 200).

另外:

xyTableGroup.Absolute = FALSE
Move xyTableGroup {100, 200}

将xyTableGroup 从起始位置 运动(100, 200)的距离。

ABSOLUTE 默认设置为 INCREMENTAL。您可以随时改变ABSOLUTE 的值,尽管它不会对当前运动生效,会在下一个运动开始生效。

CIRCLE

softMC通过CIRCLE指令,支持2轴圆弧插补。在 CIRCLE中,您需要指明: 1、轴组名称

2、旋转的角度。 (度为单位, 正向 = 逆时针)围绕圆心旋转。 (CIRCLECENTERCTR).

3、圆弧上的另外一个目标点 (TARGETPOINT) (CIRCLEPOINT).

Circle xyTable Angle=90 CircleCenter = {0,0}

or

Circle xyTable CirclePoint = {10,20} TargetPoint = {100,200}

当一个在指定的平面上的2轴的圆+一个增量式的第三轴的时候。会生成一个3轴的圆弧运动,但是并不是螺旋线运动。

Circle xyTable CirclePoint = {10,20,10} TargetPoint = {100,200,20} circleplane= xy

在上述实例中,该圆是XY平面上Z轴值有改变的圆。另外,您也可以覆盖这些CIRCLE轴组属性:

ABSOLUTE

STARTTYPE

ACCELERATION

ACCELERATIONRATE

DECELERATION

DECELERATIONRATE

SMOOTHFACTOR

VELOCITYCRUISE

VELOCITYRATE

JERK

JERKRATE


例如:您可以输入以下绝对的和相对的圆弧运动:

Circle xyTable Angle=90 CTR = {0,0} Absolute = False
ANGLE的值不是限定在360。更大的数字可以设置。

角度的符号决定了运动的方向。

ANGLE的值不是固定的。它只存在于程序中指定的值。总而言之,您不可以查询 ANGLE的值。

CIRCLECENTER不是固定的。它只存在于程序中指定的值。总而言之,您不可以查询CIRCLECENTER的值。

TARGETPOINT 是与轴组同维度的向量。它指明了圆弧的目标点。该数组不可查询。CIRCLE 定义TARGETPOINT 限制在360度以内。

CIRCLEPOINT是圆弧上的点集。该圆弧是由TARGETPOINT 和这些点计算的。该点阵不可查询。

在3维的圆弧中, CIRCLEPLANE 定义了那些轴组内的轴参与到圆弧插补中来。第三个轴是线性运动的。一共有3个平面可供选择: XY, XZ 以及 YZ.

链式指令

您可以将 MOVE指令和 CIRCLE指令通过 <group>.STARTTYPE链接起来。下面的例子可以实现一系列的运动:

A1.Name = xAxis
A2.Name = yAxis
Common Shared xyTable as Group AxisName = xAxis AxisName = yAxis

在MoveCircProgram 程序中:

Attach xyTable
xyTable.Absolute = TRUE ‘Move to start position
xyTable.StartType = INPOS ‘Move to start and wait to settleMove xyTable {-3, -2}
While(xyTable.isSettled = False) ‘wait for settling
End While
‘Begin Pattern
xyTable.StartType = GCOM ‘Move smoothly from one move to the next
xyTable.Absolute = FALSE ‘Incremental moves 
Move xyTable {0, 4}
Circle xyTable Angle = -90 CircleCenter = {-2, 2}
Move xyTable {4, 0}
Circle xyTable Angle = -90 CircleCenter = { 2, 2}
Move xyTable {0,-4}
Circle xyTable Angle = -90 CircleCenter = { 2,-2}
Move xyTable {-4,0}
Circle xyTable Angle = -90 CircleCenter = {-2,-2}
While(xyTable.isSettled = False) ‘wait for settling
Detach xyTable
End Program

运动控制

本章节重复了softMC提供的轴组的MOVE指令 CIRCLE指令。

混合

两个运动通过圆滑连接点混合地更紧密。有两种混合的方式:保持当前运动轨迹的(CP)或者超级位置。 通过BLENDINGMETHOD指令设置混合模式:

连续路径(CP)

caption 连续轨迹方法(CP)应用在有连续轨迹和速度圆滑要求的场合(涂胶,分配…..)。在高速拾取摆放的场合,没有什么作用,在这种应用中,节拍是最重要的。

使用这种混合方法,您必须确保绝对不会超过最大的空间速度,而且原轨迹必须保持。 分段的中间点必须是在混合轨迹之上。只有连个连续运动可以混合在一起。


caption 当第二个运动比第一个运动先完成的时候,系统不会把第一个和第三个运动混合在一起。在这种混合CP中,最主要的参数,指定了目标点和开始混合点(第二段运动)的距离。CP是维度的。按照系统的单位表示。

系统自动将该值限定在分段长度的一半。


当第二段运动太晚收到(在减速段),或者当前运动导致了加速度和速度超限的情况下,两段运动之间的混合被忽略。

对于运动间混合, 使用:

Pos = start + l1 direction + l2 direction

对于运动-圆弧混合,使用:

Pos = start + l1 direction + (cos(l2) rot_start + sin(l2) rot_normal

对于圆弧-圆弧混合,使用:

Pos = center + (cos(l1) rot_start1 + sin(l1) rot_normal1 + (cos(l2) rot_start1 + sin

(l1) rot_normal1


其中 l1 and l2 是第一和第二段的规划位置。

超级位置

超级位置可以在开始和结束运动之间的任意时间点开始混合两段运动。该混合模式不受两个运动的组合方式的影响。

您务必不要使两个运动在混合的时候,超过了系统限定的速度和加速度。

然而,每一个独立的运动都会受到通常的运动学的限制(VMAX, AMAX, DMAX, JMAX)。这些混合方法是可以当第二段运动比第一段运动更早结束的时候交换运动的,那么第一段和第三段运动之间就将有连续的混合运动。虽然我们具有这个特性功能,但是在设计混合路径的时候,还请您务必小心。

使用BLENDINGFACTOR,您可以在第一段运动轨迹的任意点定义开始混合点(第二段运动)。 这是一个无纲量属性,定义了从哪儿开始混合的路径的百分比,0代表全路径混合,100代表不适用混合。

例如:

Dim Shared blen_value As Long
Program
Attach xyTable
BlendingMethod = 2
BlendingFactor = 0
StartType = GCom
For blen_value = 100 To 80 Step -5
Move xyTable {0,10} Abs=1 Vcruise=100 BlendingFactor=blen_value
Move xyTable {10,20} Abs=1 Vcruise=100 BlendingFactor=blen_value
Move xyTable {20,10} Abs=1 Vcruise=100 BlendingFactor=blen_value
Move xyTable {10,0} Abs=1 Vcruise=100 BlendingFactor=blen_value
Next 
Detach xyTable 
End Program

结果见下图:

caption

以下是混合限制:

第一段运动的混合类型决定了实际的连接路径,即便第二段运动有不同的定义。第二段运动可以与当前运动混合,即便没有定义混合类型。这种情况下,会根据第二段运动来混合。在整个混合程序需中,使用的是正弦波或者梯形波速度规划。然而,混合的规划类型是不允许的。

在如下示例中,没有任何混合被忽略:

BlendingMethod = 0 CP = x BlendingFactor = x
BlendingMethod = 1 CP = 0 BlendingFactor = x
BlendingMethod = 2 CP = x BlendingFactor = 100

位置命令发生器 (PCG)有两种工作模式:单通道和双通道。 当PCG工作在单通道模式时,每个采样中只允许一个规划器被调用。这就等同于没有混合。

如果PCG工作在双通道模式,每个采样中,实际执行运动超级位置混合的时候,允许有两个规划器被调用。如果第二段运动的规划器处于规划跟随模式中,那么第一段运动的规划器会同时引导两段运动。使用DOUBLEMODE 在混合中去检测双通道模式插补。


稳定时间

softMC监控并确定轴组是否稳定在位置上。在大多数应用中,轴组的位置反馈会与位置命令有些许的延迟。当一个运动完成之后,实际位置稳定在命令位置上所需要的时间被称为“稳定时间”。

理想状态下,稳定时间为0。然而,在真实系统中,您必须允许真实位置与命令位置的误差有接近0的条件。因为,实际上,不太可能误差会刚好为0.在softMC中,您设定多少误差,可以认为是稳定误差为0。 您可以通过设置 POSITIONERRORSETTLE PESETTLE来实现:

xyTableGroup.PESettle = 0.01

当运动发生器完成了一段运动之后,且以0速度结束,系统便监控轴组位置误差(各轴的正交组合),以确认何时其稳定在±PESETTLE之间。如果在此范围内,则<group>.ISSETTLED 为真(1).否则,为假(0)。

在有的应用中,您必须保证位置误差停留在'PESETTLE一段时间之后,才能认为轴组已经稳定了。softMC允许您设置<group>.TIMESETTLE<group>.TSETTLE (单位毫秒)。 如果位置误差在该时间内超过了PESETTLE ,计时器重置。如果位置误差保持在PESETTLE内,且达到了该时间值。那么久认为系统稳定了。TSETTLE, <group>.ISSETTLED 为真(1)。否则,为假。 例如:

PESettle = 0.01
TimeSettle = 0.01 xyTableGroup.StartType = INPOSMove 
xyTableGroup {100 , 200}
Move xyTableGroup {200 , 400}

该例子要求停止运动之后,第一个运动必须保持位置误差在0.01以内10毫秒,才认为是稳定了。 因为STARTTYPE 是INPOS,运动发生器等待这些条件满足才会开始下一段运动。

开始运动

当运动缓存中是空的时候,轴组会立即启动运动。如果您想要延迟下一个运动。您有两种选择。您可以使用 DELAY 加上指定的延迟时间,或者使用STARTTYPE 去延迟,视具体情况而定。

使用DELAY 可以强制运动发生器等待一个固定的时间(毫秒)采取开始下一段运动。运动元素xyTableGroup 必须在DELAY中指明。 例如:

Move xyTableGroup {100, -100}
Delay xyTableGroup 1000
Move xyTableGroup {200, 500}

强制两个运动间延迟1秒钟。DELAY单位为毫秒,且必须大于0.

DELAYSLEEP不同,SLEEP 是延迟程序的执行,而DELAY 只是延迟运动发生器。DELAY是强制作用在 STARTTYPE模式上。

如果您想要以一个条件判断是否启动一个运动的话,可以使用<axis>.STARTTYPE。 一共有4中选择:

StartType = GeneratorCompleted or GCOM
当STARTTYPE=GCOM时, 新的运动只要运动发生器完成当前运动时就启动。

StartType = InPosition or INPOS
当STARTTYPE=INPOS时,运动发生器会延迟开始新的运动,直到当前运动完成且达到了稳定状态。

StartType = Immediate (IMMED) or SuperImmediate (SIMM)
当 STARTTYPE=IMMED o或者SIMM,新的运动覆盖当前运动。这个是可以实现实时的运动规划更改的。例如更改运动的结束点,而不需要将当前运动停止。 例如: 配对应用中就经常使用到该功能。

StartType = Sync
当 STARTTYPE = SYNC时,运动由SYNCSTART保持同步。

链式运动

当将多个以0速度结束的运动链接起来运动时,您通常需要将STARTTYPE=INPOS。这强制运动发生器等待位置误差足够小之后才开始下一个运动。如果第二个运动的位置规划开始得太早,电机可能无法得到休息。理想的性能是在开始下一段运动之前,速度为0。这就是STARTTYPE = INPOS

MOVE指令的结束速度默认为0。但是,您可以更改为非零值。 您可以设置<axis>.VELOCITYFINAL。 例如:

MyGroup.VelocityCruise = 2000
Move MyGroup {1.5, -2.33} VelocityFinal = 1000
Move MyGroup {2.0, 4.2} 

如果没有指定结束速度,那么结束速度为0,如果指定了结束速度,那么结束速度为您的指定值。

如果没有链接的运动指令,那么系统会自动停止运动,并且显示一个信息。

多步运动

将运动缓存中的非零结束点运动组合在一起,形成多步运动。 例如:

REM First Step
MyGroup.VelocityCruise = 2000 Move MyGroup {100, 400} VelocityFinal = 1000 ‘Second Step
MyGroup.StartType = GCOM
MyGroup.VelocityCruise = 1000 Move MyGroup {200, 400}

MyGroup.StartType 设置为GCOM。第二个运动在第一个运动完成了开始。当链接一个非零速度运动时,您必须使用STARTTYPE=GCOM。您可以使用STARTTYPE=IMMED 或 SIMM ,因为新的运动可以覆盖上一个运动。当运动为非零结束速度运动时,下一个运动会在上一个运动结束点开始,或者立即启动,如果STARTTYPE 是IMMED SIMM。

您可以将非零结束速度的运动组合在一起,根据需求,形成多不运动。 然而,会有几个限制:

STARTTYPE ( VELOCITYFINAL<>0) 必须设为 GCOM.

VELOCITYCRUISEVELOCITYFINAL 必须为正。

当前运动的PFINAL 必须离当前位置足够圆,以便可以达到加速度限制值。如果上述规则被破坏,系统将会报错。

通过设置 STARTTYPE=IMMED,可以改变当前运动的结束点和速度,并开始下一个运动。该命令可以取消当前运动。 例如,不改变当前速度的情况下,开始新的运动:

MyGroup.StartType = IMMED
Move MyGroup {150, -400}
Sleep 3000
Move MyGroup {150, -800}

第二个例子,如果您想要不改变结束位置的情况下,改变运行速度,您可以写:

MyGroup.StartType = IMMED
Move MyGroup {150, -400} abs=1
Sleep 3000
Move MyGroup {150, -400} abs=1 VCruise = 1500

只要遵循以下规则,您可以随时改变当前运动的结束为止,巡航速度,或者结束速度: STARTTYPE 必须是 IMMED 或SIMM.

新旧的 VELOCITYCRUISEVELOCITYFINAL必须为正的。

如果后续的运动改变了PFINAL 或者 VFINAL,必须保证仍然可以按照轴的加速度限制创建运动规划。


多轴同步

softMC提供了单轴与轴组的运动同步。当您有多个独立轴的运动,但是想要保证他们同步的时候,非常有用。 同时在协调单轴和轴组的时候也十分有用。

同步是由<''axis''>.STARTTYPE, 和 SYNCSTART控制的。该功能允许您加载运动发生器的运动之灵,但是等待SYNCSTART指令才开始运动。

例如:

Group1.StartType = SYNC
AuxAxis.StartType = SYNC
Move Group1 {500, 500} VCruise = 2000
Sleep 1000 ‘Program delayed between Move Commands
Move AuxAxis 100 VCruise = 1000
SyncStart Group1 AuxAxis

这样两个运动规划会同时启动。

<''axis''>.STARTTYPE 在写在了运动指令内部,所以可以更加方便地实现同步:

Move Group1 {500, 500} VCruise = 2000 StartType = SYNC
Move AuxAxis 100 VCruise = 1000 StartType = SYNC
SyncStart Group1 AuxAxis

您可以按照您的意愿同步更多的轴与轴组,包括虚拟轴。因为每一个 SYNCSTART 指明轴组或者轴是同步轴。您可以独立 地同步多个轴组与轴的组合。

清除已加载的运动

如果您已经在运动发生器里面加载了一个同步的运动,但是想要删除它。可以使用SYNCCLEAR。例如,如果您在执行SYNCSTART之前输入以下命令:

SyncClear Group1

那么,Group1 的运动就被删除了。更改GROUP1.STARTTYPE 只能对随后的运动生效。您必须使用SYNCCLEAR去清除已加载的同步运动命令。

SYNCCLEAR在运动执行之后无效。这种情况下,您必须停止运动,并产生非同步运动。

速度重载

softMC提供了速度重载的能力,以便控制所有运动指令的速度。该指令可以立即独立地作用在设备、轴组或者单轴上。 该功能在设备开发的时候会密集被使用。您可以通过简单一条指令来调节整个设备的速度。因为该命令是可以通过终端窗口来输入的,您可以观察您的设备运行在不同的速度上,而不需要修改任何程序 。

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

Sys.VOSpd = 25

立即 (如果当前速度大于 25)减低当前的运动指令(MOVE指令, CIRCLE指令 以及 JOG指令)的速度为25。同样也会作用在随后的运动中。 这样,速度是由VOSPD控制的,加速度和加加速度是按照比例来调节的。MOVE指令的终点位置不会被影响到。

使用 <group>.VELOCITYOVERRIDE (<group>.VORD) 去控制轴组的速度,而不是整个设备的速度。 它与SYS.VORD类似,除了它只作用在轴组上。 VORD 可以作用在任意多少个轴组上。而且单个轴的重载是独立于其他轴的。

如果您同时使用 SYS.VORD 以及 <group>.VORD ,轴的速度将会是两者的乘积。 例如:

Sys.VOrd = 66 ‘Reduce entire system to 2/3 speed

GroupB.VOrd = 50 ‘Reduce GroupB to 1/3 speed

您可以在一个轴组里面重写一个轴。一旦一个轴成为轴组的一部分,它就不能再被单独控制了。

运动赋值

赋值以后,通用元素可以如同另一个元素的代表一样使用所有的运动指令,通常是“实”的运动元素。 所有作用在通用元素上的命令都同样会作用在“实”轴上:

Common Shared Scara As Group AxNm = A1 AxNm = A2 AxNm = A3 AxNm = A4 Model = 4
Gen_Group = Scara
In Task1.Prg:
‘ Scara is attached to Task1.Prg through its generic representative Gen_Group
Attach Gen_Group
? “Scara is attached to “ Scara.AttachedTo
? “Initial position of Scara is “ Scara.PFb
‘ Scara is moved through its generic representative Gen_Group
Move Gen_Group {-300,-500,-40,0} absolute = 1
Sleep 200
? “Final position of Robot is “ Scara.PFb
…
Detach Gen_Group
--> Scara is attached to TASK1.PRG
--> Initial position of Scara is {0 , 0 , 0 , 0}
--> Final position of Scara is {-300 , -500 , -40 , 0}

运动属性

通过赋值,通用元素也会获得“实轴”的所有属性。而且可以通过通用轴也可以获取“实”轴的属性。 例如:

Gen_Axes_List[1] = A1
While Gen_Axes_List[1].IsMoving <> 0 
 Sleep 1
End While
Sys.Dout.1 = 1

改变任何通用轴上的属性同时可以改变“实”轴的属性。 例如:

Print “Position Factor and Acceleration of A1 Before SetUp: “ A1.Pfac, A1.Acc
‘ Set A1’s properties through Gen_Axes_List[1]
Call AxisSetUp(Gen_Axes_List[1])
Print “Position Factor and Acceleration of A1 After SetUp: “ A1.Pfac, A1.Acc
--> Position Factor and Acceleration of A1 Before SetUp: 65536 1000
--> Position Factor and Acceleration of A1 After SetUp: 32768 1500