苏州电商网站开发,asp.net 网站 相册,码制作二维码生成器,深圳建筑网站基于Web 的应用非常普及#xff0c;例如基于web 的SCADA #xff0c;物联网 Dashboard 等等#xff0c;那么基于Web 的应用如何访问OPC UA 服务器呢#xff1f;本博文讨论这方面的问题。
Web 的通信方式 Web 是我们通常讲的网站#xff0c;它由浏览器#xff0c;HTTP 服… 基于Web 的应用非常普及例如基于web 的SCADA 物联网 Dashboard 等等那么基于Web 的应用如何访问OPC UA 服务器呢本博文讨论这方面的问题。
Web 的通信方式 Web 是我们通常讲的网站它由浏览器HTTP 服务器和网页组成的。HTTP服务器通常称为后端HTTP 网页在浏览器中解析执行。现代HTML5技术使HTTP中已经包括 javascript 语言能够编写功能强大的程序因此HTTP 网页称为前端。
传统的web 前后端是通过HTTP协议通信的现在web 前后端能够采取多种方式通信它们包括
HTTP协议RESTfulMQTT 发布/订阅方式WebSocket
OPC UA 的通信方式
OPC UA 通信方式有两种
TCP Client/Server Pub/Sub 发布订阅模型
几种基于Web的OPC UA 访问方式
基于HTTP RESTful 的方式
有两种方式实现OPC UA 的RESTful访问
第一种方式是网关方式将RESTful 请求翻译成为OPC UA 的Client 请求结构如下图 另一种方法是扩展OPC UA 标准使OPC UA 服务器实现RESTful 访问。 OPC基金会最近宣布将通过扩展OPC UA标准的RESTful接口2023/4/17),由微软公司公司主导编制目前还没有更多的信息。 在OPC UA 1.04 规范中提出了SessionlessInvoke 无状态服务通信。但是仅限于有限的服务。
基于GraphQL 方式 在这里我们介绍一种使用GraphQL 查询OPCUA 服务器的方法。 GraphQL 是一种HTTP API 方式。它的查询命令类似于JSON 但是又不完全是JSON而返回的是JSON结构。 Facebook 的移动应用从 2012 年就开始使用 GraphQL。GraphQL 规范于 2015 年开源现已经在多种环境下可用并被各种体量的团队所使用。
GraphQL 通过 HTTP 提供服务
GraphQL 是一种 API 对话的规范。下面是通过HTTP 实现的一个GragphQL 查询实例 查询
query {hero {name}droid(id: 2000) {name}
}
响应
{data: {hero: {name: R2-D2},droid: {name: C-3PO}}
} GraphQL的查询过程
GraphQL 查询不完全是 JSON它看起来类似 JSON 形状。 当发出 POST 请求进行 GraphQL 查询时客户端将其作为“字符串”发送。服务器获取 JSON 对象并提取查询字符串。 根据 GraphQL 语法和图表数据模型GraphQL 模式服务器处理 并验证 GraphQL 查询。正如典型的 API 服务器GraphQL API 服务器随之调用数据库或其他服务以抓取客户端请求的数据。服务器获取数据并以 JSON 对象的形式将其返回客户端。 GraphQL 的优点
GraphQL 模式会在 GraphQL 应用中设置单一事实来源。它为企业提供了一种整合其整个 API 的方法。一次往返通讯可以处理多个 GraphQL 调用。客户端可得到自己所请求的内容不会超量。严格定义的数据类型可减少客户端与服务器之间的通信错误。GraphQL 具有自检功能。客户端可以请求一个可用数据类型的列表。这非常适合文档的自动生成。GraphQL 允许应用 API 进行更新优化而无需破坏现有查询。许多开源 GraphQL 扩展可提供 REST API 所不具备的功能。GraphQL 不指定特定的应用架构它能够以现有的 REST API 为基础并与现有的API管理 工具配合使用。
使用GraphQL 访问OPC UA 服务器
在下列项目中实现了OPCUA 服务器的GraphQL 封装
https://github.com/AaltoIIC/OPC-UA-GraphQL-Wrapper
这是一个基于python-opcua 库的项目
查询的例子
query {node(server: TestServer, nodeId: ns2;i1234) {namedescriptionvariable {valuedataType}}
}
另一个是基于NodeJS 的项目 https://github.com/gilesbradshaw/uaQL 结束语 RESTful 访问OPCUA 服务器是十分有用的例如当你实现一个基于OPCUA 的webHMI 应用时HMI界面访问OPCUA 的内容。 具体实现起来想必还有许多的细节要考虑例如数据和事件如何订阅这要使用websocket 双向协议或者MQTT 发布/订阅方式。