24.07.2021, 18:26
|
#2
|
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили:
165 раз(а) в 157 сообщениях
|
Ответ: Необходима помощь в правке макроса Усреднения аналоговой величины
Цитата:
Сообщение от tishkoff
Добрый день!
Стоит задача усреднять получаемое значение в следующих вариантах:
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 мс.
Результаты на скринах во вложении. Сам макрос во вложении.
Возможно есть уже готовое либо более простое и правильное решение данной задачи?! Буду очень благодарен.
|
используйте исторические блоки
__________________
C уважением, LordN
|
|
|