1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Обработка массива с переменными границами

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

Разбираюсь сейчас с возможностями S7-1200. Увидел там хитрое такое обозначение ARRAY[*] OF REAL. Для работы с массивами с переменной размерностью. Там еще парочка функций есть, для определения верхней и нижней границы диапазона UPPER_BOUND и LOWER_BOUND. И тут же грабельки полетели, со всех сторон.
1) В параметрах INPUT и OUTPUT такую нотацию не воспринимает, только в InOut.
2) При попытке загрузить такую программулину в симулятор - он через пару секунд вылетает.

Т.е. или пользоваться этим нельзя на S7-1200, или прошивка староватая, или я что то опять проглядел ?

Отправлено спустя 1 час 30 минут 47 секунд:
Появился луч света в темном царстве, в FC блоках можно использовать массивы без указания границ в INPUT и OUTPUT

UNTK_RAA
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 01 мар 2010, 17:37
Имя: Алексей Алексеевич
Страна: Россия
город/регион: Нижний Тагил
Благодарил (а): 12 раз
Поблагодарили: 8 раз

Обработка массива с переменными границами

Сообщение UNTK_RAA »

Какая версия Step7? v15 ?
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

Нет V14, SP1
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

Рано радовался. Все компилится, загружается. Но проработав пару секунд, выходит на ошибку. Диагностика - выход за границы памяти...
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

Подвожу итоги. Опустился конечно я до крайностей, скачал мануал. Резюме - делал все правильно, просто это не работает в S7-1200, а вот в S7-1500 работает. Пикантность ситуации в том, что S7-1200 не имеет в своем арсенале STL, и как следствие - невозможность использования косвенной адресации. По этому, в качестве одной из альтернатив предлагается использование массивов. Ну и тут же эта возможность обрезается, хотя то, что это нельзя использовать для S7-1200 я не увидел в мануале, возможно не нашел. Там более 1000 страниц.
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

Небольшое уточнение, оказывается в симуляторе это все работает, STEP 7 съезжает, когда к симулятору подключаешься. Причем бред какой то показывает. Типа горит светодиод ERROR, хотя симуляторе такого нет.
А вот HMI эмулятор - тот молотком - все продолжает показывать. Надеюсь, когда железо подойдет, все будет более адекватно.
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Обработка массива с переменными границами

Сообщение petr2off »

У меня все таки получилось обрабатывать массив с переменными границами в S7-1200.
Смотрится это так:
#n0 := LOWER_BOUND(ARR := #A, DIM := 1);
#n99 := UPPER_BOUND(ARR := #A, DIM := 1);

FOR #i := #n0 TO #n99 DO

#err:= MOVE_BLK_VARIANT(SRC:=#A, COUNT:=1, SRC_INDEX:=#i, DEST_INDEX:=0, DEST=>#r);
#r[0] := #r[0] + #X;
#err := MOVE_BLK_VARIANT(SRC := #r, COUNT := 1, SRC_INDEX := 0, DEST_INDEX := #i, DEST => #B);

// #B[#i] := #B[#i] + #X;
END_FOR;

Эта функция имеет входной параметр массив А и переменную X на выходе массив B, где к каждому элементу прибавлен X.
для S7-1500 достаточно вместо 3-х строчек написать #B[#i] := #A[#i] + #X;
Ответить

Вернуться в «Simatic TIA Portal»