【Python】OPC UA 连接并读取节点值

2024-04-09 17:20
文章标签 python 读取 连接 节点 ua opc

本文主要是介绍【Python】OPC UA 连接并读取节点值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下是一个使用Python编写的OPC UA客户端程序,该程序会连接到OPC UA服务器,读取指定节点的值,并将这些值定期保存到CSV文件中。该程序还会读取一个XML文件来获取节点列表,并在发生错误时记录错误日志。
首先,我们需要导入所需的库:

import os
import csv
import time
import xml.etree.ElementTree as ET
from datetime import datetime
from opcua import Client
import logging

接下来,我们设置日志记录器,以便在发生错误时记录错误日志:

logger = logging.getLogger()
fh = logging.FileHandler("error.log", encoding="utf-8", mode="a")
formatter = logging.Formatter("%(asctime)s - %(name)s-%(levelname)s %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.setLevel(logging.WARNING)

然后,我们读取XML文件(文件下载)以获取节点列表:

tree = ET.parse('customer.xml')
root = tree.getroot()
node_list=[]
def find_titles(element:ET.Element ):if element.get('nodeClass') == 'Variable':title = element.get('Title')if title is not None:node_list.append(title)# 递归遍历所有子节点for child in element.getchildren():find_titles(child)
find_titles(root)

接下来,我们检查CSV文件是否存在,如果存在,则将其重命名:

filename = 'opcua_data.csv'
if os.path.exists(filename):modification_time = os.path.getmtime(filename)modification_time_str = datetime.fromtimestamp(modification_time).strftime('%Y%m%d%H%M%S')new_filename = f"{filename}_{modification_time_str}"os.rename(filename, new_filename)

现在,我们设置OPC UA客户端并连接到服务器:

client = Client("opc.tcp://192.168.168.182:4840")
client.set_user("OpcUaClient")
client.set_password("OpcUaClient")

接下来,我们打开CSV文件并准备写入数据:

with open(filename, mode='w', newline='') as csvfile:writer = csv.DictWriter(csvfile, fieldnames=node_list)writer.writeheader()node_dist = {}try:client.connect()while True:for title in node_list:try:value = client.get_node("ns=2;s=" + title).get_value()if isinstance(value, str):value.replace('\n', '\\n')node_dist[title] = valueexcept Exception as e:logger.warning(f"Failed to get value for node '{title}': {e}")continuewriter.writerow(node_dist)  # 写入到CSV的新一行csvfile.flush()  # 确保数据被写入文件time.sleep(1)  # 等待1秒finally:client.disconnect()

这个程序将不断运行,每秒从OPC UA服务器读取一次数据,并将其保存到CSV文件中。如果发生错误,错误将被记录到日志文件中。

这篇关于【Python】OPC UA 连接并读取节点值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888765

相关文章

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

python中cv2.imdecode()与cv2.imencode()的使用小结

《python中cv2.imdecode()与cv2.imencode()的使用小结》本文介绍了cv2.imencode()和cv2.imdecode()函数的使用,文中通过示例代码介绍的非常详细,对... 目录1、图片路径带中文的读取和写入1.1 读取1.2 写入2、在网络中传输图片cv2.imencod