ACS X轴回零程序 项目实战版

代码

复制代码
INT iAxis
REAL HomeVel
REAL SearchLimitVel
REAL HomeOffset
REAL timeout

iAxis = 0
HomeVel = 5
SearchLimitVel = 10
HomeOffset = 157
timeout = 50000

VEL(iAxis) = SearchLimitVel
ACC(iAxis) = VEL(iAxis) * 10
DEC(iAxis) = VEL(iAxis) * 10
JERK(iAxis) = VEL(iAxis) * 100
KDEC(iAxis) = VEL(iAxis) * 100

MFLAGS(iAxis).#HOME = 0
FDEF(iAxis).#LL = 0
FDEF(iAxis).#RL = 0

ENABLE (iAxis)
TILL MST(iAxis).#ENABLED,timeout

IF ^ MST(iAxis).#ENABLED
   GOTO FAULT_PROCESS
END

!IF ^MFLAGS(iAxis).#BRUSHOK
!   COMMUT(iAxis)
!   TILL MFLAGS(iAxis).#BRUSHOK
!END

JOG/v (iAxis),1*SearchLimitVel
TILL FAULT(iAxis).#RL,timeout 

IF ^FAULT(iAxis).#RL
       GOTO FAULT_PROCESS
END

JOG/v (iAxis),-1*SearchLimitVel
TILL ^FAULT(iAxis).#RL
IST(iAxis).#IND=0
TILL IST(iAxis).#IND,timeout
   IF ^IST(iAxis).#IND
       GOTO FAULT_PROCESS
   END
SET FPOS(iAxis)=FPOS(iAxis)-IND(iAxis)+HomeOffset
PTP/e (iAxis),0
FDEF(iAxis).#LL = 1
FDEF(iAxis).#RL = 1
MFLAGS(iAxis).#HOME = 1
!!!!!!!!!!!!!!!!!!!!!!!!
local int zone_x
local real base_x
local real step_x

zone_x = 0!!56.9216
base_x = -119.16021
step_x = 9.2736



CORRECTON_X(0)  = 0.00069 * 0
CORRECTON_X(1)  = 0.00069 * 5
CORRECTON_X(2)  = -0.00069 * 4
CORRECTON_X(3)  = -0.00069 * 7
CORRECTON_X(4)  = -0.00069 * 3
CORRECTON_X(5)  = -0.00069 * 8
CORRECTON_X(6)  = -0.00069 * 6
CORRECTON_X(7)  = -0.00069 * 2
CORRECTON_X(8)  = -0.00069 * 7
CORRECTON_X(9)  = 0.00069 * 1
CORRECTON_X(10) = -0.00069 * 0
CORRECTON_X(11) = -0.00069 * 6
CORRECTON_X(12) = 0.00069 * 2
CORRECTON_X(13) = -0.00069 * 1
CORRECTON_X(14) = -0.00069 * 3
CORRECTON_X(15) = 0.00069 * 5
CORRECTON_X(16) = 0.00069 * 0
CORRECTON_X(17) = 0.00069 * 6
CORRECTON_X(18) = 0.00069 * 6

CORRECTON_X(19) = -0.00069 * 2
CORRECTON_X(20) = 0.00069 * 3
CORRECTON_X(21) = 0.00069 * 0
CORRECTON_X(22) = -0.00069 * 7
CORRECTON_X(23) = 0.00069 * 0
CORRECTON_X(24) = 0.00069 * 0
CORRECTON_X(25) = 0.00069 * 0
ERRORMAP1D 0, zone_x, base_x, step_x, CORRECTON_X
ERRORMAPON 0, zone_x

!!!!!!!!!!!!!!!!!!!!!!!!	   
STOP
FAULT_PROCESS:
   FDEF(iAxis).#LL = 1
   FDEF(iAxis).#RL = 1
   HALT(iAxis)
STOP
!????????homeflag
!ON (MERR(0)<>0)|(MST(0).0<>1)
!MFLAGS(0).#HOME = 0
!RET
!ON (MERR(1)<>0)|(MST(1).0<>1)
!MFLAGS(0).#HOME = 0
!RET
!ON (MERR(2)<>0)|(MST(2).0<>1)
!MFLAGS(0).#HOME = 0
!RET
!ON (MERR(3)<>0)|(MST(3).0<>1)
!MFLAGS(0).#HOME = 0
!STOP

代码完整解读

这是一段运动控制器(伺服 / 步进控制)的轴回零 + 误差补偿 程序,语法是固高 / 雷赛 / 众为兴类运动控制卡专用脚本 ,核心功能:X 轴自动找原点 → 设定坐标系 → 加载点位误差补偿表

我分模块逐行解释,你能直接看懂每一步做什么。


一、变量定义(参数初始化)

复制代码
INT iAxis           ! 定义轴号变量(整数)
REAL HomeVel        ! 回零速度
REAL SearchLimitVel ! 找限位速度
REAL HomeOffset     ! 原点偏移量
REAL timeout        ! 超时时间(单位:ms)

iAxis = 0           ! 控制第0轴(X轴)
HomeVel = 5         ! 回零速度 = 5
SearchLimitVel = 10 ! 找限位速度 = 10
HomeOffset = 157    ! 原点偏移 = 157 个脉冲/单位
timeout = 50000     ! 超时50秒

二、运动参数设置(速度、加速度、加加速度)

复制代码
VEL(iAxis) = SearchLimitVel      ! 设置运行速度
ACC(iAxis) = VEL(iAxis) * 10     ! 加速度 = 速度×10
DEC(iAxis) = VEL(iAxis) * 10     ! 减速度 = 速度×10
JERK(iAxis) = VEL(iAxis) * 100   ! 加加速度(S曲线平滑)
KDEC(iAxis) = VEL(iAxis) * 100   ! 急停减速度

三、标志位初始化

复制代码
MFLAGS(iAxis).#HOME = 0  ! 清除"回零完成"标志
FDEF(iAxis).#LL = 0      ! 禁用左限位
FDEF(iAxis).#RL = 0      ! 禁用右限位

四、使能伺服(上电)

复制代码
ENABLE (iAxis)                   ! 伺服使能
TILL MST(iAxis).#ENABLED,timeout ! 等待伺服准备好,超时50s

IF ^ MST(iAxis).#ENABLED         ! 若没使能成功
   GOTO FAULT_PROCESS            ! 跳转到故障处理
END

五、回零核心流程(自动找原点)

1. 正向 JOG 找右限位

复制代码
JOG/v (iAxis),1*SearchLimitVel  ! 正向点动
TILL FAULT(iAxis).#RL,timeout    ! 等待触发右限位

IF ^FAULT(iAxis).#RL            ! 没碰到限位=故障
       GOTO FAULT_PROCESS
END

2. 反向离开限位 → 找原点 INDEX 信号

复制代码
JOG/v (iAxis),-1*SearchLimitVel  ! 反向移动
TILL ^FAULT(iAxis).#RL           ! 直到离开右限位

IST(iAxis).#IND=0                ! 清除原点标志
TILL IST(iAxis).#IND,timeout     ! 等待捕获INDEX(Z相信号)
   IF ^IST(iAxis).#IND          ! 没捕获到=故障
       GOTO FAULT_PROCESS
   END

3. 设定当前坐标 = 原点

复制代码
SET FPOS(iAxis)=FPOS(iAxis)-IND(iAxis)+HomeOffset
! 公式:当前位置 - 索引偏移 + 原点偏移 = 设定为原点坐标

PTP/e (iAxis),0    ! 移动到 0 点
FDEF(iAxis).#LL = 1 ! 开启左限位
FDEF(iAxis).#RL = 1 ! 开启右限位
MFLAGS(iAxis).#HOME = 1 ! 标记【回零成功】

六、误差补偿表(核心:点位精度校正)

复制代码
local int zone_x       ! 补偿区域号
local real base_x      ! 补偿起始坐标
local real step_x      ! 补偿区间步长

zone_x = 0
base_x = -119.16021    ! X轴补偿起点
step_x = 9.2736        ! 每9.2736距离一个补偿点

定义 0~25 号点位的误差补偿值

复制代码
CORRECTON_X(0)  = 0.00069 * 0
CORRECTON_X(1)  = 0.00069 * 5
...
CORRECTON_X(25) = 0.00069 * 0

每一个数字对应一个位置的精度修正值,用于消除机械误差。

加载并开启误差补偿

复制代码
ERRORMAP1D 0, zone_x, base_x, step_x, CORRECTON_X
! 加载一维误差补偿表

ERRORMAPON 0, zone_x
! 开启X轴误差补偿

七、正常结束 & 故障处理

复制代码
STOP          ! 程序正常结束

FAULT_PROCESS: ! 故障处理
   FDEF(iAxis).#LL = 1
   FDEF(iAxis).#RL = 1
   HALT(iAxis) ! 紧急停止
STOP

整体功能总结(最直白)

  1. 初始化:设置 X 轴速度、加速度、限位
  2. 伺服上电:检查是否正常使能
  3. 自动回零
    • 先碰右限位
    • 反向找电机 Z 相信号
    • 设定原点坐标
  4. 精度补偿:加载 25 个点位的误差修正表,提升定位精度
  5. 保护机制:任何一步失败 → 立即急停 + 报警

你可能关心的关键问题

  1. 这是什么设备? 自动化设备(机械手、工作台、切割机、检测设备)的X 轴回零 + 精度校正程序
  2. **HomeOffset = 157 是什么?**原点偏移量,机械安装时的微调距离。
  3. **CORRECTON_X 有什么用?**补偿丝杆 / 导轨误差,让设备定位更准(微米级精度)。
  4. **故障会发生什么?**轴立即停止,限位保护开启,程序终止
相关推荐
盐水冰2 小时前
【Redis】学习(2)Redis常见命令
数据库·redis·学习
2301_818732062 小时前
运行项目,sql报错无效索引 已解决
数据库·sql
一叶落4382 小时前
LeetCode 219. 存在重复元素 II(C语言详解)
算法·哈希算法·散列表
像污秽一样2 小时前
算法设计与分析-习题2.4
数据结构·算法·排序算法
不想看见4042 小时前
Reverse Bits位运算基础问题--力扣101算法题解笔记
笔记·算法·leetcode
青柠代码录2 小时前
【MySQL】SELECT 语句执行流程
数据库·mysql
李慕婉学姐2 小时前
Springboot养老服务管理系统c0t92vu6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
rell3362 小时前
机顶盒播放udp/rtp马赛克
java·网络·网络协议·udp