Reentrant execution

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Reentrant execution

Сообщение Konstantin Sumenko »

Helga, можешь, кстати все свои подпрограммы, ответственные за общение с реальным миром заменить на виртуальные (т.е работающие в режиме эмулятора) с регулируемым параметрами- возможно удастся отловить часть багов.
Helga
user
user
Сообщения: 89
Зарегистрирован: 14 мар 2010, 10:14
Версия LabVIEW: 9
Контактная информация:

Re: Reentrant execution

Сообщение Helga »

Crowbar,

Вы были абсолютно правы! :thank: :drink:
Нашла такую идиотскую конструкцию:
Изображение

В раздвинутом регистре предпологалось, что сохраниться входящее значение.
Большое Вам спасибо! Неделю билась!
В итоге пара массивов и регистров не инициализировалась.
Надеюсь, это оно и было! Посмотрим!
Helga
user
user
Сообщения: 89
Зарегистрирован: 14 мар 2010, 10:14
Версия LabVIEW: 9
Контактная информация:

Re: Reentrant execution

Сообщение Helga »

mzu2006,

а какие у Вас идеи?
Мне очень понравилась архитектура с отдельным "сборщиком данных". Стоит и опрашивает все приборы. Данные сбрасывает в функционал на регистр. Оттуда можно всегда их считать. Две программы общаются через третью, в которой только цикл с шифт регистром. Одна данные заносит, другая считывает.


И приборы очень интересно организованны.
Основная проблема, что несколько программистов работали, каждый сделал свой кусок, а я все в одно целое собираю. Почему они сами не сделали - не знаю. Может просто не все могут дело до конца доводить.

На каждый прибор заведена библиотека. Основная программа и несколько подпрограм - читать, писать, калибрировать и т.д.
Прибор описыватся кластером с параметрами порта и вариантом, куда можно записать команду, информацию.
И просто. Надо данные снять. Команда и массив приборов - назад таблица данных.

Интересно ваши идеи узнать! :bye:
Helga
user
user
Сообщения: 89
Зарегистрирован: 14 мар 2010, 10:14
Версия LabVIEW: 9
Контактная информация:

Re: Reentrant execution

Сообщение Helga »

Что-то все равно у меня программа висела!
Блокировала все приборы. Дело не в портах.
Поменяла верхнюю структуру на нижнию
Изображение

Верхняя структура около 40 мсек, нижняя 8 мсек.
Даже не могу пока сказать, что проблема решена. Ттт.
Может кто объяснить, почему вызов подпрограммы через Call By Reference Node так завешивает программу?
Конечно, то что в цикле стоит и вызывается без конца. Но почему процесс такой вероятностный? То плохо, то хорошо!
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Reentrant execution

Сообщение mzu2006 »

Я примерно это и имел в виду, когда говорил об упрощении архитектуры. Время отнимает не столько вызов через Call By Reference Node, сколько открытие и закрытие этого Reference каждый раз. Если есть желание делать это через VI сервер, то открой все references при инициализации, положи их в массив, используй, а потом не забудь массив закрыть при закрытии программы.

Мне показалось, что приборы отличаются друг от друга только номером COM порта и собственно содержанием строки, в них записываемой. А зачем тогда VI Сервер вообще? Просто делается один reenterable VI и вызывается из разных мест с разными аргументами.

Либо если это не совсем так, то просто напрашивается базовый класс с виртуальным методом "обратиться к прибору", который переопределяется в каждом производном классе - специфически для каждого прибора.
Helga
user
user
Сообщения: 89
Зарегистрирован: 14 мар 2010, 10:14
Версия LabVIEW: 9
Контактная информация:

Re: Reentrant execution

Сообщение Helga »

mzu2006 писал(а):Если есть желание делать это через VI сервер, то открой все references при инициализации, положи их в массив, используй, а потом не забудь массив закрыть при закрытии программы.
Хороший совет, попробую. А то если без конца открывать-закрывать, плохо явно.
mzu2006 писал(а): Мне показалось, что приборы отличаются друг от друга только номером COM порта и собственно содержанием строки, в них записываемой. А зачем тогда VI Сервер вообще? Просто делается один reenterable VI и вызывается из разных мест с разными аргументами.

Либо если это не совсем так, то просто напрашивается базовый класс с виртуальным методом "обратиться к прибору", который переопределяется в каждом производном классе - специфически для каждого прибора.
Приборы все очень разные, протоколы у них разные, а потом ими еще управлять надо. И уже много чего написано, у меня месяц времени остался. Еще тестировать все надо.
Helga
user
user
Сообщения: 89
Зарегистрирован: 14 мар 2010, 10:14
Версия LabVIEW: 9
Контактная информация:

Re: Reentrant execution

Сообщение Helga »

Класс тоже хочется попробовать. Принцип то, чтобы все нужные :vi: были открыты заранее, а не открывались-закрывались бы каждый раз. Через класс можно сделать, если при выборе прибора, заводишь на него объект класса и открываешь его библиотеку.
Класс "прибор"
Свойства: имя, порт с установками, библиотека
Методы: писать, читать, настроить

Может получиться.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»