当前行为
在客户端中,使用
forEach
循环监控多个节点时,在版本 2.30.0 上仅监控两个节点,在 2.72.2 中仅监控一个节点,而生成循环的数组包含 5 个项目。
2.30.0 中的行为
2.72.2 中的行为
预期行为
预期的行为是所有项目节点都得到处理。
问题重现的代码来源
const idsToMonitor = ["ns=4;i=16", "ns=4;i=17", "ns=4;i=11", "ns=4;i=12", "ns=4;i=18"]
const monitoringParamaters = {
samplingInterval: 100,
discardOldest: true,
queueSize: 10,
};
idsToMonitor.forEach((nodeId) => {
opc_subscription.monitor({
nodeId: resolveNodeId(nodeId),
attributeId: AttributeIds.Value,
},
monitoringParamaters,
TimestampsToReturn.Both,
(err, monitoredItem) => {
monitoredItem.on("changed", function (dataValue) {
var Node = {nodeId: nodeId, nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()};
console.log(JSON.stringify(Node));
});
});
});
请告诉我们您的环境:
[X] 我的请求与充当 OPCUA 客户端的 node-opcua 相关
[X] 我已将 node-opcua 作为软件包安装(使用 npm install )
操作系统版本:Windows 10
node --version
= 16.16.0乍一看,我没有发现您的代码有问题。 但我也遇到了
.monitor()
函数的问题。
还有一些选项可以创建对我有用的 MonitoredItem。
ClientMonitoredItem.create()
功能。
const itemToMonitor: ReadValueIdOptions = {
nodeId: nodeId,
attributeId: AttributeIds.Value,
};
const parameters = {
samplingInterval: 100,
discardOldest: true,
queueSize: 10,
};
const monitoredItem = ClientMonitoredItem.create(
this.clientSubscription, // Add your ClientSubscription here
itemToMonitor,
parameters,
TimestampsToReturn.Both,
);
const itemToMonitor: ReadValueIdOptions = {
nodeId: nodeId,
attributeId: AttributeIds.Value,
};
const parameters = {
samplingInterval: 100,
discardOldest: true,
queueSize: 10,
};
const monitoredItem = ClientMonitoredItem.create(
this.clientSubscription, // Add your ClientSubscription here
itemToMonitor,
parameters,
TimestampsToReturn.Both,
);
功能。 ClientSubscription.monitorItems()
这样您就可以像这样收听受监控的项目:
const itemsToMonitor: ReadValueIdOptions[] = [];
idsToMonitor.forEach((nodeId) => {
const itemToMonitor: ReadValueIdOptions = {
nodeId: nodeId,
attributeId: AttributeIds.Value,
};
itemsToMonitor.push(itemToMonitor);
});
if (!parameters) {
parameters = {
samplingInterval: 100,
discardOldest: true,
queueSize: 10,
};
}
// this.clientSubscription is your created ClientSubscription
const monitoredItems = this.clientSubscription.monitorItems(
itemsToMonitor,
parameters,
TimestampsToReturn.Both,
);
如果它们仍然没有出现,则说明节点或服务器有问题,因为无法监视它们。