当前位置: 首页 > 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)。

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

相关文章:

  • 「高等数学」雅可比矩阵和黑塞矩阵的异同
  • 继承(个人学习笔记黑马学习)
  • ToBeWritten之ATTCK 测评方案
  • JSONUtil详解
  • ArcGIS Maps SDK for JS(一):概述与使用
  • 【STM32】FSMC接口的复用和非复用
  • 操作系统强化认识之Shell编程学习与总结
  • 怎么用conda下载清华源的pytorch(自带cuda的版本)
  • 【ES6】CommonJS模块和ES6模块
  • 两个线程同步执行:解决乱箭穿心(STL/Windows/Linux)
  • Ubuntu18.04更改镜像源(网易,阿里,清华,中科大,浙大)
  • 字节码和机器码的区别
  • go学习part21 Redis和Go(2)
  • 从0到1学会Git(第二部分):Git的本地操作和管理
  • hive lateral view 实践记录(Array和Map数据类型)
  • 理解 std::thread::join
  • C#循环定时上传数据,失败重传解决方案,数据库标识
  • R语言图形的组合( par(),layout(),par(fig()) )
  • 如何为 Flutter 应用程序创建环境变量
  • 「C++程序设计 (面向对象进阶)」学习笔记・一
  • Leetcode125. 验证回文串
  • 【Yellowbrick】特征可视化分析
  • Android大厂需要刷的(999道)面试题
  • Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
  • Java设计模式:四、行为型模式-08:策略模式
  • ICCOA蓝牙数字车钥匙2.0
  • ArcGIS土地利用程度综合指数分析
  • 服务端请求伪造(SSRF)及漏洞复现
  • v-model和v-bind
  • 详细介绍 弹性盒子(display:flex)