# 数值

> 按格式显示的实时读数：把一个点位写出来，带单位、小数位、声明好的字段宽度，还可以带表示含义的区段。

**数值**是最基本的数值显示：它把实时地址空间里的一个点位写进自己的单元格，按你声明的格式来。读数占满整个单元格，给它配一句说明，用的是你放在旁边的一个[文本](component-label)，或者共用外观分区里组件自己的角上标题。它属于*显示*类；新放置的一个占 4 × 2 个单元格。

数值绝不显示陈旧的数字。读不到的点位画出缺口短横（`—`），用的是安静的次要墨色，同时组件戴上[组件页面](components#addresses-and-live-readings)所写的那个共用读数异常标记。一个质量良好、但此刻没有值的点位（两次运行之间空着的试验台、循环之外的计数器）画出同样的短横，但*不带*那个标记：那份沉默是正常的，不是故障。

## 数据 {#data}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 地址 | 所显示点位的带根 Logic 地址。列表会建议各种值类别的实时点位：数值显示不挑内容，点位里放的是数字、文字、标志位还是时刻，它都能按格式写出来。 | 自由文本；建议来自实时点位清单 | 空 |

字段下面，编辑器显示所选点位此刻读到什么，于是这份绑定在画面运行之前就自己确认了自己。

## 格式 {#format}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 单位 | 写在数值旁边的单位后缀，字号更小，用次要墨色。它算在预留的字段宽度里，所以绝不会掉出这一行。点位读不到时它隐藏。 | 自由文本 | 空 |
| 小数位 | 数值读数固定的小数位数。留空则跟随工作站的小数偏好（见[设置页面](settings-localization)），此时类型为整数的点位写出来不带小数。超出区间的输入按最近的边界取，面板会说明这一点。时钟格式和文字格式不写小数，所以那里不读这个数。 | 0 到 15，或留空 | 空（工作站偏好） |
| 位数 / 字符数 | 这个字段能容下多少，也就是数值显示约定背后的那份声明。作为**位数**（数值类格式）时：小数分隔符之前的位数；需要更多位的读数会被*标记*，绝不会写短。作为**字符数**（文本格式）时：这一行容得下多少个字符；更长的读数写短并加省略号。字段按所选格式声明的那种度量来命名。 | 位数：1 到 20 · 字符数：1 到 40，或留空 | 5 位数 · 12 个字符 |
| 字号 | 由单元格决定字号，还是由你指定。 | `单元格容得下的最大尺寸` · `我指定的大小` | `单元格容得下的最大尺寸` |
| 磅 | 指定的那个字号。只在指定模式下显示。指定的字号照字面来：不管在哪个单元格里都按那个字号绘制，绝不会为了塞下读数而缩小，放不下的东西是被标记，而不是被缩小。 | 9 到 144 磅 | 12 |
| 读数形式 | 读数用什么方式写出来。 | `数字` · `百分比` · `时长` · `文本` | `数字` |
| 数值按什么计 | **读数形式**为`时长`时，一个单位的值表示多少。经过的时间到手时只是一个普通的数，同一个数在这个点位上是毫秒，在另一个点位上却是分钟，所以由组件说明它按什么计。只在时长格式下显示。 | `秒` · `毫秒` · `分钟` | `秒` |

### 四种格式 {#the-four-formats}

- **数字**按工作站的小数偏好写出工程数值，或者按显式的**小数位**写。没有声明小数位的整数写出来不带小数，它有多少位就写多少位，不管有多大。
- **百分比**在同一个数字后面写上 `%`。数值*不会*被重新换算：点位本身就已经是百分数，数值转换链的算术留在 Connector 的转换环节里。
- **时长**写成时钟：`hh:mm:ss`，满一天以后写成 `d.hh:mm:ss`。计数为负时保留符号。运行的事件条目、历史里的行和 PDF 报告用的是同一种时钟。
- **文本**把点位答复的那些字原样写出来，一份工单、一个批次、一个配置的名称，来什么写什么。选中它同时也是一份声明：字段宽度改按**字符数**计算，而不是位数，于是宽度字段换了名称、换了默认值，行为也跟着变（省略号，而不是溢出标记）。

数字、百分比和时长说的是一个*数字*怎么写，而读数是不是数字由点位的类型决定，和工作站上其他所有地方一样。一个根本不是数字的读数（标志位、文字、时刻）毕竟也是答复了，所以不管选的是这三种里的哪一种，都照它本来的样子写出来，而不是留一个缺口：标志位显示为 `true` 或 `false`，绝不会写成带小数位的数字、百分比或时钟。`NaN` 也是一个读数：它就写成这个词，旁边带着单位，绝不会写成缺口短横。

## 读数是怎么画出来的 {#how-the-reading-is-drawn}

字号从不跟着数值走。自动模式下由单元格决定字号，上限是那份声明所预留的宽度（位数 + 分隔符 + 小数位 + 单位，或者所声明的字符数）；指定模式下，字号正是你键入的磅值。两个同样大小、带着同样声明的单元格，画出来的字号总是一样的，而一个在四到六个字符之间跳动的数值，绝不会把字体大小推来推去。

内容超出自己那份声明时会怎样：

| 情形 | 单元格显示什么 |
|---|---|
| 一个数字需要的位数多于所声明的 | `####` 溢出标记，完整读数（含单位）在提示里。这个标记只表示一件事：这个字段容不下这个数。 |
| 指定的字号需要的宽度多于单元格所有的 | 同一个 `####` 标记，因为照字面来的字号绝不缩小。指定字号时，提示里总是带着完整读数。 |
| 文本读数长于所声明的字符数 | 用省略号截断，完整文字在提示里。文字绝不戴数字的那个标记。 |
| 读数形式为数字、百分比或时长时，一个用文字写出的读数长于字段 | 用省略号截断，完整读数（含单位）在提示里。文字绝不戴数字的那个标记，哪怕它们全是数字也一样。 |
| 点位读不到 | 缺口短横 `—`。没有读数和没有地方，从不互相借用对方的标记。 |

数字靠在自己字段的右边，用等宽数字，这样一列数值组件才能自己对齐，整数部分变长时分隔符也守得住自己的位置。

## 刻度 {#scale}

这是各种读数类型共用的那份可选的区段声明：每个区段从列表中它上面那个区段结束的地方开始，一直覆盖到自己的上限，超过最后一个上限的读数不属于任何区段。区段用界面自身表示含义的那几种色调*给数字上色*；没有任何区段认领的读数保持普通墨色。

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 上限 | 区段在哪里结束（含该值），按点位的工程单位写。新建的区段这个字段是空的，而空的上限不等于零：在键入一个上限之前，这个区段什么也不认领，什么也不上色。 | 任意数值 | 空 |
| 区段含义 | 落在这个区段里的读数意味着什么。色调命名的是含义，具体上什么色由当前运行的主题决定。 | `中性` · `信息` · `正常` · `注意` · `严重` | `中性` |
| 为这个状态命名 | 给区段配的可选说法（“预热”“超压”）。只要有区段配了说法，数字下面就多出一行状态文字，写出当前区段的说法，用该区段的色调。 | 自由文本 | 空 |

只有在至少一个区段配了说法时，这一行状态文字才存在。没有名称可写时它仍占着自己的高度，这样读数跨过某个上限时，上面的数字不会跟着改变大小；它也会用省略号截断，完整说法在自己的提示里。上移和下移箭头把一个区段的含义和说法与相邻区段对调，而键入的那些上限留在原地。

数值是显示类组件：它不下达任何命令，所以从不戴锁标记。共用的外观、标识、位置与图层、动作这几个分区，写在[组件页面](components#the-shared-property-sections)。
