Невозможно записать в тег с помощью node-opcua (BadTypeMismatch) - PullRequest
0 голосов
/ 30 августа 2018

Я использую node-opcua, чтобы записать логическое значение для установки тега сброса. Вот мой код:

    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);
        }
   })

На самом деле он не вызывает "err", потому что консоль записывает это:

[{ [Number: 2155085824
   value: 2155085824,
   description: 'The value supplied for the attribute is not of the same type as the attribute\'s value.',
name: 'BadTypeMidmatch' }]
[]

Однако это явно ошибка, и запись никогда не завершается. Тег установлен в KEPServer как логическое значение и работает нормально. Я не уверен, почему он говорит, что это несоответствие. Любая помощь?

1 Ответ

0 голосов
/ 30 августа 2018

Похоже, opcua.DataType.Boolean не является ожидаемым типом.

Сначала я бы прочитал переменную, чтобы проверить, какой тип dataType установлен:

var nodeToRead = {
    nodeId: 'ns=2;s=Paint.PLC.Reset_Auto_Blocked_Time',
    attributeId: opcua.AttributeIds.Value,
};
self.uaSession.read(nodeToRead , function (err, dataValue) {
    if (!err) {
        console.log(" read ok");
        console.log(dataValue.toString());
    } else {
        console.log(" read err = ", err);
    }
});
...