HTTP
HTTP 驱动参考:把 HTTP 与 HTTPS 端点当作点位来轮询、凭据、路径映射、响应体解析、用 PUT 写入,以及类型。
HTTP 驱动把通用 HTTP 端点当作点位来轮询:一台自带小型 Web 服务器的局域网传感器、一个在固定 URL 上发布读数的网关、你自己写的一个服务。它是本产品里最简单的客户端模式驱动:Ganter Lab 用普通的 GET 请求连到仪器上,并把每一份响应体读作一个值。
有两条属性划出了它的适用范围:
- 传输是地址写明的那一种。主机写成
https://host的设备,走 TLS 够到它的服务;只写一个主机名,就是明文 HTTP。无论哪一种,驱动都会在每一次请求上送出这台设备的凭据,可以是按 HTTP Basic 送的用户名和密码,也可以是一个承载令牌。AVEVA PI 和 Redfish 这两个驱动为那两种服务另外带来的,是它们各自的词汇:PI 路径和 WebId、Redfish 的资源树,而这个驱动对此一无所知。 - 整个响应体就是那个值。这个驱动不是 JSON 字段提取器:数值点位要求响应体本身就是那个光秃秃的数字。
连接字段
| 字段 | 它是什么 | 格式 | 默认值 |
|---|---|---|---|
| 主机 | 端点的主机名或 IP 地址。写成 https://host 时走 TLS 够到它,凭据也就不会明晃晃地上线;只写一个主机名就是明文 HTTP。 |
主机名、IP,或者两者之一前面加上 http:// 或 https:// |
空 |
| 端口 | TCP 端口。填零表示该传输应答的那个端口:明文是 80,走 HTTPS 是 443。 | 端口号 | 0 |
| 资源路径 | 一段可选的路径前缀,放在每一个点位路径的前面,例如 api/v2。留空就不加前缀。 |
路径文本 | 留空 |
| 用户名 | 用于 HTTP Basic 认证的账户,只在没有设承载令牌时才用。留空(并且没有令牌)会让请求以匿名身份发出。 | 自由文本 | 空 |
| 密码 | 和用户名配对的密码。在静态存储时按 Windows 用户保护;在别的 Windows 账户下输入的秘密会显示为读不出来,必须重新输入一次。 | 自由文本 | 空 |
| 承载令牌 | 在每一个请求上以 Authorization: Bearer … 发出的一个令牌。设了它就压过用户名/密码那一对。在静态存储时以同样方式保护。 |
令牌文本 | 空 |
连上时,驱动会对配置的地址(主机加资源路径)发一个 HEAD 请求来核实这个端点,HEAD 没实现时退回用 GET;两者中任何一个成功应答,就算够得着。因此,一个根路径答 404、而 API 正常应答的服务算作在线,只要资源路径指的是那个 API。走 HTTPS 时,服务的 TLS 证书必须通过 Windows 正常的证书校验。凭据若走在一个没写明 TLS 的地址上,就是明文传出去的,设备连上时工作站会把这一点写进连接器日志。每一个请求给十秒:一个接受了连接却不说话的端点,代价是一次读数,而不是整台设备,因为这台设备其余的点位是在同一趟里读的。轮询间隔可以配置:设备的默认值(1000 毫秒)适用于每一个没有自己另作规定的点位。
点位寻址
点位的路径字段是相对于设备资源路径的那段 URL 路径:
| 字段 | 作用 | 取值 | 默认值 |
|---|---|---|---|
| 路径 | 为这个点位请求的那段路径。完整的 URL 是 <transport>://<host>:<port>/<resource path>/<path>。 |
自由文本(必填) | 空 |
例子:主机 192.168.0.40,资源路径 api,点位路径 sensors/temp,轮询的就是 http://192.168.0.40/api/sensors/temp。
读取
每一轮轮询都 GET 这个点位的 URL,并按点位声明的数据类型解析整个响应体:
| 类型 | 接受的响应体 |
|---|---|
| Float | 一个数字,固定区域性格式(21.5,小数点,不带千位分隔符) |
| Int32 | 一个整数(42) |
| Boolean | true 或 false |
| String | 什么都行;响应体原样就是那个值(一份 JSON 文档以它的原始文本到来) |
声明的类型解析不了的响应体,或者一个非成功的状态码,读作一次失败的读取:点位转为质量不可用,由它的读取失败策略决定呈现什么,见 Connector 页面。
写入
读写方式可写的点位用 PUT 写到同一个 URL:响应体是那个值的 JSON 形式,内容类型是 application/json。数字作为光秃秃的字面量发出去(42.5),布尔作为 true 或 false,文本则加引号("automatic")。端点自己决定怎么处理它;非成功的状态读作一次失败的写入。和别处一样,写入框接收的是工程值,原始值上总线之前会先把这个点位的转换环节反过来走一遍,见 Connector 页面。
支持的数据类型
Boolean、Int32、Float 和 String。
命令
点位读一个值;命令则要求服务去做一件事。每一条命令都在设备上声明,位置是它页面上的命令卡片:一个名称、POST 过去的那条路径(接在设备自己的地址下面,和点位的路径完全一样),以及可选的、它所接收的那一个值的名字。行上的“运行”把它发出去并报告服务答了什么,而这条命令同时也成为这台设备在本工作站自己的 OPC UA 地址空间里的一个方法,所以任何能调用方法的东西都能下发它。你打进去的那个值原样作为请求体发出去。
服务答的什么,就是这条命令的结果。服务返回一个在成功范围之外的状态,那是服务在拒绝这条命令,不是连接失败:这次拒绝会点名那个状态,并把服务随它说的话引出来(“HTTP 500:燃烧器已闭锁”),这台设备上别的什么都不受它打扰。
设备发现
这个驱动没有设备发现扫描。请按主机添加每一个端点,按路径添加每一个值;添加设备的流程见 Connector 页面。