# Connector

> Connector 页面：通信栏，它下面的树（“驱动”文件夹装着添加到工作站的驱动及其串行线路、Broker、文件夹、设备和点位，“服务器”文件夹装着 OPC UA 服务器、Modbus 服务器和 MQTT Broker），沿着这棵树往下走的“新建…”菜单，每个点位携带的两个身份，以及管着编辑权的权限与锁定。

Connector 是现场设备变成应用其余部分能读的数据的地方。它是导航栏上那个名为 Connector 的页面，任何拥有**查看 Connector** 权限的角色都能打开它。页面左边是**通信**栏，一棵列出 Connector 所连的一切的树，右边是详情面板，就地编辑选中的节点；页面自己的说明就是这么写的：“选中一个节点即可就地编辑它。更改会自动保存。”

## 通信栏 {#the-communication-column}

这一栏的标题是“通信”，自上而下依次是：一个带四个状态筛选项的搜索框、树，以及放着本栏命令的栏底。树的最上一级是两个同一种类的文件夹，“**驱动**”文件夹和“**服务器**”文件夹，页面打开时两者都是展开的。

### “驱动”文件夹 {#the-drivers-folder}

第一个文件夹装着添加到工作站的驱动，按字母顺序平铺，不论下面有没有东西。这个文件夹的那一行写着**驱动**，然后是它下面那些驱动拥有的设备数量（“3 台设备”），再是一个把这些驱动汇总起来的健康状态圆点。选中它会打开本工作站自带的全部驱动的目录，已添加的排在最前的“本工作站”组，其余按所连接的设备类别分组，驱动就在这里添加和移除；这两个命令见[驱动列表与单个驱动的页面](connector-drivers)。

| 情形 | “驱动”下面有什么 |
| --- | --- |
| 新工作站 | 没有驱动。这一栏打开时就选中“驱动”文件夹，所以最先看到的是目录。 |
| 从早先版本更新而来的工作站 | 它已经在用的驱动：每一个带着设备、串行线路、Broker 或文件夹的驱动。 |
| 添加了一个驱动（目录里它那一行的**添加驱动**，或者“新建…” > **添加驱动**） | 这个驱动，下面什么都没有，在目录的“本工作站”组里突出显示（“驱动”文件夹留在画面上）：它那一行写着“0 台设备”（Modbus RTU 写“0 条线路 · 0 台设备”，MQTT 写“0 个 Broker · 0 台设备”）。 |
| 删掉了一个驱动的最后一台设备、最后一条串行线路、最后一个 Broker 或最后一个文件夹 | 驱动留着，回到“0 台设备”。 |
| 移除了一个驱动（目录里它那一行、它的命令栏或它的右键菜单上的**移除驱动**） | 什么都没有：驱动离开树，它在目录里的那一行回到原来的类别。移除不删除任何东西，所以只要驱动还带着设备、串行线路、Broker 或文件夹，移除就会被拒绝；带着其中任何一样的驱动总是已添加的。 |
| 本安装包没带、但被某台已保存设备点名的驱动 | 这个驱动和它的设备，只要还剩一台设备。 |

### “服务器”文件夹 {#the-servers-folder}

第二个文件夹装着工作站在网络上开放的东西，别的系统和设备连到它们上面来：**OPC UA 服务器** 把设备和它们的点位发布给 OPC UA 客户端，**Modbus 服务器** 让 PLC、HMI 和楼宇系统从它读取工作站的点位和 Logic 变量，**MQTT Broker** 则接收网络中设备发布的消息。这三行始终都在，顺序也不变。在另一台设备的浏览器里打开工作站自己的仪表画面的远程访问不在这里：它在导航栏上有自己的页面，[远程访问](remote-access)。它们都不是驱动，也都没有子节点；每一行都在一个圆点旁边写出自己的状态（每个新工作站上都是“已关闭”），监听时圆点为绿色，已打开却连不上时为红色，哪个圆点都不计入“驱动”文件夹和状态栏。选中一行会打开它的面板；三者都在[服务器](connector-servers)里讲。文件夹自己的那一行既没有数量也没有圆点，选中它不会打开面板，只显示一句“选中一个服务器，即可查看它的状态和设置。”

### 搜索与状态筛选项 {#search-and-the-state-chips}

| 控件 | 作用 |
| --- | --- |
| 搜索框（“搜索驱动、线路、设备、点位”） | 把树收窄到名称里含有这段文字的那些行，不区分大小写。命中一个驱动、串行线路、Broker 或文件夹时，它下面的一切都留着；命中最上一级两个文件夹之一的名称时也一样：“驱动”留下每一个已添加的驱动，“服务器”留下它的三行。一条串行线路还会按它的物理参数组（端口、波特率、格式、超时）参与匹配，Broker 按它的地址，服务器按它的名称。命中的树枝随着你打字自动展开。 |
| **全部** | 不按状态收窄。 |
| **正常** | 已启用、并且在线或还无从判断的设备、线路和 Broker（还没有填写主机的设备连同它已启用的点位也算在内）；已启用、此刻读到的测量值在限值以内的点位；已打开、并且没有启动失败的服务器。 |
| **有问题** | 已启用但离线或部分在线的设备、线路和 Broker；在工作站正在读取的设备上，已启用但没有数值（因为设备连接以来第一个值还没到而不计入设备健康状态的除外）、数值是替代值、数值超出限值或读数停止更新的点位；已打开却没能启动的服务器（Modbus 服务器在端口被别的程序占用时也算）。 |
| **已禁用** | 已禁用的设备、线路、Broker 和点位，以及已禁用设备的每一个点位。挂在已禁用的串行线路或 Broker 下面的设备也算已禁用，它的点位也一样。已关闭的服务器也算已禁用。 |

筛选项和搜索文字叠加生效。选中的节点始终可见，所以面板不会去编辑一行你看不到的东西。下面什么都没有或只带着一个空文件夹的驱动，以及里面还没有驱动时的“驱动”文件夹，只在“全部”下出现，或者在搜索命中它们自己的名称时出现。

### 树 {#the-tree}

树的形状由驱动各自决定：

- 除 Modbus RTU 和 MQTT 以外的每个驱动：**驱动 > 文件夹（最多两层） > 设备 > 点位**。文件夹按名称排在前面，然后是直接归在驱动本级的那些设备。
- Modbus RTU：**驱动 > 线路 > 设备 > 点位**。设备挂在它们共用的那条物理线路下面，不进文件夹。
- Generic serial and TCP：两种形状并存。它的串行线路排在前面，每条都是**驱动 > 线路 > 设备 > 点位**，然后是它的文件夹和网络设备，和其他驱动一样。
- SCPI instruments：同样如此，先是它的串行线路，然后是它的文件夹和通过 TCP 或 VISA 连接的设备。
- Omron：同样如此，先是它的串行线路，然后是它的文件夹和通过网络连接的 PLC。
- MQTT：**驱动 > Broker > 设备 > 点位**。设备挂在它们共用连接的那个 Broker 下面，不进文件夹。

在“驱动”文件夹下面，驱动按字母顺序平铺，不按类别分组。设备的点位也按名称排序，不分大小写：树里如此，设备表格里每个类型分组之内也如此；新加的或改了名的点位立刻移到它的位置。一个驱动从被添加的那一刻起就在树里，直到被移除为止，不论下面有什么。每一行都概括它下面有什么：

| 行 | 显示什么 |
| --- | --- |
| 驱动 | 名称、“3 台设备”（Modbus RTU，以及有线路时的 Generic serial and TCP、SCPI instruments 和 Omron：“1 条线路 · 2 台设备”；MQTT：“1 个 Broker · 2 台设备”）、健康状态圆点。 |
| 串行线路 | 名称、端口出故障时的一个错误标记、状态文字和设备数量（“在线 · 2 台设备”）、健康状态圆点。 |
| Broker | 名称、连不上 Broker 时的一个错误标记、状态文字和设备数量（“在线 · 2 台设备”）、健康状态圆点。见[MQTT](driver-mqtt#broker-states)。 |
| 文件夹 | 名称、“2 台设备”或“空”、一个把里面每台设备（含子文件夹）都汇总进去的健康状态圆点。 |
| 设备 | 名称、一个把最近错误当作提示文字的错误标记，然后是“4 个点位”，或“正在等待证书批准”，或“尚未填写主机”（NI-DAQmx 设备上为“尚未填写 NI-DAQmx 设备”，File 设备上为“尚未填写文件夹”，Database 设备上为“尚未填写服务器”，LoRaWAN 设备上为“尚未填写 DevEUI”或“尚未填写基站 EUI”），或“本安装包不包含该驱动。”，最后是健康状态圆点。 |
| 点位 | 一个表示数据类型的字形（数值、布尔、日期、文本）、名称、上次读取失败时的一个错误标记，以及一个实时圆点：数值是替代值、限值环节报了故障、或者读数停止更新时是琥珀色，点位有数值时是绿色，其余情况是灰色；工作站不读取的点位，也就是被禁用的点位，或者设备被禁用、挂在已禁用线路下面、还没有填写主机的点位，不管上次显示的是什么都是灰色。 |

圆点的颜色和这些文字在[启用与健康状态](connector-health)里讲。右键点一行会选中它并打开一个菜单，菜单里是该节点命令栏上的同一批命令；如果当前角色对这一行什么都做不了，就不会打开菜单。栏和面板之间的分隔条可以拖动，用来改变宽度。

### 栏底：新建…、全部展开、全部收起 {#the-footer-new-expand-all-collapse-all}

| 命令 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- |
| **新建…** | 打开这一栏的菜单，不论选中哪一行都一样：先是**添加驱动**，然后每个已添加的驱动各占一项，沿着树一直走到某台设备的**新建点位**（见[“新建…”菜单](#the-new-menu)）。 | 有一次运行占住了工作站，或者运行时已停止（提示文字里写着原因）；或者正在进行一次设备发现扫描或一次 Matter 配对（“添加任何东西之前，请先结束正在进行的扫描或配对。”）。 | 没有“配置 Connector”权限时。 |
| **全部展开** / **全部收起** | 展开或收起每一根树枝，最上一级的两个文件夹和驱动分组也在内。全部收起之后，这一栏只剩下“驱动”和“服务器”两个文件夹。 | 从不：“服务器”文件夹里总有三行可以展开。 | 从不。 |

### “新建…”菜单 {#the-new-menu}

这个菜单读的是树，从不读选中项。它以**添加驱动**开头，一条分隔线之后，每个已添加的驱动按树里的顺序各占一项。一个驱动的那一项先列出能在这个驱动下面新建的东西，一条分隔线之后再列出这个驱动自己的各行，每一行又是一个子菜单，列着它接受什么、带着什么，一直到某台设备和它的**新建点位**。没有哪一项点名它落在哪里：走到它的那条路径已经说明了。

| 项 | 列出什么 | 其中各项做什么 |
| --- | --- | --- |
| **添加驱动** | 本安装包带着、但还没添加的驱动，只列名称，按驱动目录的顺序归在所属类别的名称下。 | 和目录里的“添加驱动”一样添加这个驱动：画面转到“驱动”文件夹，目录突出显示这个驱动的那一行，树里这个驱动出现在文件夹下面。所有驱动都已添加时，这一项仍然在，并置灰：“本工作站自带的驱动已全部添加。” |
| 一个驱动 | 先按这个顺序列出驱动接受的东西：**新建设备**（设备直接挂在它下面的驱动，也就是除 Modbus RTU、MQTT 和 Matter 以外的驱动）、**新建串行线路**（Modbus RTU、Generic serial and TCP、SCPI instruments、Omron）、**新建 Broker**（MQTT）、**配对设备**（Matter）和**新建文件夹**（设备可以放进文件夹的驱动，也就是除 Modbus RTU 和 MQTT 以外的驱动）；然后是它的串行线路、Broker、文件夹和设备，顺序和树里画的一样。 | 每一项做的事都和驱动页面上同名的命令一样。“配对设备”在 Matter 的页面上打开配对表单；“网络”卡片上还没有可用的网络时，它保持置灰，提示“请先添加设备要加入的网络。” |
| 一条串行线路或一个 Broker | **新建设备**，然后是它的设备。 | 在这条线路或这个 Broker 上新建一台设备。 |
| 一个文件夹 | **新建设备**（在 Matter 下面，它打开配对表单，配对的设备归入这个文件夹）和**新建子文件夹**（只在第一级文件夹上），然后是它的子文件夹和设备。 | 在这个文件夹里新建设备或子文件夹。 |
| 一台设备 | **新建点位**。 | 和设备的“添加点位”一样，给这台设备添加一个点位：画面转到设备的页面，新点位在它的点位表格里突出显示。 |

新建从不打开新建出来的东西：画面转到它的上级（“驱动”文件夹、驱动、线路、Broker、文件夹或设备）的页面，树选中这个上级并展开它，新的一行在上级的表格里突出显示，并滚动到可见处。突出显示一直保留，直到你选了别的东西；用这一行的**打开**，或者树里它那一行，才会打开这一项。在本安装包没带的驱动下面，除“新建点位”以外的每一项都保持置灰，提示“本安装包不包含该驱动。”这个菜单不新建服务器，因为“服务器”文件夹里已经是工作站仅有的三行；它也不列点位。每个名称占一行，长列表可以滚动。指针在去往某个子菜单的路上经过别的行时，这个子菜单保持打开：只有指针在别处停留大约三分之一秒后，它才收起或让给另一个子菜单，点一下则立即切换。把已有的设备移进某个文件夹是设备上的命令，见[设备文件夹](connector-folders)。

## 详情面板 {#the-detail-panel}

什么都没选中时，面板写着“在树里选中一个驱动、串行线路、设备或点位，即可查看和编辑它。更改会自动保存。”“驱动”文件夹打开目录，“服务器”文件夹写着“选中一个服务器，即可查看它的状态和设置。”，其余每一种节点打开的面板，都在下面各自的页面里讲。

编辑自动保存：文本或数字字段在你离开它时（或者按下回车时）保存，开关和勾选框在你拨动它时保存，下拉框在你选定时保存。同一台设备上连着改几下，会在最后一下之后大约半秒合并成一次保存。工作站拒绝的保存会回滚成数据库里的内容，原因落在窗口底部的操作记录条里；会让设备变得不可用的编辑（空名称）根本不保存，面板会说缺的是什么。页面开着的时候，树里和面板里的数值每秒刷新一次。

## 总线标识与地址：一个点位的两个身份 {#wire-key-and-address-the-two-identities-of-a-tag}

每个点位都带着两个名字，两者的区别决定了一次改动的代价。

**总线标识**是 `<Driver>.<Device>:<Tag>`，例如 `ModbusTcp.Furnace:Temperature`。Connector 轮询、内置 OPC UA 服务器发布的是它，一个 Process 通道绑定的是它，外部 OPC UA 客户端看到的名字也是它。设备那一段由驱动种类加上设备名称构成，名称里每个不是字母也不是数字的字符都换成下划线。总线标识不理会文件夹：把设备归到别处，总线上什么都不变。

**地址**是 `Connector.<Driver>.<Folders…>.<Device>.<Tag>`，例如 `Connector.Simulated.Air.CompressedAir.HeaderPressure`。它是树所显示的那条路径，每一段都按同样的规则规整（开头是数字时前面补一个下划线），Logic 表达式、脚本、报警条件和仪表画面绑定书写的就是它。给设备或点位重命名、把设备归进文件夹、给文件夹重命名或者删掉文件夹，都是地址的改动，应用会在同一次操作里改写旧地址的每一个使用者；名称字段在你确认之前会先预告有多少处引用会跟着改。[Logic 地址空间](logic-address-space)读的是同一批地址。

设备名称只需要在自己的驱动内部唯一，并且不区分大小写：一台 Modbus TCP 设备和一台 OPC UA 设备可以都叫 `Furnace`，因为它们的总线身份是 `ModbusTcp.Furnace` 和 `OpcUa.Furnace`。同一个驱动下面两台已启用的设备，如果名称规整之后落到同一段技术标识（`Line A` 和 `Line-A`），就算冲突，两台都不参与轮询，而不是其中一台胜出；在其中一台重命名或禁用之前，它们的行上都没有数值。一个技术设备标识最多 128 个字符。同一个驱动下面，同一层上的一个文件夹和一台设备也不能规整成同一段，因为一个地址不能既是可展开的树枝又是可读取的点。

Connector 这棵树没有单独的导入或导出：配置随应用的[备份](settings-backups)一起走。

## 工程上的边界 {#engineering-boundaries}

Connector 始终是一个实时读取的界面，但它的配置在两种情况下被拒绝，页面会说明是哪一种：

- **有一次 Process 运行占住了工作站。** 一条标题为“工程已锁定”的提示条说明：有单元正在操作，配置在每个单元都结束之前保持只读，而运行控制和其他操作员动作仍然可用。每个会改动东西的命令都仍然画着并置灰，原因是“有单元在运行时配置是锁住的。”
- **运行时已停止。** 一条标题为“运行时已停止”的提示条说明：采集、Logic 和记录都已暂停，在运行时重新启动之前每一处改动都被拒绝，而配置和已记录的运行记录都完好无损。同样那些命令置灰，原因是“运行时已停止”；通信停下之后，树里的数值变成空档。

在这两种情况下，读取、搜索、选中、行内的“打开”操作，以及点位上的**复制数值**都仍然可用。

## 权限 {#permissions}

三个 Connector 权限位决定这个页面画出什么，完整清单见[权限](users-permissions)：

| 权限 | 开放什么 |
| --- | --- |
| **查看 Connector** | 页面、树，以及每一个只读的面板。编辑控件保持不可用，上面有一句说明：“更改 Connector 需要“配置 Connector”权限。”这个角色永远用不上的命令根本不画出来：新建…、添加驱动与移除驱动、添加与配对、启用与禁用、重新连接、复制设备、删除那一组、“打开”以外的行动作组、添加点位、发现点位、批量编辑的勾选框、写入字段和替换那一套。刷新、打开和复制数值留着。 |
| **校准点位** | “查看”给的一切，再加上一个点位的“校准”环节：它的勾选框、它的两个字段和它的两点法助手。别的都不会因此变成可编辑，见[校准](connector-calibration)。 |
| **配置 Connector** | 整个页面：添加和移除驱动，创建、修改、启用、禁用和删除串行线路、Broker、文件夹、设备和点位，设备发现，配对，写入、引用替换，OPC UA 服务器和它的配置与客户端访问，Modbus 服务器和它的寄存器映射，以及 MQTT Broker 和它的认证。 |

每个命令在执行时会再读一次权限，所以一个曾经为某个角色画出来、而该角色此后被改过的命令，会以同一句话被拒绝，而不是被执行。

## 本区域的页面 {#in-this-area}

| 页面 | 讲什么 |
| --- | --- |
| [驱动列表与单个驱动的页面](connector-drivers) | “驱动”文件夹里那份本工作站全部驱动的目录、一个驱动的页面及其设备表和命令，以及“本安装包不包含该驱动”这个状态。 |
| [服务器](connector-servers) | OPC UA 服务器、Modbus 服务器和 MQTT Broker：分别打开和关闭、OPC UA 服务器的配置和客户端访问、Modbus 服务器的端口、客户端和寄存器映射，以及 MQTT Broker 的端口、客户端和认证。 |
| [串行线路](connector-lines) | Modbus RTU、Generic serial and TCP、SCPI instruments 和 Omron 驱动的串行线路：它的物理参数组、时序、状态、从站扫描，以及归在它下面的设备。 |
| [设备文件夹](connector-folders) | 新建、重命名、移除文件夹，在文件夹之间搬动设备，以及文件夹如何参与构成地址。 |
| [设备](connector-devices) | 设备页面：标题栏和命令、各驱动各自的“设备”和“连接”卡片、凭据和证书、带批量编辑的点位表格、复制和冲突。 |
| [点位](connector-tags) | 点位页面逐张卡片：常规、各驱动各自的“信号源”、转换、实时数值和“被谁使用”。 |
| [数值转换链](connector-value-pipeline) | 从一次原始读数到工程值的带类型转换，以及读数缺失时显示什么。 |
| [校准](connector-calibration) | “校准”环节、两点法助手一步一步的过程，以及“校准点位”单独能做什么。 |
| [设备发现](connector-discovery) | 让一个驱动去扫描设备或点、审阅候选项、把它们加进来，以及配对一台 Matter 设备。 |
| [启用与健康状态](connector-health) | 每一层里什么参与采集、那些圆点、筛选项、状态栏、最近错误、重新连接和刷新。 |

驱动本身按协议一页一页地讲，各自带连接字段、寻址、类型、设备发现和写入行为，集中在[驱动](drivers)下面。
