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的查询过程
- 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: "ns=2;i=1234") {namedescriptionvariable {valuedataType}}
}
另一个是基于NodeJS 的项目
https://github.com/gilesbradshaw/uaQL
结束语
RESTful 访问OPCUA 服务器是十分有用的,例如,当你实现一个基于OPCUA 的webHMI 应用时,HMI界面访问OPCUA 的内容。
具体实现起来,想必还有许多的细节要考虑,例如数据和事件如何订阅,这要使用websocket 双向协议,或者MQTT 发布/订阅方式。
相关文章:
OPC UA 服务器的Web访问
基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站,它由浏览器,HTTP 服…...
docker 子网
当需要给容器分配指定 ip ,为避免ip 冲突,指定容器子网处理 创建 subnet 子网 docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 subnet-testdocker network ls NETWORK ID NAME DRIVER SCOPE ... f582ecf297bc sub…...
QT使用RabbitMQ
文章目录 1.RabbitMQ 客户端下载地址:1.1RabbitMQ基本结构:2.搭建RabbitMQ server3.安装步骤4.运行4.1 报错问题解决5.使用5.1 配置Web管理界面6.常用命令总结7.Qt客户端编译7.1 这里重点强调一下,这个文件需要改成静态库7.2 下载地址:(qamqp自己下载,下载成功后,静态编译…...
什么是R语言?什么是R包?-R语言001
R语言是一种专为统计计算和图形而设计的编程语言和环境。它最初由罗斯伊哈卡和罗伯特亨特尔在1993年创建,灵感来源于S语言。R语言已经发展成为统计学、数据分析、科学研究以及许多其他领域中最受欢迎和广泛使用的工具之一。R语言的核心是一个开源的解释型语言&#…...
Java17 --- springCloud之LoadBalancer
目录 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom 1.3、80服务controller层: 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom <!--loadbalancer-->&…...
Mac(含M1) 使用 brew 安装nvm
目录 Mac 安装nvm 下载命令 配置环境变量 刷新 Mac(M1) 安装nvm 搜索 下载 为nvm创建文件夹 配置环境变量 刷新 Mac 安装nvm 下载命令 brew install nvm 配置环境变量 vi ~/.zshrc 内容如下: export NVM_DIR"$HOME/.nvm"[ -s "/usr/local…...
优秀的前端框架vue,原理剖析与实战技巧总结【干货满满】
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:前端零基础教学,实战进阶 景天的主页:景天科技苑 文章目录 Vuevue.js库的基本使用vue.js的M-V-VM思…...
<2024最新>ChatGPT逆向教程
前言 在使用本篇文章用到的项目以及工具时,需要对其有一定的了解,无法访问以及无法使用的问题作者不承担任何责任,可以自行想办法解决遇到的问题。 文章若有不合适,有问题的地方,请私聊指出,谢谢~ 准备工具 一台至少 2 核 2G 内存的服务器,推荐是位于香港、新加坡或…...
C#编程技巧--2
1.使用泛型: 泛型允许你编写更加灵活和可重用的代码,同时提高类型安全性。 C# 中的泛型功能允许你编写更加灵活和可重用的代码,并且可以增加类型安全性。通过使用泛型,你可以编写适用于不同类型的代码,而无需为每种类型单独重写代…...
设计模式 代理模式
代理模式主要使用了 Java 的多态,主要是接口 干活的是被代理类,代理类主要是接活, 你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢? 同根就成ÿ…...
关于学习时间
这篇文章我来说一下我对于我最近学习时间的一些思考。 早上和下午是我最为活跃和高效的时间段。 我能够专注地工作,不容易分心。 然而,到了晚上,我的状态开始下降,这是很正常的情况。 由于早上和下午的专注学习,我的大…...
Github:Your browser did something unexpected. Please try again.
问题概述 Github:Your browser did something unexpected. Please try again. If the error continues, try disabling all browser extensions. 问题原因: 提示是插件出了问题,关闭了所有插件也无法解决,搜索了一下说是VPN的问题…...
Django性能优化
1.服务器CPU太高的优化 在Django项目中使用line_profiler进行性能剖析,您需要遵循以下步骤来设置并使用它: 1. **安装line_profiler**: 在命令行中执行以下命令来安装line_profiler: pip install line_profiler …...
全网最详细Docker命令(分类总结)
默认存储容器地址 cd /var/lib/docker 容器生命周期 Docker 命令 开启docker : systemctl start docker 查看docker状态 :systemctl status docker 停止:systemctl stop docker 重启: systemctl restart docker docker开机自启…...
运维自动化之ANSIBLE
一、Ansible的发展史及功能 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ 1、Ansible功能 2、Ansible特性 批量执行远程命令,可以对远程的多台主机同时进行命令的执行 批量安装和配置软件服务,可以对远程的多台主机…...
算法训练day42leetcode01背包问题 416. 分割等和子集
01 背包 题目描述 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 题目分析 每一件物品其实只有两个状态,取或者不取&…...
VulnHub - DarkHole
希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢! 个人博客链接:CH4SER的个人BLOG – Welcome To Ch4sers Blog DarkHole 靶机下载地址:DarkHole: 1 ~ VulnHub 0x01 信息收集 Nmap扫描目标主机…...
前端学习笔记 | WebAPIs(DOM+BOM)
一、作用和分类 1、基本概念 作用:使用JS去操作HTML和浏览器 分类:DOM(文档对象模型)和BOM(浏览器对象模型) html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 (1)选择匹配的第…...
简易内存池(100%用例)C卷(JavaPythonC++Node.jsC语言)
请实现一个简易内存池 , 根据请求命令完成内存分配和释放。 内存池支持两种操作命令,REQUEST和RELEASE,其格式为: REQUEST=请求的内存大小 表示请求分配指定大小内存,如果分配成功,返回分配到的内存首地址;如果内存不足,或指定的大小为 0 ,则输出error。 RELEASE=释放的…...
【算法与数据结构】队列的实现详解
文章目录 📝队列的概念及结构🌠 队列的顺序实现🌉初始化🌠入队🌉出队🌠获取队列首元素🌉获取队列尾部元素🌠获取队列中有效元素个数🌉 队列是否为空🌠查看队列…...
软件PWM库原理与工程实践:轻量级非阻塞式脉宽调制实现
1. PWM库技术解析:面向嵌入式工程师的底层实现与工程化应用1.1 库定位与核心价值PWM(Pulse Width Modulation)库是一个轻量级、非阻塞式脉宽调制信号生成工具,专为资源受限的微控制器平台设计。其核心价值不在于替代硬件PWM外设&a…...
消费级GPU福音:百川2-13B-4bits+OpenClaw自动化测试报告
消费级GPU福音:百川2-13B-4bitsOpenClaw自动化测试报告 1. 为什么选择这个组合? 去年冬天,我盯着显卡监控软件里跳动的显存占用数字,突然意识到一个问题:大多数开源大模型对消费级GPU太不友好了。动辄20GB以上的显存…...
数字孪生简介
数字孪生简介摘要数字孪生(Digital Twin)作为连接物理世界与数字世界的核心技术,正在重塑全球产业格局。本报告系统梳理了数字孪生技术的概念演进、技术架构、行业应用及发展趋势,深入分析了其在智能制造、航空航天、智慧城市、医…...
分层dfs,一种介于dfs与bfs之间的算法
在算法设计的深邃丛林中,深度优先搜索与广度优先搜索如同两条风格迥异的小径。前者沿着一条道路走到黑,不撞南墙不回头,却往往在最优解的门口徘徊——它难以回答"最少需要几步"这样的问题,因为一旦深入某个分支…...
PicoClaw:10美元硬件上的AI革命,让Mac mini瞬间不香了!
PicoClaw:10美元硬件上的AI革命,让Mac mini瞬间不香了!一只皮皮虾搅动了整个AI助手江湖,95%代码由AI自主生成,在不到10MB内存中跑出完整智能体能力。最近,GitHub上有个项目像火箭般蹿升——PicoClaw&#x…...
002、环境搭建:Python虚拟环境、LangChain安装与核心依赖解析
002、环境搭建:Python虚拟环境、LangChain安装与核心依赖解析从一次深夜调试说起 上周三凌晨两点,我被一个诡异的错误钉在屏幕前:明明本地测试通过的LangChain智能体,在同事的机器上死活跑不起来。报错信息指向一个版本冲突——py…...
CVPR 2026 | 武大提出OpenDPR:基于扩散模型的开放词汇变化检测模型
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶…...
2025届必备的十大AI辅助写作平台解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现在处于主流地位的AI论文平台数量众多且种类繁杂,这里包含着:DeepSe…...
多模态Agent从入门到精通:AgentVista全解析,收藏这篇就够了!
一句话讲清楚👉🏻 香港科技大学团队提出了 AgentVista 基准测试,涵盖 25 个子领域的超真实视觉场景,评估发现即使是表现最好的 Gemini-3-Pro 也仅达到 27.3% 的准确率,揭示了当前多模态 Agent 在长序列工具调用上的重大…...
AI结对编程:让快马平台智能生成与调试复杂的Playwright Chromium交互脚本
AI结对编程:让快马平台智能生成与调试复杂的Playwright Chromium交互脚本 最近在做一个电商网站的自动化测试项目,需要处理大量动态加载内容。最头疼的就是那些Ajax延迟加载的列表和可能不存在的元素,经常导致脚本不稳定。好在发现了InsCode…...
