本文档描述版本R7-2-1的EPICS motor记录,以及构建它和使用它所需的相关EPICS软件。motor记录的版本R7-2-1兼容EPICS base R3.15.7及以上。motor记录是为了支持所有类型的定位电机。
除了软通道支持外,motor记录还支持以下基于软件的电机驱动。
这个记录为电机位置(“user”和"dial"坐标)维护两套坐标系;显示drive和回读值;执行对电机运动的限位并且维护在两套坐标系中那些限位;显示限位开关的状态;可以使用复位开关(home switch);可选地在用户定义方向消除齿隙;并且一种机制,用户和其它EPICS记录可以通过它在任一坐标系中重新校准电机位置。这个记录也支持“微调(tweak)”,“点动(jog)”和"复位(home)"运动,并且支持在user坐标中绝对和相对运动。提供两个"stop"开关:一个简单的开关用于由其它记录和通过通道访问客户端使用,而一个更灵活开关提供给交互使用。
除了另外指定的地方,与电机位置和其派生东西相关的字段接受用用户指定"工程单位"的值,诸如角度;在字段EGU中包含了工程单位名称。因而,一般,速度用每秒EGU表示。加速被表示为用多少秒加速到全速。但也提供了其它字段,因而电机位置可以用steps指定,而速度用转/秒指定,并且因而可以通过指定每转steps数目和每转EGU的数目设定step大小。
motor记录可以从控制器的回读寄存器或者编码器寄存器,或者通过EPICS输入链接从任何其它EPICS记录读取电机位置。当电机正在移动时,这个记录可以周期性触发一个输出链接,发送回读信息给其它EPICS记录。当一个完整运行(可能包括齿隙消除)结束时,这个记录可以触发一个转发链接来运行其它EPICS记录。
motor记录可以执行其drive字段与其回读字段相符合,并且它在各种不同环境中做这件事(例如,当用户告诉一个电机停止,以及在撞击一个限位开关时)。因而,如果你正在用另一个记录的输出驱动电机记录的VAL或DVAL字段,并且你想要那个记录总是包含与这个motor记录相同的值,你必须在数据库中处理这种行为。一种做这件事的方法是转发链接这个电机记录到一个软模拟输出记录,并且引起此AO记录获取这个电机记录的VAL或DVAL字段并且放入你的记录。
电机记录在其运行中不同于大多数其它EPICS记录,既不是"同步",也不是"异步",就如在EPICS记录参考手册中使用的这些术语。当前,在记录运行结束后,即使电机运行可能进行中,PACT字段总是FALSE。这表示这个记录总是响应通道访问写入,并且在任何时候,可以停止或者为其重新定位目标位置。在电机停止并且没有运行请求正在发生时,才执行这个记录转发链接。
除了EPICS记录参考手册中所有记录类型都共有的字段外,motor记录还由以下描述的字段:
名称 | 访问 | 提示 | 数据类类型 | 注释 |
ACCL | R/W | 加到全速的秒数 | DOUBLE | 加速时间 |
ADEL | R/W | 存档死区 | DOUBLE | RBV存档监视器的死区 |
ALST | R | 存档的最新值 | DOUBLE | 被存档的最新RBV值 |
ATHM | R | 在复位处 | SHORT | 使用HOME开关 |
BACC | R/W | 到Veloc的BL秒 | DOUBLE | 齿隙加速时间 |
BDST | R/W | BL距离(EGU) | DOUBLE | 齿隙距离 |
BVEL | R/W | BL速度(EGU/s) |
DOUBLE | 齿隙速度 |
CARD | R | 板卡编号 | SHORT | EPICS板卡# |
CBAK | None | 回调结构体 | NOACCESS | |
CDIR | R | Raw命令的方向 | SHORT | (1:"Pos", 0:"Neg") |
CNEN | R/W | 启用控制 | RECCHOICE | (0:"Disable", 1:"Enable") |
DCOF | R/W | 微分增益 | DOUBLE | |
DHLM | R/W* | 刻度盘上限位 | DOUBLE | |
DIFF | R | dval-drbv的差值 | DOUBLE | |
DINP | R/W | DMOV输入链接 | INLINK | |
DIR | R/W* | 用户方向 | RECCHOICE | (0:"Pos", 1:"Neg") |
DLLM | R/W* | 刻度盘下限位 | DOUBLE | |
DLY | R/W | 回读稳定时间(s) | DOUBLE | |
DMOV | R | 结束移动至值 | SHORT | "结束"标记 |
DOL | R | 所需输出的位置 | INLINK | 仅用于闭环模式 |
DRBV | R | 刻度盘回读值 | DOUBLE | |
DVAL | R | 刻度所需的值 | DOUBLE | |
EGU | R/W | 工程单位 | STRING | |
ERES | R/W* | 编码器step大小(EGU) | DOUBLE | |
FOF | R/W | 冻结偏移 | SHORT | |
FOFF | R/W | 偏移-冻结开关 | RECCHOICE | (0:"Variable", 1:"Frozen") |
FRAC | R/W | 移动分数 | DOUBLE | |
HHSV | R/W* | hihi严重性 | GBLCHOICE | |
HIGH | R/W* | high警报限位 | DOUBLE | |
HIHI | R/W* | hihi警报限位 | DOUBLE | |
HLM | R/W* | 用户上限位 | DOUBLE | |
HLS | R/W* | 处于上限位开关 | SHORT | |
HLSV | R/W* | HW限位。违反严重性 | GBLCHOICE | |
HOMF | R/W* | 向前复位 | SHORT | |
HOMR | R/W* | 反向复位 | SHORT | |
HOPR | R/W | 上操作范围 | DOUBLE | |
HSV | R/W* | 高严重性 | GBLCHOICE | |
HVEL | R/W* | 复位速度 | DOUBLE | |
ICOF | R/W | 积分增益 | DOUBLE | |
IGSET | R/W | 忽略SET字段 | SHORT | (0:正常操作,1:忽略SET) |
INIT | R/W | 启动命令 | STRING | |
JAR | R/W | 点动加速(EGU/S^2) | DOUBLE | |
JOGF | R/W* | 点动电机向前 | SHORT | 小心! |
JOFR | R/W* | 点动电机向后 | SHORT | 小心! |
JEVL | R/W | 点动速度 | DOUBLE | |
LDVL | R | 最新的刻度目标值 | DOUBLE | |
LLM | R/W* | 用户下限位 | DOUBLE | |
LLS | R | 在下限位开关 | SHORT | |
LLSV | R/W* | LOLO严重性 | GBLCHOICE | |
LOCK | R/W* | 软通道位置锁 | GBLCHOICE | (0:"NO", 1:"YES") |
LOLO | R/W* | lolo警告限位 | DOUBLE | |
LOPR | R/W | 下操作范围 | DOUBLE | |
LOW | R/W* | 下警报限位 | DOUBLE | |
LRLV | R | 最新的相对值 | DOUBLE | |
LRVL | R | 最新的raw目标值 | DOUBLE | |
LSPG | R | 最新的SPMG | RECCHOICE | (见SPMG) |
LSV | R/W* | 下严重性 | GBLCHOICE | |
LVAL | R | 上次的用户目标值 | DOUBLE | |
LVIO | R | 限位违反 | SHORT | |
MDEL | R/W | 监视死区 | DOUBLE | 在RBV值上监视的死区 |
MLST | R | 上次监视的值 | DOUBLE | 上个RBV值成为被监视的值 |
MIP | R | 运行进行中 | SHORT | |
MISS | R | 用尽重试次数 | SHORT | |
MMAP | R | 监视掩码 | ULONG | |
MOVN | R | 电机移动中 | SHORT | 不雅与DMOV混淆 |
MRES | R/W* | 电机step大小(EGU) | DOUBLE | |
MSTA | R | 电机状态 | ULONG | |
NMAP | R | 监视掩码 | ULONG | |
NTM | R/W* | 新目标监视 | RECCHOICE | (0:"NO", 1:"YES") |
NTMF | R/W* | 新目标监视死区因子 | SHORT | 确定NTM死区;NTMF>=2 |
OFF | R/W | user坐标偏移(EUG) | DOUBLE | |
OMSL | R/W | 输出模式选择 | GBLCHOICE | |
OUT | R/W | 输出说明 | OUTLINK | |
PCOF | R/W | 比例增益 | DOUBLE | |
PERL | R/W | 周期限制 | RECCHOICE | (0:"NO", 1:"YES") |
POST | R/W | 移动结束后执行的命令 | STRING | |
PP | R | Post process命令 | SHORT | |
PREC | R/W | 显示精度 | SHORT | |
PREM | R/W | 移动前命令 | STRING | |
RBV | R | user坐标系回读值 | DOUBLE | |
RCNT | R | 重试次数 | SHORT | |
RDBD | R/W | 重试死区(EGU) | DOUBLE | |
SPDB | R/W | 设置点死区(EGU) | DOUBLE | |
RDBL | R | 回读位置 | INLINK | |
RDIF | R | rval-rrbv差值 | LONG | |
REP | R | raw编码器位置 | DOUBLE | |
RHLS | R | raw高限位开关 | SHORT | |
RINP | R/W | RMP输入链接 | INLINK | |
RLLS | R | raw低限位开关 | SHORT | |
RLNK | R | 回读输出链接 | OUTLINK | |
RLV | R/W* | 相对位置 | DOUBLE | |
RMOD | R/W | 重试模式 | RECCHOICE | (0:"Unity", 1:"Arthmetic", 2:"Geometric", 3:"In-Position") |
RMP | R | raw电机位置 | DOUBLE | |
RRBV | R | raw回读值 | DOUBLE | |
RRES | R/W | 回读step大小(EGU) | DOUBLE | |
RTRY | R/W | 最大重试次数 | SHORT | |
RVAL | R/W* | raw所要的值 | DOUBLE | |
RVEL | R | raw速度 | LONG | |
S | R/W | 速度(RPS) | DOUBLE | |
SBAK | R/W | BL速度(RPS) | DOUBLE | |
SBAS | R/W | 基速度(RPS) | DOUBLE | |
SET | R/W | Set/Use开关 | RECCHOICE | (0:"Use", 1:"Set") |
SMAX | R/W | 最大速度 | DOUBLE | |
SPMG | R/W* | Stop/Pause/Move/Go | RECCHOICE | (0:"Stop", 1:"Pause", 2:"Move", 3:"Go") |
SREV | R/W* | 每转的steps数目 | LONG | |
SSET | R/W | 设置SET模式 | SHORT | |
STOO | R/W | STOP输出链接 | OUTLINK | |
STOP | R/W* | Stop | SHORT | |
STUP | R/W* | 状态更新请求 | RECCHOICE | OFF(0), ON(1), BUSY(2) |
SUSE | R/W | 设置USE模式 | SHORT | |
SYNC | R/W* | 同步位置 | RECCHOICE | (0:"NO", 1:"Yes") |
TDIR | R/W* | 移动的方向 | SHORT | |
TWF | R/W* | 向前微调电机 | SHORT | |
TWR | R/W* | 反向微调电机 | SHORT | |
TWV | R/W* | 微调step大小(EGU) | DOUBLE | |
UEIP | R/W* | 如果存在使用编码器 | RECCHOICE | (0:"NO", 1:"Yes") |
UREV | R/W* | 每转多少EGU | DOUBLE | |
URIP | R/W* | 如果存在使用RDBL | RECCHOICE | (0:"NO", 1:"Yes") |
VAL | R/W* | 用户所要的值 | DOUBLE | |
VBAS | R/W | 基速度(EGU/s) | DOUBLE | |
VELO | R/W | 速度(EGU/s) | DOUBLE | |
VERS | R | 代码版本 | DOUBLE | 例如,"1.95" |
VMAX | R/W | 最大速度(EGU/s) | DOUBLE | |
VOF | R/W | 变量偏移 | SHORT |
注意:在以上访问列:
注意:在以上提示列:
名称 | 访问 | 提示 | 数据类型 | 注释 |
DIR | R/W* | user坐标方向 | RECCHOICE | ():"Pos", 1:"Neg") |
由以下方程关联user和dial值 :userVAL = DialVAL * DIR + OFFset
这个字段是以上方程中的"DIR"。
名称 | 访问 | 提示 | 数据类型 | 注释 |
OFF | R/W* | user坐标方向 | DOUBLE | 根据以下方程通过一个符号(DIR字段)和一个偏移(OFF)可以使user和dial坐标不同: userVAL = DialVAL * DIR + OFFset 这个字段是以上等式中的"OFFset"。它通常不是由用户直接写入的。 |
FOFF | R/W | 偏移冻结开关 | RECCHOICE | (0:"Variable", 1:"Frozen") |
VOF | R/W | 变量偏移 | SHORT | 设置Offset开关(FOFF)为"Variable" |
FOF | R/W | 冻结偏移 | SHORT | 设置Offset开关(FOFF)为"Frozen" |
用户可以通过设置FOFF为"Frozen"来设置user和dial坐标之间的差值保持固定(即:这个记录将不更改它,但用户可以)。字段VOF和FOF是为了在备份/恢复操作中使用;对它们的任何写入操作将驱动FOFF字段为"Variable"(VOF)或"Frozen"(FOF)。
名称 | 访问 | 提示 | 数据类型 | 注释 |
SET | R/W | Set/Use开关 | RECCHOICE | (0:“Use”,1:"Set") |
SSET | R/W | 设置SET模式 | SHORT | 设置Set/Use开关为"Set" |
SUSE | R/W | 设置USE模式 | SHORT | 设置Set/Use开关为"Use" |
IGSET | R/W | 忽略SET字段 | SHORT | (0:正常操作,1:SET被忽略) |
SET是一个在校准电机的user和dial位置中使用的拨动开关。
当SET=0("Use")时,写user坐标驱动字段(VAL)使得dial坐标驱动字段(DVAL)发生变化,并且电机开始移动。写入dial坐标驱动字段(DVAL)引起user坐标驱动字段(VAL)发生变化,并且电机开始移动。
当SET=1("Set")时,对dial坐标驱动字段(DVAL)和对raw驱动字段(RVAL)的写入操作引起一个新的raw电机位置被装载到硬件,而对user坐标驱动字段(VAL)不做任何修改。对通常移动电机的其它字段的写操作修改user坐标驱动字段(VAL),以及user和dial坐标的偏移(OFF字段),以及user坐标限位字段(HLM和LLM)中相应变化。当偏移被冻结(FOFF=1)时,对任何驱动字段的写入操作影响user和dial值,并且也装载硬件位置寄存器。
当IGSET=0时,电机记录将服从SET字段并且行为表现如上。
当IGSET=1时,电机记录表现就像SET=0。忽略SET字段对使用软电机(使用了软通道设备支持的电机)的程序有用。
名称 | 访问 | 提示 | 数据类型 | 注释 |
MRES | R/W* | 电机step大小(EGU) | DOUBLE | 可正可负 |
SREV | R/W* | 每转多少steps | LONG | 必须严格为正 |
UREV | R/W* | 每个转多少EGU | DOUBLE | 可正可负 |
MRES,和(SREV, UREV)代表了指定电机分辨率的两种方式-用工程单位(EGU)的距离或角度,与单个电机step相关联。关联这些量的方程是"MRES=UREV/SREV"。初始,对于大多数步进电机每转完整steps的数目,SREV值为200,,并且这个记录从不更改这个值。仅用户可以更改它。
当MRES被修改,电机记录设置URES=MRES*SREV。当UREV或SREV被修改,电机设置MRES=UREV/SREV。在所有情况中,电机分辨率对报告电机位置的更改作以简单方式依赖于SET字段:
1)如(SET=1),从存在raw值(RVAL)计算新的user和dial值(VAL, DVAL)。
2)如(SET=0),从已有的dial值计算一个新raw值。
在任一种情况种,电机都不移动;实际电机速度(用每秒转数)也不变化。
如果MRES或UREV被修改,根据以下等式VELO = UREV * S; BVEL = UREV * SBAK; VMAX = UREV * SMAX; VBAS = UREV * SBAS,用每秒多少个工程单位表示的电机速度(即:其名称中包含字符'V':VELO,BVEL,VMAX和VBAS的电机速度)被这个电机记录自动调整。对MRES或UREV的更改,不影响用每秒转数表示的电机速度(S, SBAK和SBAS)的电机速度。相比较,当SREV被修改时,仅MRES被电机记录调整,因而允许所有其它字段保持不变。
当前,对电机分辨率字段的修改不影响限位字段的值(虽然它们应该)。
MRES或UREV允许负值,因而user/dial坐标系可以被设置成电机控制器的相反极性。
名称 | 访问 | 提示 | 数据类型 | 注释 |
ERES | R/W* | 编码器step大小(EGU) | DOUBLE | 编码器分辨率:用工程单位表示的距离或角度,与一个电机单步相关联。ERES可正可负。如果用户设置ERES为0,记录将用MRES重写它。 |
RRES | R/W | 回读step大小(EGU) | DOUBLE | 回复设备分辨率:用工程单位表示的距离或角度,与通过回读位置输入链接(RDBL)获取的数目单位变化相关联。RRES可正可负。 |
UEIP | R/W* | 如果存在,使用编码器 | RECCHOICE (0:"No", 1:"Yes") |
开关:非零值告诉记录读取编码器(如果硬件表明编码器存在)并且忽略从硬件的计步寄存器回读的值。 UEIP和MSTA编码器指示器的状态,确定: 1)RRBV设为反馈(REP)或者命令(RMP)位置 2)使用绝对或相对位置命令 |
URIP | R/W* | 如果存在,使用RDBL | RECCHOICE (0:"No", 1:"Yes") |
开关:非零值告诉这个记录从回读位置链接(RDBL)(如果它包含了有效的EPICS链接信息,并且如果在尝试从这个链接读取中没有方式错误)获取电机位置,并且忽略从硬件的计步和编码器寄存器回读的值。如果RDBL链接无效或读取尝试导致错误,电机位置冻结。 |
这些开关也指挥记录用相对,而非绝对计算位置,由于编码器和回读单位与电机steps的比率可能实际上不是常数。
名称 | 访问 | 提示 | 数据类型 | 注释 |
VMAX | R/W | 最大速度(EGU/s) | DOUBLE | 有效范围:0<=VMAX。VMAX=0禁用最大速度范围检查。 |
SMAX | R/W | 最大速度(RPS) | DOUBLE | 有效范围:0<=SMAX |
VBAS | R/W | 基速度(EGU/s) | DOUBLE | 有效范围:0<=VBAS |
SBAS | R/W | 基速度(RPS) | DOUBLE | 有效范围:0<=SBAS |
用输入的任何最小(即:VBAS/SBAS)或最大值(即:VMAX/SMAX)是否有效这样一种方法进行范围检查。 例如,如果输入了最小值,而它超过了最大值,则最大值被设置成新的最小值。VMAX值为0禁用最大速度范围检查。
启动时,如果一个字段对(VMAX/SMAX, VBAS/SBAS, VELO/S, BVEL/SBAK)的一个字段是0,非0字段优先。如果一个指定字段对的两个字段都为非0,一个字段对的RPS成员(即:SMAX,SBAS,S,SBAK)优先。
回转(VELO/S)速度和备用(BVEL/SBAK)速度字段悄悄地被电机记录限制在由VMAX/SMAX和VBAS/SBAS(包含)设置的范围内。
使用BURT和VMAX(即:非0 VMAX)的那些人在VELO和BVEL在它们的BURT请求文件前应该确保设置了VMAX和VBAS。
VBAS/SBAS的目的是防止电机以慢得激发其共振的速度移动,这会引起电机丢步。电机预计在一个电机脉冲从静止加速到VBAS。
名称 | 访问 | 提示 | 数据类型 | 注释 |
VELO | R/W | 速度(EGU/s) | DOUBLE | 有效范围; VBAS<=VELO<=VMAX |
S | R/W | 速度(RPS) | DOUBLE | 有效范围; SBAS<=S<=SMAX |
VELO是速度,用每秒多少工程单位表示,在移动加速阶段结束后,电机以这个速度移动。S是用每秒转数表达的相同速度。记录用等式S=VELO/UREV确定VELO和S是一致的
名称 | 访问 | 提示 | 数据类型 | 注释 |
HVEL | R/W | 速度(EGU/s) | DOUBLE | 复位速度;有效范围VBAS<=HVEL<=VMAX |
ACCL | R/W | 加速到速度的秒数 | DOUBLE | 一个电机移动加速和减速的长度(以秒为的单位) |
电机记录期望硬件产生一个梯形速度图。即是,电机速度预计随着时间在ACCL秒从基速度VBAS线性增加到全速VELO。在运动结束,速度预计类似地减小到VBAS。
名称 | 访问 | 提示 | 数据类型 | 注释 |
JVEL | R/W | 点动速度(EGU/s) | DOUBLE | 有效范围;VBAS<=VELO |
JAR | R/W | 点动加速(EGU/s^2) | DOUBLE | 默认值:VELO/ACCL |
对于OMS和IMS设备驱动,点动速度可以被即时更改。速度将根据JAR字段加速到新的速度。
名称 | 访问 | 提示 | 数据类型 | 注释 |
BDST | R/W | BL距离(EGU) | DOUBLE | 带符号的距离,在dial坐标系,用于齿隙消除 |
在移动到(dial坐标)位置称为"TARGET" 算法如下:
1) 如果电机要移动一个大于BDST的距离,或者电机要在与DBST符号相反的方向移动,则电机首先以ACCL指定的加速和速度VELO移动到位置(TARGET-BDST),接着以由BACC指定的加速和速度BVEL移动到位置TARGET。
2)如果电机要移动一个小于DBST的距离,或者如果电机在于BDST符号相同方向移动,则假设齿隙已经被消除,并且电一将以BACC指定的加速和速度BVEL移动到位置TARGET。
名称 | 访问 | 提示 | 数据类型 | 注释 |
BVEL | R/W | BL速度(EGU/s) | DOUBLE | |
SBAK | R/W | BL速度(RPS) | DOUBLE |
BVEL是速度,以每秒多少工程单位表示,在齿隙消除移动的加速阶段结束后,电机以这个速度移动。SBAK是用每秒转数表示的相同速度。BVEL和SBAK可为负数或0。
名称 | 访问 | 提示 | 数据类型 | 注释 |
BACC | R/W | 加速到BL速度的秒数 | DOUBLE | 齿隙消除运动的加速和减速阶段的长度(以秒为单位)的长度。更多专门信息见加速字段ACCL的讨论。 |
FRAC | R/W | 移动分数 | DOUBLE |
这个字段支持难控制设备的闭环控制,预计对于这些设备驱动值与回读值难以进行重复比较(蠕动和其它摩擦驱动装置是代表性示例:由一个蠕动电机驱动的步数很难表明它移动的距离。)
在从位置CURRENT到TARGET位置的移动中,电机记录将请求硬件来一个距离FRAC*(TRAGET-CURRENT)。当移动结束时,记录将请求一个FRAC*(余下距离)的移动,并且在达到目标位置前,一直这样。
名称 | 访问 | 提示 | 数据类型 | 注释 |
RDBD | R/W | 重试死区(EGU) | DOUBLE | 当电机结束一次完成运动,可能包含齿隙消除,电机记录将比较其当前位置和所需位置。如果差值幅度大于RBDB,电机将再次尝试,就像用户请求一次从现在的当前位置到所需位置的移动。仅执行一个有限数目的重试。(见RTRY) |
SPDB | R/W | 设置死区(EGU) | DOUBLE | 在电机执行一次移动前,进行这个移动是否太小的检查。当这个距离小于在MRES中step大小时,它是太小。当想要一个比MRES更大的死区时,设置这个值为SPDB。 |
RTRY | R/W | 最大重试次数 | SHORT | 电机记录将再次尝试移动到所需位置的最大次数。当达到重试限制时,电机记录将声明运动结束了。如果没有达到所要位置,字段MISS将设为1。 |
RMOD | R/W | 重试模式 | RECCHOICE | (0:"Unity", 1:“Arthmetic”, 2:"Geometric", 3:"In-Position") RMOD允许用户选择计算重试移动距离的不同方法。默认模式(Unity)根据dial差值(DIFF字段)移动电机一个相对距离。运行差劲的设备(压电电机)在这种模式中会绕着它们的目标位置振动。因而,添加了其它两种方式允许在每次重试后减少来自电机记录的响应。 Arithmetic模式产生一个修正的算术序列。例如,如果最大重试次数(RTRY)是10,接着重试将按如下进行: DIFF * (1.0), DIFF * (9/10), DIFF * (8/10), 等。 Geometric模式产生一个1/2公因子修正的等比序列。例如,如果最大重试次数是10,则重试将按如下进行: DIFF * (1.0) DIFF * (1/2) DIFF * (1/4) DIFF * (1/8)等。 In-Position模式只用于servos。这个模式在重试过程中不发送任何移动命令给控制器。它仅等待DIFF字段小于RDBD字段。这个模式是为了与非零DLY和RTRY字段一起使用。 |
名称 | 访问 | 提示 | 数据类型 | 注释 |
OUT | R/W | 输出说明 | OUTLINK | 如果指定了软通道设备支持,这个字段是一个EPICS链接,每次更改DVAL,设备支持把DVAL写入这个链接。否则,这个字段指定要被控制的硬件。 |
RDBL | R | 回读位置 | INLINK | 当字段URIP(如果存在,使用回读)值为"Yes"(1)时,这个字段指定从其读取电机当前位置的字段。如果这个字段不包含一个有效EPICS链接,URIP也可以为值"No"(0)。如果指定了软通道设备支持,通过一个CA事件任务监视这个字段值变化。 |
DOL | R | 所要输出位置 | INLINK | 如果这个字段包含一个有效EPICS链接,并且OMSL字段中值为"closed_loop(1)",则每次运行这个电机记录时,它将从这个链接为VAL字段获取一个值并且移动到那个位置,忽略所有其它驱动字段。闭环模式没有被广泛地测试。 |
OMSL | R/W | 输出模式选择 | GBLCHOICE | (0: "superivory", 1:"closed_loop") 如果这个字段设为"closed_loop(1)",并且字段DOL包含一个有效地EPICS链接,每次运行这个字段时,它将为这个VAL从这个链接获取一个值并且移动到那个位置,忽略所有其它驱动字段。闭环模式没有被广泛地测试。 |
RLNK | R | 回读输出链接 | OUTLINK | 如果这个字段包含一个有效EPICS链接,则每次运行这个电机记录时,它将将(工程单位)回读值RBV写入那个链接。 |
DINP | R/W | DMOV输入链接 | INLINK | 如果指定了软通道设备支持,由这个链接指定地值用于在MSTA字段中设置DONE位;其接着设置DMOV字段。 |
RINP | R/W | RMP输入链接 | INLINK | 如果指定了软通道设备支持,由这个链接指定的值用于设置RMP字段。 |
STOO | R/W | stop输出链接 | OUTLINK | 如果指定了软通道设备支持,每次发出STOP_AXIS电机命令时,写1到这个指定的链接。 |
仅在选择了软通道设备驱动时,才处理软通道数据库链接(即:DINP,RINP和STOO)。当使用任何其它电机记录设备驱动时,忽略这些链接。
通过一个CA事件任务,监视输入链接(即:DINP,RDBL和RINP)的值变化。用户必须选择一个dial输入链接(RDBL)或者一个raw输入链接(RINP),但不是同时。到此时,以上链接不是动态可重定目标的。
注意:软通道设备支持当且仅当首次提交由RDBL指向的PV时才重置目标位置(VAL/DVAL/RVAL)为实际位置,(RBV/DRBV/RRBV)。因而,软通道设备支持需要RDBL PV在其首次被提交时有一个有效值。
注意:JOG[F/R]对软通道设备支持无效。
名称 | 访问 | 提示 | 数据类型 | 注释 |
HLM | R/W* | user高限位 | DOUBLE | VAL字段最大允许值。如果HLM更改使得VAL不再小于HLM,则记录将设置字段LVIO(限位违反)设为1。如果DIR字段有值"Pos",则HLM将总是与DHLM保持一致,否则HLM将总是与DLLM保持一致。 |
LLM | R/W* | user低限位 | DOUBLE | VAL字段最小允许值。如果LLM更改使得VAL不再大于LLM,则记录将设置字段LVIO(限位违反)设为1。如果DIR字段有值"Pos",则LLM将总是与DLLM保持一致,否则LLM将总是与DHLM保持一致。 |
DHLM | R/W* | dial高限位 | DOUBLE | DVAL字段最大允许值。如果DHLM更改使得DVAL不再小于DHLM,则记录将设置字段LVIO(限位违反)设为1。如果DIR字段有值"Pos",则DHLM将总是与HLM保持一致,否则DHLM将总是与LLM保持一致。 |
DLLM | R/W* | dial低限位 | DOUBLE | DVAL字段最小允许值。如果DLLM更改使得DVAL不再大于DLLM,则记录将设置字段LVIO(限位违反)设为1。如果DIR字段有值"Pos",则DLLM将总是与LLM保持一致,否则DLLM将总是与HLM保持一致。 |
LVIO | R | 限位违反 | SHORT | 此字段值为1,表示dial值驱动字段DVAL或者dial值回读字段DRBV超出了限位(DHLM, DLLM),并且这将阻止电机移动。如果消齿隙距离BDST是非0,它进一步限制DVAL的可用范围。当点击JOG按钮时,如果/当DVAL进入任一限位的1秒移动时间内,,LVIO变为1,并且使电机停止。 |
PERL | R/W | 周期限制 | RECCHOICE | (0:"No", 1:"Yes")。未实现。原来打算支持对VAL字段独立于实际软限制HLM和LLM地周期"限位"(诸如:与一个转台相关联,例如[0...360]或[-180,180])。 |
HOPR | R/W | 上操作范围 | DOUBLE | 未使用。见HLM和DHLM |
LOPR | R/W | 下操作范围 | DOUBLE | 未使用。见LLM和DLLM |
名称 | 访问 | 提示 | 数据类型 | 注释 |
HLS | R | 在高限制开关 | SHORT | |
RHLS | R | raw高限制开关 | SHORT | |
LLS | R | 在低限制开关 | SHORT | |
RLLS | R | raw低限制开关 | SHORT |
如果这两个字段HLS和RHLS任何一个为非零,则电机处于正限位开关,正感应在此处,那是user坐标系对应HLS的位置,而raw(step-数目)坐标系对应RHLS地位置。
如果这两个字段LLS和RLLS任何一个为非零,则电机处于负限位开关,负感应在此处,那是user坐标系对应LLS的位置,而raw(step-数目)坐标系对应RLLS地位置。
名称 | 访问 | 提示 | 数据类型 | 注释 |
SPMG | R/W* | Stop/Pause/Move/Go | RECCHOICE | (0:"Stop",1:"Pause",2:"Move",3:"Go") |
这个字段主要用于交互使用,通常有值"Go"。
如果用户设置这个字段为"Stop",电机将减速到停止,VAL字段将被设为与RBV字段相同,DVAL字段将设成与DRBV字段相同。(这些操作确保在一个驱动字段被更改前电机将不再启动移动)。在任何情况下,当SPMG有值"Stop"或"Pause"时,电机将不移动。
如果"SPMG"有值"Move"时,当一次移动结束时,电机记录将重置SPMG为"Pause"。这些行为支持无论在驱动字段中发生了什么,想要一个电机在它们发出"Move"前保持静止的用户。
名称 | 访问 | 提示 | 数据类型 | 注释 |
STOP | R/W* | Stop | SHORT |
当这个字段设为1时,记录将立即重置它为0,并且电机将减速到停止。当电机停止时,VAL将设成与RBV相同,而DVAL将设为与DRBV相同。(除非一个驱动字段被显著被修改,否则下次允许这个记录时,电机将不启动移动。如果你想要电机暂停,使用SPMG字段)。
名称 | 访问 | 提示 | 数据类型 | 注释 |
HOMF | R/W* | 向前复位 | SHORT | |
HOMR | R/W* | 反向复位 | SHORT |
当这些字段中一个设为1,如果 已经移动了,电机将减速到停止,以ACCL指定的加速和HVEL指定的速度(在dial坐标中)在指示的方向上移动,直到硬件探测到"复位"开关变成有效。如果有,接着硬件将做一些取决于硬件的操作来响应它的"复位"命令。(OMS硬件使得电机减速到停止)。当电机停止时,VAL字段将被设置为与RBV字段相同,而DVAL字段将设为与DRBV字段相同。这些字段可以被设为1,但但设置任一个字段为0产生一个错误。当归位过程结束或者取消时,积累设置HOME[F/R]为0。
名称 | 访问 | 提示 | 数据类型 | 注释 |
JOGF | R/W* | 向前点动电机 | SHORT | |
JOGR | R/W* | 向后点动电机 | SHORT |
当这两个字段之一被设为1,如果已经移动中,电机将减速到0,并且(在user坐标中)在指示的方向中以ACCL指定的加速度和VELO指定的速度移动,直到这个字段变为0。接着电机将设置VAL为RBV和DVAL为DBRV,减速到停止,并且执行(如果BDST不为零,齿隙-校准)移动到位置,这个字段到此变为0。
当通过通道访问使用这些字段,是危险的,因为在接受到第二条信息前,电机不停止移动。如果一个非常忙碌的网络会引起第二条消息丢失,电机将移动至它的限位开关或者硬停止。
名称 | 访问 | 提示 | 数据类型 | 注释 |
TWF | R/W* | 向前微调电机 | SHORT | |
TWR | R/W* | 向后微调电机 | SHORT | |
TWV | R/W* | 微调step大小 | DOUBLE |
当TWF和TWR字段中一个被设为1 ,积累立即重置它为0,并且电机将(在user坐标)以ACCL指定加速和速度VELO移动一段TWV距离(如果BDST非零,带齿隙消除)。
名称 | 访问 | 提示 | 数据类型 | 注释 |
VAL | R/W* | user所需值 | DOUBLE | 这是在user坐标中所需位置。当写入这个字段,DVAL和RVAL将被相应的更改,并且电机将移动到新写入的位置(如果BDST非零,带有齿隙消除)。 |
DVAL | R/W* | dial所需值 | DOUBLE | 这是在dial坐标中所需位置。当写入这个字段,VAL和RVAL将被相应的更改,并且电机将移动到新写入的位置(如果BDST非零,带有齿隙消除)。 |
RVAL | R/W* | raw所需值 | DOUBLE | 这是在raw坐标中所需位置。当写入这个字段,VAL和DVAL将被相应的更改,并且电机将移动到新写入的位置(如果BDST非零,带有齿隙消除)。 |
RLV | R/W* | 相对值 | DOUBLE | 当字段被更改,它的值将被加到VAL,这个字段自身将被重置为0,并且电机记录运行将表现得就像已经直接修改了VAL字段。 |
SYNC | R/W* | sync位置 | RECCHOICE | 当这个字段被设为Yes(1),这个记录设置Drive字段(VAL/DVAL/RVAL)为它们的回读值(RBV/DRBV/RRBV)并且设置SYNC字段回No(0)。 |
名称 | 访问 | 提示 | 数据类型 | 注释 |
RBV | R | user回读值 | DOUBLE | 当前电机位置,user坐标表示,从电机硬件(默认),或者(如果UEIP非零)从电机控制器硬件支持的编码器,或者(如果URIP非零),从回读链接RDBL。 |
DRBV | R | dial回读值 | DOUBLE | 当前电机位置,dial坐标表示,从电机硬件(默认),或者(如果UEIP非零)从电机控制器硬件支持的编码器,或者(如果URIP非零),从回读链接RDBL。 |
DMOV | R | 结束移动至指定值 | SHORT |
当电机记录开始一个运动时,DMOV字段设为0,并且在可能需要的任何重试和齿隙校准中保持0,直到电机记录完全结束那个运动,到此,这个字段被设为1。在命令电机移动时,确保执行DMOV并且提交了一个1/0/1脉冲,即使因为命令电机移动到其当前位置,没有发生实际的运动。
名称 | 访问 | 提示 | 数据类型 | 注释 |
MOVN | R | 电机正在移动 | SHORT | 当记录操作电机实际移动时,这个字段被设为1。这个字段不是DMOV的相反,由于在一个复杂运动过程中,如果此运动包含一个临时停止,它可能变成0. |
DLY | R/W | 回读稳定时间(s) | DOUBLE | 电机控制器结束和电机记录结束(即:DMOV)之间延时时间(用秒表示) |
DIFF | R | dval-drbv差值 | DOUBLE | DIFF是用工程单位表示的在所需电机位置和回读设备的当前位置报告之间的差值。 |
RDIF | R | rval-rrbv差值 | LONG | RDIF是用"raw"单位表示的差值(通常:steps)。 |
RRBV | R | raw回读值 | DOUBLE | 电机,编码器或回读链接的当前位置,从已经选取的提供位置信息的任何来源获取。与这个字段相关联的单位取决于来源。 |
RMP | R | raw电机位置 | DOUBLE | 硬件计步寄存器的内容。这个字段包含与dial值相同的信息,但用steps表示,而不是用工程单位。 |
REP | R | raw编码器位置 | DOUBLE | 硬件的编码器计数寄存器的内容,这个字段包含与dial值相同的信息,但用编码器计数表示,而不是用工程单位。 |
MSTA | R | 电机状态 | ULONG | 从硬件接收的电机状态。MSTA位定义如下: 1) DIRECTION:上个raw方向;(0:负,1:正) 2) DONE:运动结束。 3) PLUS_LS:正限位开关已被撞击 4) HOMELS:归位开关被撞击。 5) Unused: 6) POSITION:启用了闭环位置控制。 7) SLIP_STALL:发现了打滑/停转(即:致命的跟随错误) 8) HOME:是否在归位位置 9) PRESENT:编码器存在 10)PROBLEM:驱动程序停止轮询或者硬件问题 11)MOVING:非0速度存在 12)GAIN_SUPPORT:电机支持闭环位置控制 13)COMM_ERR:控制器通信错误 14)MINUS_LS:负限位开关被撞击 15)HOMED:电机已经被归位 如果SLIP_STALL或PROBLEM位被探测到,记录进入MAJOR STATE警报。如果设置了HLSV,如果已经达到了一个高软限位或者硬限位(PLUS_LS),则记录进入HIGH警报。对于低限位类似。 |
TDIR | R | 移动方向 | SHORT | 电机当前(或者最近)在这个方向上运行,如从硬件接收到。如果0,raw回读值应该正在减小。 |
ATHM | R | 处于HOME | SHORT | 硬件的"home"开关的状态。如果1,电机已经撞击了这个开关。 |
RCNT | R | 重试次数 | SHORT | 电机记录发现电机不能落在所需位置的重试死区距离内的次数。 |
MISS | R | 耗尽重试 | SHORT | 如果1,电机不能落在所需位置重试次数已经多于允许的次数。这个字段在电机成功达到所需位置时被重置。 |
REVL | R | raw速度 | LONG | 电机实际移动速度(用每秒步数表示)。 |
STUP | R/W | 状态更新 | RECCHOICE | STUP字段功能如下: 1)STUP的有效值为OFF(0), ON(1)和BUSY(2)。 2)通道访问(CA)客户端写ON(1)到STUP字段,这引起电机设置STUP为BUSY(2)并且请求一个控制器状态更新。在状态被更新后,记录设置StUP为OFF(0)。 3)仅在STUP是OFF(0)时,CA客户端被限制于写ON(1)到STUP。 4)限制CA客户端写ON(1)到STUP的频率(并且因此引发开销)是使用者的责任。 |
ADEL | R/W | 存档死区 | DOUBLE | 当RBV与前个存档值相比,如果RBV移动超出了ADEL死区,即如果((RBV-ALST)>ADEL),才提交一个存档值。ADEL默认为0,这表示存档所有RBV的变化。 |
MDEL | R/W | 监视死区 | DOUBLE | 当RBV与前个受监视值相比,如果RBV移动超出了MDEL死区,即如果((RBV-MLST)>MDEL),才提交一个监视值。MDEL默认为0,这表示存档所有RBV的变化。 |
ALST | R | 上个被存档的值 | DOUBLE | 存储上个被存档的RBV值。用于确定当前RBV是否再一个ADEL死区内。 |
MLST | R | 上个被监视的值 | DOUBLE | 存储上个被提交的RBV值。用于确定当前RBV是否再一个MDEL死区内。 |
PID相关的记录字段只接受归一化的值(即:0.0<=value<=1.0)。在发送它们给电机控制器前,设备支持缩放这些记录字段为有效的电机控制器参数。让电机控制器PID参数由CKP,CKI和CKD表示;接着PID系数被按如下从电机记录字段转换成控制器参数:
对于MM4000;CKP=PCOF,CKI=ICOF和CKD=DCOF。
对于所有OMS控制器:CKP = 1999.9 * PCOF, CKI = 1999.9 * ICOF, CKD = 1999.9 * DCOF.
注意以下:
1)当命令移动OMS控制规律是PD循环时,当它保持一个位置时,它时一个PID循环。
2)在OMS控制器中不能关闭比例增益(即:设为0)。最小值是PCOF=0.00005(CKP=0.1)。如果使用者对OMS控制器设置PCOF<0.00005,设备支持悄悄地重置它为其最小值0.00005。
名称 | 访问 | 提示 | 数据类型 | 注释 |
CNEN | R/W | 启用控制 | RECCHOICE | (0:"Disable", 1:"Enable")。启用/禁用闭环位置控制。仅在在MSTA中GAIN_SUPPORT位为真,这个字段才有效。这个字段被使用者和设备支持设置。当设备支持发现一个运动控制器错误时,它设置CNEN为Disable;例如:超过了最大以下错误 |
PCOF | R/W | 比例增益 | DOUBLE | 有效范围:0.0<=PCOF<=1.0 |
ICOF | R/W | 积分增益 | DOUBLE | 有效范围:0.0<=ICOF<=1.0 |
DCOF | R/W | 微分增益 | DOUBLE | 有效范围:0.0<=DCOF<=1.0 |
名称 | 访问 | 提示 | 数据类型 | 注释 |
HIHI | R/W* | HIHI警报限制 | DOUBLE | |
LOLO | R/W* | LOLO警报限制 | DOUBLE | |
HIGH | R/W* | 高警报限制 | DOUBLE | |
LOW | R/W* | 低警报限制 | DOUBLE | |
HHSV | R/W* | hihi严重性 | GBLCHOICE | 未用 |
LLSV | R/W* | lolo严重性 | GBLCHOICE | 未用 |
HSV | R/W* | 高严重性 | GBLCHOICE | 未用 |
LSV | R/W* | 低严重性 | GBLCHOICE | 未用 |
HLSV | R/W* | HW限位开关违反严重性 |
名称 | 访问 | 提示 | 数据类型 | 注释 |
PREC | R/W | 显示精度 | SHORT | 由MEDM和其它通道访问客户端显示的十进制小数点右边的数字位数。 |
EGU | R/W | 工程单位 | STRING | 发送给请求工程单位的通道访问客户端的字符串 |
VERS | R | 代码版本 | DOUBLE | recMotor.c代码的版本号 |
CARD | R | 板卡号 | SHORT | 对于基于VME的设备(即:OMS VME8/44 OMS VME58和V544),这是VME板卡号,源于输出链接。板卡根据它们的VME地址从0开始编号。Oregon Micro System系列VME8和VME44板卡按相同系列出现,由于它们由相同驱动程序处理。Oregon Micro System VME58卡被单独编号,Highland Technology V540卡相同。对于基于非VME的设备/驱动,这个字段设为-1. |
以下三个字段组成基本命令功能。基本命令记录字段可用于使用者以固定,预定义,次数发送基本ASCII命令给电机控制板。这些字段中每一个被定义为一个字符串。命令协议参考电机控制器手册。电机记录或设备驱动程序不进行错误检查来确保命令字符串有效。每个字段由设备驱动程序根据命令协议终结。产生来自运动控制板响应的基本命令是有效的,但这个响应不被处理。这个特性当前将对OMS VME8/44/58或Newport MM4000设备支持可用。
1) 在INIT,PREM和POST字段中才有效
2)必须通过以下识别它们:
a) 设备指令字符串的第一个字符必须是一个'@'。
b) 一个或多个字符后跟一个终止的'@',即,设备指令必须有一个非0长度。
c) 有效设备指令:
DPM_ON指令见以下驱动电源监视。PUT指令支持更改一个数据库变量的值。注意:PREM支持在电机移动前一个时间延时参数,但POST不支持。回读稳定时间字段(DLY)应该用于在POST字段中指定的PV被写入后创建一个时间延时。
3)设备指令字符串在被发送给控制器前被删除有效设备指令(包括@)并且测试非零长度。例如,指定INIT字符串"@DPM_ON@HE",在HE被发送给控制器前,删除设备指令@DPM_ON@。
1)这个特性仅对OMS VME58设备支持可用。
2)8个User I/O信号按如下被分配给了8个可能的VME58轴:
3)驱动电压监视启动时默认为禁用。通过输入设备指令"@DPM_ON@"命令到电机记录初始化字段(即:INIT),请求启用驱动电源监视。INIT字段在初始化时被处理(即:启动),因而如果没有错误,驱动电源监视在下次启动后将被启用。
4)当进行一个启动驱动电源状态监视的请求时,(使用VME58 “RB”命令)进行一个错误检查来确认User I/O已经被配置为一个输入。如果发现了一个配置错误,以下消息将出现在错误日志中。"Invalid VME58 configuration; RB=0x####",此处"####"是对RB命令的VME58的响应。
5)当驱动电源状态监视被启用时,并且发现了一个电源故障,设备驱动通过激活MSTA中RA_OVERTRAVEL位做出响应。取决于DIR字段,这导致HLS或LLS被激活。此外,以下消息将在错误日志中出现:"Drive power failure at VME58 card#?? motor#??"。
名称 | 访问 | 提示 | 数据类型 | 注释 |
INIT | R/W | 启动命令 | STRING | 在记录初始化时发送。 |
PREM | R/W | 运动前命令 | STRING | 在引起运动的每条命令字符串前发送。 |
POST | R/W | 运动后命令 | STRING | 在完成运动结束后或者当一个超范围运动限位开关被探测之后发送。 |
LOCK | R/W | 软通道位置锁 | RECCHOICE | 带有"硬"电机回读位置的"软"电机的目标位置。软通道设备支持探测到"硬"电机在其看到由DINP指向的PV变成假时启动了移动,而"软"记录的DMOV为真。在多轴程序中自动同步是不需要的。因此,设置LOCK字段为"YES"禁用这种自动同步。 |
NTM | R/W | 新目标监视 | RECCHOICE | 有关当电机处于移动时,电机记录如何处理一个新目标位置的要求如下: 情况1:记录记录被传递一个新位置,它位于当前电机运动相反方向。如果NTM是"YES",电机立即停止并且传给一个到这个新位置的移动命令。如果NTM是"NO",在发送给它移动到新位置的运动命令前,它完成前一个移动。 情况2:电机记录被发送一个新位置,它在当前电机运动相同的方向,但新位置比原来目标位置更接近电机的当前位置。如果NTM是"YES",在电机穿过新位置后停止;接着发送一条返回新位置的命令。如果NTM是"NO",在发送移动到新位置的移动命令前,电机完成先前的移动。 情况3:电机被发送一个新位置,它在与当前电机运动相同的方向上,但新位置比原先位置离电机当前位置更远。在电机达到原先目标位置并且停止,发送一条命令移动到新的目标位置。这种情况与NTM无关。NTM默认为"YES",仅对软电机设置它为"NO"。应该用NTM设为"NO"配置软电机,防止以上情况1用齿隙消除干扰"硬"电机。 |
NTMF | R/W | 新目标监视死区因子 | SHORT | 确定NTM死区=NTMF*(|BDST| + RDBD)。NTMF必须>=2。NTM死区防止NTM逻辑在一个DC 超出其目标位置的电机移动结尾发出一个STOP命令。 |
名称 | 访问 | 提示 | 数据类型 | 注释 |
CBAK | 无 | 回调结构体 | 不可访问 | |
LVAL | R | 上个user des值 | DOUBLE | |
LDVL | R | 上个DIAL des值 | DOUBLE | |
LRVL | R | 上个RAW des值 | DOUBLE | |
LRLV | R | 上个REL值 | DOUBLE | |
CDIR | R | raw命令方向 | SHORT | 1:“POS”,0:“Neg” |
PP | R | 提交运行命令 | SHORT | |
MIP | R | 运动进行中 | SHORT | |
MMAP | R | 监视掩码 | ULONG | |
NMAP | R | 监视掩码 | ULONG | |
LSPG | R | 上个SPMG | RECCHOICE |
以下表格简要描述了在电机模块中的一些文件:
motorRecord.dbd | motor记录的数据库定义 |
motorRecord.c | motor记录的记录支持 |
motor.h | 由所有.c文件包括的头文件 |
motordevCom.c | 所有motor记录设备驱动共有的设备支持 |
motordevCom.h | 设备支持头文件 |
motordrvCom.c | 所有motor记录设备驱动共有的驱动支持 |
motordrvCom.h | 驱动支持头文件 |
motordrvComCode.h | 所有motor记录驱动共有的局部变量 |
注意:任何和所有motor记录设备驱动需要所有以上文件 | |
devSoft.c | 软通道设备支持 |
devSoftAux.c | 软通道设备支持(注意:CA和记录访问代码不能都驻留在相同文件中;每个文件定义(重定义了)DBR。因而,在这个和以上文件根据它们是否面向记录(devSoft.c)或面向CA(devSoftAux.c)分开功能)。 |
devSoft.h | devSoft.c和devSoftAux.c包含的头文件 |
motorx.adl | 小的电机控制窗口 |
motorx_tiny.adl | 微型的电机控制窗口 |
motorx_more.adl | 中型的电机控制窗口 |
motorx_setup.adl | 用于单电机的设置窗口 |
motorx_all.adl | 用于单电机的调试窗口 |
这些文件构建medm窗口来访问电机记录。要从命令行使用它们之一,例如,输入:
medm -x -macro "P=XXX:,M=m1" motorx.adl
此处:XXX:m1是IOC中一个电机记录的名称。这些文件也可用于通过传递参数"P=XXX:,M=m1"从其它medm窗口的关联显示。
在驱动模块中示例IOCs中可以找到示例启动脚本。
settings.req | 可以创建一个保存多电机设置的文件 |
yyMotorSettings.req | 一个指定电机的save设置。这个文件被settings.req #include(一次对应一个电机) |
positions.req | 可以创建一个保存多个电机的位置的文件 |
yyMotorPostions.req | 一个指定电机的保存位置。这个文件被positions.req #include(一次对应一个电机) |
这些文件告诉备份/恢复工具如何包含电机设置和位置。
在电机正在移动时,你一定不能修改电机分辨率,这个记录当前没有对此做防备。没有请求读取电机位置寄存器,编码器或限位开关的方法。只在电机移动时,才读取这些。由于限位开关信息由OMS硬件传递的方式,电机记录不能同时知道两个限位开关的状态。它只知道电机正在移动方向上限位开关的状态。
如果在电机已经处于运动中时,请求移动,原来的移动将仍然接收到一个(无用的)齿隙矫正。
更改MRES(电机分辨率)应该更改VELO(用每秒工程单位表示的速度),并且保留S不变(用每秒转数表示的速度)。当前,VELO和S似乎都不变化,单记录表现就像S已经被更改来与VELO保持一致。SBAK和SBAS上发生相同事情。
这个示例假设控制器是一个MM4000,并且一次仅移动控制器中一个电机(MM4000)电源开/关影响所有电机。如果使用者想要系统按如下执行:
a) 用电机电源关闭启动。
b) 在电机运动前打开电机电压。
c) 在电机运动后关闭电机电源。
则按如下设置:
a) INIT="MF"
b)PERM=“MO”
c) POST="MF"
以下示例是一个使用软通道设备支持来允许使用者转换转动位置命令为线性移动的简单示例。这个示例假设这个系统由一个驱动正切臂的直线运动平台组成。使用者命令与臂与垂线的夹角的系统。数据库转换这个角度为一个沿着一个轴的线性位置,这个轴是垂直于旋转中心一米。
以下数据库实现了以上描述的系统。这个数据由四个记录组成:
a) rotary:一个软电机记录,使用者向它发出以度为单位的角度位置命令
b) convertDriveValue:一个calcout记录,它把命令的位置从度转换到mm。
c) linear:一个使用了Oms58设备支持的硬电机记录,它接收以mm表示对的线性位置命令。
d) convertReadbackValue:calcout记录,它把反馈位置从mm转成度。
注意:以下有关这个示例数据库和软通道设备支持:
a) 不支持点动一个软通道电机记录。
b) 在convertReadbackValue记录中,在INPA字段中需要CP,来获取对rotary记录持续回读更新。否则,rotary记录将只在移动结束时才更新。
c) convertDriveValue记录把rotary的DVAL字段从角度转成弧度,取切线,从米转成毫米,并且最终发送这个值给线性的DVAL字段。
d) convertReadbackValue记录把线性的DRBV字段从毫米转成米,取反正切,并且最终从弧度转成角度。
grecord(motor,"$(user):rotary")
{
field(DTYP,"Soft Channel")
field(OUT,"$(user):convertDriveValue.A PP MS")
field(RDBL,"$(user):convertReadbackValue.VAL NPP MS")
field(URIP,"Yes")
field(STOO,"$(user):linear.STOP PP MS")
field(DINP,"$(user):linear.DMOV NPP MS")
field(MRES,"0.001")
field(RRES,"1.000")
field(PREC,"3")
field(DHLM,"45")
field(DLLM,"-45")
field(TWV,"5")
field(RTRY,"0")
field(EGU,"deg.")
}
grecord(motor,"$(user):linear")
{
field(DTYP,"OMS VME58")
field(VBAS,"1.0")
field(VELO,"25.0")
field(OUT,"#C0 S0 @")
field(MRES,"0.001")
field(PREC,"3")
field(DHLM,"1000")
field(DLLM,"-1000")
field(RTRY,"0")
field(TWV,"1")
field(EGU,"mm.")
}
grecord(calcout,"$(user):convertDriveValue")
{
field(DESC,"Convert rotary to linear")
field(CALC,"TAN(A / 57.296) * 1000") # A是以角度为单位,A/57.296转成弧度单位
field(OUT,"$(user):linear.DVAL PP MS")
}
grecord(calcout,"$(user):convertReadbackValue")
{
field(DESC,"Convert linear to rotary")
field(CALC,"ATAN(A / 1000) * 57.296")
field(INPA,"$(user):linear.DRBV CP MS")
}
本文档的这部分尝试记录现在的电机记录设计决定背后的原因。
对于提供了它们自身内部软件行程限位的电机控制器(例如:MM4000),电机记录将只允许使用者设置dial行程限位(即:D[H/L]LM),它们在控制器的行程限制范围内。在做这个设计决定中,假设一个专家使用者输入将保护其它使用者达到硬行程限位的控制器行程限位(可能,通过一个前面板使用者界面)。有它们自己行程限位的控制器被命令移动到它们有效范围外时,它们用一个错误响应。因而,没有允许dial行程限位超出控制器范围的命令。
具有与于OMS控制器不同特性的控制器的设备驱动支持,诸如Newport MM4000,产生了新问题。其中一个问题是电机记录是否应该从控制器的值设置设置它的EGU和MRES字段。我们认为不应该。
背景:MM4000是一个有它自己前面板,非易失性存储器和电源的独立控制器。使用者可以完全从前面板配置MM4000;包括在前面板上显示哪个工程单位。一旦选择了工程单位,当与一个主机系统(即:EPICS)通信时,这些相同单位将被MM4000使用。由于一个主机可以对MM4000查询这个控制器的工程单位和它的定位分辨率,根据存储在MM4000控制器中的值,自动设置电机记录的EGU和MRES字段是可能的,但我们决定不做这件事。
为了最大化灵活性,我们决定保持这些特性在电机记录和控制器之间分开。这个决定使电机记录EGU字段(以及相应的,MRES)被设成一个电机控制器不支持的程序专用的值(例如,kV)。
参考网页:Motor Record and related software (anl.gov)