#opc #milo
#opc #мило
Вопрос:
Когда я записываю данные на сервер kepware с помощью milo, иногда некоторые данные не могут быть записаны успешно. Но сервер вернул
StatusCode{имя = Хорошо, значение = 0x00000000, качество = хорошее}
Сервер не отобразил данные, которые я записал.
Заранее спасибо за любую помощь
- Одиночный поток не сработал.
- Создайте новый клиент, когда начнете записывать данные.
- Существует только один клиент, который реагирует на запись.
Все это не удалось.
mWriteClient = new OPCUAClientRunner(KSOPCUASubscription.this).createClient();
mWriteClient.connect().get();
} catch (Exception e) {
e.printStackTrace();
logger.error("OPCUAClient connect Exception", e);
return ;
}
logger.info("Wrote identifier: " identifier);
List<NodeId> nodeIds = ImmutableList.of(new NodeId(namespaceIndex, identifier));//Int32"t|bbb"
Variant v = new Variant(value);
// don't write status or timestamps
DataValue dv = new DataValue(v, null, null);
logger.info("OPCUAClient begin write");
// write asynchronously....
CompletableFuture<List<StatusCode>> f =
mWriteClient.writeValues(nodeIds, ImmutableList.of(dv));
// ...but block for the results so we write in order
List<StatusCode> statusCodes = null;
try {
statusCodes = f.get();
} catch (InterruptedException e) {
e.printStackTrace();
logger.error("OPCUAClient write get response Exception", e);
} catch (ExecutionException e) {
e.printStackTrace();
logger.error("OPCUAClient write get response Exception", e);
}
StatusCode status = statusCodes.get(0);
logger.info("Wrote status: " status.toString());
if (status.isGood()) {
logger.info("Wrote '{}' to nodeId={}", v, nodeIds.get(0));
}
Ответ №1:
Если вы на самом деле не записываете значение, которое, как вы утверждаете, записываете, код состояния Good с сервера означает, что вы не делаете ничего неправильного на стороне клиента.
Возможно, вы сможете перехватить обмен данными с помощью Wireshark, чтобы дополнительно доказать, что проблема на стороне сервера.