FX/Q - Эффективное использование таймеров |
Здравствуйте, гость ( Вход | Регистрация )
FX/Q - Эффективное использование таймеров |
3.08.2014 - 13:22
Сообщение
#1
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Здравствуйте, уважаемые Знатоки!
Суть вопроса: имееться несколько (много) входных сигналов, по примеру, представленному на скриншоте ниже. Необходимо выборочно (некоторые) из этих сигналов пропускать через таймер, т.е. выход должен сработать через опр. интервал времени. Как видим на скриншоте - входов всего 16. Но что делать, если их будет, скажем, штук 200? Несмотря на то, что таймеров как-бы хватает, но не прикручивать же каждому входу отдельный таймер? Кажется что это не идеальное решение... Вопрос: как наименее затратно организовать работу таймера(ов), возможно через DUT и прочие уловки? ______1.PNG ( 30.64 килобайт ) Кол-во скачиваний: 44 -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
3.08.2014 - 17:15
Сообщение
#2
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Тут отыщете пример, как это реализуется.
-------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
3.08.2014 - 20:28
Сообщение
#3
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Тут отыщете пример, как это реализуется. Хм, весьма хороший пример, inntele. (Object Control). Вы использовали DUT со вложенными FB. Я изучил данное решение, но пока не хватает ума прикрутить это к моему вопросу. Если не трудно, можно по шагам? ) А еще, мне кажется, что в Вашем примере возникнет ошибка обработки, связанная со временем цикла. Или это только кажется... -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
3.08.2014 - 21:02
Сообщение
#4
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Тут отыщете пример, как это реализуется. Хм, весьма хороший пример, inntele. (Object Control). Вы использовали DUT со вложенными FB. Я изучил данное решение, но пока не хватает ума прикрутить это к моему вопросу. Если не трудно, можно по шагам? ) А еще, мне кажется, что в Вашем примере возникнет ошибка обработки, связанная со временем цикла. Или это только кажется... Это кажется. К вашему вопросу пример соотносится следующим образом. Товарищу хронически не хватало доступных таймеров, соответственно, я продемонстрировал на примере, как обойтись всего одним. Пример был направлен на то, чтобы показать прием использования одного таймера (а равно - счетчика) при реализации в программе множества идентичных друг другу процедур, а не то, как вообще следует писать программы. Если прочтете весь топик, Вы это увидите. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
3.08.2014 - 23:01
Сообщение
#5
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Это кажется. К вашему вопросу пример соотносится следующим образом. Товарищу хронически не хватало доступных таймеров, соответственно, я продемонстрировал на примере, как обойтись всего одним. Пример был направлен на то, чтобы показать прием использования одного таймера (а равно - счетчика) при реализации в программе множества идентичных друг другу процедур, а не то, как вообще следует писать программы. Если прочтете весь топик, Вы это увидите. Топик то прочел, но.... Управляя тысячью нагревателями Вы все это сокрыли во вложенных FB... А Вы уверены, что Fault_Timer реально отрабатывает заданный промежуток времени? Решение весьма прагматичное, должен отметить. -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
4.08.2014 - 07:00
Сообщение
#6
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Это кажется. К вашему вопросу пример соотносится следующим образом. Товарищу хронически не хватало доступных таймеров, соответственно, я продемонстрировал на примере, как обойтись всего одним. Пример был направлен на то, чтобы показать прием использования одного таймера (а равно - счетчика) при реализации в программе множества идентичных друг другу процедур, а не то, как вообще следует писать программы. Если прочтете весь топик, Вы это увидите. Топик то прочел, но.... Управляя тысячью нагревателями Вы все это сокрыли во вложенных FB... А Вы уверены, что Fault_Timer реально отрабатывает заданный промежуток времени? Решение весьма прагматичное, должен отметить. Разумеется. Работоспособность алгоритма проверена. Если там и присутствуют ошибки, то они незначительные. В том, что программа функционирует надлежащим образом, можете удостовериться сами. Причем от использования циклов можно отказаться, применив функциональные блоки в режиме макрокода. В свою очередь, это позволит сделать сам код у функциональных блоков существенно короче, так как в этом случае отпадает необходимость предварительно осуществлять выборку из массивов, а после обработки переписывать обновленные данные обратно в массив: входное значение Zone_Num функционального блока будет задаваться уже не переменной, а соответствующей константой, и фактические адреса ячеек будут автоматически вычислены и подставлены в исполняемый код по значению Zone_Num. Что нужно предпринять, чтобы этот вариант реализовать, расписано мною в том же топике. Если же проверку проводить без переписывания, то достаточно всего лишь сократить количество циклов с тысяч до охватываемого глазом, к примеру, до 3-4-5-6-7-8. Пример с использованием циклов был дан с единственной целью - показать как можно экстремально сократить размер программы, ибо для топикстартера это представляло вторую проблему. P.S. Вы напрасно концентрируете внимание на вложенных FB. К Вашему вопросу этот прием никакого отношения не имеет и на работоспособность программ абсолютно никакого влияния не оказывает. Сообщение отредактировал inntele - 4.08.2014 - 07:08 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
4.08.2014 - 10:54
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Ну... теоретически да, вроде бы похоже, что программа рабочая. Вот только надо подумать как бы так ее слегка видоизменить, чтоб понаблюдать за процессом. Сократить кол-во циклов как вариант.
И я так понимаю, что без применения DUT не обойтись (в случае с таймером) ? И можно ли в данном случае в качестве уставки времени применить индексированную переменную, как это скажется на работе блока в целом? (к примеру, у некоторых выходов разные интервалы времени, не один, как в Вашем примере [D5004] ). Сообщение отредактировал acoustik - 4.08.2014 - 10:58 -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
4.08.2014 - 11:05
Сообщение
#8
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Ну... теоретически да, вроде бы похоже, что программа рабочая. Вот только надо подумать как бы так ее слегка видоизменить, чтоб понаблюдать за процессом. Сократить кол-во циклов как вариант. И я так понимаю, что без применения DUT не обойтись (в случае с таймером) ? DUT решают вопрос унификации и легкого построения идентичных процедур. Тогда как один и тот же таймер может быть использован в функциональных блоках совершенно разных по наполнению. Важно здесь только одно: до выполнения блока таймера перезаписать ему текущее значение из соответствующей ячейки памяти, а после его выполнения это значение сохранить в той же самой ячейке. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
4.08.2014 - 11:08
Сообщение
#9
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Индексированную нельзя. Команда работы с таймером не поддерживает работу с индексированными переменными.*
*Подправлю себя. Контроллеры Q-серии, хотя и с некоторыми ограничениями, но поддерживают индексную адресацию таймеров и счетчиков. Соответственно, в небольших задачах, пока количества таймеров хватает, эту возможность использовать можно. Сообщение отредактировал inntele - 7.08.2014 - 08:32 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
4.08.2014 - 11:21
Сообщение
#10
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
... Важно здесь только одно: до выполнения блока таймера перезаписать ему текущее значение из соответствующей ячейки памяти, а после его выполнения это значение сохранить в той же самой ячейке. Хм... А можно понагляднее, если не трудно? ) -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
4.08.2014 - 11:24
Сообщение
#11
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
DUT решают вопрос унификации и легкого построения идентичных процедур. Тогда как один и тот же таймер может быть использован в функциональных блоках совершенно разных по наполнению. Ну а в основном суть я уловил, в каком направлении копать. Буду мыслить... ) Спасибо за пример! -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
4.08.2014 - 11:44
Сообщение
#12
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
... Важно здесь только одно: до выполнения блока таймера перезаписать ему текущее значение из соответствующей ячейки памяти, а после его выполнения это значение сохранить в той же самой ячейке. Хм... А можно понагляднее, если не трудно? ) acoustik, в примере единственный таймер TIMER_100_FB_M. Находится он в функциональном блоке FB_Heater. Выше ФБ таймера в его значение ValueIn записывается значение из нужной ячейки хранящей значение таймера для соответствующей переменной после предыдущей обработки тем же таймером, а по завершении выполнения этого блока текущее значение с выхода ValueOut перезаписывается обратно в ячейку. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
4.08.2014 - 11:52
Сообщение
#13
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
acoustik, в примере единственный таймер TIMER_100_FB_M. Находится он в функциональном блоке FB_Heater. Выше ФБ таймера в его значение ValueIn записывается значение из нужной ячейки хранящей значение таймера для соответствующей переменной после предыдущей обработки тем же таймером, а по завершении выполнения этого блока текущее значение с выхода ValueOut перезаписывается обратно в ячейку. Это я вроде понял. Иными словами, поправьте если не прав, получается что прошедшее время (Fault Time) n-ного выхода (нагревателя) записалось в ячейку, затем обработался следующий выход и т.д. А потом, когда по циклу опять обрабатывается этот n-ный выход, значение (накопленное) времени записывается в ValueIn таймера и отсчет продолжается уже с этого значения? Сообщение отредактировал acoustik - 4.08.2014 - 11:55 -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
4.08.2014 - 12:03
Сообщение
#14
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Это я вроде понял. Иными словами, поправьте если не прав, получается что прошедшее время (Fault Time) n-ного выхода (нагревателя) записалось в ячейку, затем обработался следующий выход и т.д. А потом, когда по циклу опять обрабатывается этот n-ный выход, значение (накопленное) времени записывается в ValueIn таймера и отсчет продолжается уже с этого значения? Именно так. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
4.08.2014 - 12:08
Сообщение
#15
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
А еще, inntele, хотя немного не по теме, можете подтвердить следующее: в cpu system Q, к примеру, имеются входы X0, X1 ... Xn. И выходы Y0, Y1 ... Yn уже использовать нельзя. Нужно продолжать нумерацию Yn+1 и т.д. Верно ли это? Где то я про это читал, но не помню где и не могу найти, но в памяти отложилось что то подобное...
-------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
Текстовая версия | Сейчас: 18.04.2024 - 06:33 |