当前位置: 首页 > news >正文

OPC UA 服务器的Web访问

     基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。

Web 的通信方式

        Web 是我们通常讲的网站,它由浏览器,HTTP 服务器和网页组成的。HTTP服务器通常称为后端,HTTP 网页在浏览器中解析执行。现代HTML5技术使HTTP中已经包括 javascript 语言,能够编写功能强大的程序,因此HTTP 网页称为前端。

传统的web 前后端是通过HTTP协议通信的,现在web 前后端能够采取多种方式通信,它们包括:

  • HTTP协议
  • RESTful
  • MQTT 发布/订阅方式
  • 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的查询过程
  1. GraphQL 查询不完全是 JSON;它看起来类似 JSON 形状。 当发出 'POST' 请求进行 GraphQL 查询时,客户端将其作为“字符串”发送。
  2. 服务器获取 JSON 对象并提取查询字符串。 根据 GraphQL 语法和图表数据模型(GraphQL 模式),服务器处理 并验证 GraphQL 查询。
  3. 正如典型的 API 服务器,GraphQL API 服务器随之调用数据库或其他服务,以抓取客户端请求的数据。
  4. 服务器获取数据并以 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: "ns=2;i=1234") {namedescriptionvariable {valuedataType}}
}

另一个是基于NodeJS 的项目

 https://github.com/gilesbradshaw/uaQL

 

结束语

        RESTful 访问OPCUA 服务器是十分有用的,例如,当你实现一个基于OPCUA 的webHMI 应用时,HMI界面访问OPCUA 的内容。

        具体实现起来,想必还有许多的细节要考虑,例如数据和事件如何订阅,这要使用websocket 双向协议,或者MQTT 发布/订阅方式。

相关文章:

  • 面向对象技术
  • 软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01
  • ​【已解决】npm install​卡主不动的情况
  • Fair Data Exchange:区块链实现的原子式公平数据交换
  • HTML万字学习总结
  • 【Web开发】CSS教学(超详细,满满的干货)
  • HTML本地离线缓存?
  • 中国城市统计年鉴、中国县域统计年鉴、中国财政统计年鉴、中国税务统计年鉴、中国科技统计年鉴、中国卫生统计年鉴​
  • 【首次抽奖】16G、32G免费送!云服务器选购推荐 京东云 阿里云 腾讯云对比 幻兽帕鲁 雾锁王国 省钱学生党
  • 读书笔记--数据建模与设计的总结感悟
  • OpenvSwitch VXLAN 隧道实验
  • 指挥航空公司架次与延误率占比
  • 手机网络连接性能API接口:查询手机网络连接性能状态
  • android 简单快速 自定义dialog(简单好用,不需要设置样式)
  • 在idea中配置tomcat服务器,然后部署一个项日
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [数据结构]链表的实现在PHP中
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • learning koa2.x
  • Protobuf3语言指南
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 关于extract.autodesk.io的一些说明
  • 如何优雅地使用 Sublime Text
  • 通信类
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 追踪解析 FutureTask 源码
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 数据可视化之下发图实践
  • 整理一些计算机基础知识!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # .NET Framework中使用命名管道进行进程间通信
  • #控制台大学课堂点名问题_课堂随机点名
  • #每天一道面试题# 什么是MySQL的回表查询
  • (10)ATF MMU转换表
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (rabbitmq的高级特性)消息可靠性
  • (vue)页面文件上传获取:action地址
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (南京观海微电子)——COF介绍
  • (排序详解之 堆排序)
  • (三)mysql_MYSQL(三)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler