Может я чего-то не понимаю, но мне кажется диким тот факт, что я не могу сам задать порядок пересчета каналов. Например канал подтипа “ ПУСТОЙ” с дополнением “управление R/W” позволяет управлять каналом “ ПУСТОЙ” с дополнением “R/W”. Кроме того один канал может управлять атрибутами другого. А если пересчет управляющего канала произойдет после пересчета того канала, которым он управляет? Тогда управляемый канал в текущем цикле пересчета выдаст неверные данные.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Управлять порядком пересчета каналов можно - необходимо сделать объект БАЗА загружаемым, тогда порядок будет определяться не индексом канала, а его позицией в списке этого объекта. Однако, функции обмена информацией для каналов, которые работают с внешними интерфейсами типа ОРС, RS, R/W и т.д., реализуются параллельными потоками, по существу, АСИНХРОННО относительно пересчета базы каналов. И обращение к этим интерфейсам осуществляется В ПОРЯДКЕ АБСОЛЮТНЫХ ИНДЕКСОВ КАНАЛОВ. Сама асинхронность интерфейса по отношению к циклу пересчета снимает вопрос о гарантиях получения синхронного среза данных в одном цикле пересчета.
Posted by zem21 (Участник № / Member № 418) on :
Спасибо за подсказку! Не знал, что так можно. Но все это очень сложно. Создавать загружаемый объект, потом загружать его во время выполнения, проблемы с FBD программами... А ведь в Редакторе базы каналов уже есть кнопки со стрелками, но они меняют только порядок каналов в окне. Кроме того, самое главное, загружаемые объекты не поддерживаются в Микро МРВ! Что касается необходимости контроля за порядком пересчета каналов, то замечу, что существующий подход хорош в том случае, если надо собрать информацию с датчиков и записать в архив, или выполнив какие-то рассчеты выдать управляющие сигналы. И частота пересчета базы каналов, как минимум, в два раза выше частоты изменения параметров. Но в Трейс Моуд с помощью каналов управляется все: обмен данными, выполнение FBD программ и т.д. Недавно писал драйвер (под Микро МРВ) и если-бы можно было задать порядок пересчета двух каналов, управляющих работой драйвера, он бы был существенно проще.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) Вся "сложность" действий для объявления объекта "загружаемым" состоит в выставлении флага в его атрибутах. Никаких дополнительных функций в реальном времени типа "потом загружать его во время выполнения..." выполнять не нужно. Не понятно - что у Вас за проблемы с FBD программами?
2) Загружаемые объекты в Микро МРВ поддерживаются! 3) Начиная с релиза 5.11 в драйвере можно обратиться к любому количеству каналов за один его вызов.