- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Работа с массивами Tia Potal
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 13
- Зарегистрирован: 04 окт 2024, 11:58
- Имя: Георгий Кунцов
- Страна: Россия
- город/регион: Киров
Работа с массивами Tia Potal
Доброго дня всем!
Появилась на досуге вот такая задача: Нужно записывать в массив значения с датчика влажности , причем записать нужно последние 100 значений, учитывая , что влажность постоянно меняется и массив соответственно тоже изменяться , т.е элементы массива должны постоянно сдвигаться на один -может ошибаюсь.
Пытаюсь реализовать на языке SCL , но пока безуспешно. Алгоритм моих действий таков : создаю массив в блоке DB (с типом данных real)
Далее переменную которая отвечает за влажность приравниваю к первому элементу массива , и .... все( Не могу сообразить как передавать переменную дальше уже во второй элемент, в третий и.т.д.
Появилась на досуге вот такая задача: Нужно записывать в массив значения с датчика влажности , причем записать нужно последние 100 значений, учитывая , что влажность постоянно меняется и массив соответственно тоже изменяться , т.е элементы массива должны постоянно сдвигаться на один -может ошибаюсь.
Пытаюсь реализовать на языке SCL , но пока безуспешно. Алгоритм моих действий таков : создаю массив в блоке DB (с типом данных real)
Далее переменную которая отвечает за влажность приравниваю к первому элементу массива , и .... все( Не могу сообразить как передавать переменную дальше уже во второй элемент, в третий и.т.д.
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Работа с массивами Tia Potal
Сделайте переменную, которая будет являться указателем на текущий номер ячейки массива. По нему записывайте значение влажности и инкрементируйте указатель.
-
- здесь недавно
- Сообщения: 13
- Зарегистрирован: 04 окт 2024, 11:58
- Имя: Георгий Кунцов
- Страна: Россия
- город/регион: Киров
Работа с массивами Tia Potal
#i := 1;
"Value_RH".RH[#i]:=#rh;
#shell:=#i+1;
i- это индекс ячейки массива , she’ll- шаг .в правильном направлении мыслю ?))
i - индекс массива
"Value_RH".RH[#i]:=#rh;
#shell:=#i+1;
i- это индекс ячейки массива , she’ll- шаг .в правильном направлении мыслю ?))
i - индекс массива
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Работа с массивами Tia Potal
Скорее так:
Границы массива сами подставите. Указатель вам необходимо где-то хранить. Можно в DB со значениями, можно в переменных экземпляра FB. Но не в локальных временных переменных.
Код: Выделить всё
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;
-
- здесь недавно
- Сообщения: 13
- Зарегистрирован: 04 окт 2024, 11:58
- Имя: Георгий Кунцов
- Страна: Россия
- город/регион: Киров
Работа с массивами Tia Potal
Спасибо, но это работает не много не так , тут значение переменной влажности сразу заноситься во все элементы , а должно быть так :влажность 54- записали в первый элемент массива , влажность 53- записали во второй элемент массива итд
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Работа с массивами Tia Potal
Gergon, вы что-то не то делаете или что-то не понимаете.
Какая нафик she'll?
Какая нафик she'll?
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Работа с массивами Tia Potal
Наверное как то так:
Код: Выделить всё
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
-
- здесь недавно
- Сообщения: 13
- Зарегистрирован: 04 окт 2024, 11:58
- Имя: Георгий Кунцов
- Страна: Россия
- город/регион: Киров