无法使用节点操作(BadTypeMismatch)写入标签

时间:2018-08-30 13:53:51

标签: node.js node-opcua kepserverex

我正在使用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中设置为布尔值,并且可以正常工作。我不确定为什么会说这是不匹配的。有帮助吗?

3 个答案:

答案 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);