机器自动化控制器——第三章 轴指令 4
- MC_MoveAbsolute
- 变量
- ▶输入变量
- ▶输入输出变量
- ▶输入输出变量
- 功能说明
- ▶指令详情
- ▶时序图
- ▶重启运动指令
- ▶多重启动运动指令
- ▶异常
- 示例程序1
- ▶参数设定
- ▶动作示例
- ▶梯形图
- ▶结构文本(ST)
- 示例程序2
- ▶参数设定
- ▶动作示例
- ▶梯形图
- ▶结构文本(ST)
MC_MoveAbsolute
- 指定绝对坐标的目标位置,进行定位。
指令 | 名称 | FB/ FUN | 图形表现 | ST表现 |
---|---|---|---|---|
MC_MoveAbsolute | 绝对值定位 | FB | MC_MoveAbsolute_instance ( Axis :=《参数》 , Execute :=《参数》 , Position :=《参数》 , Velocity :=《参数》 , Acceleration :=《参数》 , Deceleration :=《参数》 , Jerk :=《参数》 , Direction :=《参数》 , BufferMode :=《参数》 , Done =>《参数》 , Busy =>《参数》 , Active =>《参数》 , CommandAborted =>《参数》 , Error =>《参数》 , ErrorID =>《参数》 ); |
变量
▶输入变量
输入变量 | 名称 | 数据类型 | 有效范围 | 初始值 | 内容 |
---|---|---|---|---|---|
Execute | 启动 | BOOL | TRUE, FALSE | FALSE | 在上升沿开始指令。 |
Position | 目标位置 | LREAL | 负数、正数、“0” | 0 | 指定绝对坐标的目标位置。 单位为[指令单位]。 *1 |
Velocity | 目标速度 | LREAL | 正数 | 0 | 指定目标速度。*2 单位为[指令单位/s] 。*1 |
Acceleration | 加速度 | LREAL | 正数或“0” | 0 | 指定加速度。 单位为[指令单位/s2]。*1 |
Deceleration | 减速度 | LREAL | 正数或“0” | 0 | 指定减速度。 单位为[指令单位/s2]。*1 |
Jerk | 跃度 | LREAL | 正数或“0” | 0 | 指定跃度。 单位为[指令单位/s3]。*1 |
Direction | 方向选择 | _eMC_ DIRECTION | 0: _mcPositiveDirection 1: _mcShortestWay 2: _mcNegativeDirection 3: _mcCurrentDirection 4: _mcNoDirection | 0 *3 | 计数模式为[旋转模式]时,指定旋 转方向。 0:指定为正方向 1:指定为附近 2:指定为负方向 3:指定为当前方向 4:无方向指定 |
BufferMode | 缓存模式选择 | _eMC_ BUFFER_ MODE | 0: _mcAborting 1: _mcBuffered 2: _mcBlendingLow 3: _mcBlendingPrevious 4: _mcBlendingNext 5: _mcBlendingHigh | 0 *3 | 指定多重启动运动指令时的动作。 0:中断 1:等待 2:以低速合并 3:以前一个速度合并 4:以后一个速度合并 5:以高速合并 |
- 1.关于指令单位,请参阅“NJ/NX系列CPU单元用户手册运动控制篇(SBCE-363)”或“NY系列工业用平板电脑/工业用台式电脑用户手册运动控制篇(SBCE-379)”的“单位转换设定”。
- 2.请务必设定目标速度。不作设定就执行动作,将发生异常。
- 3.有效范围为枚举体的变量,其实际初始值不是数值,而是枚举元素。
▶输入输出变量
输出变量 | 名称 | 数据类型 | 有效范围 | 内容 |
---|---|---|---|---|
Done | 完成 | BOOL | TRUE, FALSE | 指令执行完毕时变为TRUE。 |
Busy | 执行中 | BOOL | TRUE, FALSE | 接收指令后变为TRUE。 |
Active | 控制中 | BOOL | TRUE, FALSE | 控制中变为TRUE。 |
CommandAborted | 执行中断 | BOOL | TRUE, FALSE | 指令中止时,变为TRUE。 |
Error | 错误 | BOOL | TRUE, FALSE | 发生异常时变为TRUE。 |
ErrorID | 错误代码 | WORD | *1 | 发生异常时,输出错误代码。16#0000为正常。 |
- 1.请参阅“A-1错误代码一览(P.A-2)”。
► 输出变量的反映时间
变量 | 变为TRUE的时间 | 变为FALSE的时间 |
---|---|---|
Done | 定位完成后 | • Execute为TRUE时,与Execute的FALSE同时 • Execute为FALSE时,1个周期后 |
Busy | Execute的上升沿 | • Done变为TRUE时 • Error变为TRUE时 • CommandAborted变为TRUE时 |
Active | 开始指令后 | • Done变为TRUE时 • Error变为TRUE时 • CommandAborted变为TRUE时 |
CommandAborted | • 利用其它指令多重启动运动指令(中断),中止本 指令时 • 因发生异常,中止本指令时 • 发生异常过程中,启动本指令时 • MC_Stop指令执行中,启动本指令后 | • Execute为TRUE时,与Execute的FALSE同时 • Execute为FALSE时,1个周期后 |
Error | 本指令的启动条件或输入参数中含有异常因素时 | 异常已解除时 |
▶输入输出变量
输入输出变量 | 名称 | 数据类型 | 有效范围 | 内容 |
---|---|---|---|---|
Axis | 轴 | _sAXIS_REF | - | 指定轴。 *1 |
- 1.请使用在SysmacStudio的轴基本设定画面中创建的用户定义变量的轴变量名称(默认“MC_Axis
”)或系统定义变量的轴变量名称(_MC_AX[],_MC1_AX[],_MC2_AX[])。
功能说明
- 指定绝对坐标的目标位置,进行定位。
- 在Execute(启动)的上升沿,开始绝对定位的动作。
- 即使原点未确定也可执行本指令。
- 可在输入变量中指定Velocity(目标速度)、Acceleration(加速度)、Deceleration(减速度)、Jerk(跃度)。
- 绝对定位的动作示例如下所示。
- 将加速度、或减速度指定为“0”并启动后,不作加减速而达到目标速度。
- 加速度为“0”时的动作示例如下所示。
- 需要平稳加减速时指定Jerk(跃度)。
- 指定Jerk(跃度)后的动作示例如下所示。
- 关于Jerk(跃度)的详情,请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
- 与指令当前位置相同,指定Position(目标位置)并启动后,轴不发生移动,但是Done(完成)将变为TRUE。
▶指令详情
- 下面对指令详细说明。
- 计数模式为[旋转模式]时,通过Direction(方向选择)指定开始定位的方向。
- 计数模式为[线性模式]时,忽略Direction(方向选择)。
- Direction(方向选择)为“指定为正方向”时,迎着正方向目标位置进行定位。
- 指令位置由“50”到“-20”定位时的动作示例如下所示。
- Direction(方向选择)为“指定为负方向”时,迎着负方向目标位置进行定位。
- 指令位置由“50”到“-20”定位时的动作示例如下所示。
- Direction(方向选择)为“无方向指定”时,迎着环计数器范围内的目标位置进行定位。
- 因此,移动方向取决于指令当前位置与目标位置的大小关系。
- 指令位置由“50”到“-20”定位时的动作示例如下所示。
- Direction(方向选择)为“无方向指定”时,可指定超出环计数器上下限设定值范围的Position(目标位置)。
- 指定了超过环计数器上限设定值的Position( 目标位置) 时,将超出设定值的移动量作为超过后的相对量进行定位。
- 因此,可实现环多圈定位。
- 指定了超过环计数器下限设定值的Position(目标位置)时,同样进行定位。
- 指令当前位置为“-20”、Position(目标位置)指定为“290”时的动作示例如下所示。
- Direction(方向选择)为“指定为附近”时,迎着指令当前位置和目标位置距离较短的方向进行定位。
- 指令位置由“50”到“-20”定位时的动作示例如下所示。
- 使用注意事项
- 正方向、负方向移动距离都相同时,动作与“指定为当前方向”时相同。
- 进行绝对值定位时,请在低于轴参数的[环计数器上限设定值]、及不低于[环计数器下限设定值]的范围内指定目标位置。
- 否则,将发生“超出目标位置设定范围(错误代码:5478Hex)”错误。
- 但是,Direction(方向选择)为“无方向指定”时,可指定超出环计数器上下限设定值范围的Position(目标位置)。
- Direction(方向选择)选择“3: _mcCurrentDirection(指定为当前方向)”时,沿着前一动作的指令方向进行动作。
- 因此,根据指令组合的不同,可能与前一动作的运动指令的输入发出指令的方向不一致。
- 使用“3: _mcCurrentDirection(指定为当前方向)”时,请通过轴变量的Dir.Posi(正方向指令中)、以及Dir.Nega(负方向指令中)确认当前方向。
► 到位检查
- 根据轴参数的[到位宽度]、[到位检查时间]的设定,进行本指令的到位检查。
▶时序图
- 在启动Execute(启动)的同时,Busy(执行中)变为TRUE。
- 在下一个周期Active(控制中)变为TRUE。
- 到达Position(目标位置)、定位完成时,Done(完成)变为TRUE。
- 利用其它指令中止本指令时,CommandAborted(执行中断)变为TRUE,Busy(执行中)、Active(控制中)变为FALSE。
▶重启运动指令
- 在定位动作中变更输入变量,再次将Execute(启动)设为TRUE,可变更本指令的动作。
- 重启运动指令可变更的输入变量有Position(目标位置)、Velocity(目标速度)、Acceleration(加速度)、Deceleration(减速度)。
- 重启运动指令的详情,请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
▶多重启动运动指令
- 多重启动运动指令的详情,请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
► 其它指令执行中的本指令启动
- 对当前正在执行的指令启动本指令,可切换或缓存到本指令。
- 各轴可缓存到1个。
- 多重启动时的本指令的动作由BufferMode(缓存模式选择)指定。
缓存模式选择 | 说明 | |
---|---|---|
中断 | 立即中止当前正在执行的指令,切换为本指令。 轴的动作方向因指令切换而反转时,根据轴参数中的“反转时动作”进行反转。 | |
等待 | 当前正在执行的指令正常完成后,已缓存的本指令自动启动。 | |
合并 | 以当前正在执行的指令到达目标位置时的速度(中继速度)为启动速度,连续使已缓存的本 指令动作。变更当前正在执行的指令的动作,确保以中继速度到达目标位置。中继速度的 指定方法分为如下4种。 | |
以低速合并 | 当前正在执行的目标速度与已缓存的目标速度中,以速度较低者为中继速度。 | |
以前一个速度合 并 | 以当前正在执行的目标速度为中继速度。 | |
以后一个速度合 并 | 以已缓存的本指令的目标速度为中继速度。 | |
以高速合并 | 当前正在执行的目标速度与已缓存的目标速度中,以速度较高者为中继速度。 |
- 关于BufferMode(缓存模式选择),请参阅“NJ/NX系列 CPU单元 用户手册 运动控制篇(SBCE-363)”或“NY系列 工业用平板电脑/工业用台式电脑 用户手册 运动控制篇(SBCE-379)”。
► 本指令执行中的其它指令启动
- 对本指令进行多重启动运动指令时,可选择中断、等待、合并。
▶异常
- 在执行本指令中发生异常时,Error(错误)变为TRUE,轴停止动作。
- 可查看ErrorID(错误代码)的输出值,了解发生异常的原因。
► 发生异常时的时序图
► 错误代码
- 关于指令发生的异常,请参阅“A-1 错误代码一览(P.A-2)”。
示例程序1
- 下面,对基于反复多重启动的定位方法中的示例程序进行说明。
▶参数设定
- 该示例程序中使用的最少的必要设定如下所示。
► 轴参数的设定
轴种类
轴 | 轴种类 |
---|---|
轴1 | 伺服轴 |
计数器模式
轴 | 计数器模式 |
---|---|
轴1 | 线性模式 |
坐标单位选择
轴 | 坐标单位 |
---|---|
轴1 | mm |
▶动作示例
- 利用MC_MoveAbsolute(绝对值定位)指令将BufferMode(缓存模式选择)设为[等待],在多重启动运动指令的同时,移动到最终目标位置。
- 到达最终目标位置后,请利用MC_ZeroPosition(高速原点复位)指令返回原点。
- 在之前的指令输出变量“Active(控制中)”为TRUE的状态下进行多重启动。
► 动作模式
1 动作开始开关的 “ON”
- 在原点开启动作开始开关,则轴1正方向50.00mm定位
2 其次,动作开始开关的 “ON”
- 接着,每当开启动作开始开关,轴1正方向100.00mm、200.00mm定位,返回原点并停止动作。
▶梯形图
► 主要变量
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
► 时序图
► 示例程序
▶结构文本(ST)
► 主要变量
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
Hm_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动MC_Home的实例 HM。 |
Mv_Abs1_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS1。 |
Mv_Abs2_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS2。 |
Mv_Abs3_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS3。 |
Mv_Zero_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveZeroPosition的实例MV_ZERO。 |
InitFlag | BOOL | FALSE | 表示输入参数设定完成。 FALSE时,设定输入参数。输入参数设定完成后, 变为TRUE。 |
► 时序图
► 示例程序
// 未设定输入参数时的处理
IF InitFlag = FALSE THEN
// MV_ABS1 参数
Mv_Abs1_Pos := LREAL#50.0;
Mv_Abs1_Vel := LREAL#10.0;
Mv_Abs1_Acc := LREAL#1000.0;
Mv_Abs1_Dec := LREAL#1000.0;
Mv_Abs1_Dir := _eMC_DIRECTION#_mcNoDirection;
// MV_ABS2 参数
Mv_Abs2_Pos := LREAL#100.0;
Mv_Abs2_Vel := LREAL#20.0;
Mv_Abs2_Acc := LREAL#1000.0;
Mv_Abs2_Dec := LREAL#1000.0;
Mv_Abs2_Dir := _eMC_DIRECTION#_mcNoDirection;
Mv_Abs2_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// MV_ABS3 参数
Mv_Abs3_Pos := LREAL#200.0;
Mv_Abs3_Vel := LREAL#30.0;
Mv_Abs3_Acc := LREAL#1000.0;
Mv_Abs3_Dec := LREAL#1000.0;
Mv_Abs3_Dir := _eMC_DIRECTION#_mcNoDirection;
Mv_Abs3_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// MV_ZERO 参数
Mv_Zero_Vel := LREAL#250;
Mv_Zero_Acc := LREAL#1000.0;
Mv_Zero_Dec := LREAL#1000.0;
Mv_Zero_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// 设定输入参数后,将 InitFlag 设为 TRUE
InitFlag := TRUE;
END_IF;
// 确认 StartPg 为 TRUE,且伺服驱动器处于伺服准备就绪状态,
// 则设为伺服 ON 状态。
// 如果未处于伺服准备就绪状态,则设为伺服 OFF。
IF (StartPg = TRUE) AND (MC_Axis000.DrvStatus.Ready = TRUE) THEN
Pwr_En := TRUE;
ELSE
Pwr_En := FALSE;
END_IF;
// 发生轻度故障等级异常时的处理
// 发生异常时的处理 (FaultHandler) 由客户根据装置进行编程。
IF MC_Axis000.MFaultLvl.Active = TRUE THEN
FaultHandler();
END_IF;
// 在伺服 ON 状态下,且原点未确定时,进行原点复位。
IF (Pwr_Status = TRUE) AND (MC_Axis000.Details.Homed = FALSE) THEN
Hm_Ex := TRUE;
END_IF;
// 确定原点后,执行 MV_ABS1
IF Hm_D = TRUE THEN
Mv_Abs1_Ex := TRUE;
END_IF;
// 开始 MV_ABS1 后,多重启动 MV_ABS2
IF Mv_Abs1_Act = TRUE THEN
Mv_Abs2_Ex := TRUE;
END_IF;
// 开始 MV_ABS2 后,多重启动 MV_ABS3
IF Mv_Abs2_Act = TRUE THEN
Mv_Abs3_Ex := TRUE;
END_IF;
// 开始 MV_ABS3 后,多重启动 MV_ZERO
IF Mv_Abs3_Act = TRUE THEN
Mv_Zero_Ex := TRUE;
END_IF;
// MC_Power
PWR(
Axis := MC_Axis000,
Enable := Pwr_En,
Status => Pwr_Status,
Busy => Pwr_Bsy,
Error => Pwr_Err,
ErrorID => Pwr_ErrID
);
// MC_Home
HM(
Axis := MC_Axis000,
Execute := Hm_Ex,
Done => Hm_D,
Busy => Hm_Bsy,
CommandAborted => Hm_Ca,
Error => Hm_Err,
ErrorID => Hm_ErrID
);
// MC_MoveAbsolute
MV_ABS1(
Axis := MC_Axis000,
Execute := Mv_Abs1_Ex,
Position := Mv_Abs1_Pos,
Velocity := Mv_Abs1_Vel,
Acceleration := Mv_Abs1_Acc,
Deceleration := Mv_Abs1_Dec,
Direction := Mv_Abs1_Dir,
Done => Mv_Abs1_D,
Busy => Mv_Abs1_Bsy,
Active => Mv_Abs1_Act,
CommandAborted => Mv_Abs1_Ca,
Error => Mv_Abs1_Err,
ErrorID => Mv_Abs1_ErrID
);
MV_ABS2(
Axis := MC_Axis000,
Execute := Mv_Abs2_Ex,
Position := Mv_Abs2_Pos,
Velocity := Mv_Abs2_Vel,
Acceleration := Mv_Abs2_Acc,
Deceleration := Mv_Abs2_Dec,
Direction := Mv_Abs2_Dir,
BufferMode := Mv_Abs2_Bm,
Done => Mv_Abs2_D,
Busy => Mv_Abs2_Bsy,
Active => Mv_Abs2_Act,
CommandAborted => Mv_Abs2_Ca,
Error => Mv_Abs2_Err,
ErrorID => Mv_Abs2_ErrID
);
MV_ABS3(
Axis := MC_Axis000,
Execute := Mv_Abs3_Ex,
Position := Mv_Abs3_Pos,
Velocity := Mv_Abs3_Vel,
Acceleration := Mv_Abs3_Acc,
Deceleration := Mv_Abs3_Dec,
Direction := Mv_Abs3_Dir,
BufferMode := Mv_Abs3_Bm,
Done => Mv_Abs3_D,
Busy => Mv_Abs3_Bsy,
Active => Mv_Abs3_Act,
CommandAborted => Mv_Abs3_Ca,
Error => Mv_Abs3_Err,
ErrorID => Mv_Abs3_ErrID
);
// MC_MoveZeroPosition
MV_ZERO(
Axis := MC_Axis000,
Execute := Mv_Zero_Ex,
Velocity := Mv_Zero_Vel,
Acceleration := Mv_Zero_Acc,
Deceleration := Mv_Zero_Dec,
BufferMode := Mv_Zero_Bm,
Done => Mv_Zero_D,
Busy => Mv_Zero_Bsy,
Active => Mv_Zero_Act,
CommandAborted => Mv_Zero_Ca,
Error => Mv_Zero_Err,
ErrorID => Mv_Zero_ErrID
);
示例程序2
- 计数模式为旋转模式时,为了向目标位置定位,自动识别左右哪边较近进行定位。
- 下面,对工具更换的附近控制中的示例程序进行说明。
▶参数设定
-
- 该示例程序中使用的最少的必要设定如下所示。
► 轴参数的设定
轴种类
轴 | 轴种类 |
---|---|
轴1 | 伺服轴 |
计数器模式
轴 | 计数器模式 |
---|---|
轴1 | 旋转模式 |
环计数器
轴 | 上限值 | 下限值 |
---|---|---|
轴1 | 360 | 0 |
坐标单位选择
轴 | 坐标单位 |
---|---|
轴1 | degree |
▶动作示例
- 利用绝对值定位指令的多重启动,在0~360的范围内动作的示例如下所示。
- 此外,如果当前位置超出0 ~ 360的范围,则返回0。
- 在之前的指令输出变量“Active(控制中)”为TRUE的状态下进行多重启动。
- 只有1个指令可执行单轴动作的指令多重启动。
- 本例中,将BufferMode(缓存模式选择)设为等待,使之多重启动
- 如果指定原点(0)、90、120、290等4个任意位置,则移动到该位置。
- 此时的旋转方向表现为较近方向。
- 并且,移动速度为250/s。
- 在示例程序中,按照指定为附近定位为290→90→120→原点(0)。
▶梯形图
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
► 主要变量
► 示例程序
▶结构文本(ST)
► 主要变量
名称 | 数据类型 | 初始值 | 注释 |
---|---|---|---|
MC_Axis000 | _sAXIS_REF | - | 轴1的轴变量。 |
MC_Axis000.MFaultLvl.Active | BOOL | FALSE | 轴1发生轻度故障等级的异常时变为TRUE。 |
MC_Axis000.Details.Homed | BOOL | FALSE | 轴1为原点确定状态时变为TRUE。 |
Pwr_Status | BOOL | FALSE | 分配给MC_Power的实例PWR的输出变量Status的变 量。进入伺服ON状态时,该变量变为TRUE。 |
StartPg | BOOL | FALSE | 如果该变量为TRUE,EtherCAT的过程数据通信已 建立,则进入伺服ON状态。 |
Hm_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动MC_Home的实例 HM。 |
Mv_Abs1_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS1。 |
Mv_Abs2_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS2。 |
Mv_Abs3_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS3。 |
Mv_Abs4_Ex | BOOL | FALSE | 该变量由FALSE→TRUE时,启动 MC_MoveAbsolute的实例MV_ABS4。 |
InitFlag | BOOL | FALSE | 表示输入参数设定完成。 FALSE时,设定输入参数。输入参数设定完成后, 变为TRUE。 |
► 时序图
► 示例程序
// 未设定输入参数时的处理
IF InitFlag = FALSE THEN
// MV_ABS1 参数
Mv_Abs1_Pos := LREAL#290.0;
Mv_Abs1_Vel := LREAL#250.0;
Mv_Abs1_Acc := LREAL#1000.0;
Mv_Abs1_Dec := LREAL#1000.0;
Mv_Abs1_Dir := _eMC_DIRECTION#_mcShortestWay;
// MV_ABS2 参数
Mv_Abs2_Pos := LREAL#90.0;
Mv_Abs2_Vel := LREAL#250.0;
Mv_Abs2_Acc := LREAL#1000.0;
Mv_Abs2_Dec := LREAL#1000.0;
Mv_Abs2_Dir := _eMC_DIRECTION#_mcShortestWay;
Mv_Abs2_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// MV_ABS3 参数
Mv_Abs3_Pos := LREAL#120.0;
Mv_Abs3_Vel := LREAL#250.0;
Mv_Abs3_Acc := LREAL#1000.0;
Mv_Abs3_Dec := LREAL#1000.0;
Mv_Abs3_Dir := _eMC_DIRECTION#_mcShortestWay;
Mv_Abs3_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// MV_ABS4 参数
Mv_Abs4_Pos := LREAL#0.0;
Mv_Abs4_Vel := LREAL#250.0;
Mv_Abs4_Acc := LREAL#1000.0;
Mv_Abs4_Dec := LREAL#1000.0;
Mv_Abs4_Dir := _eMC_DIRECTION#_mcShortestWay;
Mv_Abs4_Bm := _eMC_BUFFER_MODE#_mcBuffered;
// 设定输入参数后,将 InitFlag 设为 TRUE
InitFlag := TRUE;
END_IF;
// 确认 StartPg 为 TRUE,且伺服驱动器处于伺服准备就绪状态,
// 则设为伺服 ON 状态。
// 如果未处于伺服准备就绪状态,则设为伺服 OFF。
IF (StartPg = TRUE) AND (MC_Axis000.DrvStatus.Ready = TRUE) THEN
Pwr_En := TRUE;
ELSE
Pwr_En := FALSE;
END_IF;
// 发生轻度故障等级异常时的处理
// 发生异常时的处理 (FaultHandler) 由客户根据装置进行编程。
IF MC_Axis000.MFaultLvl.Active = TRUE THEN
FaultHandler();
END_IF;
// 在伺服 ON 状态下,且原点未确定时,进行原点复位。
IF (Pwr_Status = TRUE) AND (MC_Axis000.Details.Homed = FALSE) THEN
Hm_Ex := TRUE;
END_IF;
// 确定原点后,执行 MV_ABS1
IF Hm_D = TRUE THEN
Mv_Abs1_Ex := TRUE;
END_IF;
// 开始 MV_ABS1 后,多重启动 MV_ABS2
IF Mv_Abs1_Act = TRUE THEN
Mv_Abs2_Ex := TRUE;
END_IF;
// 开始 MV_ABS2 后,多重启动 MV_ABS3
IF Mv_Abs2_Act = TRUE THEN
Mv_Abs3_Ex := TRUE;
END_IF;
// 开始 MV_ABS3 后,多重启动 MV_ABS4
IF Mv_Abs3_Act = TRUE THEN
Mv_Abs4_Ex := TRUE;
END_IF;
// MC_Power
PWR(
Axis := MC_Axis000,
Enable := Pwr_En,
Status => Pwr_Status,
Busy => Pwr_Bsy,
Error => Pwr_Err,
ErrorID => Pwr_ErrID
);
// MC_Home
HM(
Axis := MC_Axis000,
Execute := Hm_Ex,
Done => Hm_D,
Busy => Hm_Bsy,
CommandAborted => Hm_Ca,
Error => Hm_Err,
ErrorID => Hm_ErrID
);
// 绝对值定位(1)
MV_ABS1(
Axis := MC_Axis000,
Execute := Mv_Abs1_Ex,
Position := Mv_Abs1_Pos,
Velocity := Mv_Abs1_Vel,
Acceleration := Mv_Abs1_Acc,
Deceleration := Mv_Abs1_Dec,
Direction := Mv_Abs1_Dir,
Done => Mv_Abs1_D,
Busy => Mv_Abs1_Bsy,
Active => Mv_Abs1_Act,
CommandAborted => Mv_Abs1_Ca,
Error => Mv_Abs1_Err,
ErrorID => Mv_Abs1_ErrID
);
// 绝对值定位(2)
MV_ABS2(
Axis := MC_Axis000,
Execute := Mv_Abs2_Ex,
Position := Mv_Abs2_Pos,
Velocity := Mv_Abs2_Vel,
Acceleration := Mv_Abs2_Acc,
Deceleration := Mv_Abs2_Dec,
Direction := Mv_Abs2_Dir,
BufferMode := Mv_Abs2_Bm,
Done => Mv_Abs2_D,
Busy => Mv_Abs2_Bsy,
Active => Mv_Abs2_Act,
CommandAborted => Mv_Abs2_Ca,
Error => Mv_Abs2_Err,
ErrorID => Mv_Abs2_ErrID
);
// 绝对值定位(3)
MV_ABS3(
Axis := MC_Axis000,
Execute := Mv_Abs3_Ex,
Position := Mv_Abs3_Pos,
Velocity := Mv_Abs3_Vel,
Acceleration := Mv_Abs3_Acc,
Deceleration := Mv_Abs3_Dec,
Direction := Mv_Abs3_Dir,
BufferMode := Mv_Abs3_Bm,
Done => Mv_Abs3_D,
Busy => Mv_Abs3_Bsy,
Active => Mv_Abs3_Act,
CommandAborted => Mv_Abs3_Ca,
Error => Mv_Abs3_Err,
ErrorID => Mv_Abs3_ErrID
);
// 绝对值定位(4)
MV_ABS4(
Axis := MC_Axis000,
Execute := Mv_Abs4_Ex,
Position := Mv_Abs4_Pos,
Velocity := Mv_Abs4_Vel,
Acceleration := Mv_Abs4_Acc,
Deceleration := Mv_Abs4_Dec,
Direction := Mv_Abs4_Dir,
BufferMode := Mv_Abs4_Bm,
Done => Mv_Abs4_D,
Busy => Mv_Abs4_Bsy,
Active => Mv_Abs4_Act,
CommandAborted => Mv_Abs4_Ca,
Error => Mv_Abs4_Err,
ErrorID => Mv_Abs4_ErrID
);