Работа с массивами в LAD
Добавлено: 16 ноя 2013, 15:59
Здравствуйте уважаемые. Помогите пожалуйста найти пути реализации поставленной задачи.
Есть 3 единицы оборудования, которые могут работать в "Автоматическом" и "Ручном режиме".
Автоматический режим - контроллер сам выбирает какую единицу нужно задействовать.
Ручной - ждет команду старт из Scada системы.
Выбор включаемого оборудования осуществляется по наработке часов.
Приведу пример:
Режим "авто" - 1 единица оборудования - 18 часов
Режим "авто" - 2 единица оборудования - 12 часов
"Ручной режим" - 3 единица оборудования - выкл.
Из этого следует, что контроллер должен сравнить наработку часов у 1 и 2 единицы оборудования, и выбрать наименьшее. В нашем случае это 2 единица оборудования (12 часов наработки).
Реализовал задачу вот таким способом: То есть, если у нас у двух единиц оборудования включен "Авто" - замыкается контакт "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.
Если кому то приходилось реализовывать, что то подобное, посоветуйте пожалуйста как решаются подобные задачи.
Есть 3 единицы оборудования, которые могут работать в "Автоматическом" и "Ручном режиме".
Автоматический режим - контроллер сам выбирает какую единицу нужно задействовать.
Ручной - ждет команду старт из Scada системы.
Выбор включаемого оборудования осуществляется по наработке часов.
Приведу пример:
Режим "авто" - 1 единица оборудования - 18 часов
Режим "авто" - 2 единица оборудования - 12 часов
"Ручной режим" - 3 единица оборудования - выкл.
Из этого следует, что контроллер должен сравнить наработку часов у 1 и 2 единицы оборудования, и выбрать наименьшее. В нашем случае это 2 единица оборудования (12 часов наработки).
Реализовал задачу вот таким способом: То есть, если у нас у двух единиц оборудования включен "Авто" - замыкается контакт "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.
Если кому то приходилось реализовывать, что то подобное, посоветуйте пожалуйста как решаются подобные задачи.