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

Инженерное программное обеспечение
Ответить
Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

Здравствуйте уважаемые. Помогите пожалуйста найти пути реализации поставленной задачи.
Есть 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
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

Min_dint.zip
пример реализации в STL
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

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

Сообщение Автоматизатор »

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

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

Может в ТИА портале и сделают косвенную адресацию в ЛАДе. Для углубленного изучения Степ7 надо СТЛ учить. :(

Аватара пользователя
CHANt
Профессионал
Сообщения: 565
Зарегистрирован: 13 окт 2012, 15:24

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

Сообщение CHANt »

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

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

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

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

Аватара пользователя
CHANt
Профессионал
Сообщения: 565
Зарегистрирован: 13 окт 2012, 15:24

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

Сообщение CHANt »

В данном случае, для работы с массивами, лучше SCL,

Ответить