И я того же мнения
Захват-2.png
И я того же мнения
Захват-2.png
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Последний раз редактировалось MrR; 24.07.2017 в 09:32.
Скорей всего это из-за того, что числа REAL приблизительные, всего 7...8 точных знаков.
А Вы используете для счетчика числа DINT, при преобразовании DINT_TO_REAL будет большая погрешность для больших чисел
Попробуйте так
1. Вот ФБ задержки для чисел DINT. Я его из FT_TN64 сделал, оскатовская библиотека больше не нужна
Захват-2.png
2. Преобразовывать DINT_TO_REAL нужно после вычитания "старых" значений из "новых"Код:FUNCTION_BLOCK Zad_DINT VAR_INPUT in : DINT; T : TIME; END_VAR VAR_OUTPUT out : DINT; trig: BOOL; END_VAR VAR length : INT := 64; X : ARRAY[0..63] OF DINT; cnt : INT; last : TIME; tx: TIME; init: BOOL; END_VAR (* read system time *) tx := TIME(); trig := FALSE; IF NOT init THEN x[cnt] := in; init := TRUE; last := tx; ELSIF tx - last >= T / length THEN IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF; Out := X[cnt]; x[cnt] := in; last := tx; trig := TRUE; END_IF;
Захват-1.png
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Значения прыгают, но меньше. Думаю может это как то связано с периодом опроса. Теперь значения проседают в пределах 220-270
Последний раз редактировалось MrR; 24.07.2017 в 14:08.
Для этих значений
FUNCTION_BLOCK Zad_DINT
VAR_INPUT
in : DINT;
T : TIME;
END_VAR
VAR_OUTPUT
out : DINT;
trig: BOOL;
END_VAR
VAR
length : INT := 64;
X : ARRAY[0..63] OF DINT;
период опроса 2000/64 = 31,25 мс
Можно попробовать уменьшить дискретность выходного сигнала, например сделать
length : INT := 200;
X : ARRAY[0..199] OF DINT;
период опроса станет 2000/200 = 10 мс
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
В итоге попробовал разные значения и остановился все таки на
length : INT := 200;
X : ARRAY[0..199] OF DINT;
Но значения все равно в диапазоне изменяются. Решил просто это сгладить средним значением и поставил блок STATISTICS_REAL. Вывел наконец на блок PID. И он начал скакать, то выход минимум то максимум, хотя значение показывает +-2 или 3%.
Каждый цикл. Его лучше сделать через EN/ENO или я не правильно понимаю?
сделайте чтоб он выполнялся каждые 100мс, сравните результат
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран