# 状态指示灯

> 在一个布尔点位、一条报警或者一个报出状态代码的点位之上，显示一盏灯，或者把状态写出来。

**状态指示灯**是一眼就能看明白的指示器：把一个点位显示成一盏带颜色的灯，或者用集成商自己的说法把状态的名称写出来。它属于*显示*类；新放置的一个占 3 × 1 个单元格。指示占满整个单元格并居中，给它起名要用一个[文本](component-label)，放在你想放的地方。

绑定到一个普通点位时，指示灯读的是它的真假。绑定到一条报警（`Alarms.<name>`）时，读到的值是这条报警的*活动*状态，并且在报警等待确认期间指示灯会**闪烁**，无论是活动未确认期间，还是已复归但未确认的那段锁定期间。

## 数据 {#data}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 地址 | 被监视点位的带根 Logic 地址：一个布尔点位、`Alarms.<name>`，或者在声明了状态之后，那个报出状态代码的点位。建议列表把布尔点位排在前面。 | 自由文本；建议来自实时点位清单 | 空 |

## 状态 {#state}

这个分区要么问一个标志位的两面，*要么*问一份声明好的状态列表，绝不会两样都问：两者之中只有一个生效，面板也只显示生效的那一个。

### 一个标志位的两面 {#the-two-sides-of-a-flag}

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 显示 | 这一类型的两种画法：一盏带颜色的灯，或者用状态自己声明的说法、按它自己的颜色写出来。 | `一盏灯` · `把状态写出来` | `一盏灯` |
| 开 | 点位读为真时那个具名调色板颜色。 | `绿色` · `红色` · `黄色` · `橙色` · `蓝色` · `灰色` | `绿色` |
| 关 | 点位读为假时的颜色。 | 同一套调色板 | `灰色` |
| “开”的文字 / “关”的文字 | 写出来的那种呈现方式对每一面各写什么。要你明说，是因为一个状态的两面用的是你自己的词汇，比如“Running”“Open”“Auto”，没有哪个组件猜得出一个标志位代表的是哪一对。只有会写出文字的那种呈现方式才问这两项。 | 自由文本 | `开` / `关` |

调色板是状态指示灯自己那套固定的颜色，在编辑器的挑选器里和在画布上画出来是一样的；`灰色`是中性色。一种颜色*表示*什么，是你自己的约定，组件不去解读。画面为这六种颜色各存一个代码，挑选器再按界面语言把它读成名字，于是在一台工作站上搭好的画面，换到另一台上、不论那台设成哪种语言，读到的都是同一盏灯。

### 声明状态 {#declared-states}

一个报出代码的点位（停止、启动中、运行中、故障）不止两面。**声明状态**把上面那两面写下来当作头两个状态，并且打开一行等你填，于是已经配置好的东西不必写第二遍。每个状态是一张卡片：

| 字段 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 数值 | 现场处于这个状态时点位报出的那个代码。精确匹配：夹在两个代码之间的东西不是一个状态。一个标志位为真的那面报 1，另一面报 0。 | 任意数值 | 空（键入之前什么也没声明） |
| 颜色 | 这个状态在调色板里的颜色。 | 同一套固定的调色板 | `灰色` |
| 文本 | 这个状态生效时，写出来的那种呈现方式写什么；留空就什么也不写。所声明的词里最宽的那个，决定写出的状态要预留多少地方，于是现场在各状态之间移动时，这个词保持同一个大小。 | 自由文本 | 空 |
| 图标 | 这个状态生效时，*代替那盏灯*画出来的可选标记，从应用的图标库里按名称挑选，可以按名称或关键词搜索。只有灯的那种呈现方式才问这一项；目录里没有的名称画不出标记，那盏灯也就留在原处。表格里的 `—` 表示不要图标。 | 目录里的图标名称 | 不选 |

各行按自己的代码排序，从上往下读，状态词就是按代码递增排的，还没有代码的一行等在最后。把状态全部删掉，指示器就交还给一个标志位的两面。没有任何状态认领的值按它到来的样子显示，绝不显示成最接近的那个状态。

## 指示器显示什么 {#what-the-indicator-shows}

灯和写出来的状态回答的是同样三种情形，各用自己的词汇：

| 情形 | 灯 | 写出来 |
|---|---|---|
| 有一个状态（或者标志位的一面）生效 | 用这个状态的颜色画一盏实心的灯；给这个状态起了图标时，图标代替那盏灯；提示里带着这个状态的词 | 这个状态的词，用这个状态的颜色 |
| 点位答复了，但是没有一个声明好的状态认领这个读数 | 一个实心的中性色圆环，而不是某个状态的颜色，那会认领一个声明里没有的状态 | 读数本身写出来（数字按工作站书写数字的方式写，非数值点位则写出它原样的答复） |
| 点位读不到 | 一盏空心的灯 | 缺口短横 `—` |

只有第三种情形会点亮组件上那个共用的读数异常标记（见[组件页面](components#addresses-and-live-readings)）；质量良好的沉默只让灯变空心，不给组件加标记。只有看得见（读得到）的指示灯才闪烁。

写出来的状态绝不会画在角上的标题之上，也不会被单元格切掉。在矮的单元格里，它的文字停在可读性的下限，所以单元格矮得放不下角上的标题和写出来的状态时，标题会像在控制类组件上那样让出自己那一行，状态占满整个单元格。灯和状态的图标是标记而不是文字：它们改为缩到标题下面剩下的地方，标题保留。

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