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. **故障会发生什么?**轴立即停止,限位保护开启,程序终止
相关推荐
dialect_3 小时前
KMP算法
开发语言·c++·算法
captain3763 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
reikocao3 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
Novproxy_Z4 小时前
商用代理避坑:如何识别商家拿机房 IP 冒充住宅 IP
java·网络·tcp/ip
垆边人似月.4 小时前
RDMA 文件传输踩坑(五):READY 发送成功后,为什么出现 Work Request Flushed Error?
服务器·网络·tcp/ip
漂流瓶jz4 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
HideF4 小时前
nmcli
linux·服务器·网络
小此方4 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql
xszivvvv4 小时前
Mariadb数据库frm文件异常,如何恢复数据
数据库·mariadb
吞下星星的少年·-·4 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造