# 步进按键

> 一对 − / + 按键，在所声明的范围之内把点位从当前值移动一个步长。

**步进按键**是那对 − / + 按键，在一台只有手指、没有键盘的工作站上轻推一个设定值。每按一次写入的是*点位的读数加上一个步长*，所以和[输入框](component-input)的按键、[选择器](component-selector)的选项不同，那些带的是绝对值，而这一对必须先知道读数：没有东西可读时，两个按键都是死的。它属于*控制*类；新放置的一个占 4 × 1 个单元格。

这一对按键自己不画任何读数；如果那个数字应该出现在屏幕上，就在按键旁边配一个[数值](component-value)。

## 数据 {#data}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 地址 | 被移动点位的带根 Logic 地址：一个内部存储值变量，或者一个可写点位。列表收窄到可写点位。 | 自由文本；建议的是可写点位 | 空 |

## 格式 {#format}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 小数位 | 发出去的值在答复行上写几位小数，这是这一对按键唯一写出来的那个数字。留空则跟随工作站的小数偏好。超出区间的位数按边界取，面板会说明这一点。 | 0 到 15，或留空 | 空 |

## 步长 {#step}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 步长 | 按一次把点位移动多远。 | 任意为正的有限数值 | 1 |
| 最小值 | 这一对按键把点位移到的最低值。留空就让这一侧敞开：没写出来的边界不是一个在无穷远处的边界，它就是没有边界。 | 任意数值，或留空 | 空 |
| 最大值 | 这一对按键把点位移到的最高值。留空就让这一侧敞开。最小值高于最大值时，两者之间没有任何值，面板会警告说两个按键都不会移动这个点位。 | 任意数值，或留空 | 空 |

## 这个范围怎么挡住一步 {#how-the-band-holds-a-step}

- 越过边界的一步**停在那个边界上**：操作员要的是“走一步，走到这里为止”，这和输入框宁可拒绝、也不替他挪动的那个键入的数字不是一回事。
- 无处可去的按键会**变成不可用**：点位已经坐在（或者越过了）那个边界。
- 这个范围只会*停下*一个按键，绝不会把它掉头：已经越过某个边界的点位（被一个动作、一个配方、另一幅画面写到那里的），不会被那个指向更外面的按键往回赶。往里走的那个按键仍然有效，并且到边界为止。
- 点位声明的限值（它的**限值**环节已启用）也是一个边界，与这里的最小值、最大值一起起作用：以两者中更紧的那个为准，所以这一步会停在点位本来会钳位的地方，答复行报出的是真正发出去的值。

## 写入的含义 {#write-semantics}

按下会累积，写入不会堆积。一根手指按住 **+** 可能跑得比现场还快，所以在一次写入还在途中时到来的那些按下会被数着，下一次写入把它们一次带走：十次快触碰是十个步长，绝不是十次写入，要的东西一个不丢，没要的东西一个不发。在同一轮里，每一步都从刚发出去的那个值算起，因为现场还没把它发布出来；屏幕上画的仍然只有点位报出来的东西。

每一次写入都经由工作站唯一的逻辑出口；每一次穿过都重新核对授权，所以连按当中的一次退出登录或者角色变更，会把余下的触碰挡住。拒绝（“这个点位存放的是 日期和时间，因此 4 不是它接受的值。”）和每一个发出去的值（“已写入 21.5”），都落在这一对按键的答复行上，它几秒之后过期。若格子里放不下这一行、这一对按键上面也没有角上标题，答复在显示期间占用被按下的那个按键上符号的位置，拒绝用错误的颜色。按键保持自己的宽度，放不下的部分以省略号截断，完整的答复在提示里；两个按键都不会移动，答复过期后符号回来。

在存放整数的点位上（量程换算和校准都不改变数值的整数类型点位，或者存放整数的内部存储值变量），带小数的步长会在按下时被拒绝，而不是被取整（“这个点位接受整数，因此不会写入 2.5。”），什么也不写入。

## 权限与锁 {#permissions-and-the-lock}

步进需要角色具备操作仪表画面的权限。锁着的时候两个按键都不可用，组件戴上共用的锁标记，理由在它的提示里（见[仪表画面页面](home)）。绑定的点位读不到时会戴上共用的读数异常标记，而且不管怎样按键都不可用，因为没有可以起步的东西。

共用的外观、标识、位置与图层、动作这几个分区，写在[组件页面](components#the-shared-property-sections)。
