Не удается записать объем данных в kepware

#opc #milo

#opc #мило

Вопрос:

Когда я записываю данные на сервер kepware с помощью milo, иногда некоторые данные не могут быть записаны успешно. Но сервер вернул

StatusCode{имя = Хорошо, значение = 0x00000000, качество = хорошее}

Сервер не отобразил данные, которые я записал.
Заранее спасибо за любую помощь

  1. Одиночный поток не сработал.
  2. Создайте новый клиент, когда начнете записывать данные.
  3. Существует только один клиент, который реагирует на запись.

Все это не удалось.

  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, чтобы дополнительно доказать, что проблема на стороне сервера.