Я работаю с программным пакетом для автоматизации на базе ПК под названием Think'n'Do, созданным Phoenix Contact. Он выполняет обработку в реальном времени, считывает входы / управляющую логику / записывает выходы, все это занимает максимум 50 мс. У нас есть сервер OPC, который считывает / записывает теги из ПЛК каждые 10 мс. Имеется большая задержка при записи тега в ПЛК и считывании записанного значения (Think'n'Do (50 мс)> OPC Server (10ms)> PLC (10ms)> OPC Server (10ms)> Think'n'Do (50 мс)) этот процесс занимает до 6 секунд, тогда как по моим расчетам он должен занимать всего 130 мс.
Были бы полезны любые идеи о том, где искать или почему это может занять намного больше времени.


Это зависит от того, как у вас настроен клиент OPC для получения данных. Когда вы подписываетесь на группу в OPC, вы можете указать частоту обновления. По умолчанию это может быть 1 с или даже 5 с, в зависимости от клиента OPC. Также существует ограничение, которое сервер OPC может установить на частоту обновления данных. Это применимо только в том случае, если ваш OPC-клиент подписывается на события изменения данных.
Другой способ - выполнить асинхронное или синхронизирующее чтение / запись на сервер OPC. Также есть несколько режимов чтения. Поскольку вы используете OPC, вы можете использовать любой клиент, совместимый с OPC, для тестирования вашего сервера, это скажет вам, связана ли проблема с настройкой в Think'n'Do или с ПЛК / сервером.
Лучший универсальный клиент OPC, который я использовал, - это OPC Quick Client. Вы можете получить его с TOP Server здесь: http://www.toolboxopc.com/Features/Demo/demo.shtml. Просто возьмите демонстрацию TOP Server и установите OPC Quick Client. Вы можете использовать его для подключения к вашему серверу OPC, просмотра тегов и просмотра данных. Второй лучший клиент OPC, который я использовал, - это ICONICS (называемый OPC Data Spy), доступный здесь: http://www.iconics.com/support/free_tools.asp.
Используйте клиент OPC, чтобы узнать, насколько быстро вы можете читать данные. Убедитесь, что вы правильно установили частоту обновления группы. Я думаю, что инструменты могут предоставить вам некоторую информацию о времени (но вы сможете довольно легко вычислить 6-секундную задержку).
Если система выполняет синхронное чтение (блокирование вызова ввода-вывода), затем реализует логику вашего приложения, а затем синхронную запись (снова блокировку), тогда вам необходимо учитывать, что существует несколько циклов передачи данных к ПЛК.
Синхронное чтение включает приложение (запрос) -> OPCServer-> PLC-> OPCServer-> App (результат). Это только чтение для одного элемента (хотя вы можете запросить группу элементов за один раз).
Затем аналогичная синхронизация записи также включает приложение (запись) -> OPCServer-> PLC-> OPCServer-> App (Done).
Асинхронное чтение и запись и групповое чтение и запись могут помочь уменьшить блокировку приложения, но будьте осторожны, чтобы ваше приложение могло справиться с этим ансинхронным поведением.
Еще одна вещь, на которую следует обратить внимание, - это конфигурация ПЛК. В ПЛК Allen-Bradley есть настройка задержки между сканированием, которая используется для обслуживания запросов ввода-вывода по внешним сетям. Если этого времени мало и у вас высокая пропускная способность данных, это замедлит работу.
Вот несколько мест, где можно посмотреть: конфигурация клиента OPC, сам клиент OPC, сервер OPC или сам ПЛК.
Вот что следует проверить:
Похоже, что вы не используете кеш на сервере OPC. Обычно серверы OPC имеют кеш, если ваш клиент подключается и не указывает, что он хочет использовать кеш, вы не получите необходимой производительности. Сервер OPC отвечает за обновление кэша с устройства, хотя критерии обновления могут отличаться от сервера OPC к серверу OPC.