Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
Smart Solutions VDT :: Просмотр темы - Оптимизация времени выполнения
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Оптимизация времени выполнения

 
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Коллективный разум. Давайте посоветуемся!
Предыдущая тема :: Следующая тема  
Автор Сообщение
BuNi
Новичок
Новичок


Зарегистрирован: Sep 24, 2008
Сообщения: 5
Рейтинг: +0/-0

СообщениеДобавлено: Ср 24 Сен, 2008 6:01:36    Заголовок сообщения: Оптимизация времени выполнения Ответить с цитатой

Процессор SLC 5/04
Среда RSLogix 500

Задача:
Есть некий массив (N10:0-127).
Необходимо отследить изменение в нем любого бита,
и вычислить соответствующие номер слова и номер бита.
Каждый проход программы достаточно находить один изменившийся бит.
Минимизировать время одного прохода программы (хотя бы в режиме когда изменений небыло).

Мое решение:
Создал другой массив (N11:0-127) в который сохранял все найденные изменения в N10.
Находил сначала изменившееся слово - сравнивая N10 и N11 по слову, в случее их не равенства переходил на поиск изменившегося бита в найденном слове.
Код:
Если N10:0 <> N11:0, то "номер слова" = 0, и переход на поиск бита
Если N10:1 <> N11:1, то "номер слова" = 1, и переход на поиск бита
....
Если N10:127 <> N11:127, то "номер слова" = 127, и переход на поиск бита
выход из п/п

Поиск бита: ...
...
выход из п/п

Вопрос как можно еще более ускорить поиск изменений. А особенно их отсутствие, чтобы не теряя времени переходить к другим задачам. Есть ли какие-нибудь стандартные операторы для этого.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dv_
Эксперт
Эксперт


Зарегистрирован: Sep 14, 2006
Сообщения: 776
Рейтинг: +41/-1
Откуда: Донецк

СообщениеДобавлено: Ср 24 Сен, 2008 7:46:10    Заголовок сообщения: Re: Оптимизация времени выполнения Ответить с цитатой

BuNi писал(а):
Процессор SLC 5/04
.....
Вопрос как можно еще более ускорить поиск изменений. А особенно их отсутствие, чтобы не теряя времени переходить к другим задачам. Есть ли какие-нибудь стандартные операторы для этого.

Есть, но не в SLC.
Для условия:
BuNi писал(а):
Каждый проход программы достаточно находить один изменившийся бит.

Вводи переменную: номер бита.
И примени косвенную адресацию бита (может придется перейти на тип данных B).
Сравние делай командой MEQ, в маски имей один бит полученный из счетчика битов.
Если помошь нужна кодом - давай свой e-mail.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BuNi
Новичок
Новичок


Зарегистрирован: Sep 24, 2008
Сообщения: 5
Рейтинг: +0/-0

СообщениеДобавлено: Ср 24 Сен, 2008 8:43:25    Заголовок сообщения: Ответить с цитатой

Цитата:
Сравние делай командой MEQ, в маски имей один бит полученный из счетчика битов.
Не понял что за "счетчик битов"
Предлогается при поиске бита проверять в цикле все биты слова?

В связи с необходимостью оптимизации времени я отказался от циклов, т.к. например при раскрытии цикла поиска слова вида
Код:

      i=0
next: Если #N10:0<>#N11:0, то переход к поиску бита
      i=i+1
      Если i<=127, то переход к next
        иначе выход из п/п
поиск бита:
...
      выход из п/п
(i - индексный регистр S:24)
в режиме отсутствия изменений (выполнена последовательная проверка всех слов) удалось уменьшить время прохода одного цикла программы с 20 до 8 мс
Поиск бита я также расписал побитно внутри найденого слова.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dv_
Эксперт
Эксперт


Зарегистрирован: Sep 14, 2006
Сообщения: 776
Рейтинг: +41/-1
Откуда: Донецк

СообщениеДобавлено: Ср 24 Сен, 2008 10:05:04    Заголовок сообщения: Ответить с цитатой

BuNi писал(а):
Не понял что за "счетчик битов"
Предлогается при поиске бита проверять в цикле все биты слова?

Один бит за скан, счетчик битов будет определять какой бит будет проверяться.
Например: N7:0 будет счетчик битов.
Вставь в свою программу строку:
Код:
 BST BST XIC B10:0/[N7:0] XIO B11:0/[N7:0] NXB XIO B10:0/[N7:0] XIC B11:0/[N7:0] BND JSR 3 NXB ADD N7:0 1 N7:0 NXB XIC N7:0/11 OTU N7:0/11 BND

В LAD 3 опиши действия при отличиях.
Быстрее не будет, но имей ввиду если кто-то, когда-то в N7:0 запишет число более 2048 будет ...
Сам попробуй. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BuNi
Новичок
Новичок


Зарегистрирован: Sep 24, 2008
Сообщения: 5
Рейтинг: +0/-0

СообщениеДобавлено: Ср 24 Сен, 2008 11:51:00    Заголовок сообщения: Ответить с цитатой

Каждый проход программы достаточно находить один изменившийся бит.
То есть нашел изменение одного бита, а остальные проверит в след. цикле.

Скорость будет больше если поверять диапазон N7:0-127 как можно большими кусками(, а затем переходить на проверку меньшей части)
Если проверять побитно, то в одном цикле программа выполнит минимум 128*16 операций.
Если по слову, то в одном цикле программа выполнит минимум 128*1 операций.
В идеале Rolling Eyes одна операция сранивающая два массива и отвечающая идентичны ли они.
Это все при условии что изменений не было, самый частый и самый длительный режим!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dv_
Эксперт
Эксперт


Зарегистрирован: Sep 14, 2006
Сообщения: 776
Рейтинг: +41/-1
Откуда: Донецк

СообщениеДобавлено: Ср 24 Сен, 2008 13:26:38    Заголовок сообщения: Ответить с цитатой

BuNi писал(а):
Каждый проход программы достаточно находить один изменившийся бит.
То есть нашел изменение одного бита, а остальные проверит в след. цикле.

Приведенный код именно так и делает - один бит за скан.
Все биты за 128*16 сканов.

BuNi писал(а):
Если проверять побитно, то в одном цикле программа выполнит минимум 128*16 операций.

Откуда такой вывод или ты мой код вставил в цикл?
Или надо найти первый изменившийся бит, а остальные потом?

Время (в микросекундах) выполнения кода для SLC-5/04 (05):
1. Биты одинаковые (нет вызова подпрограммы) и есть переход через 2048:
Код:
  (0.37+77.8)*4+0.18+1.5+0.37+0.56


2. Биты разные и есть переход через 2048:
Код:
  (0.37+77.8)*4+112+1.5+0.37+0.56


Много времени ( 77.8 ) на косвенную адресацию, можно уменьшить, если сделать копию сравниваемых битов, тогда:
Код:
  (0.37+77.8)*4
заменяется на
  (0.37+77.8)*2+0,56*2+0.37*4
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BuNi
Новичок
Новичок


Зарегистрирован: Sep 24, 2008
Сообщения: 5
Рейтинг: +0/-0

СообщениеДобавлено: Чт 25 Сен, 2008 5:16:39    Заголовок сообщения: Ответить с цитатой

Цитата:
Или надо найти первый изменившийся бит, а остальные потом?
Именно. Если изменение есть, то оно должно быть найдено в том же скане.
Реакция на изменение должна быть также минимальна (далее будет соответствуящая обработка найденного изменения и его индикация).

Сейчас по полученному опыту оптимизации этой п/п, оптимизирую другие выполняющиеся также постоянно, в каждом цикле.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dv_
Эксперт
Эксперт


Зарегистрирован: Sep 14, 2006
Сообщения: 776
Рейтинг: +41/-1
Откуда: Донецк

СообщениеДобавлено: Чт 25 Сен, 2008 10:39:38    Заголовок сообщения: Ответить с цитатой

BuNi писал(а):
Цитата:
Или надо найти первый изменившийся бит, а остальные потом?
Именно. Если изменение есть, то оно должно быть найдено в том же скане.

Это меняет суть дела.

Very Happy Для скорости надо заменить SLC на что-то из Logix - там это делается одной командой и процессор шустрее.
Из опыта работы с PLC-5 - файловые команды медленные, но при этом увеличивают время скана незаметно (многопроцессорная система).

"Мы создаем себе трудности, чтобы потом их героически преодолевать".
Озвучил Леонид Марков в фильме "Коней на переправе не меняют"


К чему эта фраза?
Не зная конечной цели трудно предложить оптимальное решение.
Циклы в контроллерах вред. На этом форуме уже было обсуждение про время реакции - автор потом сознался, что у него был цикл, но те кто пытался ему помочь даже представить себе не могли, что у него цикл.
А команды JMP не должно быть, т.к. от нее может быть вред даже при переходах вперед.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Коллективный разум. Давайте посоветуемся! Часовой пояс: GMT + 1
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.139 секунды
/n