Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 36

Тема: Стек, динамический массив в ПЛК, Codesys

  1. #11
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Да все там проще, я к примеру писал структуру(если много значений), из нее делал массив.
    Далее так
    IF VAR1 THEN (команда сдвига)
    FOR Cn:= 30 TO 0 BY-1 DO ( к примеру архив на месяц от 31 до 0-текущей даты)
    ARRAY[cn+1]:= ARRAY[cn];
    END_FOR
    END_IF

  2. #12
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Господа, от перестановки слагаемых сумма не изменяется. Зачем двигать весь массив, если можно сдвинуть новое значение? Просто записывайте очередной элемент на место того, который надо удалить. Для этого всего-навсего нужен счётчик входящих элементов. Псевдокод:
    Код:
    count := count + 1;
    array[count MOD size_of_array] := value;
    
    (* Считаем среднее по массиву *)
    Для пущей аккуратности и безболезненности за размер массива в цикле усреднения можно брать минимум между счётчиком и, собственно, размером массива.
    Последний раз редактировалось Yegor; 30.05.2012 в 06:32.

  3. #13
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Зачем двигать весь массив, если можно сдвинуть новое значение?
    Про это уже ответили :
    Цитата Сообщение от lazy Посмотреть сообщение
    ..
    PROGRAM PLC_PRG
    VAR
    ar:ARRAY[1..10]OF BYTE:=0,1,2,3,4,5,6,7,8,9;
    nP: INT;
    yNew: BYTE; (* новое значение чего то там *)
    END_VAR
    **********
    nP:= nP + 1;
    IF nP > 10 THEN
    nP := 1;
    END_IF;

    ar[nP] := yNew;

    Цитата Сообщение от Yegor Посмотреть сообщение
    ..в цикле усреднения..
    А этот цикл зачем ?

  4. #14
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Про это уже ответили
    Верно, не удосужился дочитать.
    А этот цикл зачем ?
    для последующего усреднения

  5. #15
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    А без цикла никак ?

  6. #16
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    С накапливающейся ошибкой — как.

  7. #17
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    Да все так же
    Цитата Сообщение от lazy Посмотреть сообщение
    PROGRAM PLC_PRG
    VAR
    ar:ARRAY[1..10]OF BYTE:=0,1,2,3,4,5,6,7,8,9;
    nP: INT;
    yNew: BYTE; (* новое значение чего то там *)
    average:.... (усредненное значение) := ????
    END_VAR

    **********

    nP:= nP + 1;
    IF nP > 10 THEN
    nP := 1;
    END_IF;
    average:=average+(yNew-ar[nP])/10;
    ar[nP] := yNew;

  8. #18
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Вот оно и есть. Прогрессирующая потеря точности.

  9. #19
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,271

    По умолчанию

    А где прогрессирует ?
    Всегда среднее последних 10-ти

    PS
    Для наглядности :
    summ := summ -ar[nP] + yNew; (*ушел самый старый, на смену новый*)
    averagwe:=summ / 10;
    Последний раз редактировалось Валенок; 30.05.2012 в 11:33.

  10. #20
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    В арифметических операциях с плавающей запятой не гарантируется точность результата. Эту неточность вы накапливаете в average.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Не работает "Динамический текст" (Dynamic texsts)
    от Солнечный заяц в разделе СПК1хх
    Ответов: 13
    Последнее сообщение: 25.03.2014, 15:36
  2. Входные переменные в массив
    от kuguar в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 06.06.2011, 09:25
  3. массив не помещается....
    от Дмитрий Артюховский в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 04.12.2010, 12:50
  4. массив
    от freak в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 01.07.2010, 03:14
  5. Узнать динамический Ip
    от Zjrin Alexandr в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 26.03.2010, 13:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •