Segnetics

Вернуться   Segnetics > Форум Segnetics > SMLogix

SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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 мс.
Результаты на скринах во вложении. Сам макрос во вложении.

Возможно есть уже готовое либо более простое и правильное решение данной задачи?! Буду очень благодарен.
Миниатюры
Нажмите на картинку для увеличения

Название:  4.png
Просмотров: 44
Размер:  118.7 Кбайт   Нажмите на картинку для увеличения

Название:  8.png
Просмотров: 17
Размер:  127.1 Кбайт   Нажмите на картинку для увеличения

Название:  16.png
Просмотров: 13
Размер:  120.3 Кбайт  
Вложения
Тип файла: psl Untitled.psl (305.4 Кбайт, 9 просмотров)
tishkoff вне форума   Ответить с цитированием
Старый 24.07.2021, 18:26   #2
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 123
Благодарил(а): 239 раз(а)
Поблагодарили: 161 раз(а) в 153 сообщениях
По умолчанию Ответ: Необходима помощь в правке макроса Усреднения аналоговой величины

Цитата
Сообщение от 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
LordN сейчас на форуме   Ответить с цитированием
Старый 25.07.2021, 00:45   #3
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 735
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: Необходима помощь в правке макроса Усреднения аналоговой величины

Цитата
Сообщение от tishkoff Посмотреть сообщение
Предполагаю что там "собака и зарыта".
Для проверки времени обработки одного цикла записи массива использовал 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 мс.
Навскидку - все запоздания кратны тику. А проекте много обратных связей с задержкой на тик (желтых связей). Собака именно в них и зарыта.
ATS вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 13:50.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023