Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 30 из 30

Тема: Измерение и регулирование скорости нагрева

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

    По умолчанию

    Замените тип
    mt_time: DWORD; на TIME;
    или просто
    mt : TIME;
    На кой лишний dword и буквы ?

    и тогда замените
    timer.dw_time_ms
    на TIME()
    arr_tt[j].mt:=TIME();

    Упростите счетчик
    IF j=n THEN
    j:=0;
    ELSE
    j:=j+1;
    END_IF
    на классический циклический
    j := (j + 1) mod (n + 1);


    Вычитаете
    ..[j] - ..[j2]
    dt - это из текущего вычесть прошлое, но
    j2 := j + 1; это будущее

    логичней было бы не j2 а j0 (или j_) Да и определить проще :
    j0 := j;
    j := (j + 1) mod (n + 1);

    сложное и странное dt
    ((...) / (DWORD_TO_REAL(arr_tt[j].mt_time)-DWORD_TO_REAL(arr_tt[j2].mt_time)))*60000
    60000 - тута не СИ ?

    ((...) / (TIME_TO_REAL(arr_tt[j].mt - arr_tt[j0].mt)) * 1000
    это *С /сек

    Ну и есть смысл какой нить init для вычисления dT/dt т.к. при 1-ом измерении еще нет прошлого

    if init then
    ..dT/dt;
    end_if
    init := true;

  2. #22

    По умолчанию

    Спасибо! Работает. Не понял только про if init then ..dT/dt; end_if init := true; Скорость и без этого показывает, но замер очень точный за мс. Как теперь можно реализовать замер изменения скорости за 1 сек, 2 и т.д
    Вложения Вложения
    Последний раз редактировалось Александр SPB; 23.05.2022 в 14:44. Причина: Добавил файл

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

    По умолчанию

    Не понял только про if init
    Какое dt на 1-ом измерении ?

    Как теперь можно реализовать замер изменения скорости за 1 сек, 2 и т.д
    a = (v - v')/dt, //*С/cек^2, видимо ускорение темп-ры
    dt - уже есть
    v - mashina.spid_temp2
    ..

    ps
    А что это выложено выше ? Вы хоть удаляйте ненужное - j0 j2
    И куда ушло сравнение на изменение ?
    Что такое init_1 : UINT ?
    Последний раз редактировалось Валенок; 24.05.2022 в 16:15.

  4. #24

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А что это выложено выше ? Вы хоть удаляйте ненужное - j0 j2
    И куда ушло сравнение на изменение ?
    Что такое init_1 : UINT ?
    init_1 : UINT это мусор, от проб и ошибок. Так же как и не удаленные j0 и т.д. Сравнение убрал чтоб проверить как работает этот код дальше в программе. Если оставить сравнение не могу запустить код целиком. Разбираюсь...

  5. #25

    По умолчанию

    Цитата Сообщение от Александр SPB Посмотреть сообщение
    init_1 : UINT это мусор, от проб и ошибок. Так же как и не удаленные j0 и т.д. Сравнение убрал чтоб проверить как работает этот код дальше в программе. Если оставить сравнение не могу запустить код целиком. Разбираюсь...
    Вы потеряли условия сравнения
    Код:
    Timer.dw_time_ms:=TIME();
    
    IF NOT(arr_tt[j].temp=mashina.tek_t) AND (Timer.dw_time_ms-arr_tt[j].mt)>T#1000ms THEN
    	         IF j=n THEN j:=0;
    	                ELSE j:=j+1;
                    END_IF
    	             arr_tt[j].temp:=mashina.tek_t;
    	             arr_tt[j].mt:=Timer.dw_time_ms;
           IF j=n THEN  j2:=0;
    	       ELSE j2:=j+1;
          END_IF
        mashina.spid_temp2:=((arr_tt[j].temp - arr_tt[j2].temp) / (TIME_TO_REAL(arr_tt[j].mt - arr_tt[j0].mt))) * 1000 ;
    END_IF
    Последний раз редактировалось kondor3000; 25.05.2022 в 13:23.

  6. #26

    По умолчанию

    Более менее получилось. Первый вариант сделан по рекомендации Валенок . Не совсем понял как работает Timer.dw_time_ms, в переменной dw_time_ms присваивал значение T#1000ms что так измерение идет, что без присвоения измерение одинаково идет. Возможно из за этого когда значение температуры не изменяется, скорость изменения все равно показывает. Пусть это и 0.00 значение но все же. Можно поставить преобразование и количество знаков после запятой ставить исходя из требований. T#1000ms это я так понимаю период измерения температуры? Так и не понял с dt это (arr_tt[j].mt - arr_tt[j0].mt), а ..dT. что подставить?
    Второй вариант сделал по варианту kondor3000 в этом варианте счет не работает. Показывает с - и значения идут по нарастающей.
    Вложения Вложения

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

    По умолчанию

    Возможно из за этого когда значение температуры не изменяется,
    На планете эльфов существуют неименяемые результаты измерений, а их графики преставляют собой непрерывные графики.
    На Земле измерения, например, температур в 99.9% случаях будут шевелится, если канешна измерение не производится 1-битным АЦП в виде термостата или производится странно ухудшение точности типа
    количество знаков после запятой ставить исходя из требований.
    а графики представляют собой набор точек которые образуются в момент оцифровки.
    (соединение их в якобы реальный график также реально как достраивание картинки мозгом в районе слепого пятна в глазу)
    ЛЮБЫЕ действия с данными измерения (вычисления скорости, пид-регулировани и т. п.) есть смысл производить ТОЛЬКО в момент оцифровки. В иное время - этот подвид онанизма.
    Т. к. получить момент оцифровки непосредствено (особенно при работе с модулями расш.) обычно не представляется возможным, то наиболее простое решение - сравнить на изменение. При работе с модулями это будет момент ПОЛУЧЕНИЯ данных ПОСЛЕ реальной оцифровки. Нормальное добавочное решение для снятия проблем с оставшимися от вышеуказанного 0.1% добавить условие "но не реже 2..3х циклов реальной оцифровки", а в случаях принудительного торможения (как у Вас изначально) - "но не чаще чем...".
    Вычисления подобные Вашим на планете Земля начинают с изучения характеристик планируемого измерителя. Он может удивить в некоторых случаях (плк 63,73, 2А, 8А -" не чаще.." может не потребоватся, а "не реже.." может быть аж до 10сек как ни чесались бы ладошки), поэтому
    T#1000ms это я так понимаю период измерения температуры?
    вообще никто кроме Вас не понимает.
    "не чаще .." нужно только с измерителями данные с которых получаются реально чаще требуемой задачи (из местного - плк160, 2AC, 8AC)

    Странный вопрос про dT, он у Вас же вычисляется в исходном проекте, правда со знаком
    Последний раз редактировалось Валенок; 26.05.2022 в 09:01.

  8. #28

    По умолчанию

    Цитата Сообщение от Александр SPB Посмотреть сообщение
    Более менее получилось. Первый вариант сделан по рекомендации Валенок . Не совсем понял как работает Timer.dw_time_ms, в переменной dw_time_ms присваивал значение T#1000ms что так измерение идет, что без присвоения измерение одинаково идет. Возможно из за этого когда значение температуры не изменяется, скорость изменения все равно показывает. Пусть это и 0.00 значение но все же. Можно поставить преобразование и количество знаков после запятой ставить исходя из требований. T#1000ms это я так понимаю период измерения температуры? Так и не понял с dt это (arr_tt[j].mt - arr_tt[j0].mt), а ..dT. что подставить?
    Второй вариант сделал по варианту kondor3000 в этом варианте счет не работает. Показывает с - и значения идут по нарастающей.
    Выложил кусок кода, без начальной инициализации, только для примера.
    У вас в обоих вариантах сравнение температуры начинает работать только после прохождения 20 записей (Температура должна меняться).
    Нет начальной инициализации первой температуры arr_tt[j2].temp, в моём варианте.
    В первом варианте показания всегда стремятся к нулю. За какое время измерения не понятно, 1 вариант полная лажа ( при изменениина 0,4 градуса, скачет до 20, а потом снижается до нуля).
    В моём варианте показания стоят пока идут 20 записей, измерение происходит каждую секунду, разницу показывает за время 1 сек. ( у меня с инициализацией сделано, в коде этого нет)
    Последний раз редактировалось kondor3000; 26.05.2022 в 18:03.

  9. #29

    По умолчанию

    Инициализация в вашем варианте запускается по отдельному таймеру или как?

  10. #30

    По умолчанию

    Цитата Сообщение от Александр SPB Посмотреть сообщение
    Инициализация в вашем варианте запускается по отдельному таймеру или как?
    Инициализация у меня присваивает значения температуры и времени в момент запуска программы.
    Как сделать инициализацию, вам уже выкладывали.

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. Тиристорный модуль для регулировки скорости нагрева
    от Gennadiy550 в разделе Подбор Оборудования
    Ответов: 15
    Последнее сообщение: 06.12.2016, 10:18
  2. Регулирование нагрева ёмкости с рубашкой
    от Crew в разделе Помощь Разработчикам
    Ответов: 11
    Последнее сообщение: 23.11.2016, 04:32
  3. Регулирование скорости нагрева
    от Ильнур в разделе Эксплуатация
    Ответов: 8
    Последнее сообщение: 18.03.2013, 11:47
  4. Регулирование температуры нагрева тэн
    от Сомов Сергей в разделе Подбор Оборудования
    Ответов: 6
    Последнее сообщение: 19.12.2012, 09:54
  5. измерение скорости
    от незарегистрированный в разделе Подбор Оборудования
    Ответов: 9
    Последнее сообщение: 21.11.2007, 08:20

Ваши права

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