配置
内置 OPC UA 服务器的应用程序名称、监听端口、网络名称和客户端认证,以及把它们存下来并让它们生效的那个套用。
配置是 Connector 上 OPC UA 服务器面板的第二张卡片。它那些字段是一份草稿:服务器没有在监听时(关着,或者开着但上一次启动被拒绝)才可编辑,而且在套用把这份草稿存下来之前,什么都不会变。服务器关着时,草稿留到下一次打开时用(“OPC UA 服务器配置已保存。下次启用时,服务器按此配置启动。”);服务器开着时,按钮变成应用并重启,带着它把服务器重新起来。卡片在按钮下面就是这么说的:“要编辑 endpoint,请先禁用服务器。更改在它下次启动时生效。”查看 Connector 可以读这张卡片;配置 Connector 可以编辑它,而关闭服务器是命令栏上的禁用。
那些字段
| 字段 | 它是什么 | 取值 / 默认 | 效果 |
|---|---|---|---|
| 应用程序名称 | 服务器向客户端报出的名字,也是它自己那份应用程序证书的主体。 | 任意文字;默认 GanterLab OPC UA Server。名字留空就按默认值保存;两端的空格会被去掉。 | 客户端看到的就是服务器的应用程序名称。它不是 endpoint 地址的一部分。和改动网络名称一样,改动这个名称会换掉服务器自己的证书,所以客户端要先信任新的那一份,才能重新连上;把这台服务器当作设备来读的工作站会停止读取,并在它的现场设备访问上显示“证书已更换:<name>”,直到在那里批准新的证书。 |
| 监听端口 | 服务器监听的那个 TCP 端口。 | 1 到 65535;默认 4840。输入过程中不是数字的文字被忽略;超出范围的数字,不论有多少位,都被拒绝,字段下方写“监听端口必须在 1 到 65535 之间。”,字段退回到正在生效的那个端口。本工作站其他服务的端口,以及别的程序占着的端口,会在按下“套用”时被拒绝(见下文)。 | 客户端访问上“连接地址”下面那两个地址都跟着变,并在那里申请一次新的防火墙放行,因为 Windows 那条规则是和端口绑在一起的。 |
| 网络名称 | endpoint 地址里带的那个名称,让客户端用一个真能找到本工作站的名称来拨号:客户端连接时用的 DNS 名称,或者一台名称在网络里解析不出来的计算机的地址。 | 默认为空,空就表示这台计算机自己的名称。否则要写一个主机名:字母、数字、连字符、下划线和点,或者一个地址,前面不加 opc.tcp://,不写端口,也不写路径。字段在失去焦点或按回车时确认;别的写法都会在字段下方被拒绝,说明它不是主机名,字段退回到正在生效的那个名称。 | 从下一次启动起,客户端访问上“连接地址”下面那个网络地址就带着这个名称,服务器自己的证书也在 localhost 之外为它作保。改动这个名称会换掉那份证书,所以客户端要先信任新的那一份,才能重新连上。 |
| 客户端认证 | 一份证书受信任之后,服务器接受哪一种会话。 | 匿名(默认):接受不带凭据的会话,拒绝带用户名的会话。用户名和密码:只接受配置好的那一对,拒绝匿名会话。 | 在下一次启动时生效;服务器始终公告两种令牌策略,并在一次会话激活时执行这个选择。要拒绝每一次会话,就把服务器关掉。 |
| 用户名 | 那唯一被接受的用户名。 | 1 到 64 个字符,两端去空格。只有在“用户名和密码”下才可编辑。 | 它和密码一起,是唯一一份能登录的凭据。 |
| 密码 | 要接受的那个密码。这个字段只写:不管存下来的是什么,它都空着打开,处在哪个状态由标签说出来,是密码(已保存)还是密码(尚未保存)。显示密码开关只显示你在这里敲进去的东西。 | 8 到 128 个字符,不能为空。留空就保留存下来的密码,一旦存过一个,字段下面那行就这么说:“留空就保留已保存的密码。”只有在“用户名和密码”下才可编辑;长度规则也写在字段下面:“用户名:1–64 个字符。密码:8–128 个字符。” | 按 Windows 用户和机器加密后存下来(见下)。 |
服务器在监听的时候(“要更改 endpoint,请先禁用 OPC UA 服务器。”)、服务器的另一条命令正在执行的时候,以及有单元在运行的时候,这些单选按钮和三个文本字段都变灰。面板打开时草稿从存下来的配置里播种,而在配置从别处被改动、单元把工作站接管过去,以及运行时停下来的时候,草稿重新播种,未保存的编辑随之丢弃。密码是例外:它每次都空着播种,因为存下来的那个从不交给浏览器。
套用
| 命令 | 作用 | 什么时候变灰(情形) | 什么时候不画出来(角色) |
|---|---|---|---|
| 套用 / 应用并重启 | 校验草稿并把它存下来,作为一次工程操作。服务器关着时按钮是套用:先是“正在保存 OPC UA 服务器配置…”,再是“OPC UA 服务器配置已保存。下次启用时,服务器按此配置启动。”服务器开着时按钮是应用并重启,用新的值重新启动服务器:先是“正在用新配置重启 OPC UA 服务器…”,再是“OPC UA 服务器配置已应用。正在 <endpoint> 上监听。”新的应用程序名称或者网络名称会改变工作站自己的证书,而 OPC UA 驱动读设备用的也是这份证书,所以不管服务器开着还是关着,都会重启整个 Connector,它的设备稍后重新读取;其他任何改动只涉及服务器,Connector 全程都在读。 |
服务器在监听的时候、服务器的另一条命令正在执行的时候、有单元在运行的时候,以及存下来的配置读不出来的时候。 | 角色没有配置 Connector的时候。 |
校验发生在任何东西被保存之前,顺序是这样的:先是端口(“监听端口必须在 1 到 65535 之间。”);如果端口不是正在生效的那个,接着拒绝在远程访问上设定的 Web 服务器端口(“端口 N 已经是 Web 服务器的端口。请另选一个端口,或者先移动 Web 服务器。”)、在代理页面上为代理访问设定的端口,无论代理访问是开是关(“端口 N 已经被代理访问占用。请另选一个端口,或者先移动代理访问。”)、Connector 页面上Modbus 服务器的端口,无论服务器开着还是关着(“端口 N 已经是 Modbus 服务器的端口。请另选一个端口,或者先移动 Modbus 服务器。”),Connector 页面上MQTT Broker的端口,无论 Broker 开着还是关着(“端口 N 已经是 MQTT Broker 的端口。请另选一个端口,或者先移动 MQTT Broker。”),以及这台计算机上已经被别的东西占着的端口(“端口 N 在这台计算机上已被占用。请关闭占用它的程序,或者另选一个端口。”),每一种都和超出范围的拒绝一样写在“监听端口”字段下方,字段退回到正在生效的端口;接着是网络名称,同样写在“网络名称”字段下方,字段退回到正在生效的那个名称;然后在“用户名和密码”下依次是用户名(“用户名必须为 1–64 个字符。”)、字段留空而又没有存下来的密码可以保留(“还没有保存密码,请先输入一个再应用。”)、密码长度(“密码必须为 8–128 个字符。”)和空密码(“密码不能为空。”)。被拒绝的草稿什么都不会存下来。一次让服务器停在那里的重启,多半是正在生效的端口被别的程序占着(“应用并重启”不会再检查这个端口),会报作“OPC UA 服务器启动失败。它可能无法绑定端口 N。请查看日志。”;配置已经保存了,所以把原因解决掉,再到命令栏上按重启。启动时直接出错、而不是回到停止状态的,会报作“OPC UA 服务器错误:…”。不管发生什么,这些字段事后都重新读一遍存下来的值。
存下来的配置读不出来的时候
如果启动时配置数据库没能把服务器那一行交回来,卡片一开头就是那条通知:“无法读取已保存的服务器配置。下面这些值是本次启动的默认值,保存功能已禁用,以免它们覆盖已保存的配置。请检查诊断日志并重启应用。”那一次启动服务器按默认值跑,套用变灰,而按下去时状态栏上答的是同一句话。
启动时服务器打不开它的端口的时候
工作站启动时,如果服务器打不开它的监听端口,原因是别的程序已经占着它(工控机上 4840 常常已被占用),或者 Windows 拒绝了它(端口落在 Hyper-V、WSL 或 Docker 预留的范围里),保持停止的只有服务器:Connector 照样读设备,Logic 和记录也照常进行。一张卡片说明原因:“服务器无法启动”,接着是“端口 4840 已被这台计算机上的另一个应用占用,因此 OPC UA 服务器保持停止状态。请另选一个监听端口,然后再次启动服务器。”卡片上有两个按钮。
| 命令 | 作用 | 什么时候变灰(情形) | 什么时候不画出来(角色) |
|---|---|---|---|
| 使用端口 N | 把 N 存为监听端口,并在这个端口上启动服务器,作为一次工程操作。N 是被拒端口之上、监听端口字段会接受的第一个端口:此刻在这台机器上空闲,而且既不是 Web 服务器的端口,也不是智能体访问的端口,也不是 Modbus 服务器的端口。随后卡片说出服务器在哪里监听,因为从现在起 OPC UA 客户端连接的就是这个端口:“OPC UA 服务器现在在端口 4841 上监听。OPC UA 客户端连接到 <endpoint>。”如果服务器启动时 N 也已被占用,同一张卡片会带着下一个端口回来。 |
有单元在运行的时候、运行时停着的时候,以及存下来的配置读不出来的时候。 | 角色没有配置 Connector的时候。 |
| 打开 Connector | 在 OPC UA 服务器那一行上打开 Connector,它的配置卡片设定监听端口。 | 从不。 | 角色没有查看 Connector的时候。 |
只有有人按下“使用端口 4841”这类按钮时,端口才会改变:服务器从不自己换到别的端口。与端口无关的失败,卡片上只在启动给出的原因下面留下打开 Connector。工作站隐藏在托盘里启动时,一条 Windows 通知会重复卡片的标题和原因;它没有按钮,卡片在窗口里等着。
密码和它待的地方
这个密码和每一份设备凭据一样,作为按用户的 DPAPI 密文存下来。一份配置备份在另一台机器或者另一个 Windows 账户上打开时,它是不带这个密码来的:那时服务器带着“用户名和密码”起来,却没有密码可对,于是拒绝每一次登录,并把原因记进日志(“用户名和密码认证已打开,但在这个 Windows 账户上读不到任何 OPC UA 服务器密码 … 请在 Connector 上 OPC UA 服务器的配置里重新输入。”)。就在这里重新输入它。存下来的密码从不走回头路:字段空着打开,只有标签说有没有,所以远程浏览器收到的页面不带任何凭据。在一条普通 HTTP 的远程连接上,这个页面上敲进去的用户名和密码是明文过网络的;见远程访问。
这一节不做什么
证书信任是另一道检查,在客户端访问上决定:一个受信任的应用程序仍然要按这里选定的方式登录,而一个用户名也让不了任何证书没被信任的人进来。用户名和密码只有一份,不是一份名单,也没有按客户端的权限;地址路径 /UA/GanterLab 和各项安全策略不可配置;“网络名称”里装的是一个名称而不是一份清单,所以 endpoint 公告的就是那个名称,旁边加上 localhost,别的都没有。Logic 地址空间只读地显示服务器的那些点位,而它那个“打开 Connector”按钮落到的就是服务器那一行。