Клиент не может записывать в узлы внешнего сервера

Я пытался написать как String, так и LocalizedText (два основных типа данных, используемых на сервере), я не получаю ошибок, но когда я снова читаю узел через одну секунду после вызова, ничего не изменилось (и я не вижу новые значения при использовании OPC Inspector) Моя функция writeOpcValue очень проста и основана на функциях, поставляемых с milo:

/*Writes a String to the nodeId given as parameter*/
public void writeOpcValue(OpcUaClient client, NodeId nodeId, String value, boolean logValue)
{        
    //client.writeValue(nodeId, DataValue.valueOnly(new Variant(value)));
    VariableNode node = client.getAddressSpace().createVariableNode(nodeId);
    node.writeValue(DataValue.valueOnly(new Variant(value)));
    if (logValue)
        logger.info("Wrote {} to nodeId {}", value, nodeId);
}

Первая строка закомментирована, потому что я пробовал оба способа, но ничего не изменилось. Когда я использую эту функцию с моим собственным демонстрационным сервером, она работает отлично, но на "настоящем" сервере это не так. Я что-то делаю не так или нужно что-то сделать на стороне сервера? Следует отметить, что у меня нет доступа к коду или пространству имен сервера, и на самом деле он даже не написан на Java, что до сих пор не вызывало никаких проблем. Может быть, эти узлы доступны только для чтения? В этом случае я ожидал бы увидеть где-нибудь исключение или ошибку.

Заранее благодарю за любую помощь


person DevAir1    schedule 28.01.2019    source источник


Ответы (1)


Вы должны, по крайней мере, проверить, говорит ли StatusCode, возвращаемый вызовом writeValue, что-нибудь полезное вместо того, чтобы игнорировать его.

person Kevin Herron    schedule 28.01.2019
comment
Вы правы, я определенно должен был проверить это, прежде чем задавать вопрос. Теперь я это сделал, и я получаю StatusCode{name=Good, value=0x00000000, quality=good} в результате для двух из трех моих вызовов, причем последний вместо этого возвращает Bad_NotWritable (что имеет смысл, я понял, что Инспектор показывает доступ к этому узлу как CurrentRead). Но в дереве по-прежнему нет изменений для двух вызовов, которые также возвращают состояние Good. - person DevAir1; 29.01.2019
comment
В этом случае у вас есть проблема с сервером. Если он возвращает StatusCode Good в ответ на вашу запись, значит, вы сделали все, что могли, на стороне клиента. - person Kevin Herron; 29.01.2019