返回主站|会员中心|保存桌面

欧姆龙服务商    

欧姆龙PLC

新闻分类
  • 暂无分类
站内搜索
 
友情链接
  • 暂无链接
首页 > 新闻中心 > FX5U PLC正负位置定位控制程序!
新闻中心
FX5U PLC正负位置定位控制程序!
发布时间:2025-09-21        浏览次数:3        返回列表

// FX5U PLC 正负位置定位控制程序

// 功能:支持绝对位置(正负坐标)和相对位置(正负偏移)控制


PROGRAM Main

VAR

    // 初始化相关变量

    Error_Init: INT;           // 初始化错误代码

    Done_Init: BOOL;           // 初始化完成标志

    

    // 绝对位置运动变量

    正向按钮信号: BOOL;       // 触发正向绝对位置(如X0)

    负向按钮信号: BOOL;       // 触发负向绝对位置(如X1)

    Done_Abs1: BOOL;           // 正向绝对运动完成

    Busy_Abs1: BOOL;           // 正向绝对运动中

    Error_Abs1: INT;           // 正向绝对运动错误

    Done_Abs2: BOOL;           // 负向绝对运动完成

    Busy_Abs2: BOOL;           // 负向绝对运动中

    Error_Abs2: INT;           // 负向绝对运动错误

    

    // 相对位置运动变量

    相对正向按钮: BOOL;       // 触发正向相对运动(如X2)

    相对负向按钮: BOOL;       // 触发负向相对运动(如X3)

    Done_Rel1: BOOL;           // 正向相对运动完成

    Busy_Rel1: BOOL;           // 正向相对运动中

    Error_Rel1: INT;           // 正向相对运动错误

    Done_Rel2: BOOL;           // 负向相对运动完成

    Busy_Rel2: BOOL;           // 负向相对运动中

    Error_Rel2: INT;           // 负向相对运动错误

    

    // 原点回归变量

    回原点按钮: BOOL;         // 触发原点回归(如X4)

    Done_Home: BOOL;           // 原点回归完成

    Busy_Home: BOOL;           // 原点回归中

    Error_Home: INT;           // 原点回归错误

END_VAR


// 1. 轴初始化(程序启动时执行一次)

IF NOT Done_Init THEN

    MC_Init(

        Axis        := 1,              // 轴编号1

        Enable      := TRUE,           // 允许轴运动

        PositiveLimit := FALSE,        // 不使用正向硬限位

        NegativeLimit := FALSE,        // 不使用负向硬限位

        ErrorId     => Error_Init,     // 错误代码输出

        Done        => Done_Init       // 初始化完成标志

    );

END_IF;


// 2. 原点回归(需先执行,建立位置基准)

IF 回原点按钮 AND Done_Init AND NOT Busy_Home THEN

    MC_Home(

        Axis        := 1,

        Mode        := 1,              // 模式1:接近开关+Z相脉冲

        Velocity    := 50.0,           // 回归速度50mm/s

        Offset      := 0.0,            // 原点偏移量0

        Done        => Done_Home,

        Busy        => Busy_Home,

        ErrorId     => Error_Home

    );

END_IF;


// 3. 绝对位置控制(以原点为基准)

// 3.1 移动到+500位置(正向)

IF 正向按钮信号 AND Done_Init AND Done_Home AND NOT Busy_Abs1 AND NOT Busy_Abs2 AND NOT Busy_Rel1 AND NOT Busy_Rel2 THEN

    MC_MoveAbsolute(

        Axis        := 1,

        Position    := 500.0,          // 正向500mm

        Velocity    := 100.0,          // 速度100mm/s

        Acceleration:= 500.0,          // 加速度500mm/s²

        Deceleration:= 500.0,          // 减速度500mm/s²

        Jerk        := 0,              // 不加加速度

        Done        => Done_Abs1,

        Busy        => Busy_Abs1,

        ErrorId     => Error_Abs1

    );

END_IF;


// 3.2 移动到-300位置(负向)

IF 负向按钮信号 AND Done_Init AND Done_Home AND NOT Busy_Abs1 AND NOT Busy_Abs2 AND NOT Busy_Rel1 AND NOT Busy_Rel2 THEN

    MC_MoveAbsolute(

        Axis        := 1,

        Position    := -300.0,         // 负向300mm

        Velocity    := 100.0,

        Acceleration:= 500.0,

        Deceleration:= 500.0,

        Jerk        := 0,

        Done        => Done_Abs2,

        Busy        => Busy_Abs2,

        ErrorId     => Error_Abs2

    );

END_IF;


// 4. 相对位置控制(以当前位置为基准)

// 4.1 正向移动200mm

IF 相对正向按钮 AND Done_Init AND Done_Home AND NOT Busy_Abs1 AND NOT Busy_Abs2 AND NOT Busy_Rel1 AND NOT Busy_Rel2 THEN

    MC_MoveRelative(

        Axis        := 1,

        Distance    := 200.0,          // 正向移动200mm

        Velocity    := 100.0,

        Acceleration:= 500.0,

        Deceleration:= 500.0,

        Jerk        := 0,

        Done        => Done_Rel1,

        Busy        => Busy_Rel1,

        ErrorId     => Error_Rel1

    );

END_IF;


// 4.2 负向移动150mm

IF 相对负向按钮 AND Done_Init AND Done_Home AND NOT Busy_Abs1 AND NOT Busy_Abs2 AND NOT Busy_Rel1 AND NOT Busy_Rel2 THEN

    MC_MoveRelative(

        Axis        := 1,

        Distance    := -150.0,         // 负向移动150mm

        Velocity    := 100.0,

        Acceleration:= 500.0,

        Deceleration:= 500.0,

        Jerk        := 0,

        Done        => Done_Rel2,

        Busy        => Busy_Rel2,

        ErrorId     => Error_Rel2

    );

END_IF;


// 5. 清除完成标志(可选,根据需要)

IF Done_Abs1 THEN Done_Abs1 := FALSE; END_IF;

IF Done_Abs2 THEN Done_Abs2 := FALSE; END_IF;

IF Done_Rel1 THEN Done_Rel1 := FALSE; END_IF;

IF Done_Rel2 THEN Done_Rel2 := FALSE; END_IF;

IF Done_Home THEN Done_Home := FALSE; END_IF;

END_PROGRAM。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服