Показать сообщение отдельно
Старый 24.07.2021, 15:01   #1
tishkoff
Новичок
 
Регистрация: Jul 2017
Сообщения: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Необходима помощь в правке макроса Усреднения аналоговой величины

Добрый день!
Стоит задача усреднять получаемое значение в следующих вариантах:
1) массив из 4х последних значений
2) массив из 8ми последних значений
3) массив из 16ти последних значений
Ко всему этому делу добавим возможность настройки времени итераций, допустим, от 30 мс.
Вкратце опишу свою проблему:
строил на блоках array II и счётчиках CTU с привязкой к тику, счётчик №1 считает время итерации и по наполнению даёт команду на запись нового значения в блок Array II. Блок array II освободившись после записи даёт команду на +1 к следующему счётчику №2, который задаёт новый адрес ячейки для записи в блок array II. Всё это обильно напичкано другими условиями и блоками rise и fall. Предполагаю что там "собака и зарыта".
Для проверки времени обработки одного цикла записи массива использовал CTU-T.
Как итог - идёт запоздание обработки каждой итерации.
1) 4 значения, время тика 30 мс, время итерации 60 мс - итоговое время одного прохода - 390 мс. 390/4=97,5 > 60 мс. Общее запоздание по проходу 390-240=150 мс.
2) 8 значений, время тика 30 мс, время итерации 60 мс - итоговое время одного прохода - 870 мс. 870/8=108,75 > 60 мс. Общее запоздание по проходу 870-480=390 мс.
3) 16 значений, время тика 30 мс, время итерации 60 мс - итоговое время одного прохода - 1830 мс. 1830/16=114,375 > 60 мс. Общее запоздание по проходу 1830-960=870 мс.
Результаты на скринах во вложении. Сам макрос во вложении.

Возможно есть уже готовое либо более простое и правильное решение данной задачи?! Буду очень благодарен.
Изображения
Тип файла: png 4.png (118.7 Кбайт, 44 просмотров)
Тип файла: png 8.png (127.1 Кбайт, 17 просмотров)
Тип файла: png 16.png (120.3 Кбайт, 13 просмотров)
Вложения
Тип файла: psl Untitled.psl (305.4 Кбайт, 9 просмотров)
tishkoff вне форума   Ответить с цитированием