21xrx.com
2025-06-10 17:58:43 Tuesday
文章检索 我的文章 写文章
Node.js OPCUA:使用Node.js实现OPCUA通信
2023-07-12 03:34:33 深夜i     121     0
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通信的实现过程。

  
  

评论区