Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха.

 
Опции темы

Мои ответы на вопросы AR_Favorit

Непрочитано 20.11.2017, 23:51  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Откуда ты берешь 100 секунд-то? Пальцем покажи.
Показываю пальцем:
Сообщение от AR_Favorit Посмотреть сообщение
А еще эта строка в цикле прерывания с периодом в 1 мс будет отсчитывать "1 раз 100 секунд" только если оператор выставит уставку периода регулирования EE_PID_TIME в значение "100". Но на случай такого глупого оператора программа не даст ему это сделать, ибо период регулирования, исходя из характеристик оборудования (конкретно - определяемой объемом бака и мощностью нагреватля скорости нагрева) можно задать от 1 до 10 сек. Соответственно и значение дданной переменной EE_PID_TIME лежит в этом диапазоне.
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Уже третий день мается, болезный.
omercury вне форума  
Непрочитано 21.11.2017, 01:29  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 324
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Откуда ты берешь 100 секунд-то? Пальцем покажи.
Я эти 100 секунд взял предположив, что будем производить расчет пида 10 раз в секунду! То есть принял что EE_PID_TIME = 100 мc (см первое сообщение темы, в котором написано
Сообщение от ALEGYR Посмотреть сообщение
EE_PID_TIME = 100 мc
Если я возьму твои значения EE_PID_TIME, которая раньше была CONST_PID_TIME и равнялась 1 секунде (см цитату из ТВОЕГО сообщения

Сообщение от AR_Favorit Посмотреть сообщение
Исторически так сложилось. Изначально планировалось жестко задать период регулирования, и на месте EE_PID_TIME был токен CONST_PID_TIME, определенный как
Цитата:
Код:
#define CONST_PID_TIME 1 //период регулирования в секундах
для того, чтобы подобрать его при отладке под параметры установки заказчика.
и твое заявление
Сообщение от AR_Favorit Посмотреть сообщение
В этой строке нет измерения температуры. Как и в последующих.
А еще эта строка в цикле прерывания с периодом в 1 мс
то твоя первая строка кода

if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;

вообще будет ждать расчета пида не 100 секунд, а целых 1000!

Ведь прерывание ты делаешь с периодом 1 мс (то есть 1000 раз в секунду), твой счетчик ожидания расчета пид pid_counter должен достичь значения 1000000
то есть переменную EE_PID_TIME равную 1 секунде (указанную в #define EE_PID_TIME 1 //период регулирования в секундах) в перевести в 1000 миллисекунд и умножить на 1000!!!

Последний раз редактировалось ALEGYR; 21.11.2017 в 01:33.
ALEGYR вне форума  
Непрочитано 21.11.2017, 01:48  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Я эти 100 секунд взял предположив, что будем производить расчет пида 10 раз в секунду! То есть принял что EE_PID_TIME = 100 мc (см первое сообщение темы, в котором написано
То есть ты, не поняв двух операндов в одной строчке кода, один из которых (EE_PID_TIME) задает период регулирования в секундах, а второй (1000) переводит это значение в миллисекунды для сравнения со счетчиком pid_counter, ведущим отсчет в миллисекундах, и проигнорировав неоднократно данное пояснение, что переменная (уставка) EE_PID_TIME может принимать только значения от 1 до 10, начал городить заведомую ерунду:

Сообщение от ALEGYR Посмотреть сообщение
твоя первая строка кода
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
вообще будет ждать расчета пида не 100 секунд, а целых 1000!
Уже и 1000 секунд, Карл!

Мы берем 1 (единицу! точно такую же единицу, которой была CONST_PID_TIME!), умножаем ее на 1000 (тысячу), и получаем число, до которого счетчик, тикающий каждую миллисекунду

Сообщение от ALEGYR Посмотреть сообщение
Ведь прерывание ты делаешь с периодом 1 мс (то есть 1000 раз в секунду)
должен натикать...... за 1000 секунд! Миллион!

Ты как в магазине с такой арифметикой рассчитываешься, а? Единицу умножили на тысячу и получили миллион!

Еще раз, медленно и печально.

Переменная EE_PID_TIME - период регулировки в секундах.
Переменная EE_PID_TIME, умноженная на 1000 - период регулировки в миллисекундах.

Счетчик, инкрементируемый в прерывании, вызывающемся каждую миллисекунду, отсчитает от 0 до 1*1000 за одну секунду.

Не понимаешь - спроси, десять раз уже говорил. Не городи ерунды.
AR_Favorit вне форума  
Непрочитано 21.11.2017, 01:48  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 324
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от omercury Посмотреть сообщение
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Ну какая же это неточность в объяснениях, если в ТЗ указано

Сообщение от AR_Favorit Посмотреть сообщение
период регулирования, исходя из характеристик оборудования ... можно задать от 1 до 10 сек. Соответственно и значение дданной переменной EE_PID_TIME лежит в этом диапазоне.
и в программе объявлено и даже выделено
Сообщение от AR_Favorit Посмотреть сообщение
#define CONST_PID_TIME 1 //период регулирования в секундах
ALEGYR вне форума  
Непрочитано 21.11.2017, 01:53  
Марья-2
Почётный гражданин KAZUS.RUN
 
Аватар для Марья-2
 
Регистрация: 26.06.2010
Адрес: Минск
Сообщений: 1,506
Сказал спасибо: 914
Сказали Спасибо 1,272 раз(а) в 486 сообщении(ях)
Марья-2 на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

AR_Favorit, как у Вас только хватает терпения

Последний раз редактировалось Марья-2; 21.11.2017 в 02:00.
Марья-2 вне форума  
Непрочитано 21.11.2017, 01:54  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от omercury Посмотреть сообщение
Метода такая - найти неточность в объяснениях и выдавать её за ошибку в программе.
Была б там неточность, я б еще понял. Но сначала он долго выясняет, зачем-зачем-зачем EE_PID_TIME в программе умножается на тысячу, а затем, когда вроде как всё разжевано, берет значение EE_PID_TIME, умножает его на тысячу в уме (), затем еще раз на тысячу в программе, и получает миллион, до которого мой бедный счетчик должен досчитать. Прям слава богу, что я его 32-битным объявил, а то был бы 16-битный - никогда бы не досчитал, ни за тыщу смекунд, ни за миллион лет)))

Я не знаю, может я очень плохо объясняю? Прям как в том анекдоте - "сам уже понял, а они нет". Скажите кто-нить со стороны, неужели настолько плохо? Я же неоднократно умудрялся людям, не позиционирующим себя программистами, но желающими стать таковыми (в определенных пределах, хотя бы той же ардуины) , объяснять такие элементарные вещи, и они вроде бы как понимали. )))
AR_Favorit вне форума  
Непрочитано 21.11.2017, 01:57  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Ну какая же это неточность в объяснениях, если в ТЗ указано

и в программе объявлено и даже выделено
ДА!!! В секундах! Отлично! Одна секунда, две секунды, три секунды.... до десяти.
А счетчик у нас тикает каждую миллисекунду - в одну секунду набегает ровно тысяча тиков.

И мы берем секунды - одну, или две, или пять, -умножаем их на эту тыщу, и получаем то самое количество тиков, которое должен протикать таймер для отсчета заданного времени: тыщу, или две тыжи, или пять тыщ. Откуда у тебя взялся миллион, до которого ему надо дотикать? Ну откуда?! Покажи "я вот это умножил на вот то".
AR_Favorit вне форума  
Непрочитано 21.11.2017, 02:12  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от Марья-2 Посмотреть сообщение
AR_Favorit, как у Вас только хватает терпения
Плоховато хватает

Но мне жутко интересно, это настолько невскрываемый троллинг, или человек пишет всерьез?!

Ожидали
Сообщение от ALEGYR Посмотреть сообщение
полноты освещения вопросов, связанных c созданием кода реализации ПИД-регулятора, и работы самого ПИД-регулятора
А в реальности освещающий застрял на первой же строчке кода, до собственно ПИД-регулятора и не дойдя. Что же будет, когда мы начнем обсуждать критерии устойчивости системы? (шутка, не начнем)
AR_Favorit вне форума  
Непрочитано 21.11.2017, 02:22  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 324
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от AR_Favorit Посмотреть сообщение
Мы берем 1 (единицу! точно такую же единицу, которой была CONST_PID_TIME!), умножаем ее на 1000 (тысячу), и получаем число, до которого счетчик, тикающий каждую миллисекунду
Так понимаешь в чем дело, если тебе в ТЗ указано, что регулирование производится в диапазоне от 1 до 10 секунд, то и надо исходить из этого. Перевел ОДИН раз данные вводимые оператором из секунд в миллисекунды, запомнил их в ЕЕПРОМе, и ЗАБЫЛ о всех умножениях в своем коде!!! записав

if (pid_counter ‹ EE_PID_TIME) pid_counter++;
или
if (heat_counter › EE_PID_TIME) heat_counter=0;

А если еще и таймер прерывания можно задать этим значением, то и саму первую строку вообще можно убрать, вместе со счетчиком pid_counter и строкой pid_counter = 0;
написав
Цитата:

PID_curr_err = EE_FUEL_TARGET_TEMP - temp;//Начало
if (integral_err‹(EE_PID_TIME*2000)) integral_err += PID_curr_err;
control = (int32_t)EE_PID_P*PID_curr_err;
control += (integral_err*(int32_t)EE_PID_I)/1000;
control -= (PID_prev_err - PID_curr_err)*(int32_t)EE_PID_D;
PID_prev_err = PID_curr_err;//конец

if (control›heat_counter) HEAT_ON; else HEAT_OFF;
heat_counter++;
if (heat_counter›(EE_PID_TIME) heat_counter=0;
ALEGYR вне форума  
Непрочитано 21.11.2017, 02:43  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Мои ответы на вопросы [b]AR_Favorit[/b]

Сообщение от ALEGYR Посмотреть сообщение
Так понимаешь в чем дело, если тебе в ТЗ указано, что регулирование производится в диапазоне от 1 до 10 секунд, то и надо исходить из этого.
Регулирование и производится в диапазоне от 1 до 10 секунд, какие претензии?

Сообщение от ALEGYR Посмотреть сообщение
Перевел ОДИН раз данные вводимые оператором из секунд в миллисекунды, запомнил их в ЕЕПРОМе, и ЗАБЫЛ о всех умножениях в своем коде!!!
Можно сделать и так, а можно сделать, как я. А при определенной организации программы в результате компиляции вообще не будет этих умножений, несмотря на то, что в исходном тексте они есть. И в любом случае результат исполнения данного кода корректный, и ни о каких "думающих 100 секунд бачках" речи не идет. Это ты понимаешь или нет? Это вопрос, прочти название темы и ответь.

Сообщение от ALEGYR Посмотреть сообщение
А если еще и таймер прерывания можно задать этим значением
А если бы у бабушки были яйца, она пожарила бы яичницу.

Вот эта часть

Код:
if (control›heat_counter) HEAT_ON; else HEAT_OFF;
heat_counter++;
if (heat_counter›(EE_PID_TIME) heat_counter=0;
В твоей пародии на мой код нормально работать уже не будет. ШИМ-сигнал с периодом 1-10с превратился в пшик. Вот так вот.

Последний раз редактировалось AR_Favorit; 21.11.2017 в 02:50.
AR_Favorit вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wiznet W7100. Общие вопросы R_N Микроконтроллеры, АЦП, память и т.д 7 06.06.2012 00:33
PCAD - вопросы и ответы avr123-nm-ru Proteus, KiCAD и другие ECAD 7 27.01.2011 21:15
Система измерения температуры (на AD8495), вопросы по схеме и реализации spartakchamp Измерительное оборудование 2 15.11.2010 22:04


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.