当前位置: 首页 > 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…...

低压电工-电子技术常识

一、导体、绝缘体、半导体&#xff08;按电阻率划分&#xff09;1. 划分标准单位是 Ω・cm&#xff08;欧姆・厘米&#xff09;&#xff0c;不是单纯欧姆 (Ω)&#xff0c;是电阻率专用单位&#xff1a;欧姆・厘米 Ω⋅cm&#xff0c;也可以用 Ω⋅m&#xff08;欧姆・米&#…...

Mzmine 4.4.3 安装教程

软件介绍MZmine是一款开源的质谱数据处理平台&#xff0c;主要用于液相色谱-质谱&#xff08;LC-MS&#xff09;等数据的分析&#xff0c;其核心功能包括原始数据导入、色谱峰检测与去卷积、跨样品峰对齐、化合物识别&#xff08;通过与数据库比对&#xff09;以及结果可视化&a…...

10分钟掌握R3nzSkin国服特供版:英雄联盟免费换肤完全指南

10分钟掌握R3nzSkin国服特供版&#xff1a;英雄联盟免费换肤完全指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 厌倦了英雄联盟国服中千篇一律的默…...

Claude技能库开发指南:工具调用原理与模块化实践

1. 项目概述&#xff1a;一个为Claude模型量身定制的技能库最近在探索如何让Claude这类大型语言模型更好地融入我的日常工作流时&#xff0c;我遇到了一个非常有意思的项目——DhanushNehru/claude-skills。简单来说&#xff0c;这是一个专门为Anthropic的Claude模型设计的“技…...

【LangChain实战】无缝切换:将项目中的OpenAI LLM替换为本地或第三方API模型

1. 为什么需要替换OpenAI LLM&#xff1f; 最近两年大语言模型&#xff08;LLM&#xff09;发展迅猛&#xff0c;但很多项目一上来就直接用OpenAI API&#xff0c;这其实存在不少隐患。我在实际项目中就遇到过几个典型问题&#xff1a;首先是API调用不稳定&#xff0c;特别是国…...

Kubernetes API Server优化:提升集群管理效率

Kubernetes API Server优化&#xff1a;提升集群管理效率 一、Kubernetes API Server概述 1.1 API Server的角色 Kubernetes API Server是Kubernetes集群的核心组件&#xff0c;负责处理所有的REST API请求&#xff0c;是集群内部和外部通信的枢纽。它负责验证和处理请求&#…...

从Halo部署到公网访问:手把手教你用Nginx反代搞定域名、HTTPS与安全配置

从Halo部署到公网访问&#xff1a;Nginx反代全流程实战指南 当你成功在本地服务器上部署了Halo博客系统&#xff0c;看着8080端口的测试页面时&#xff0c;是否思考过如何让它成为真正的互联网站点&#xff1f;本文将带你跨越从本地测试到公网可访问的最后一道鸿沟&#xff0c;…...

电压跟随器:从原理到实战,如何用它解决信号传输的三大难题?

1. 电压跟随器&#xff1a;电子工程师的"信号保镖" 第一次接触电压跟随器时&#xff0c;我正被一个传感器信号传输问题折磨得焦头烂额。当时用STM32采集热电偶温度信号&#xff0c;明明传感器端测量正常&#xff0c;但MCU接收到的数值总是飘忽不定。直到前辈指着原理…...

告别物理开关!用CD4013和MOS管自制零功耗一键开关机模块(3-18V宽压适用)

零功耗一键开关机模块&#xff1a;基于CD4013的硬件设计实战 在电池供电的嵌入式系统和DIY电子项目中&#xff0c;电源管理往往成为决定设备续航能力的关键因素。传统机械开关虽然简单可靠&#xff0c;但无法实现软关机功能&#xff1b;而普通电子开关又常因静态功耗过高导致电…...

基于改进型PCNN的不规则图像自适应分割算法研究

基于改进型PCNN的不规则图像自适应分割算法研究根据论文中的相关内容&#xff0c;以下是使用不同方法解决图像分割问题并进行改进的研究&#xff1a;冯登超等人提出了基于改进型脉冲耦合神经网络&#xff08;PCNN&#xff09;的自适应分割算法。他们在原有PCNN模型的基础上对神…...