### DATUM -- 回零

类型 | 单轴运动指令
描述 | 单轴找原点运动。 原点开关通过 DATUM_IN 设置，正负限位开关分别通过 FWD_IN 和 REV_IN 设置。 ZMC 控制器为 0 触发有效，输入为 OFF 状态时，表示到达原点/限位，常开类型信号需要采用 INVERT_IN 反转电平。 ECI 控制器为 1 触发有效，输入为 ON 状态时，表示到达原点/限位，常闭类型信号需要采用 INVERT_IN 反转电平。 Z 信号回零必须配置为带 Z 信号 ATYPE（ATYPE=4 或者 7）。 多轴回零时，需要每个轴都使用 datum 指令。 总线控制器使用控制器找原点模式完成后，需要手动清零 MPOS。
语法 | DATUM (mode)，DATUM(21,mode2) mode：找原点模式，加 10 表示碰到限位后反找, 不会碰到限位停止,例如 13=模式 3+限位反找 10，用于原点在正中间的情况。 ATYPE=4，回零模式加 100（模式 100+n 和 110+n 分别对应 n 和 10+n），表示接入编码器后可以自动清零 MPOS(仅限 4 系列)
值 | 描述
0 | 清除所有轴的错误状态。
1 | 轴以 CREEP 速度正向运行直到 Z 信号出现。 碰到限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS。
2 | 轴以 CREEP 速度反向运行直到 Z 信号出现。 碰到限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS。
3 | 轴以 SPEED 速度正向运行，直到碰到原点开关。然后轴以 CREEP 速度反向运动直到离开原点开关。 找原点阶段碰到正限位开关会直接停止。 爬行阶段碰到负限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS
4 | 轴以 SPEED 速度反向运行，直到碰到原点开关。然后轴以 CREEP 速度正向运动直到离开原点开关。 找原点阶段碰到负限位开关会直接停止。 爬行阶段碰到正限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS。
5 | 轴以 SPEED 速度正向运行，直到碰到原点开关。然后轴以 CREEP 速度反向运动直到离开原点开关，然后再继续以爬行速度反转直到碰到 Z 信号。 碰到限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS。
6 | 轴以 SPEED 速度反向运行，直到碰到原点开关。然后轴以 CREEP 速度正向运动直到离开原点开关，然后再继续以爬行速度正转直到碰到 Z 信号。 碰到限位开关会直接停止。 DPOS 值重置为 0 同时纠正 MPOS。
8 | 轴以 SPEED 速度正向运行，直到碰到原点开关。 碰到限位开关会直接停止。
9 | 轴以 SPEED 速度反向运行，直到碰到原点开关。 碰到限位开关会直接停止。
21 | 使用 Ethercat 驱动器回零功能，此时 mode2 有效。 设置驱动器回零方式（6098h），缺省 0 表示使用驱动器当前的回零方式。 会使用轴的 SPEED, CREEP, ACCEL, DECEL，乘以 UNITS 后自动设置驱动器的 6099h，609Ah 动作时序： 6098 回零方式→6099 速度→609A 加速度→6060 切换当前模式
mode2：mode=21 时有效，缺省 0，非 0 时设置到驱动器回零方式，根据驱动器手册数据字典 6098h 设置值。
适用控制器 | 通用
例子 | 例一 直接找原点 BASE(0) DPOS=0 ATYPE=1 SPEED = 100 '找原点速度 CREEP = 10 '反向爬行速度 DATUM_IN=5 '输入 IN5 作为原点开关 INVERT_IN(5,ON) '反转 IN5 电平信号，常开信号进行反转(ZMC 控制器) TRIGGER '自动触发示波器 DATUM(3) '轴 0 先以 100units/s 正向回零，找到原点后以 10units/s 直到离开原点，同时 DPOS 清 0 运动轨迹与速度曲线 DPOS(0)垂直刻度 500 MSPEED(0)垂直刻度 100 IN(5)垂直刻度 10 碰到原点开关之后反向爬行直到离开原点开关，此时 DPOS 清 0，回零运动完成。为了直观体现，所以爬行过程比较长，实际应用中，爬行过程很短。 例二 限位反找原点 BASE(0) DPOS=0 ATYPE=1 SPEED = 100 '找原点速度 CREEP = 10 '反向爬行速度 DATUM_IN=5 '输入 IN5 作为原点开关 FWD_IN=6 '输入 IN6 作为正限位开关 INVERT_IN(5,ON) '反转电平信号，一般常闭的信号才进行反转 INVERT_IN(6,ON) TRIGGER '自动触发示波器 DATUM(13) '轴 0 先以 100units/s 正向运动，碰到正限位反向运行，仍以 100units/s 找原点，找到原点后以 10units/s 直到离开原点，同时 DPOS 清 0 运动轨迹与速度曲线 DPOS(0)垂直刻度 500 MSPEED(0)垂直刻度 100 IN(5)垂直刻度 10 IN(6)垂直刻度 10 例三 EtheCAT 总线回零(松下 A6N 伺服) 先根据 EtherCAT初始化例程正常使能电机 SPEED=100 '找零速度*UNITS 后自动写入 6099 CREEP=10 '爬行速度*UNITS 后自动写入 6099 ACCEL=1000 '加减速*UNITS 后自动写入 609A DECEL=1000 DATUM(21,0) '按驱动器当前回零模式开始回零，此时按按驱动器信号判断，而不是按控制器信号判断 WHILE 1 TABLE(0)=DRIVE_STATUS '读取状态字判断回零状态 IF READ_BIT2(10,TABLE(0)) THEN '根据下图确定 IF READ_BIT2(12,TABLE(0)) THEN ?"回零完成" ENDIF ENDIF WEND END 驱动器厂家的回零过程可能不同，具体根据驱动器手册确定。 bit13，bit12，bit10 的值组合含义如下表：
bit13 | bit12 | bit10 | 描述
0 | 0 | 0 | 原点回零动作中
0 | 0 | 1 | 原点回零动作中断或未开始
0 | 1 | 0 | 原点回零动作完成，但未到达目标位置
0 | 1 | 1 | 原点回零动作正常完成
1 | 0 | 0 | 检出原点回零异常还在动作中
1 | 0 | 1 | 检出原点回零异常，停止状态
例四 Rtex 总线回零(松下 A6N 伺服) 先根据 Rtex初始化例程正常使能电机 SPEED=100 '找零速度 ACCEL=1000 '加减速 DECEL=1000 DATUM(21,$11) '按驱动器当前回零模式开始回零，此时按按驱动器信号判断，而不是按控制器信号判断 根据驱动器手册确定回零模式
初始化模式 | 11h | Z 相
12h | HOME↑ *2
13h | HOME↓ *3
14h | POT↑ *2
15h | POT↓ *3
16h | NOT↑ *2
17h | NOT↓ *3
18h | EXT1↑ *2
19h | EXT1↓ *3
1Ah | EXT2↑ *2
1Bh | EXT2↓ *3
1Ch | EXT3↑ *2
1Dh | EXT3↓ *3
相关指令 | DATUM_IN，DATUM_OFFSET，INVERT_IN