# 设备文件夹

> 驱动下面的文件夹：新建、重命名和删除它们，把设备归进去，两层的上限，文件夹页面，以及一个文件夹如何成为 Logic 地址中的一级。

一个**文件夹**在通信栏里把同一个驱动下面的设备分组，最多两层深。在总线上它什么都不改：轮询、Process 绑定和对外的 OPC UA 命名空间都看不见它。但它是 Logic 和仪表画面所用的那个**地址**中的一级，所以把设备归档就是一次地址改动，应用会替你改写每一处引用。除 Modbus RTU 和 MQTT 之外，每个驱动都有文件夹；Modbus RTU 的设备改由它们的串行线路来归档，MQTT 的设备则由它们的 Broker 来归档。在 Generic serial and TCP 和 SCPI instruments 下，只有不在线路上的设备能进文件夹，串行线路上的设备由线路来归档。看见文件夹需要“查看 Connector”；每一条文件夹命令都需要“配置 Connector”。

## 新建一个文件夹 {#creating-a-folder}

| 手势 | 落在哪里 |
| --- | --- |
| 栏底的**新建…** > `<Driver>` > **新建文件夹** | 落在驱动的本级。出现在每一个设备可以放进文件夹的已添加驱动下面，也就是除 Modbus RTU 和 MQTT 以外的每一个驱动。 |
| 栏底的**新建…** > `<Driver>` > `<Folder>` > **新建子文件夹** | 在那个文件夹里，作为第二级。只出现在第一级文件夹上。 |
| 一个打开着的文件夹的命令栏上、或它右键菜单里的**新建文件夹** | 落在那个文件夹里面，成为第二层。在第二层文件夹上，命令栏里的它置灰（“这个文件夹已经到了文件夹能嵌套的最深一层。”），菜单里也同样置灰。 |
| 右键点一台设备 > **移动到** > **一个新文件夹** | 落在驱动那一级，并且在同一个手势里把设备搬进去。 |
| 右键点一台设备 > **移动到** > **这里的一个新子文件夹** | 只对已经在第一层文件夹里的设备提供；建好子文件夹并把设备搬进去。 |

新文件夹叫“新建文件夹”（然后是“新建文件夹 2”，依此类推），它上面那根树枝会展开，它那一行马上变成一个名称字段：打上名字按回车确认；离开这个字段则保留“新建文件夹”这个名字。在有东西归进去之前，文件夹就空着立在那里。它作为“已创建”被记录下来，所以它能挺过重新加载，以及最后一台设备离开它；只要它还在，它的驱动就不能移除。操作记录条里报告“已创建文件夹‘新建文件夹’。”

## 文件夹页面 {#the-folder-page}

标题栏带着文件夹的名称；文件夹是空的时候写“文件夹只用来整理列表，别无他用。请在这里添加一台设备，或者从树里移一台进来。”，否则写“在这棵树里归类 3 台设备。文件夹只用来整理列表，别无他用。选中里面的一台设备即可查看和编辑它。”表里列的是**直接**归在这里的设备（子文件夹是树里的行，不是这张表里的行）：**设备**、**Endpoint**（基础 URI）、**点位**，以及一个**打开**动作。空的时候：“没有设备直接归在这里。请添加一台，或者从树里移一台进来。”

### 命令栏 {#the-command-bar}

| 命令 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- |
| **新建文件夹** | 在这里创建一个子文件夹并打开它的名称字段。 | 有运行占住工作站，运行时已停止，正在进行扫描或配对（“添加任何东西之前，请先结束正在进行的扫描或配对。”），或者这个文件夹已经在第二层。 | 没有“配置 Connector”权限时。 |
| **重命名文件夹** | 把文件夹那一行变成名称字段。 | 有运行占住工作站，或运行时已停止。 | 没有“配置 Connector”权限时。 |
| **删除文件夹**（危险色，靠右） | 把文件夹里的东西都退回驱动那一级，并撤掉这个文件夹。 | 同上。 | 没有“配置 Connector”权限时。 |

### 页面上 {#on-the-page}

让文件夹那张表长出行的命令在那张表的标题右侧、它所添加的行上方。

| 命令 | 位置 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- | --- |
| **新建设备** | **设备**标题右侧。 | 在这个文件夹里创建“新建设备”，在这张表格里突出显示并滚动到可见处。在 Matter 下面，它改为在驱动页面上打开配对表单，配对的设备归入这个文件夹。 | 有运行占住工作站，运行时已停止，或者正在进行扫描或配对（“添加任何东西之前，请先结束正在进行的扫描或配对。”）。在 Matter 下面，还有没有可用于配对的网络时（“请先添加设备要加入的网络。”）。 | 没有“配置 Connector”权限时。 |

文件夹行上的右键菜单提供新建设备、新建文件夹、重命名文件夹和删除文件夹；在第二层文件夹上，新建文件夹仍在菜单里，置灰，理由和命令栏上的一样。

## 给文件夹重命名 {#renaming-a-folder}

重命名会把里面每一台设备（含子文件夹里的）重新归档，走的是设备重命名所用的那同一套引用改写，然后再挪动文件夹自己的记录；记录条里写着“已把文件夹‘Meters’重命名为‘Utilities’。已更新 4 处引用。”名字在这些情况下被拒绝：留空或含有 `/`（“文件夹必须有名称，而且名称里不能包含‘/’。”）；同一层已经有一个同名文件夹（“这里已经有一个名为‘Meters’的文件夹。”：把两个文件夹并成一个属于搬移，必须当作搬移来要求）；或者同一层上有一台设备已经占了这个名字映射出来的地址段（“文件夹名称‘Pump 1’映射到地址段‘Pump_1’，它旁边的设备‘Pump-1’已经在用这个地址段。”）。文件夹名不区分大小写地比较，树里显示的是最先见到的那种写法；只改大小写仍然是一次真正的重命名，因为地址变了。

如果里面某台设备挪不动（一处保存失败的待存编辑，一次被拒绝的改写），重命名就在那里停下，并说清走到了哪一步：“重命名文件夹“Meters”在处理完 5 台设备中的 2 台后停止：… 已经移动过的设备留在“Utilities”里。”

## 移除一个文件夹 {#removing-a-folder}

“删除文件夹”会先问一句。空文件夹：“删除文件夹‘Meters’？”。否则：“要删除文件夹‘Meters’吗？它的 3 台设备会移回 Simulated 下面。什么都不会被删除；每一处引用都会自动跟上新地址。”里面每一台设备（含子文件夹里的）都通过引用改写回到驱动的本级，文件夹的记录也随之消失：“已删除文件夹‘Meters’。3 台设备回到了驱动本级。已更新 4 处引用。”删除文件夹从不删掉设备。

## 搬动一台设备 {#moving-a-device}

右键点一台设备，打开**移动到**。子菜单里列着**一个新文件夹**、**这里的一个新子文件夹**（设备位于第一层时才有），然后隔一条分隔线是**归入 `<Driver>`**（设备已经在驱动那一级时置灰）以及那个驱动的每一条现有文件夹路径，设备自己所在的那条除外。搬动会先保存设备上还没保存的编辑，再改写指向它那些点位旧地址的每一处引用，然后报告“已把‘Pump’移入‘Utilities/Meters’，更新了 4 处引用。”或“已把‘Pump’移出它所在的文件夹。”串行线路上的设备，不论属于哪个驱动，根本不提供“移动到”。不管原件在哪个文件夹里，复制设备总是把副本放在驱动的本级。设备页面上没有文件夹字段：归档是树的命令。

## 地址里的文件夹 {#the-folder-in-the-address}

一台归在 `Utilities/Meters` 下面的设备，它的点位地址是 `Connector.<Driver>.Utilities.Meters.<Device>.<Tag>`；每一个文件夹段都和其他段一样被规整（不是字母也不是数字的字符变成下划线，开头是数字时前面补一个）。总线标识 `<Driver>.<Device>:<Tag>` 一个字都不变，所以设备被归档时，内置服务器、一个正在跑的 Process 绑定和一个外部 OPC UA 客户端什么都察觉不到。因为地址就是树里的路径，所以一台设备被搬进一个只有大小写不同的文件夹时，它进的是已经画出来的那个文件夹，而不是又开一个。这两个身份在 [Connector](connector#wire-key-and-address-the-two-identities-of-a-tag) 里讲。

## 树里的文件夹 {#folders-in-the-tree}

文件夹那一行显示它的设备数量（“2 台设备”，或者“空”）和一个把它下面每台设备（含子文件夹里的）都汇总进去的健康状态圆点；已禁用的设备是中性的，永远不会把文件夹拉成琥珀色或红色。搜索框会匹配文件夹名称，被命中的文件夹让它下面的一切都保持可见。在“正常”“有问题”“已禁用”这几个筛选项下，只要里面有东西通过，文件夹就画出来。空文件夹里面没有东西可以通过：搜索框为空时，它只在“全部”下画出来；输入了搜索文字时，只要文字匹配它自己的名称、或者它上面那个文件夹或驱动的名称，它在任何筛选项下都画出来。文件夹在自己的驱动下面排在最前，按名称排序，然后才是归在驱动本级的那些设备。

## 文件夹不做什么 {#what-folders-do-not-do}

文件夹没有自己的设置：没有说明，没有图标，没有按文件夹算的轮询或健康状态规则。没有任何东西以文件夹本身为地址；空文件夹不发布任何地址。文件夹不会嵌套超过两层，不在驱动之间共用，Modbus RTU 和 MQTT 下面以及串行线路上也没有文件夹。
