我正在使用node-opcua编写一个布尔值来设置重置标签。这是我的代码:
General > Ant Buildfiles
它实际上没有调用“ err”,因为控制台会记录以下内容:
var nodesToWrite = new Array();
nodesToWrite.push({
nodeId: 'ns=2;s=Paint.PLC.Reset_Auto_Blocked_Time',
attributeId: opcua.AttributeIds.Value,
indexRange: null,
value: {
value: {
dataType: opcua.DataType.Boolean,
value: true
}
}
});
self.uaSession.write(nodesToWrite, function (err, statusCode, diagnosticInfo) {
if (!err) {
console.log(" write ok");
console.log(statusCode);
console.log(diagnosticInfo);
} else {
console.log(" write err = ", err);
}
})
但是,显然这是一个错误,并且写入从未完成。标记在KEPServer中设置为布尔值,并且可以正常工作。我不确定为什么会说这是不匹配的。有帮助吗?
答案 0 :(得分:0)
看起来像opcua.DataType.Boolean不是期望的类型。
我将首先读取变量以验证设置了什么dataType:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetSite" TypeName="Test_Site_1.Controllers.SiteController"></asp:ObjectDataSource>
答案 1 :(得分:0)
只需在value.value.dataType中使用“布尔值”
示例:
nodesToWrite.push({
nodeId: 'ns=2;s=Paint.PLC.Reset_Auto_Blocked_Time',
attributeId: opcua.AttributeIds.Value,
indexRange: null,
value: {
value: {
dataType: "Boolean",
value: true
}
}
});
答案 2 :(得分:0)
有一个选项可以读取节点的builtInType
const nodeToRead = {
nodeId: 'ns=2;s=Paint.PLC.Reset_Auto_Blocked_Time',
attributeId: opcua.AttributeIds.DataType,
};
const dataValue = await self.uaSession.read(nodeToRead);
// check IdentifierType(Numeric) and identifierNumeric(1 to 25) of dataType
// E.g: Boolean - 1, String - 12, Int16 - 4 , etc
// Fill nodesToWrite depending on the builtInType
const nodesToWrite = [];
nodesToWrite.push({
nodeId: 'ns=2;s=Paint.PLC.Reset_Auto_Blocked_Time',
attributeId: opcua.AttributeIds.Value,
indexRange: null,
// check builtInType-type and fill nodesToWrite
});
await self.uaSession.write(nodesToWrite);