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

【Python】使用OPC UA创建数据服务器

目录

      • 准备工作
      • 服务器设置
      • 创建或获取节点
      • 设置节点值
      • 启动服务器
      • 查看服务器
      • 客户端
      • 总结

 在工业自动化和物联网(IoT)领域,OPC UA(开放平台通信统一架构)已经成为一种广泛采用的数据交换标准。它提供了一种安全、可靠且独立于平台的方式来访问实时数据。在本文中,我们将探讨如何使用Python和OPC UA库来创建一个高效的数据服务器,该服务器能够从CSV文件读取数据,并允许OPC UA客户端访问这些数据。

准备工作

首先,确保你已经安装了opcua库。如果没有安装,可以使用pip进行安装:

pip install opcua

服务器设置

我们将创建一个简单的OPC UA服务器,它将从CSV示例文件(下载)中读取数据,并将这些数据作为OPC UA节点上的变量公开。

from opcua import Server, ua, uamethod
CSV_FILE = "opcua_data.csv"
SERVER_URL = "opc.tcp://0.0.0.0:4840/"
# 创建服务器实例
server = Server()
# 设置服务器端口
server.set_endpoint(SERVER_URL)
# 创建一个命名空间
uri = "http://opcua.simulator.com"
idx = server.register_namespace(uri)
# 获取对象节点,它通常是根节点的第一个孩子
objects = server.get_objects_node()
node_dict = {}

创建或获取节点

为了管理服务器中的节点,我们定义了一个帮助函数get_or_create_node,它将根据需要创建新的节点或返回已存在的节点。

def get_or_create_node(parent, node_name, value):children = parent.get_children()for child in children:if child.get_browse_name().Name == node_name:return child  # 返回已存在的节点# 如果节点不存在,创建它return parent.add_variable(idx, node_name, ua.Variant(value, ua.VariantType.String))

设置节点值

我们还需要一个函数来更新节点的值。这个函数将确保节点的值是最新的,并且反映了CSV文件中的数据。

def set_node_value(node_path, value):try:if node_path.startswith("/Server/"):returnif node_path not in node_dict:parent = objectsparts = node_path.split("/")for part in parts[:-1]:if part == "":continueparent = get_or_create_node(parent, part, value)last_node_name = parts[-1]node_dict[node_path] = get_or_create_node(parent, last_node_name, value)node_dict[node_path].set_value(ua.Variant(value, ua.VariantType.String))except Exception as e:print(f"Error setting node value: {e}")

启动服务器

最后,我们将启动服务器,并让它在一个无限循环中不断更新节点的值。

# 启动服务器
try:server.start()# 启动服务器print("Server started at opc.tcp://0.0.0.0:4840/")# 每秒读取csv中的一行,更新节点值with open(CSV_FILE, "r") as csvfile:csvreader = csv.reader(csvfile)header = next(csvreader)while True:try:row = next(csvreader)for i in range(len(header)):set_node_value(header[i], row[i])time.sleep(1)except StopIteration:csvfile.seek(0)  # 回到文件开头next(csvreader)  # 跳过表头
finally:server.stop()

查看服务器

可以使用 UA Sample Client (下载链接)软件连接到创建的opcua服务器查看结构和数据。
在这里插入图片描述
数据监控:
请添加图片描述

客户端

【Python】OPC UA 服务器与客户端的实现

总结

 通过使用Python和OPC UA库,我们创建了一个能够从CSV文件读取数据并将其作为OPC UA节点值提供的服务器。这种方法在工业数据集成和监控应用中非常有用,因为它允许不同系统和设备之间进行标准化和安全的数据交换。

http://www.lryc.cn/news/338878.html

相关文章:

  • JavaScript(六)-高级篇
  • 速盾:游戏cdn什么意思
  • 数据库-Redis(11)
  • 【网安小白成长之路】6.pikachu、sql-labs、upload-labs靶场搭建
  • (七)C++自制植物大战僵尸游戏关卡数据加载代码讲解
  • wpf下RTSP|RTMP播放器两种渲染模式实现
  • Element-UI 自定义-下拉框选择年份
  • 二叉树的链式存储
  • [计算机效率] 鼠标手势工具:WGestures(解放键盘的超级效率工具)
  • Linux useradd命令教程:如何创建新的用户账户(附实例详解和注意事项)
  • 基于ollama搭建本地chatGPT
  • C++11 数据结构3 线性表的循环链式存储,实现,测试
  • 初识DOM
  • 计算机视觉实验五——图像分割
  • 移动Web学习06-移动端适配Less预处理器项目案例
  • LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑
  • 24/04/15总结
  • vue3、vue2中nextTick源码解析
  • 【氮化镓】GaN HEMTs结温和热阻测试方法
  • c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)
  • 【状态压缩 容斥原理 组合数学】100267. 单面值组合的第 K 小金额
  • .net框架和c#程序设计第三次测试
  • 架构师系列-搜索引擎ElasticSearch(五)- 索引设计
  • kafka ----修改log4j、jmx、jvm参数等
  • Python 全栈 Web 应用模板:成熟架构,急速开发 | 开源日报 No.223
  • STM32之DHT11温湿度传感器
  • paddle ocr
  • Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得
  • 【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境
  • 网络篇09 | 运输层 udp