const { OPCUAClient, AttributeIds } = require("node-opcua");
const opcua = require("node-opcua");
async function main() {
const client = OPCUAClient.create({
endpointMustExist: false,
securityMode: opcua.MessageSecurityMode.None, // 无安全模式
securityPolicy: opcua.SecurityPolicy.None // 无安全策略
});
try {
console.log("尝试连接到服务器...");
await client.connect("opc.tcp://10.71.240.162:12686");
console.log("已连接到服务器!");
console.log("正在创建会话...");
const session = await client.createSession({
userName: "administrator", // 替换为实际用户名
password: "Mxqpj@123!@#" // 替换为实际密码
});
console.log("会话已创建!");
// 定义要订阅的多个节点
const itemsToMonitor = [
{ nodeId: "JD_ZPD_PDJK.D.SMMK01", attributeId: AttributeIds.Value },
];
console.log("正在创建订阅...");
// 创建订阅
const subscription = await session.createSubscription2({
requestedPublishingInterval: 1000,
requestedLifetimeCount: 10,
requestedMaxKeepAliveCount: 10,
publishingEnabled: true,
priority: 10
});
console.log("订阅已创建!");
console.log("正在添加监控项到订阅...");
// 添加监控项到订阅
const monitoredItems = [];
for (const item of itemsToMonitor) {
const monitoredItem = await subscription.monitor(
{
nodeId: item.nodeId,
attributeId: item.attributeId
},
{
samplingInterval: 100,
discardOldest: true,
queueSize: 10
},
(dataValue) => {
console.log(`项目 ${item.nodeId} 值已更改: `, dataValue.value.value);
}
);
monitoredItems.push(monitoredItem);
}
console.log("监控项已添加!");
console.log("设置定时器以断开连接...");
// 保持程序运行以接收数据变化通知
setTimeout(async () => {
console.log("终止订阅...");
await subscription.terminate();
console.log("关闭会话...");
await session.close();
console.log("断开与服务器的连接...");
await client.disconnect();
console.log("已断开与服务器的连接!");
}, 30000); // 运行30秒后断开连接
} catch (err) {
console.error("发生错误: ", err);
} finally {
console.log("清理资源...");
// 这里可以添加任何必要的清理代码,例如关闭连接等
if (client) {
await client.disconnect();
}
}
}
main();
2025-02-08——JS订阅OPCUA服务
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。