驱动
驱动是什么、驱动怎么启用和禁用、一台设备定死的那个驱动、本产品认得的每一个驱动的总表、每个驱动页面讲什么,以及关于安装包没带的驱动的说明。
一个驱动就是工作站用来和一族仪器对话的那个协议:TCP 上的 Modbus 寄存器、一台 OPC UA 服务器、一台西门子 PLC。Connector 页面上的每一台设备都恰好属于一个驱动,而驱动决定这台设备显示哪些连接字段、它的点位怎么寻址、这些点位可以带哪些数据类型、它们能不能被写、这个驱动能不能扫描设备,以及是工作站去轮询它们还是仪器主动推送过来。这一组里每个驱动一页;本页讲的是它们的共同之处。
驱动清单
驱动的集合是定死的:它随应用一起发布,不能从页面上扩充。通信栏顶上的“驱动”行列出本次安装带着的那些驱动,每一个都有它的说明、设备数量、健康状态和一对启用/禁用命令;这张表和它的规则在驱动列表与单个驱动的页面里讲。
驱动发布出来时是已启用的。禁用一个驱动只是把它的分组从树里藏起来,而且只要这个驱动下面还有设备(Modbus RTU 则是串行线路)就会被拒绝,所以一台已经配置好的设备绝不会从视野里消失。启用一个驱动会在树的“没有设备的驱动”行下面加一个空分组。给一个驱动添加设备会自动把那个驱动启用。已启用的那一组随配置一起保存,也随备份一起走。
一台设备的驱动是定死的
驱动是你创建设备时选的:通信栏的“新建…”菜单会点名设备落在哪个驱动下面,而一个驱动页面上的“添加设备”就建在那个驱动下面。从那以后,“设备”卡片把驱动显示为只读文字。要把一台设备挪到另一个协议上,就在另一个驱动下面新建一台设备,再把旧的删掉;地址会变,所以那些引用得通过每个点位的“被谁使用”卡片改指到新点位上。
每一个驱动
| 驱动 | 对话对象 |
|---|---|
| Simulated | 应用内合成的信号,用来在没有硬件时做测试。 |
| Modbus TCP | TCP/IP 上的 Modbus 寄存器。默认端口 502。 |
| Modbus RTU | 串行线路(RS-485/232)上的 Modbus 寄存器。 |
| OPC UA | 走 opc.tcp 的 OPC Unified Architecture 客户端。 |
| Siemens S7 | 通过 S7comm 驱动连接的西门子 S7 PLC。 |
| Rockwell EtherNet/IP | 通过 EtherNet/IP(CIP)连接的 Allen-Bradley / Rockwell PLC。 |
| Beckhoff ADS | 通过 ADS/AMS 连接的倍福 TwinCAT PLC。 |
| Mitsubishi MC | 通过 MELSEC MC 驱动连接的三菱 PLC。 |
| BACnet | BACnet/IP 楼宇自动化设备。 |
| IEC 61850 | 通过 MMS 连接的 IEC 61850 变电站 IED。不含在发行的安装包里(见下)。 |
| OCPP | 通过 OCPP 连接的电动汽车充电桩(由充电桩主动连上本工作站)。 |
| Redfish | 服务器/数据中心硬件的 Redfish REST API。 |
| Matter | Matter 智能家居设备(通过蓝牙调试入网)。 |
| LoRaWAN | 通过内置的 Basics Station 网络服务器接入的 LoRaWAN 传感器。 |
| AVEVA PI | 通过 PI Web API 接入的 AVEVA PI System 点,默认走 HTTPS。 |
| HTTP | 作为点位轮询的通用 HTTP/JSON 端点。 |
驱动清单里还认得 OPC DA(走 COM/DCOM 的经典 OPC Data Access),但本产品里没有驱动去服务它:它从不被列出、从不被启用,也不接受任何设备。
各驱动的共同之处与不同之处
Connector 为每个驱动画的是同一套编辑器,然后让驱动决定其中哪些部分露出来。打开某个驱动的页面之前,这张表先告诉你可以指望什么:
| 驱动 | 设备页面上的连接字段 | 点位寻址 | 轮询间隔 | 点位写入 | 设备发现 |
|---|---|---|---|---|---|
| Simulated | 无 | 点位名称,外加信号形状 | 有 | 有 | 有(它的目录) |
| Modbus TCP | 主机、端口、从站 ID、最小事务间隔 | 定型:寄存器类别和寄存器号 | 有 | 有 | 有(按主机或 CIDR 扫描) |
| Modbus RTU | 串行线路(固定)、从站 ID | 定型:寄存器类别和寄存器号 | 有 | 有 | 有(在一条线路上探测从站 ID) |
| OPC UA | 主机、端口、资源路径、用户名、密码 | 自由文本:节点 id | 有 | 有 | 有(服务器地址) |
| Siemens S7 | 主机、机架 / 槽位 | 定型:区域、DB、字节、位 | 有 | 有 | 无 |
| Rockwell EtherNet/IP | 主机、槽位 | 自由文本:控制器标签,外加一个偏移 | 有 | 有 | 有(广播) |
| Beckhoff ADS | 主机、端口、本机 IP(AMS) | 自由文本:符号 | 有 | 有 | 无 |
| Mitsubishi MC | 主机、端口 | 自由文本:设备地址 | 固定 1 秒 | 有 | 无 |
| BACnet | 主机、端口、设备 Id | 定型:对象类型和实例号 | 固定 1 秒 | 有 | 有(Who-Is) |
| IEC 61850 | 主机、端口 | 自由文本:MMS 路径 | 固定 1 秒 | 有 | 无 |
| OCPP | 标识符 | 定型:充电接口编号;点位名以 Meter 或 Status 结尾 | 由充电桩推送 | 无(只读) | 有(已连上的充电桩) |
| Redfish | 主机、用户名、密码 | 自由文本:资源路径,外加一个 JSON 指针 | 有 | 有 | 无 |
| Matter | 节点 ID(只读) | 点位名称就是 cluster | 有 | 无(只读) | 有(已调试入网的节点) |
| LoRaWAN | 标识符(DevEUI)、服务器 / 密钥(应用密钥) | 定型:通道或偏移、LPP 类型 | 由传感器推送 | 无(只读) | 无 |
| AVEVA PI | 主机、端口、资源路径、传输方式、用户名、密码、承载令牌 | 自由文本:PI 路径 | 有 | 有 | 无 |
| HTTP | 主机、端口、资源路径 | 自由文本:路径 | 有 | 有 | 无 |
每个驱动还会把点位提供的数据类型列表收窄到它真正能编排的那些;确切的列表在驱动自己的页面上。表里写“固定 1 秒”的地方,驱动不理会配置的间隔,所以设备页面和点位页面对它隐藏“轮询间隔”字段。写“只读”的地方,“读写”字段只提供“只读”,写入字段从不出现。
每个驱动页面讲什么
每个驱动页面都按同样的顺序走同样几节:“设备”卡片显示的那些连接字段,以及它们怎么拼出基础 URI;一个点位怎么寻址(那些定型字段或者那个自由文本记号,以及面板预览出来的那个只读总线地址);提供哪些数据类型;驱动有设备发现时的设备发现;驱动接受写入时的写入;以及这个驱动的特别之处(凭据、证书、时序、工作站自己跑的一个网络服务器、配对)。
安装包没带的驱动
IEC 61850 驱动在开发安装环境里能编译也能运行,但不进发行的安装包:它的协议库所用的授权条款不允许把它放在安装程序里一起发出去。Connector 从不列出正在运行的安装包没带的驱动,也从不启用它。一份带着这类设备到来的配置(一份还原回来的备份、一份从别的机器带过来的配置)会把它们留下:只要那些设备还在,这个驱动的行就一直列着,它的说明写“本安装包不包含该驱动。”,而这个驱动的页面和它下面每一台设备都带着一条说着同样话的提示条。那些设备保持离线并保留各自的设置;它们可以被删掉,但不能被复制,这个驱动下面也不能新建设备或启动设备发现扫描。启用这一行会被拒绝:“‘IEC 61850’未启用:本安装包不包含该驱动。”
一个安装包带着哪些驱动,是从内置服务器的插件清单里读来的,而那份清单要等服务器启动之后才存在。在那之前每个驱动都算在场,所以驱动列表在启动几秒之后才稳定下来,然后在这一次会话里就不再变,哪怕服务器又被停掉再启动一次也一样。
驱动的代码在应用运行期间只加载一次。把通信停掉再启动,是拿那同一次加载去重建正在跑的设备和驱动列表,这也正是让工作站的内存在一整天的反复启停里保持平坦的原因。由此带来的后果是:替换磁盘上驱动自己的文件,要等应用本身重启之后才生效。