Сервер OPCUA узла и асинхронные установщики для значения

#asynchronous #server #setter #node-opcua

#асинхронный #сервер #установщик #узел-opcua

Вопрос:

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

         const wantedValue = namespace.addAnalogDataItem({
            componentOf: node,
            browseName: `${chamber}${folder}Req`,
            nodeId: `s=${chamber}${folder}Req`,
            dataType: "Double",
            engineeringUnits: settings.unit,
            engineeringUnitsRange: settings.range,
            value: {
                get: () => new Variant({dataType: DataType.Double, value: wrapper.readProgram(chamber, folder)}),
                set: async (variant: Variant) => {
                    const success = await wrapper.writeProgram(chamber, folder, variant.value)
                    return  success ? StatusCodes.Good : StatusCodes.Bad
                }
            }
        })    
 

Этот наивный подход приводит к ошибке ввода:

     throw new Error("Cannot find StatusCode "   statusCode);
 

Есть ли лучший способ сделать это?

Ответ №1:

  • лямбды get и set спроектированы так, чтобы быть синхронными.
  • вам нужно использовать форму обратного вызова с timestamped_get и timestamped_set, чтобы достичь того, что вам нужно.