3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute

news2024/11/13 7:52:52

机器自动化控制器——第三章 轴指令 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启动BOOLTRUE, FALSEFALSE在上升沿开始指令。
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完成BOOLTRUE,
FALSE
指令执行完毕时变为TRUE。
Busy执行中BOOLTRUE,
FALSE
接收指令后变为TRUE。
Active控制中BOOLTRUE,
FALSE
控制中变为TRUE。
CommandAborted执行中断BOOLTRUE,
FALSE
指令中止时,变为TRUE。
Error错误BOOLTRUE,
FALSE
发生异常时变为TRUE。
ErrorID错误代码WORD*1发生异常时,输出错误代码。16#0000为正常。
  • 1.请参阅“A-1错误代码一览(P.A-2)”。

    ► 输出变量的反映时间

变量变为TRUE的时间变为FALSE的时间
Done定位完成后• Execute为TRUE时,与Execute的FALSE同时
• Execute为FALSE时,1个周期后
BusyExecute的上升沿• 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线性模式

    坐标单位选择

坐标单位
轴1mm
▶动作示例
  • 利用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.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
Pwr_StatusBOOLFALSE分配给MC_Power的实例PWR的输出变量Status的变
量。进入伺服ON状态时,该变量变为TRUE。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。

    ► 时序图
在这里插入图片描述

    ► 示例程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

▶结构文本(ST)

    ► 主要变量

名称数据类型初始值注释
MC_Axis000_sAXIS_REF轴1的轴变量。
MC_Axis000.MFaultLvl.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
Pwr_StatusBOOLFALSE分配给MC_Power的实例PWR的输出变量Status的变
量。进入伺服ON状态时,该变量变为TRUE。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
Hm_ExBOOLFALSE该变量由FALSE→TRUE时,启动MC_Home的实例
HM。
Mv_Abs1_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS1。
Mv_Abs2_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS2。
Mv_Abs3_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS3。
Mv_Zero_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveZeroPosition的实例MV_ZERO。
InitFlagBOOLFALSE表示输入参数设定完成。
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旋转模式

    环计数器

上限值下限值
轴13600

    坐标单位选择

坐标单位
轴1degree
▶动作示例
  • 利用绝对值定位指令的多重启动,在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.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
Pwr_StatusBOOLFALSE分配给MC_Power的实例PWR的输出变量Status的变
量。进入伺服ON状态时,该变量变为TRUE。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。

    ► 主要变量
在这里插入图片描述

    ► 示例程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

▶结构文本(ST)

    ► 主要变量

名称数据类型初始值注释
MC_Axis000_sAXIS_REF轴1的轴变量。
MC_Axis000.MFaultLvl.ActiveBOOLFALSE轴1发生轻度故障等级的异常时变为TRUE。
MC_Axis000.Details.HomedBOOLFALSE轴1为原点确定状态时变为TRUE。
Pwr_StatusBOOLFALSE分配给MC_Power的实例PWR的输出变量Status的变
量。进入伺服ON状态时,该变量变为TRUE。
StartPgBOOLFALSE如果该变量为TRUE,EtherCAT的过程数据通信已
建立,则进入伺服ON状态。
Hm_ExBOOLFALSE该变量由FALSE→TRUE时,启动MC_Home的实例
HM。
Mv_Abs1_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS1。
Mv_Abs2_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS2。
Mv_Abs3_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS3。
Mv_Abs4_ExBOOLFALSE该变量由FALSE→TRUE时,启动
MC_MoveAbsolute的实例MV_ABS4。
InitFlagBOOLFALSE表示输入参数设定完成。
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
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【智路】智路OS 应用开发

1 总览 1.1 功能 智路OS的应用基于框架提供的服务数据,实现场景理解、指标计算、V2X核心功能实现,应用包括但不限于: V2X应用场景实现交通事件检测交通流指标计算系统监控路径规划控制 开发者可以基于智路OS框架和数据,实现自…

【CSS in Depth 2 精译_030】5.2 Grid 网格布局中的网格结构剖析(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

Python编程 - 线程

目录 前言 一、线程的使用 (一)基础使用 (二)等待线程完成 (三)多个线程 (四)守护线程 (五)线程同步 (六)总结 二、队列对象 …

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动

找了很多编译博文,都错误。最后找到了正确编译办法: https://zhuanlan.zhihu.com/p/567883165 直接下载编译好的源码及dll文件 https://download.csdn.net/download/quantum7/89760587 安装VS Virsual Studio 2022 Community D:\Program Files\Micr…

Double Write

优质博文:IT-BLOG-CN 一、存在的问题 为什么需要Double Write: InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基…

Spark Streaming基础概论

1. 简介 1.1 什么是 Spark Streaming? Spark Streaming 是 Apache Spark 的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的 API 来处理…

免费还超快,我用 Cursor 做的“汉语新解”插件开源了

前两天,你是否也被 汉语新解 卡片刷屏,却苦恼于无法快速生成? 记得当时,微信群里、朋友圈里、某书上以及公众号里,到处都在谈论这些生动有趣的“汉语新解”卡片。 这是由提示词大神 @李继刚老师 在 Claude 3.5 上开发的提示词。其辛辣的风格和全新的视角,令人耳目一新。…

SpringBoot+vue集成sm国密加密解密

文章目录 前言认识SM2后端工具类实现引入依赖代码实现工具类:SM2Util 单元测试案例1:生成服务端公钥、私钥,前端js公钥、私钥案例2:客户端加密,服务端完成解密案例3:服务端进行加密(可用于后面前…

Linux下root用户共享conda环境给其他用户

首先可以先用命令查看环境存储位置 conda env list 比如我的root用户的base环境 # conda environments: # base * /usr/local/miniconda3 在root下先给环境添文件夹加普通用户的权限 chmod -R 755 /usr/local/miniconda3 接下来新建一个用户&#xff0…

基于springboot酒店管理系统

酒店管理系统 552酒店管理系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

记录一题---位示图

注意题目条件:盘块号、字号、位号到底是从0开始还是从1开始 盘块号、字号、位号从0开始,若n表示字长,则: (字号,位号)(i,j)的二进制位对应的盘块号bnij b号盘块对应的字号ib/n,位号jb%n 若字号、位号从1开始,n表示字长…

纯小白安装pytorch(快速上手)

1.首先进入你的虚拟环境(不进入也没关系) 在anaconda prompt中打开,输入activate 虚拟环境2.查看自己的conda源 conda config --show channels3.清空自己的conda源 conda config --remove-key channels4.添加源 conda config --add channels https://mirrors.tu…

Matlab simulink建模与仿真 第十六章(用户定义函数库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…

JavaScript 事件处理

一、简介 ​ 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源:事件触发的源头&#xf…

【课程系列12】某客时间AI大模型微调训练营

某客时间AI大模型微调训练营 链接 百度网盘地址:https://pan.baidu.com/s/1ZC-fOC_QQjNM6wyVjQcYOg 课程内容 https://u.geekbang.org/subject/finetuning?utm_sourceu_nav_web&utm_mediumu_nav_web&utm_termu_nav_web 深度解读 AI 发展四轮浪潮 技术浪…

PMP--一模--解题--111-120

文章目录 10.沟通管理111、 [单选] 干系人感觉他们收到的信息十分复杂,难以理解,因此,不能正确做出决定。若要解决这个问题,应该怎么做? 14.敏捷--角色--产品负责人PO–职责–1.创建待办列表并排序;2.确认工作优先顺序…

【网络】TCP/IP 五层网络模型:数据链路层

文章目录 认识以太网mac 地址mac 地址和 IP 地址的区别 类型ARP 协议 MTU 日常开发主要是应用层,传输层和应用层密切交互,传输层用到的也不少。网络层以及再往下,日常开发就涉及到的非常少了 认识以太网 插网线的上网方式 80211 是无线 WiF…

Encountered error while trying to install package.> lxml

Encountered error while trying to install package.> lxml 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城…

代码管理系统简介与部署(Introduction and Deployment of Code Management System)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…