本文介绍如何在NodeJS环境下开发OPC UA Server,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。相关软件请登录网信智汇(http://wangxinzhihui.com)。
1. 创建简单OPC UA Server
1)首先需要安装nodejs,要求版本至少是12。
2)创建项目目录,在cmd下进入项目目录下,执行如下指令:
1)npm init
2)npm i
3)npm install node-opcua --save
3)创建index.js,输入以下代码:
/*引入相关模块*/
const { OPCUAServer, Variant, DataType, StatusCodes, makeNodeId} = require("node-opcua");
async function main() {
//创建OPC UA Server
const server = new OPCUAServer({
port: 4334,
resourcePath: "/UADEMO",
});
//初始化OPC UA Server
await server.initialize();
console.log("初始化OPC UA Server ");
//启动OPC UA Server
server.start(function() {
console.log("OPC UA Server在侦听中 ... ");
});
}
main();
2. 运行&调试
1)在cmd下进入项目目录,执行:node index。
2)运行UaExpert
a)添加服务器,输入URL: opc.tcp://:4380/UADEMO,点击OK,展开这个URL,会看到如下的endpoint。
b)选择1个EndPoint,创建连接。
3.添加数据
1)获取地址空间
const addressSpace = server.engine.addressSpace;
const namespace = addressSpace.getOwnNamespace();
2)添加对象
//添加1个DemoObj对象
const device = namespace.addObject({
organizedBy: addressSpace.rootFolder.objects,
browseName: "DemoObj"
});
3)添加1个只读变量
let var1 = 100;
setInterval(() => { var1 = Math.random(); }, 1000);
namespace.addVariable({
componentOf: obj,
browseName: "var1",
dataType: "Double",
value: {
get: () => new Variant({dataType: DataType.Double, value: var1})
}
});
4)添加1个可读写变量
let var2 = 30.0;
namespace.addVariable({
componentOf: obj,
nodeId: 'ns=1;s="pressure"',
browseName: "var2",
dataType: "Float",
value: {
get: () => new Variant({dataType: DataType.Float, value: var2}),
set: (variant) => {
var2 = parseFloat(variant.value);
return StatusCodes.Good;
}
}
});
NodeId 有一个字符串表示法,它定义为 OPC UA XML 模式的一部分,它表示完全限定的 NodeId。字符串的格式是:
ns=<命名空间索引>;<标识符类型>=<标识符>
命名空间索引:格式为以 10 为底的数字。如果索引为0,那么整个“ns=0;” 子句被省略。
标识符类型:指定标识符类型的标志。该标志具有以下值:
4. 最终运行结果
运行结果如下。双击var2的数值可修改数值。
以上为NodeJS环境下开发OPC UA Server简单教程,通过扩展可开发更多功能。更多通讯资源请登录网信智汇(http://wangxinzhihui.com)。