This is topic Порядок отработки каналов. Нюансы in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
1. Подскажите, правильно ли я понимаю, что при создании каналов в узле или базе каналов им по порядку присваивается ID (атрибут 118) и пересчет и отработка этих каналов в основном потоке (в пределах групп каналов INPUT, CALL и OUTPUT) выполняются по возрастанию этого ID? Тогда, чтобы изменить порядок пересчета каналов, мне необходимо уничтожить каналы и создать их заново в узле в нужном порядке? Можно ли вообще как-то узнать ID канала в ИС в режиме конструктора и поменять его?
2. И еще: если некоторые каналы были уничтожены, а затем в узле появились новые, то ID вновь созданным каналам будет присваиваться из образовавшейся области незанятых ID старых каналов или как шел последовательно, так и будет продолжать вне зависимости от появления пустот?
3. Допустим, по недоразумению аргументу канала вызова экрана присваивается сразу несколько значений от других источников. К примеру, в редакторе аргументов канала вызова Экрана#1 задана привязка к аргументу канала вызова Программы#1, а в редакторе аргументов канала вызова Программы#2 задана привязка аргумента ко всё тому же аргументу канала вызова Экрана#1 (см. ниже). Какое значение в итоге присвоится аргументу этого канала? В зависимости от порядка отработки? или же привязки, заданные в канале вызова экрана, скажем, имеют приоритет перед привязками, заданными в каналах вызова программ?
4. Наконец, если канал вызова экрана отрабатывается раньше, чем канал вызова программы, но аргументы первого привязаны к аргументам второго. Тогда монитор будет возвращать значения аргументов программы всякий раз из предыдущего цикла CALC?
Заранее признателен. ______________________________________________ CALL_Экран#1 ARG_0 IN Привязка: CALL_Программа#1.Q1
CALL_Программа#1 Q1 OUT
CALL_Программа#2 Q2 OUT Привязка: CALL_Экран#1.ARG_0
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Принцип организации обработки каналов указан верно. ID канала можно увидеть при наведении на него курсора - всплывает справочное окошко, в котором среди других свойств указывается и ID. Изменить ID нельзя.
2. Если сеанс работы инструментальной среды не прерывается, то вновь создаваемые каналы получают ID последовательно, не заполнения "пустот". Если проект сохранен и перезагружен в ИС, то вновь создаваемые каналы будут заполнять "пустоты".
3. Приоритета в множественных привязках не существует.
4. Поток отработки графики - самостоятельный, асинхронный и низкоприоритетный по отношению к основному потоку CALC, в котором обрабатываются программы. Аргументы экрана получают те значения, которые актуальны на момент его вызова.
Posted by Olexander (Участник № / Member № 7774) on :
Спасибо за разъяснения, но мне не совсем ясна формулировка по третьему вопросу. Как я понимаю, имеется в виду, что приоритет привязок для аргументов CALL-каналов стоит вне зависимости от типа вызова этих каналов? Но влияет ли на это порядок отработки каналов, их ID?
Именно, можно ли, взглянув на вышеприведенную табличку, сказать, какое значение в конце каждого цикла CALC будет присвоено ARG_0: Q1 или Q2? Или для этого необходимо знать ID каналов и их направленность (Input/Output)?
Подчеркиваю, что здесь одному аргументу, по недоглядению, присваивается два различных значения. Поскольку для данного аргумента в ИС нельзя определить, существуют ли для него привязки, заданные в других каналах, то могут возникать (и у меня возникали) подобные "коллизии". Чтобы скорейшим образом выявлять проблему, мне полезно знать, как ведет себя монитор в таких случаях.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Как уже было сказано, каналы программ обрабатываются в основном потоке в соответствии со своими ID.
Поток отработки графики асинхронен по отношению к основному потоку и имеет более низкий приоритет. Обработка экрана включает в себя этап снятия среза данных для всех аргументов и последующих функций формирования картинки и отрисовки экрана.
В какой точно момент основного цикла будет получен срез данных для экрана, предсказать невозможно, и уж тем более - когда будут отрисованы эти данные на экране.
"для данного аргумента в ИС нельзя определить, существуют ли для него привязки, заданные в других каналах," Правой клавишей мыши на CALL.Screen вызовите диалог и команду "Перейти по ссылке/вызову". Если в проекте есть внешние привязки к аргументам/атрибутам этого CALL.Screen, они будут показаны.