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

通讯编程006——NodeJS OPC UA Client开发简单教程

本文介绍如何在NodeJS环境下开发OPC UA Client,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。相关软件请登录网信智汇(wangxinzhihui.com)。

开发步骤如下:

1)首先需要安装nodejs,要求版本至少是12。

2)创建项目目录,在cmd下进入项目目录下,执行如下指令:

1)npm init

2)npm i

3)npm install node-opcua --save

3)创建client.js,输入以下代码:

/*引入相关模块*/
const { OPCUAServer, DataType, AttributeIds} = require("node-opcua");async function main() {
//a)创建OPC UA Client并连接到OPC UA Servertry {var option = {};option.securityPolicy = opcua.SecurityPolicy.None;option.securityMode = opcua.MessageSecurityMode.None;option.keepSessionAlive = true;var url = "opc.tcp://SKY-20201126GIK:4380/UADEMO";var client = opcua.OPCUAClient.create(option);await client.connect(url);} catch (err) {console.log(err);return;}if (!client) {console.log("连接失败!");return;}//b)创建会话try {var userIdentity = {};userIdentity.type = opcua.UserTokenType.Anonymous;//采用用户密码//userIdentity.type = opcua.UserTokenType.UserName;//userIdentity.userName = "XXXX";//userIdentity.password = "XXXX";session = await client.createSession(userIdentity);if (!session) {console.log("创建会话失败!");return;}console.log("创建会话成功!");} catch (err) {console.log(err);return;}//c)读取数据var nodeIdS = 'ns=1;s="pressure"'; //待写入的节点Idtry {const dataValue = await session.read({nodeId: nodeIdS,attributeId: AttributeIds.Value,});if (dataValue.statusCode !== opcua.StatusCodes.Good) {console.log("不能读取 ", nodeIdS);} else {console.log("value = ", dataValue.toString());}} catch (err) {console.log(err);return;}//d)写数据try {var nodesToWrite = [{nodeId: nodeIdS,attributeId: opcua.AttributeIds.Value,value: {value: {dataType: opcua.DataType.Double,value: 23.5}}}];session.write(nodesToWrite, function (err, statusCodes) {if (err) {console.log(' 写错误: ' + err);}});} catch (err) {console.log(err);return;}console.log(' 写数据成功!');
}main(); 作者:zhouwl72 https://www.bilibili.com/read/cv26311976/ 出处:bilibili

4)在cmd下进入项目目录,执行:node client。

运行UaExpert,查看var2写入成功。

以上为NodeJS环境下开发OPC UA Client简单教程,通过扩展可开发更多功能。更多通讯资源请登录网信智汇(wangxinzhihui.com)。

相关文章:

通讯编程006——NodeJS OPC UA Client开发简单教程

本文介绍如何在NodeJS环境下开发OPC UA Client,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。相关软件请登录网信智汇(wangxinzhihui.com)。 开发步骤如下: 1)首先需要安装nodejs,要求版本至少是12。 …...

「高等数学」雅可比矩阵和黑塞矩阵的异同

「高等数学」雅可比矩阵和黑塞矩阵的异同 雅可比矩阵,Jacobi matrix 或者 Jacobian,是向量值函数( f : R n → R m f:\mathbb{R}^n \to \mathbb{R}^m f:Rn→Rm)的一阶偏导数按行排列所得的矩阵。 黑塞矩阵,又叫海森矩…...

继承(个人学习笔记黑马学习)

1、基本语法 #include <iostream> using namespace std; #include <string>//普通实现页面//Java页面 //class Java { //public: // void header() { // cout << "首页、公开课、登录、注册...(公共头部)" << endl; // } // void footer() …...

ToBeWritten之ATTCK 测评方案

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

JSONUtil详解

JSONUtil是一个通用的JSON工具类&#xff0c;用于在Java中操作JSON数据。虽然之前提到的示例中没有直接提及JSONUtil&#xff0c;但可以解释一下可能存在的一些常见JSON操作方法&#xff0c;这些方法通常可以在不同的JSON工具类中找到。 JSONUtil中的一些常见方法包括&#xf…...

ArcGIS Maps SDK for JS(一):概述与使用

文章目录 1 概述2 如何使用ArcGIS Maps SDK for JavaScript2.1 AMD 模块与 ES 模块2.2 AMD 模块和 ES 模块比较 3 几种安装方式3.1 通过 ArcGIS CDN 获取 AMD 模块3.2 通过 NPM 运行 ES 模块3.3 通过 CDN 获取 ES 模块3.4 本地构建 ES3.5 本地构建 AMD 3 VSCode下载与安装2.1 下…...

【STM32】FSMC接口的复用和非复用

问题背景 在阅读《零死角玩转STM32—F103指南者》&#xff0c;以及《STM32F10x-中文参考手册》关于FSMC一章节的时候&#xff0c;对于在控制NOR/SRAM的时候使用到的引脚,在提到NOR器件的时候提到了地址复用和非复用接口&#xff0c;一时间没明白是什么东西。 结论 非复用模式…...

操作系统强化认识之Shell编程学习与总结

目录 1.Shell的概述 2.Shell脚本入门 3.变量 3.1.系统预定义变量 3.2.自定义变量 3.3.特殊变量 4.运算符 5.条件判断 6.流程控制 6.1.if判断 6.2.case语句 6.3.for循环 6.4.while循环 7.read读取控制台输入 8.函数 8.1.系统函数 8.2.自定义函数 9.正则表示式入…...

怎么用conda下载清华源的pytorch(自带cuda的版本)

1&#xff0c;添加镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

【ES6】CommonJS模块和ES6模块

在JavaScript中&#xff0c;模块是一种将功能代码组织成逻辑单元的方式&#xff0c;以便在其他项目中重复使用。有两种主要的模块系统&#xff1a;CommonJS和ES6。 1、CommonJS 在CommonJS中&#xff0c;我们使用require来引入模块&#xff0c;使用module.exports来导出模块。…...

两个线程同步执行:解决乱箭穿心(STL/Windows/Linux)

C自学精简教程 目录(必读) C并发编程入门 目录 多线程同步 线程之间同步是指线程等待其他线程执行完某个动作之后再执行&#xff08;本文情况&#xff09;。 线程同步还可以是像十字路口的红绿灯一样&#xff0c;只允许一个方向的车同行&#xff0c;其他方向的车等待。 本…...

Ubuntu18.04更改镜像源(网易,阿里,清华,中科大,浙大)

一&#xff0c;备份原来的源&#xff08;选做&#xff09; sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 二&#xff0c;更换源 sudo gedit /etc/apt/sources.list 删除原来内容改为新的镜像源 1&#xff0c;清华源 deb https://mirrors.tuna.tsinghua.edu…...

字节码和机器码的区别

字节码和机器码是计算机程序在不同阶段的表示形式&#xff0c;它们的主要区别如下&#xff1a; 抽象级别不同&#xff1a;字节码是一种中间表示形式&#xff0c;位于源代码和机器码之间。它是一种与特定平台无关的低级表示形式&#xff0c;通常由编译器将源代码转换而来。而机器…...

go学习part21 Redis和Go(2)

1.三方库安装 309_尚硅谷_Go连接到Redis_哔哩哔哩_bilibili 借鉴&#xff1a; Golang 安装 Redis_go fiber 安装redis_柒柒伍贰玖。的博客-CSDN博客 三方redis库已经迁移到以下网址&#xff0c;go get github.com/gomodule/redigo/redis gomodule/redigo: Go client for Red…...

从0到1学会Git(第二部分):Git的本地操作和管理

写在前面:本文介绍了在本地仓库进行文件的处理以及本地的合并等操作。 前置知识:文件可以处在三个区域&#xff0c;分别为工作区&#xff0c;暂存区和本地仓库&#xff0c;我们此文的目标即是将文件存储在本地仓库中。我们可以将文件的区域理解为&#xff0c;cpu中&#xff0c…...

hive lateral view 实践记录(Array和Map数据类型)

目录 一、Array 1.建表并插入数据 2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 一、Array 1.建表并插入数据 正确插入数据&#xff1a; create table tmp.test_lateral_view_movie_230829(movie string,category array&…...

理解 std::thread::join

C多线程并发编程入门&#xff08;目录&#xff09; 本文用最简单易懂的实际案例&#xff0c;讲清楚了 join 的实际内涵&#xff0c;保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如&#xff1a; int main() {thread t(f);t.…...

C#循环定时上传数据,失败重传解决方案,数据库标识

有些时候我们需要定时的上传一些数据库的数据&#xff0c;在数据不完整的情况下可能上传失败&#xff0c;上传失败后我们需要定时在重新上传失败的数据&#xff0c;该怎么合理的制定解决方案呢&#xff1f;下面一起看一下&#xff1a; 当然本篇文章只是提供一个思路&#xff0…...

R语言图形的组合( par(),layout(),par(fig()) )

引入d.class进行画图 > d.class<-read.csv("D://class.csv",header T) > attach(d.class) > opar<-par(no.readonly TRUE)非常简单的数据&#xff0c;需要可自取 链接&#xff1a;https://pan.baidu.com/s/1zNx5z9JsaaRqFueRgGY3mQ 提取码&#x…...

如何为 Flutter 应用程序创建环境变量

我们为什么需要环境变量&#xff1f; 主要用于存储高级机密数据&#xff0c;如果泄露可能会危及您产品的安全性。这些变量本地存储在每个用户的本地系统中&#xff0c;不应该签入存储库。每个用户都有这些变量的副本。 配置 在根项目中创建一个名为 .env 的文件夹&#xff08…...

Qwen3.5-4B模型在嵌入式系统日志智能分析中的实践

Qwen3.5-4B模型在嵌入式系统日志智能分析中的实践 1. 嵌入式日志分析的痛点与机遇 在物联网网关、工业控制器等嵌入式设备运行过程中&#xff0c;系统日志就像设备的"健康日记"&#xff0c;记录着每一次心跳、每一次异常。传统运维人员需要像"破译密码"一…...

hgproxy4.0.35.0之前版本数据库连接卡在parse状态

文章目录环境症状问题原因解决方案环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.10 症状 查询数据库后台连接进程&#xff0c;发现主备节点均有超过几天的长连接&#xff0c;且状态卡在parse状态 问题原因 数据库会话sql出错后…...

IDEA使用maven打包Java项目,跳过test的3种方法

文章目录第一种&#xff1a;命令行第二种&#xff1a;pom.xml设置第三种&#xff1a;IDEA工具操作第一种&#xff1a;命令行 命令行的方式&#xff0c;在哪输入命令都行。 mvn install -Dmaven.test.skiptrue第二种&#xff1a;pom.xml设置 修改pom.xml文件 <build>&…...

轻量级跨平台桌面应用开发:Tauri零门槛实战指南

轻量级跨平台桌面应用开发&#xff1a;Tauri零门槛实战指南 【免费下载链接】tauri Build smaller, faster, and more secure desktop and mobile applications with a web frontend. 项目地址: https://gitcode.com/GitHub_Trending/ta/tauri 在桌面应用开发领域&#…...

别只盯着错误页!从一次线上事故复盘:优化微信小程序web-view体验的5个隐藏细节

从线上事故到极致体验&#xff1a;微信小程序web-view优化的5个实战细节 那天凌晨3点&#xff0c;我被一阵急促的告警声惊醒。监控系统显示&#xff0c;公司核心小程序的H5活动页加载成功率从99.8%暴跌至62%。这个承载着双十一预售活动的页面&#xff0c;每小时流失着数百万潜在…...

从手机拍照到专业扫描:5种主流三维重建数据集的‘幕后’采集故事与技术选型

从手机拍照到专业扫描&#xff1a;5种主流三维重建数据集的‘幕后’采集故事与技术选型 在数字孪生和元宇宙技术快速发展的今天&#xff0c;高质量三维重建数据集已成为计算机视觉领域的战略资源。不同于普通用户随手拍摄的二维照片&#xff0c;专业级三维数据集背后隐藏着精密…...

手把手教你玩转双闭环MMC逆变仿真

双闭环&#xff0b;最近电平逼近调制MMC模块化多电平换流器仿真&#xff08;逆变侧&#xff09;含技术文档 MMC Matlab-Simulink 直流侧11kV 交流侧6.6kV N22 采用最近电平逼近调制NLM 环流抑制&#xff08;PIR比例积分准谐振控制&#xff09;&#xff0c;测量桥臂电感THD获得抑…...

如何突破B站视频获取限制?这款开源工具让你轻松搞定

如何突破B站视频获取限制&#xff1f;这款开源工具让你轻松搞定 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 你是否遇到过想要保存B站精彩视频却无从下手的困境&#xff1f;是否因复杂的技术门槛而…...

基于Spark+Hadoop+Hive 深度学习大数据的运河航运效率提升平台的设计与实现

前言随着全球贸易的不断发展&#xff0c;运河航运作为连接内陆与海洋的重要交通方式&#xff0c;其运输效率的提升对于促进经济发展、优化资源配置具有重要意义。基于大数据的运河航运效率提升平台的设计与实现&#xff0c;旨在通过收集、处理和分析大量的航运数据&#xff0c;…...

STM32 PWR电源管理与低功耗模式实战指南

1. STM32电源管理基础与实战意义 在嵌入式系统开发中&#xff0c;电源管理往往是最容易被忽视却至关重要的环节。想象一下你的智能手环如果每天都需要充电&#xff0c;或者无线传感器节点每隔几小时就要更换电池&#xff0c;这样的产品显然缺乏实用价值。STM32的PWR模块正是为解…...