Работа с массивами в LAD

Инженерное программное обеспечение

Работа с массивами в LAD

Сообщение Seregas » 16 ноя 2013, 15:59

Здравствуйте уважаемые. Помогите пожалуйста найти пути реализации поставленной задачи.
Есть 3 единицы оборудования, которые могут работать в "Автоматическом" и "Ручном режиме".
Автоматический режим - контроллер сам выбирает какую единицу нужно задействовать.
Ручной - ждет команду старт из Scada системы.
Выбор включаемого оборудования осуществляется по наработке часов.

Приведу пример:
Режим "авто" - 1 единица оборудования - 18 часов
Режим "авто" - 2 единица оборудования - 12 часов
"Ручной режим" - 3 единица оборудования - выкл.

Из этого следует, что контроллер должен сравнить наработку часов у 1 и 2 единицы оборудования, и выбрать наименьшее. В нашем случае это 2 единица оборудования (12 часов наработки).
Реализовал задачу вот таким способом:
cascad.jpg


То есть, если у нас у двух единиц оборудования включен "Авто" - замыкается контакт "available_2", а дальше ищем у кого включен режим "автомат" и выполняем сравнение.
Все как бы работает, но мне не нравится, что это вариант очень объемный и не гибкий. Если на объекте будет 5 - 6 единиц оборудования, то алгоритм разрастется до очень больших размеров.

Искал пути модернизации и наткнулся на следующий код написанный в STL:
LAR1 P#M 0.0
TAR1 AR2

L 9
nw2b: T #Count
+AR2 P#4.0
L MD [AR1,P#0.0]
L MD [AR2,P#0.0]
<=D
JC nw2c
LAR1 AR2
nw2c: L #Count
LOOP nw2b
L MD [AR1,P#0.0]
T MD 100
Выбирает наименьшее среди 9 чисел. Но подогнать можно под любое количество чисел. Идеально подходит для моей задачи.
Как я понимаю, что с помощью счетчика, мы 9 раз обращаемся в массив и сравниваем числа, таким образом находим самое маленькое.
Работать в STL не приходилось и понимания кода - минимальные. Очень хотелось бы реализовать что то подобное в LAD.
Если кому то приходилось реализовывать, что то подобное, посоветуйте пожалуйста как решаются подобные задачи.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Seregas
Любитель
 
Сообщения: 34
Зарегистрирован: 07 сен 2013, 19:10

Re: Работа с массивами в LAD

Сообщение Seregas » 16 ноя 2013, 16:01

Min_dint.zip

пример реализации в STL
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Seregas
Любитель
 
Сообщения: 34
Зарегистрирован: 07 сен 2013, 19:10

Re: Работа с массивами в LAD

Сообщение Автоматизатор » 16 ноя 2013, 17:12

В ЛАДе не все команды есть. Поэтому и СТЛ.

Делай все на ЛАДе, а этот кусок на СТЛ. Благо компилятор не ругается.

Может в ТИА портале и сделают косвенную адресацию в ЛАДе. Для углубленного изучения Степ7 надо СТЛ учить. :(
Аватара пользователя
Автоматизатор
Профессионал
 
Сообщения: 894
Зарегистрирован: 09 окт 2012, 05:18

Re: Работа с массивами в LAD

Сообщение CHANt » 16 ноя 2013, 18:36

Из этого следует, что контроллер должен сравнить наработку часов у 1 и 2 единицы оборудования, и выбрать наименьшее. В нашем случае это 2 единица оборудования (12 часов наработки).

А отключать с наибольшим числом наработки ему не надо? :D
Прикладываю FB в подключаемой библиотеке. Анализируется для 3-х котлов:
1)Котел в работе
2) Котел в Аварии
3) Котел заблокирован (могут ведь в ремонт вывести)
4) Наработка котла
5) Есть электропитание котла
На выходе:
1) Котел с наименьшей наработкой, если наработки нет, то будет выбран первый котел ит.д.
2) Котел с наибольшей наработкой, который можно отключить
3) Нет резервных котлов (так, сигнал для сведения)
4) Нет отключаемых котлов

На самом деле это ведь не вся задача)) При включении сложного оборудования, оно ведь может и не запуститься, тогда надо включать другое и т.д. Поэтому кроме выбора по наработке и состоянию, еще надо разрабатывать алгоритм который включает, резервирует и т.д. А он и есть жесть самая :)
Ну еще должен быть и регулятор, который определяет сколько всего котлов нужно в данный момент :)
А, ну и на 5-6 единиц можно застрелиться делать такое. Буржуи упрощают задачу - задают жесткую последовательность котлов, а не перебор по куче информации. И дают оператору возможность менять эту последовательность, либо по недельно или помесячно)))
Choise_3.zip

Не надо копаться в коде, он малопонятен, потому как исходник делался в SCL, а здесь компилированный в STL.
Классические задачи с циклами, лучше делать текстовыми языками программирования!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: Работа с массивами в LAD

Сообщение Seregas » 16 ноя 2013, 21:46

Автоматизатор писал(а): Делай все на ЛАДе, а этот кусок на СТЛ. Благо компилятор не ругается.

Скорее всего, именно так и придется поступить.

CHANt - Да, выключение тоже нужно. Это само собой разумеющиеся, просто забыл упомянуть. :)
Спасибо за советы и прикрепленный файл.
Все таки надо в SCL или STL углубляться. Появится время, обязательно начну изучать.
Аватара пользователя
Seregas
Любитель
 
Сообщения: 34
Зарегистрирован: 07 сен 2013, 19:10

Re: Работа с массивами в LAD

Сообщение CHANt » 16 ноя 2013, 21:52

В данном случае, для работы с массивами, лучше SCL,
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg


Вернуться в Simatic TIA Portal / Step7

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0