### REGIST -- 锁存

类型 | 位置锁存指令
描述 | REGIST 指令用来锁存轴的测量反馈位置。 支持编码器轴、总线轴锁存，不同型号的控制器支持锁存的轴类型不同，4 系列及以上控制器最新固件支持虚拟轴、脉冲轴锁存。 EtherCAT 支持驱动器锁存，此时使用驱动器 IO 点实现锁存，具体模式查看指令语法。 Rtex 只支持控制器锁存。 4 系列及以上控制器支持 4 锁存通道。 4 个通道指 MARK、MARKB、MARKC、MARKD，通过 REG_INPUTS 指定锁存输入口对应的锁存通道。 锁存输入口 432：2 个，432N：4 个，412：8 个。 支持 EtherCAT 驱动器锁存与控制器锁存同时使用，需要有 4 锁存通道功能。 当锁存产生时，轴状态 MARK 会被设置为 ON，同时锁存到的位置会被存储在参数 REG_POS 内。 每个轴有输入信号 R0、R1、EZ 信号可以使用锁存功能。当使用两个信号锁存时，第二个信号锁存使用 MARKB 和 REG_POSB。 R0，R1 输入一般对应到输入口 0 和 1，详细请查看控制器的硬件手册中通用输入章节。
语法 | 语法一 REGIST(mode) mode：锁存方式 上升下降沿是以控制器内部状态而言。如果设置成上升沿触发，则锁存会在外部输入口由导通状态进入截止状态的一瞬间触发；如果设置成下降沿触发，则锁存会在外部输入口由截止状态进入导通状态的一瞬间触发；具体要设置成上升沿还是下降沿触发，要根据外部输入口信号跳变的实际需求。 脉冲轴类型一般采用 R0，R1，Z 脉冲这三种锁存；总线轴类型采 R2，R3 锁存。
值 | 描述
1 | 当 Z 脉冲上升沿时的绝对位置送到 REG_POS
2 | 当 Z 脉冲下降沿时的绝对位置送到 REG_POS
3 | 当输入信号 R0 上升沿的绝对位置送到 REG_POS
4 | 当输入信号 R0 下降沿的绝对位置送到 REG_POS
6 | 输入信号 R0 上升沿时的绝对位置送到 REG_POS，Z 信号上升沿时的绝对位置送到 REG_POSB
7 | 输入信号 R0 上升沿时的绝对位置送到 REG_POS，Z 信号下降沿时的绝对位置送到 REG_POSB
8 | 输入信号 R0 下降沿时的绝对位置送到 REG_POS，Z 信号上升沿时的绝对位置送到 REG_POSB
9 | 输入信号 R0 下降沿时的绝对位置送到 REG_POS，Z 信号下降沿时的绝对位置送到 REG_POSB
10 | 输入信号 R0 上升沿时的绝对位置送到 REG_POS，输入信号 R1 上升沿时的绝对位置送到 REG_POSB
11 | 输入信号 R0 上升沿时的绝对位置送到 REG_POS，输入信号 R1 下降沿时的绝对位置送到 REG_POSB
12 | 输入信号 R0 下降沿时的绝对位置送到 REG_POS，输入信号 R1 上升沿时的绝对位置送到 REG_POSB
13 | 输入信号 R0 下降沿时的绝对位置送到 REG_POS，输入信号 R1 下降沿时的绝对位置送到 REG_POSB
14 | 输入信号 R1 上升沿时的绝对位置送到 REG_POSB(14 以后 150804 以后版本支持，每个锁存通道独立，支持 4 通道锁存)
15 | 输入信号 R1 下降沿时的绝对位置送到 REG_POSB
16 | Z 信号上升沿时的绝对位置送到 REG_POSB
17 | Z 信号下降沿时的绝对位置送到 REG_POSB
18 | 输入信号 R2 上升沿时的绝对位置送到 REG_POSC
19 | 输入信号 R2 下降沿时的绝对位置送到 REG_POSC
20 | 输入信号 R3 上升沿时的绝对位置送到 REG_POSD
21 | 输入信号 R3 下降沿时的绝对位置送到 REG_POSD
语法二 REGIST(100+mode, tableindex, numes) mode：锁存方式 tableindex：连续锁存的内容存储的 table 位置，第一个 table 元素存储锁存的个数，后面存储锁存的坐标，最多保存个数= numes-1，溢出时循环写入 numes：占用的 table 个数 通过把模式加 100 来支持连续锁存，锁存结果存储到 TABLE 里面。 分别对两个通道进行连续锁存，可以实现上下边沿的连续锁存。 ECI：20150829 以上固件支持。 4 系列控制器：20170523 以上固件支持。 100+mode：只能使用单一通道的 mode，加 100 表示使用连续锁存
值 | 描述
1 | 当 Z 脉冲上升沿时的绝对位置送到 REG_POS
2 | 当 Z 脉冲下降沿时的绝对位置送到 REG_POS
3 | 当输入信号 R0 上升沿的绝对位置送到 REG_POS
4 | 当输入信号 R0 下降沿的绝对位置送到 REG_POS
14 | 输入信号 R1 上升沿时的绝对位置送到 REG_POSB
15 | 输入信号 R1 下降沿时的绝对位置送到 REG_POSB
16 | Z 信号上升沿时的绝对位置送到 REG_POSB
17 | Z 信号下降沿时的绝对位置送到 REG_POSB
18 | 输入信号 R2 上升沿时的绝对位置送到 REG_POSC
19 | 输入信号 R2 下降沿时的绝对位置送到 REG_POSC
20 | 输入信号 R3 上升沿时的绝对位置送到 REG_POSD
21 | 输入信号 R3 下降沿时的绝对位置送到 REG_POSD
23 | 当输入信号 R0 上升沿的绝对位置送到 REG_POSB
24 | 当输入信号 R0 下降沿的绝对位置送到 REG_POSB
33 | 当输入信号 R0 上升沿的绝对位置送到 REG_POS,下一次切换下降沿，轮流切换。
34 | 当输入信号 R0 下降沿的绝对位置送到 REG_POS，下一次切换上升沿，轮流切换。
35 | 当输入信号 R1 上升沿的绝对位置送到 REG_POSB,下一次切换下降沿，轮流切换。下一次切换下降沿，轮流切换。
36 | 当输入信号 R1 下降沿的绝对位置送到 REG_POSB，下一次切换上升沿，轮流切换。
适用控制器 | 有锁存 IN 口。
例子 | 以下例程基于 ZMC432 控制器测试。 例一 锁存脉冲轴 0 的输入信号 R0 上跳沿时的位置，并打印。 BASE(0) REG_INPUTS=0 '将 R0-R3 都对应输入口 0 ATYPE=1 '脉冲轴 REGIST(3) '选择 R0 锁存模式 WAIT UNTIL MARK '等待锁存触发 PRINT REG_POS '打印锁存位置 例二 锁存编码器轴 0 的输入信号 R1 上跳沿时的位置，并打印。 BASE(0) REG_INPUTS=0 '将 R0-R3 都对应输入口 0 ATYPE=3 '编码器轴 REGIST(14) '选择 R1 锁存模式 WAIT UNTIL MARKB '等待锁存触发 PRINT REG_POSB '打印锁存位置 例三 锁存总线轴 0 的输入信号 R2/R3 边沿时的位置，并打印。 BASE(0) REG_INPUTS = $1000 '映射锁存通道 R3-R0 对应到输入口 1,0,0,0 REGIST(imode) IF imode = 18 OR imode = 19 THEN '通道 R2 锁存 WAIT UNTIL MARKC '探针 1 ?"模式",Imode ,"锁存位置 REG_POSC",REG_POSC ELSEIF imode = 20 OR imode = 21 THEN '通道 R3 锁存 WAIT UNTIL MARKD '等待锁存触发 ?"模式",Imode ,"锁存位置 REG_POSD",REG_POSD ENDIF 例四 PC 交互位置锁存，一般用于运动抓拍，通过锁存的位置得知抓拍时的实际位置。 GLOBAL g_start GLOBAL g_posx, g_posy WHILE 1 WAIT UNTIL g_start=1 '等待 PC 发出启动 REGIST(4) AXIS(0) '输入 0 锁存，24V 变 0V 的时刻 REGIST(4) AXIS(1) WAIT UNTIL MARK(0) AND MARK(1) g_start=0 g_posx=REG_POS(0) g_posy=REG_POS(1) PRINT g_posx, g_posy WEND 例五 100+mode 连续锁存 DIM num num=1 BASE(6) ATYPE=6 REGIST(100+4,0,100) '自动循环，不需要再写入到 while 循环中，tab le(0)保存锁存次数，table(1-100)存储每次锁存的数据超过 99 次后，table(0)清 0，重新从 table(1)记录数据 WHILE 1 WAIT UNTIL MARK ?reg_pos,TABLE(num),TABLE(0) '打印 IF num=100 THEN num=1 ELSE num=num+1 ENDIF WA 1 '延时 1ms，防抖 WEND 例六 总线驱动器锁存，需要配置 DRIVE_PROFILE 支持带探针的模式 BASE(iaxis) '选择需要锁存位置的轴号 REGIST(imode) '锁存模式 IF imode = 3 OR imode = 4 THEN WAIT UNTIL MARK '探针 1 ?"模式",imode ,"锁存位置 REG_POS",REG_POS DELAY(100) ELSEIF imode = 14 OR imode = 15 THEN WAIT UNTIL MARKB '等待锁存触发 ?"模式",imode ,"锁存位置 REG_POSB",REG_POSB DELAY(100) ELSEIF imode = 11 THEN WAIT UNTIL MARK OR MARKB '等待锁存触发 IF MARK THEN ?"模式",Imode ,"锁存位置 REG_POS",REG_POS WAIT UNTIL MARKB ?"锁存位置 REG_POSB",REG_POSB ELSEIF MARKB THEN ?"模式",Imode ,"锁存位置 REG_POSB",REG_POSB WAIT UNTIL MARK ?"锁存位置 REG_POSB",REG_POS ENDIF DELAY(100) ENDIF
相关指令 | MARK，MARKB，REG_POS，REG_POSB