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

新松机器人综合服务商    

新松工业机器人,新松协作机器人

新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 不用置位的搜索原点方案!
新闻中心
不用置位的搜索原点方案!
发布时间:2025-10-17        浏览次数:5        返回列表

在运动控制中,“不用置位(SET)” 的搜索原点方案通常指不依赖置位指令(如强制输出信号触发原点),而是通过传感器信号边沿检测、编码器零位脉冲或位置比较等方式,自动识别原点并完成定位。这种方案更依赖硬件信号的自然触发和软件逻辑的实时判断,适用于西门子 S7-1200/1500、三菱 FX5、施耐德 M258 等主流 PLC,以下是具体实现思路和案例:

核心原理

不使用置位指令的关键是:通过原点传感器(如接近开关、光电开关)的上升沿 / 下降沿,或编码器的零位脉冲(Z 相),作为原点触发信号,结合运动控制指令的状态反馈,自动记录原点位置并停止运动。核心逻辑:启动回零运动→实时监测原点信号→检测到信号边沿时→立即停止运动→将当前位置设为原点(0 位)。

典型方案与实现步骤

方案 1:基于原点传感器边沿检测(最常用)

适用于带原点传感器(如 NPN 接近开关)的场景,通过传感器信号的 “从 OFF 到 ON” 或 “从 ON 到 OFF” 边沿触发原点定位。

硬件配置
  • 原点传感器(如接近开关)接入 PLC 输入点(如 I0.0),检测到原点标志时输出高电平(1);

  • 电机轴连接机械结构,运动时会经过原点传感器的检测区域。

软件逻辑(以西门子 S7-1200 为例,SCL 语言)

scl

// 回零控制逻辑:不使用置位指令,通过传感器边沿触发
VAR
    Home_Sensor : BOOL;         // 原点传感器信号(I0.0)
    Home_Start : BOOL;          // 回零启动信号(手动触发)
    Home_Done : BOOL;           // 回零完成标志
    Axis_Running : BOOL;        // 轴运动中标志
    Sensor_Edge : BOOL;         // 传感器边沿检测标志
    Last_Sensor_State : BOOL;   // 传感器上一周期状态(用于边沿检测)
END_VAR

// 1. 边沿检测:检测传感器从0→1的上升沿
Last_Sensor_State := Home_Sensor;  // 保存上一周期状态
IF Home_Sensor AND NOT Last_Sensor_State THEN
    Sensor_Edge := TRUE;  // 检测到上升沿
ELSE
    Sensor_Edge := FALSE;
END_IF;

// 2. 启动回零运动(轴以低速向原点方向移动)
IF Home_Start AND NOT Home_Done THEN
    "MC_MoveJog".Axis := "Axis1";       // 关联轴对象
    "MC_MoveJog".JogForward := TRUE;    // 正向点动(假设原点在正向)
    "MC_MoveJog".Execute := TRUE;
    Axis_Running := TRUE;
END_IF;

// 3. 检测到原点信号边沿时,停止运动并设为原点
IF Axis_Running AND Sensor_Edge THEN
    "MC_Stop".Axis := "Axis1";          // 停止轴运动
    "MC_Stop".Execute := TRUE;
    IF "MC_Stop".Done THEN
        "MC_SetPosition".Axis := "Axis1";  // 将当前位置设为原点(0)
        "MC_SetPosition".Position := 0.0;
        "MC_SetPosition".Execute := TRUE;
        Home_Done := TRUE;                // 回零完成
        Axis_Running := FALSE;
        "MC_MoveJog".Execute := FALSE;    // 停止点动
        "MC_Stop".Execute := FALSE;
    END_IF;
END_IF;
关键点
  • 无需置位指令(SET),通过MC_MoveJog启动低速运动,传感器边沿触发后用MC_Stop停止,MC_SetPosition将当前位置设为原点;

  • 低速运动可避免过冲(如 5mm/s),确保定位精度。

方案 2:基于编码器零位脉冲(无传感器场景)

若没有原点传感器,可利用电机编码器的 Z 相脉冲(每转 1 个脉冲)作为原点信号,适用于对原点精度要求不高的场景(如水平轴)。

硬件配置
  • 编码器 Z 相脉冲接入 PLC 高速计数输入(如 I0.1),每转一圈触发一次脉冲。

软件逻辑

scl

// 利用编码器Z相脉冲作为原点
VAR
    Z_Pulse : BOOL;            // 编码器Z相脉冲(I0.1)
    Home_Start : BOOL;         // 回零启动
    Home_Done : BOOL;          // 回零完成
    Z_Edge : BOOL;             // Z相脉冲边沿
    Last_Z_State : BOOL;       // Z相上一状态
END_VAR

// Z相脉冲上升沿检测
Last_Z_State := Z_Pulse;
IF Z_Pulse AND NOT Last_Z_State THEN
    Z_Edge := TRUE;
ELSE
    Z_Edge := FALSE;
END_IF;

// 启动回零(轴匀速转动)
IF Home_Start AND NOT Home_Done THEN
    "MC_MoveVelocity".Axis := "Axis1";  // 速度模式运动
    "MC_MoveVelocity".Velocity := 100;  // 速度100rpm
    "MC_MoveVelocity".Execute := TRUE;
END_IF;

// 检测到Z相脉冲时,停止并设为原点
IF Z_Edge AND NOT Home_Done THEN
    "MC_Stop".Execute := TRUE;
    IF "MC_Stop".Done THEN
        "MC_SetPosition".Position := 0.0;  // 设为原点
        "MC_SetPosition".Execute := TRUE;
        Home_Done := TRUE;
        "MC_MoveVelocity".Execute := FALSE;
    END_IF;
END_IF;
关键点
  • 依赖编码器 Z 相脉冲,原点位置为脉冲触发时的机械位置,适合无传感器的简易设备;

  • 需确保轴转动时能触发 Z 相脉冲(至少转动一圈)。

方案 3:基于机械硬限位与位置比较(极限原点)

在无原点传感器但有硬限位(如行程开关)的场景,可将硬限位位置作为原点(如轴碰到限位后反向微动至安全位置作为原点)。

逻辑步骤
  1. 启动回零:轴以低速向硬限位方向运动(如正向);

  2. 触发硬限位(如 I0.2=1)时,立即停止并反向低速运动;

  3. 离开硬限位(I0.2=0)时,记录当前位置并设为原点(0 位)。

优势
  • 无需额外原点传感器,利用现有硬限位,成本低;

  • 适合空间受限的设备(如小型滑台)。

方案优势与注意事项

优势

  1. 减少硬件依赖:无需置位指令对应的输出点,简化接线;

  2. 逻辑更可靠:依赖传感器 / 编码器的自然信号,避免误触发(如置位信号粘连导致的原点偏移);

  3. 兼容性强:适用于所有支持运动控制指令的 PLC,无需特殊功能块。

注意事项

  1. 信号滤波:传感器或编码器信号需加滤波(如 PLC 输入滤波参数设为 5~10ms),避免干扰导致误判;

  2. 运动方向:回零前需明确原点在轴的正向还是反向,确保运动方向正确;

  3. 低速优先:回零时速度需足够低(如≤10mm/s),防止过冲导致原点偏差;

  4. 故障处理:需添加超时判断(如 30 秒未检测到原点信号则报警),避免轴无限运动。

总结

不使用置位的搜索原点方案,核心是通过信号边沿检测 + 实时运动控制,利用传感器、编码器或硬限位的自然信号触发原点定位。相比置位方案,它更依赖硬件信号的稳定性和软件的边沿检测逻辑,适合对可靠性要求较高的中小型设备(如贴标机、小型装配线)。实际应用中,优先选择方案 1(原点传感器边沿检测),兼顾精度和稳定性。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服