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

Работа с массивами Tia Potal

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
Gergon
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 04 окт 2024, 11:58
Имя: Георгий Кунцов
Страна: Россия
город/регион: Киров

Работа с массивами Tia Potal

Сообщение Gergon »

Доброго дня всем!
Появилась на досуге вот такая задача: Нужно записывать в массив значения с датчика влажности , причем записать нужно последние 100 значений, учитывая , что влажность постоянно меняется и массив соответственно тоже изменяться , т.е элементы массива должны постоянно сдвигаться на один -может ошибаюсь.
Пытаюсь реализовать на языке SCL , но пока безуспешно. Алгоритм моих действий таков : создаю массив в блоке DB (с типом данных real)
Далее переменную которая отвечает за влажность приравниваю к первому элементу массива , и .... все( Не могу сообразить как передавать переменную дальше уже во второй элемент, в третий и.т.д.

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Работа с массивами Tia Potal

Сообщение Joshua »

Сделайте переменную, которая будет являться указателем на текущий номер ячейки массива. По нему записывайте значение влажности и инкрементируйте указатель.

Автор темы
Gergon
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 04 окт 2024, 11:58
Имя: Георгий Кунцов
Страна: Россия
город/регион: Киров

Работа с массивами Tia Potal

Сообщение Gergon »

#i := 1;
"Value_RH".RH[#i]:=#rh;
#shell:=#i+1;
i- это индекс ячейки массива , she’ll- шаг .в правильном направлении мыслю ?))



i - индекс массива

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Работа с массивами Tia Potal

Сообщение Joshua »

Скорее так:

Код: Выделить всё

IF "Value_RH".index < 0 OR "Value_RH".index > #maxArrayIndex THEN		// Проверка на границы массива
	"Value_RH".index := 0;
END_IF;
"Value_RH".RH["Value_RH".index] := #rh;
"Value_RH".index := "Value_RH".index + 1;
Границы массива сами подставите. Указатель вам необходимо где-то хранить. Можно в DB со значениями, можно в переменных экземпляра FB. Но не в локальных временных переменных.

Автор темы
Gergon
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 04 окт 2024, 11:58
Имя: Георгий Кунцов
Страна: Россия
город/регион: Киров

Работа с массивами Tia Potal

Сообщение Gergon »

Спасибо, но это работает не много не так , тут значение переменной влажности сразу заноситься во все элементы , а должно быть так :влажность 54- записали в первый элемент массива , влажность 53- записали во второй элемент массива итд

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Работа с массивами Tia Potal

Сообщение Михайло »

Gergon, вы что-то не то делаете или что-то не понимаете.

Какая нафик she'll?

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Работа с массивами Tia Potal

Сообщение SMax »

Наверное как то так:

Код: Выделить всё

FUNCTION_BLOCK "Block_1"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      Value : Real;
   END_VAR

   VAR 
      AR : Array[0..99] of Real;
   END_VAR

   VAR_TEMP 
      i : Int;
   END_VAR


BEGIN
	IF #Value <> #AR[0] THEN
	    FOR #i := 99 TO 1 BY -1 DO
	        #AR[#i] := #AR[#i - 1];
	    END_FOR;
	    #AR[0] := #Value;
	END_IF;
END_FUNCTION_BLOCK

Автор темы
Gergon
здесь недавно
здесь недавно
Сообщения: 13
Зарегистрирован: 04 окт 2024, 11:58
Имя: Георгий Кунцов
Страна: Россия
город/регион: Киров

Работа с массивами Tia Potal

Сообщение Gergon »

Спасибо большое
Ответить

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