在运动控制中,“不用置位(SET)” 的搜索原点方案通常指不依赖置位指令(如强制输出信号触发原点),而是通过传感器信号边沿检测、编码器零位脉冲或位置比较等方式,自动识别原点并完成定位。这种方案更依赖硬件信号的自然触发和软件逻辑的实时判断,适用于西门子 S7-1200/1500、三菱 FX5、施耐德 M258 等主流 PLC,以下是具体实现思路和案例:
核心原理
不使用置位指令的关键是:通过原点传感器(如接近开关、光电开关)的上升沿 / 下降沿,或编码器的零位脉冲(Z 相),作为原点触发信号,结合运动控制指令的状态反馈,自动记录原点位置并停止运动。核心逻辑:启动回零运动→实时监测原点信号→检测到信号边沿时→立即停止运动→将当前位置设为原点(0 位)。
典型方案与实现步骤
方案 1:基于原点传感器边沿检测(最常用)
适用于带原点传感器(如 NPN 接近开关)的场景,通过传感器信号的 “从 OFF 到 ON” 或 “从 ON 到 OFF” 边沿触发原点定位。
硬件配置
软件逻辑(以西门子 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;
关键点
方案 2:基于编码器零位脉冲(无传感器场景)
若没有原点传感器,可利用电机编码器的 Z 相脉冲(每转 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;
关键点
方案 3:基于机械硬限位与位置比较(极限原点)
在无原点传感器但有硬限位(如行程开关)的场景,可将硬限位位置作为原点(如轴碰到限位后反向微动至安全位置作为原点)。
逻辑步骤
优势
方案优势与注意事项
优势
注意事项
总结
不使用置位的搜索原点方案,核心是通过信号边沿检测 + 实时运动控制,利用传感器、编码器或硬限位的自然信号触发原点定位。相比置位方案,它更依赖硬件信号的稳定性和软件的边沿检测逻辑,适合对可靠性要求较高的中小型设备(如贴标机、小型装配线)。实际应用中,优先选择方案 1(原点传感器边沿检测),兼顾精度和稳定性。
 

