# 驱动列表与单个驱动的页面

> “驱动”文件夹里本工作站全部驱动的目录，驱动在这里添加、打开和移除，以及一个驱动的页面：命令栏上的刷新、发现设备、配对设备和移除驱动，它们所增添的那张表标题右侧的添加设备、添加线路和添加 Broker，“扫描范围”卡片，设备表，还有本安装包不包含某个驱动时的样子。

Connector 页面上有两处讲的是驱动而不是设备。通信栏树里的第一个文件夹“**驱动**”打开目录：本次安装带着的每一个驱动，已添加到工作站的排在最前，其余按所连接的设备类别分组。一个**驱动**打开它自己的页面，入口是“驱动”文件夹下它的那一行，或者目录里它那一行的**打开**：它的设备（Modbus RTU 则是它的串行线路，Generic serial and TCP 和 SCPI instruments 则是它的串行线路和设备，MQTT 则是它的 Broker），以及让这根树枝长起来的那些命令。两处都只要有“查看 Connector”就能看见；添加和移除驱动以及创建类命令需要“配置 Connector”。Omron 与 Generic serial and TCP 一样，显示它的串行线路和设备。

## 目录 {#the-catalog}

标题栏写着**驱动**，下面一行是“本工作站自带的全部驱动：已添加的排在最前的“本工作站”组，其余按所连接的设备类别分组。添加你要用的驱动：添加后的驱动会出现在树里，无论有没有设备。”，再加上一枚清点目录和设备的胶囊：“25 个驱动 · 3 台设备”；一旦存在一条串行线路，中间还会插进线路数（“25 个驱动 · 1 条线路 · 3 台设备”）。

### 那张表 {#the-table}

| 列 | 显示什么 |
| --- | --- |
| **驱动名称** | 显示名称。 |
| **说明** | 驱动的一行说明；本安装包没带的驱动写“本安装包不包含该驱动。” |
| **设备** | 它下面配置了多少台设备。 |
| **健康状态** | 对有设备、串行线路或 Broker 的驱动，是一个圆点加一个词：尚未可知、已禁用、离线、部分在线或在线，由这个驱动的设备（Modbus RTU 则是它的线路，Generic serial and TCP 和 SCPI instruments 则是它的线路和不在线路上的设备，MQTT 则是它的 Broker）汇总而来。什么都没配置的驱动没有可判断的东西，这一格为空。 |Omron 的汇总方式与 Generic serial and TCP 相同。

目录里列的是本安装包带着的每一个驱动，不论是否已添加，再加上任何虽然缺席、却仍被已保存的设备或线路点名的驱动。已添加到工作站的驱动排在最前，归在“**本工作站**”下，其中也包括仍带着东西的缺席驱动；其余按类别分组：每组在一个写着组名和数量的标题下，依次为 PLC、工业协议、仪器与数据采集、无线、Web 与 API、文件和数据库和测试，组内按字母顺序排列（[哪个驱动在哪一组](drivers#every-driver)）。一个驱动都没添加时，不会出现“本工作站”这一组。因为这份列表是从 Connector 的驱动清单读来的，所以它在启动几秒之后、Connector 跑起来时才稳定下来。

### 行内操作 {#row-actions}

| 命令 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- |
| **添加驱动**（未添加的驱动） | 把驱动添加到工作站：它出现在“驱动”文件夹下面，下面什么都没有（“0 台设备”），它那一行升到目录的“**本工作站**”组里，突出显示并滚动到可见处，目录留在画面上；这一行的**打开**，或者树里这个驱动那一行，打开它的页面。记录条里写“已添加驱动“Modbus TCP”。”它下面不会新建任何东西。 | 有一次运行占住了工作站，运行时已停止，或者正在扫描或配对（提示文字说明是哪一种）。 | 没有“配置 Connector”权限时。 |
| **打开**（已添加的驱动） | 在“驱动”文件夹下它的那一行选中这个驱动，并打开它的页面。 | 从不。 | 从不。 |
| **移除驱动**（已添加的驱动；危险色，放在最后） | 把驱动从树里拿掉，它在目录里的那一行回到原来的类别，“添加驱动”可以把它加回来。记录条里写“已移除驱动“Modbus TCP”。”它不删除任何东西，也不询问。 | 驱动带着设备、串行线路、Broker 或文件夹（提示文字是“这个驱动下面在树里还有东西。请先删除它下面的内容。”），有一次运行占住了工作站，运行时已停止，或者正在扫描或配对。 | 没有“配置 Connector”权限时。 |

驱动的页面上放着第一台设备之前要准备的东西：“扫描范围”卡片、Matter 驱动的网络、OPC UA 驱动的现场设备访问，以及添加设备、添加线路或添加 Broker。驱动添加之后，用目录里它那一行的**打开**，或者树里它那一行，就能到达这个页面。添加并不开启任何东西：下面什么都没有的已添加驱动什么也不读；启用和禁用在设备、线路或 Broker 上仍是它们自己的意思，即那一行留在树里、停止读取。

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

| 命令 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- |
| **全部刷新** | 从数据库重新读取配置，并重建这棵树。正在运行的 Connector 保持原样：每次保存都已经把它自己的那台设备下发给 Connector 了。“驱动”文件夹仍然选中，目录仍然打开，原来展开的仍然展开，记录条里写着“设备已刷新。” | 有运行占住工作站，或运行时已停止。 | 从不。 |

## 单个驱动的页面 {#a-drivers-page}

标题栏带着驱动的名称、括号里的设备数量（“Simulated  (9)”；Modbus RTU 则是线路数量，MQTT 则是 Broker 数量）和一个健康状态圆点。它下面那一行随情况而变。对没有“配置”权限的角色，它写“这个驱动所连的设备。打开一行即可查看它的设置和点位。”Matter 是：“通过蓝牙配对一台新的物理设备，或者发现本地 Fabric 里已经调试好的节点。”其余任何驱动是：“添加一台设备，然后用行内操作打开、启用/禁用或删除它。每台设备的驱动是固定的。”本安装包没带的驱动是：“别处的一份配置在这里留下的设备。打开一行即可查看它的设置和点位。”Modbus RTU 则改写成“每条线路独占一条物理串行总线。请先在线路上配置端口参数组，然后在它下面添加按从站地址寻址的设备。”MQTT 则写“每个 Broker 是到一个外部 MQTT Broker 的一条连接。先配置它的应答地址和工作站的登录方式，再添加通过它发布数据的设备。”Generic serial and TCP 写的是“串行线路下挂共用一条总线的仪表，网络设备直接挂在驱动下。添加一条线路或一台设备，然后打开它描述其消息。”SCPI instruments 写的是“串行线路下挂共用一条总线的仪器，通过 TCP 或 VISA 连接的仪器直接挂在驱动下。添加一条线路或一台设备，然后打开它填写其查询。”Omron 显示“串行线路下挂通过 Host Link 读取的 PLC，每台按其单元号，通过网络连接的 PLC 直接挂在驱动下。添加一条线路或一台设备，然后打开它填写其点位。”标题栏下面按种类各占一行，点名有自身错误的串行线路、Broker 和设备（“2 台设备有错误：Boiler、Chiller”）；点位由所在设备点名，从不在这里。

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

| 命令 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- |
| **刷新** | 和“全部刷新”一样的重新读取；正在运行的 Connector 保持原样。这个驱动仍然选中，它的页面仍然打开，原来展开的仍然展开。 | 正在扫描或配对，有运行占住工作站，运行时已停止。 | 从不。 |
| **发现设备** | 启动这个驱动的扫描；运行期间它变成**取消**（按下之后写“正在取消…”）。细节见[设备发现](connector-discovery)。 | 范围无效（提示文字和**扫描范围**卡片一样说明缺什么），正在配对，或工作站拒绝改动。 | 没有“配置 Connector”权限时，或者这个驱动没有扫描。Modbus RTU 从串行线路的页面扫描，MQTT 从 Broker 的页面扫描，所以这两个驱动的页面上没有“发现设备”；Generic serial and TCP 根本没有扫描。 |
| **配对设备**（仅 Matter） | 在页面上打开配对表单。 | 正在扫描或配对，表单已经开着，工作站拒绝改动，或者**网络**卡片上还没有可用的网络（“请先添加设备要加入的网络。”）。 | 没有“配置 Connector”权限时。 |
| **移除驱动**（危险色，靠右） | 对屏幕上这个驱动执行目录里的“移除驱动”：驱动离开树并留在目录里，这一栏回到打开着目录的“驱动”文件夹，记录条里写“已移除驱动“Modbus TCP”。” | 驱动带着设备、串行线路、Broker 或文件夹（“这个驱动下面在树里还有东西。请先删除它下面的内容。”），正在扫描或配对，或者工作站拒绝改动。 | 没有“配置 Connector”权限时。 |

命令栏留下的是作用于驱动本身的命令。“添加设备”“添加线路”“添加 Broker”以及扫描要读的地址都在页面上，挨着它们作用的对象。右键点驱动那一行，提供的是让它这一枝长出来的命令（添加线路、添加 Broker、添加设备，或者在 Matter 下是命令栏上的配对设备；Generic serial and TCP 和 SCPI instruments 则是添加设备和添加线路）、驱动自身这一层的“新建文件夹”（除 Modbus RTU 和 MQTT 之外的所有驱动，这两种驱动的设备挂在线路或 Broker 下）和“刷新”，驱动能扫描时还有命令栏上的**发现设备**，一条分隔线之后是危险色的**移除驱动**，拒绝的理由和命令栏上的一样。Omron 也提供这两项。

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

让页面上某张表长出行的命令在那张表的标题右侧、它所添加的行上方；扫描要读的地址在设备表上方的“扫描范围”卡片里。

| 命令或字段 | 位置 | 作用 | 何时置灰（情况） | 何时不画出来（角色） |
| --- | --- | --- | --- | --- |
| **添加设备**（除 Matter、Modbus RTU 和 MQTT 以外的每个驱动） | **设备**标题右侧。 | 在驱动的本级创建一台“新建设备”（然后是“新建设备 2”，依此类推），启用状态，在这张表格里突出显示并滚动到可见处，见[设备](connector-devices)。在 Generic serial and TCP 下，新设备是一台网络设备，即 TCP 客户端；在 SCPI instruments 下，是一台通过 TCP 连接的设备。在 Omron 下，是通过网络连接的 PLC（UDP 上的 FINS）。 | 本安装包没带这个驱动（提示文字“本安装包不包含该驱动。”），正在扫描或配对，或工作站拒绝改动。 | 没有“配置 Connector”权限时。 |
| **添加线路**（Modbus RTU、Generic serial and TCP、SCPI instruments、Omron） | **串行线路**标题右侧。 | 创建一条已禁用的串行线路，在这张表格里突出显示，见[串行线路](connector-lines)。 | 正在扫描，或工作站拒绝改动。 | 没有“配置 Connector”权限时。 |
| **添加 Broker**（仅 MQTT） | **MQTT Broker**标题右侧。 | 创建一个已禁用的 Broker，在这张表格里突出显示，见[MQTT](driver-mqtt#the-broker)。 | 本安装包没带这个驱动，正在扫描，或工作站拒绝改动。 | 没有“配置 Connector”权限时。 |
| 设备发现目标字段 | **扫描范围**卡片里，“扫描可以通过这个驱动连上的设备。”那一行下面。 | 对于扫描需要一个地址的驱动（OPC UA：“OPC UA 服务器地址，例如 opc.tcp://plc-host:4840”），这个框装着“发现设备”要读的地址。在它装进驱动能用的地址之前，框下面有一行红字说明期望的是什么，“发现设备”也置灰。 | 扫描进行中。 | 没有“配置 Connector”权限时，或者这个驱动的扫描不需要地址。 |

### 设备表 {#the-device-table}

除 Modbus RTU 和 MQTT 以外的每个驱动都列出它的设备，就是树里画的那些行：

| 列 | 显示什么 |
| --- | --- |
| **设备** | 名称；设备有自身错误时，后面带着树里同样的红色标记，原因就是提示文字。 |
| **Endpoint** | Connector 连过去的那个基础 URI，由设备的“连接”卡片拼出来。还没有主机的设备这一栏为空。 |
| **点位** | 这台设备有多少个点位。 |
| **健康状态** | 圆点加词，和树里一样。 |
| **最近错误** | 诊断日志里与这台设备相关的最新一条警告或错误；本安装包服务不了的设备写“本安装包不包含该驱动。”；已启用但还没有主机的设备写“尚未填写主机”（没有设备名称的 NI-DAQmx 设备写“尚未填写 NI-DAQmx 设备”，有主机但没有基本通道的 Fluke NetDAQ 设备写“尚未填写基本通道”，没有文件夹的 File 设备写“尚未填写文件夹”，没有服务器的 Database 设备写“尚未填写服务器”，没有标识符的 LoRaWAN 设备写“尚未填写 DevEUI”或“尚未填写基站 EUI”），工作站不会去连它。这是设备自身的错误，与其标记所带的错误相同：点位的错误留在点位上，串行线路或 Broker 有错误的设备不显示任何错误，因为错误由那条线路或那个 Broker 承载。出错时，单元格和设备页面一样，用工作站的语言说明哪里失败了：诊断日志那一行开头的“Connect failed for device …:”、其后的异常类名，以及工作站接下来要做的事（“Retrying in the background …”）都略去不显示。工作站能识别的失败（拒绝连接的端口、途中的防火墙、超时、无法解析的名称、Modbus 异常）会变成工作站自己的一句话，其他失败则保留驱动自己的话。单元格的提示文字、树中的标记和事件页面保留整行文字。 |

行内操作：每个角色都有**打开**，然后对“配置 Connector”还有**启用**和**禁用**（各自在用不上时置灰），以及危险色的**删除**，删除时的确认会点名这台设备和它的点位。扫描或配对进行时，这四个都置灰。表空着时写“还没有设备。”

Modbus RTU 改为列出它的线路：**线路**、**物理参数组**（端口 · 波特率 · 格式 · 超时）、**设备**、**状态**（一个圆点加一段文字，例如“在线 · 2/2 台设备在线”），以及“打开”“启用”“禁用”“删除”这几个动作，后三个只对“配置 Connector”出现。线路的参数组无效时，“启用”也会置灰。端口失败的线路，名称后面带红色标记。

Generic serial and TCP 和 SCPI instruments 在各自的设备表上方带着同样的线路表，其中**物理参数组**不含超时（端口 · 波特率 · 格式）；它的设备表列出驱动的所有设备，包括线路上的设备，见 [Generic serial and TCP](driver-generic-serial-tcp#the-drivers-page) 和 [SCPI instruments](driver-scpi#the-drivers-page)。Omron 在其设备上方也有同样的表格（见 [Omron](driver-omron#host-link-on-a-serial-line)）。

MQTT 列出它的 Broker：**名称**、**地址**、**设备**、**状态**，以及同样的四个动作，见[MQTT](driver-mqtt#the-drivers-page)。拒绝了工作站的 Broker，名称后面带红色标记。

### 表的周围 {#around-the-table}

设备表上方，Modbus TCP 驱动有自己的**扫描范围**卡片，装着它的扫描要询问的主机和单元 ID（仅对“配置 Connector”）；SNMP 驱动也有自己的扫描范围卡片，装着它的扫描要遍历的代理和子树（仅对“配置 Connector”；见 [SNMP](driver-snmp#the-scan-scope-card)）；File 驱动也有自己的扫描范围卡片，装着它的扫描要读取的文件（仅对“配置 Connector”；见 [File](driver-file#the-scan-scope-card)）；Database 驱动也有自己的扫描范围卡片，装着其扫描要读取数据库的设备以及要读取的表（仅对“配置 Connector”；见 [Database](driver-database#the-scan-scope-card)）；Matter 驱动有自己的**网络**卡片，它的设备要加入的 Wi-Fi 和 Thread 网络在第一次配对之前登记在那里（仅对“配置 Connector”；见[网络](driver-matter#networks)），“配对设备”在它上方打开**配对 Matter 设备**表单。扫描进行时，它的进度行就在表的正上方，**发现的设备**卡片带着扫描的结果出现在表的下面。这些都在[设备发现](connector-discovery)里讲。

## 本安装包不包含该驱动 {#driver-not-included-in-this-package}

一个缺席驱动之所以还有分组，只是因为已保存的设备点着它的名：一份还原回来的备份，一份从别的机器带过来的配置。这时它的页面显示一条提醒提示条，“本安装包不包含该驱动”：这些设备来自一份带着该驱动的配置，它们的设置都还在，也可以删掉，但本次安装够不着它们，所以它们保持离线，这里也不能添加新设备。在这样的页面上，“添加设备”仍然画着并以那个原因置灰，“发现设备”根本不提供，它的设备上的“复制设备”以同一句提示文字置灰，运行时上线失败也不会被重复写成一条“最近错误”，因为这里没有故障要查。哪些驱动会遇到这种情况，见[驱动](drivers#a-driver-the-package-does-not-carry)。

## 这两个页面不做什么 {#what-these-pages-do-not-do}

目录不能从页面上扩充，驱动也不能重命名、调整顺序或关闭。一台设备不能挪到另一个驱动下面。从表里删掉一个驱动的设备是一台一台删的，每台各有自己的确认，没有“全部删除”。删掉一个驱动的最后一台设备、最后一条串行线路、最后一个 Broker 或最后一个文件夹，驱动仍留在树里：只有“移除驱动”能把它从树里拿掉，没有什么能把驱动从目录里拿掉。移除驱动从不删除它下面的东西，因为只要下面还有东西，移除就会被拒绝。
