21xrx.com
2024-12-22 17:34:38 Sunday
登录
文章检索 我的文章 写文章
Node.js OPCUA:使用Node.js实现OPCUA通信
2023-07-12 03:34:33 深夜i     --     --
Node js OPCUA 通信 实现 编程

Node.js是一个流行的服务器端JavaScript运行环境,而OPCUA是一个工业自动化领域中用于通信的标准协议。本文将介绍如何使用Node.js实现OPCUA通信。

首先,需要安装node-opcua模块。可以通过npm安装,命令为:


npm install node-opcua

通过使用node-opcua模块,可以创建一个OPCUA客户端或服务器。客户端可以连接到现有的OPCUA服务器,而服务器则可以创建OPCUA节点并作为一个OPCUA服务器运行。

下面是一个简单的客户端示例代码,用于从OPCUA服务器中读取节点值:


const opcua = require("node-opcua");

// 定义服务器地址和节点ID

const endpointUrl = "opc.tcp://localhost:4840";

const nodeId = "ns=1;s=MyVariable";

(async () => {

 try {

  // 创建客户端

  const client = new opcua.OPCUAClient({});

  // 连接到服务器

  await client.connect(endpointUrl);

  // 获取完整的地址空间,并获取节点对象

  const session = await client.createSession();

  const browseResult = await session.browse("RootFolder");

  const node = browseResult.references.find((n) => n.browseName.name === "MyVariable");

  // 读取节点值

  const dataValue = await session.readVariableValue(node.nodeId);

  console.log(dataValue.toString());

  // 断开连接

  await session.close();

  await client.disconnect();

 } catch (err) {

  console.log("An error occurred: ", err);

 }

})();

首先,我们定义了OPCUA服务器地址和我们需要读取的节点ID。接着,我们创建了一个OPCUAClient对象,并使用connect()方法连接到服务器。然后,我们通过createSession()方法获取了一个会话对象,并使用browse()方法获取了服务器的完整地址空间。在地址空间中,我们通过节点名称找到了我们需要读取的节点对象。最后,我们使用readVariableValue()方法读取了节点的值,并通过console.log()输出。

除了读取节点值,我们还可以使用Node.js实现OPCUA服务器。下面是一个简单的OPCUA服务器示例代码:


const opcua = require("node-opcua");

// 定义服务器地址和端口号

const endpointUrl = "opc.tcp://localhost:4840";

const port = 8080;

(async () => {

 try {

  // 创建服务器

  const server = new opcua.OPCUAServer({

   port: port,

   resourcePath: "/ua/server",

   buildInfo: {

    productName: "MyServer",

    buildNumber: "1",

    buildDate: new Date(),

   },

  });

  // 添加变量节点

  const addressSpace = await server.engine.start();

  const namespace = addressSpace.getOwnNamespace();

  const variable = namespace.addVariable({

   nodeId: "ns=1;s=MyVariable",

   browseName: "MyVariable",

   dataType: "Double",

   value: {

    get: () => {

     return new opcua.Variant({ dataType: opcua.DataType.Double, value: Math.random() });

    },

   },

  });

  // 启动服务器

  server.start(async () => {

   console.log("OPC UA Server is now listening. (press CTRL+C to stop)");

  });

  // 断开连接

  process.on("SIGINT", async () => {

   await server.shutdown();

   console.log("OPC UA Server stopped.");

   process.exit();

  });

 } catch (err) {

  console.log("An error occurred: ", err);

 }

})();

首先,我们定义了服务器地址和端口号。然后,我们创建了一个OPCUAServer对象,并通过addVariable()方法添加了一个变量节点。变量节点是一个实时更新自己值的节点,我们在这个节点的值get函数中返回了一个随机数。

最后,我们通过start()方法启动了服务器,并通过SIGINT信号监听断开连接事件。如果收到了断开连接的信号,我们通过shutdown()方法关闭服务器并退出程序。

通过Node.js实现OPCUA通信,可以快速、方便地实现工业自动化领域中不同设备之间的通信。无论是读取节点值还是创建OPCUA服务器,Node.js都提供了方便的API接口,大大简化了OPCUA通信的实现过程。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复