Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 18.11.2017, 02:37  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию

Сообщение от omercury Посмотреть сообщение
Ну тут по классике жанра следует уточнить у нашего разработчика: от чего питается нагреватель и чем он управляется?

omercury, ну зачем ты так?! Больно же!!!
Наш "разработчик" так пыжился, 1000 раз в секунду, реализовать PID регулирование своей печки, что забыл о том, что это можно делать 1 раз в секунду, а если подумать, то и 1 раз в ТРИ секунды!!!
Наш же "разработчик" не знает, что его 0,5-4 кВт-й ТЭН обладает весьма большими инерционными свойствами, и не может изменять свое состояние быстрее 1-2 градусов в секунду!

Сообщение от AR_Favorit Посмотреть сообщение
Шесть строк, Карл! Никаких флоатов. Никаких даблов. Все переменные int_32 (кроме тех, что с префиксом "EE_", эти шестнадцатибитные, и мы приводим их к нужному размеру).
Ну как-же никаких, если у тебя и
1 - EE_FUEL_TARGET_TEMP - флоат, по твоему утверждению, и
2 - PID_curr_err - флоат, как разность ДВУХ флоатов "EE_FUEL_TARGET_TEMP" и "temp", и
3 - inegral_err - флоат, как сумма флоата "PID_curr_err", и
4 - control - флоат, как произведение инта "EE_PID_P" и флоата "PID_curr_err", и
5 - PID_prev_err - флоат, так как присваивается флоатом "PID_curr_err"!!!

Получается, что у тебя почти ВСЕ флоаты, кроме счетчика "pid_counter" и переменной "EE_PID_D"!!!

Вот и получается, что ты плохо понимаешь то что делаешь, и простое релейное регулирование "ВКЛ-ВЫКЛ", путаешь с PID регулированием!!!

Это я к тому, что если ты уж и оперируешь интами, то должен знать что работаешь с точностью +- 1 градус!!! А для такой точности, не очень умно пыжится прерываниями контроллера и напрягаться вычислениями PID составляющих! Вполне достаточно считывать температуру нагрева и включать нагреватель, когда измеряемая температура ниже необходимой на 1 градус, или выключать нагреватель, когда измеряемая температура выше необходимой на 1 градус! Что ты фактически и делаешь в своей предпоследней строке

if (control›heat_counter) HEAT_ON; else HEAT_OFF;

Так что обсыхай, Игорек!

P.S.
С таким подходом, то есть когда ты делаешь обыкновенный релейный регулятор, а продаешь его как PID с микропрцессорным управлением, получается, что ты не скромный предприниматель, который честно делает что может, а голубой воришка Альхен, который только делает вид, что честно и тихо делает свою работу, а на самом деле он просто тупо и тихо приворовывает!
Видео:


Сообщение от Galbert Посмотреть сообщение
Удивительные люди. Да обменяйтесь хоть почтой, хоть Вайбером, хоть скайпом - и диарейте личное аж до несхочу!
А ты не пробовал начать с себя?
Неужели ты думаешь, что твой бухной морализм тоже познавателен?

Последний раз редактировалось mike-y-k; 13.06.2022 в 23:06. Причина: 6.6
ALEGYR вне форума  
Непрочитано 18.11.2017, 04:02  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

Сообщение от ALEGYR Посмотреть сообщение
А я и не скрываю, что использую платки ардуино, купленные у китайцев. Мне они полностью подходят и по своей схемотехнике, и по своим функциональным возможностям, и ценой (см https://ru.aliexpress.com/item/Mega-...OrigTitle=true )
Ну а что касается использования открытых кодов программ, то я стараюсь не изобретать "велосипеда", там где он уже изобретен (типа русской раскладки шрифтов для дисплейчика), а где не изобретен (типа автоматической паяльной станции) я его изобретаю!
Именно поэтому в моем коде всего 6 чужих библиотек для ардуины, и несколько десятков МОИХ подпрограмм, которые и реализуют мои проект так, как я хочу!
Ну что подведем промежуточный итог.
Как я понял у вас не было никакого выбора,вы тупо купили станочек и что то пошло не так начали разбираться в скетче.Попутно долбя форум ардуины. По факту вы не знаете ни меги,ни пиков ни тем боллее стм.
Вам лень изучать дашифты и писать свой код,так как у вас мозг уже не работает и есть подозрении что в нии вы были принеси подай пошел нафиг не мешай.
Я не очень люблю ардуино,хотя и применяю их модули готовые со своим кодом.Вы наверно удивитесь,но есть ардуино уже и на стм32,но применить вам не получится,так как станочек готовый тока на ардуине меге.
А если и брать готовый модуль то распери пай где можно писать уже на питоне.

Отступление по ардуине:
Есть друг который работает в интернете подключением клиентов,ну в электрике и электронике мало что соображает. И вот ему подсказали что ардуино это круто,не нужно ничего писать готовый скетч кидай и все работает,не нужно ни архитектуры микроконтроллера знать,ни языка си. Теперь накупил модулей и пытается сворганить,но столько вопросов посыпалось при запуски этой ардуины,когда что не так идет.
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 18.11.2017, 05:59  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

Сообщение от ALEGYR Посмотреть сообщение
Наш "разработчик" так пыжился, 1000 раз в секунду, реализовать PID регулирование своей печки, что забыл о том, что это можно делать 1 раз в секунду, а если подумать, то и 1 раз в ТРИ секунды!!!
Наш же "разработчик" не знает, что его 0,5-4 кВт-й ТЭН обладает весьма большими инерционными свойствами, и не может изменять свое состояние быстрее 1-2 градусов в секунду!
Браво! Ты еще раз подтвердил, что ты не годен ни на что, коли не увидел, что PID-регулирование в коде реализовано не "1000 раз в секунду", а срабатывает только каждое EE_PID_TIME*1000-е прерывание систика

Вот так выглядит тупость величиной в 1 Al

Сообщение от ALEGYR Посмотреть сообщение
Ну как-же никаких, если у тебя и
1 - EE_FUEL_TARGET_TEMP - флоат, по твоему утверждению, и
2 - PID_curr_err - флоат, как разность ДВУХ флоатов "EE_FUEL_TARGET_TEMP" и "temp", и
3 - inegral_err - флоат, как сумма флоата "PID_curr_err", и
4 - control - флоат, как произведение инта "EE_PID_P" и флоата "PID_curr_err", и
5 - PID_prev_err - флоат, так как присваивается флоатом "PID_curr_err"!!!
Снова полновесный 1 Al. Не верю своим глазам! Два раза подряд!
Сашке-Машке русским по белому написано, что все переменные - инт32 кроме шестнадцатибитных интов с префиксом "EE_", но он настолько плох, что не смог прочитать даже этого, из какого-то мрачного уголка своего нездорового воображения извлек 16-битные флоаты (о майн гад), к тому же соврав, что это я утверждаю. То есть то, что он не может понять, что 16-битная переменная - это тоже инт, он не в состоянии, неудивительно на его уровне, но вот умудриться спутать "16-битную переменную" даже с неуказанным типом с "переменной с плавающей точкой ординарной точности" - это, блин, даже для ардуинщика перебор

После чего этот гений умудрился совершить хед-трик, заявив, что приведенный кусочек кода - это

Сообщение от ALEGYR Посмотреть сообщение
простое релейное регулирование "ВКЛ-ВЫКЛ"
не разглядев, что функция выдает управляющий сигнал в виде времени включения нагревателя в единицах мс за период регулирования, явно задаваемый в тысячах мс.

То есть получается, что наш матёрый разработчик неспособен понять буквально десяток строк кода! Не увидеть ни с какой частотой выполняется функция PID-регулирования, ни понять, как реализовано собственно управление нагревателем, и еще столько высрать бреда - это что-то невероятное.

Но ведь он и на этом не остановился.

Сообщение от ALEGYR Посмотреть сообщение
Это я к тому, что если ты уж и оперируешь интами, то должен знать что работаешь с точностью +- 1 градус!!!
Нет, ну вы поняли глубину мысли? В интах можно выразить только целые единицы чего-то! Применили инт для температуры - значит она в целых градусах, для расстояния - значит оно в целых метрах, для измерения тупости - значит она в целых алегирах и т.д.

То есть, получается, нельзя просто так взять и принять за внутреннюю единицу измерения в программе температуру в десятых, сотых или тысячных долях градуса и использовать для операций с ней целые числа. Нет, хоть в миллионных долях считаем, пофиг, все равно - точность один градус, ведь мы считаем в интах!

Теперь понятно, почему у него код для ардуины столь обильно флоатами удобрен - он думает, что иначе все перемещения были бы с точностью 1 метр!

Следующий перл:

Сообщение от ALEGYR Посмотреть сообщение
...с точностью +- 1 градус!!! А для такой точности, не очень умно пыжится прерываниями контроллера и напрягаться вычислениями PID составляющих! Вполне достаточно считывать температуру нагрева и включать нагреватель, когда измеряемая температура ниже необходимой на 1 градус, или выключать нагреватель, когда измеряемая температура выше необходимой на 1 градус!
Гениально! Все поняли теперь, для чего придуманы пид-регуляторы? Для точности! А с небольшой точностью (+- один градус) нагреть, наприер, несколько литров масла полукиллограмовым тэном, очень просто: надо выключить тэн, как только температура масла в контрольной точке достигла нужной температуры. И все, нагрев тут же прекратится, как иначе, мы же выключили ТЭН, температура не вырастет ни на градус!

Сообщение от ALEGYR Посмотреть сообщение
Так что обсыхай, Игорек!
Пойди умойся, Машка, у тя чо-то характерное на лице)))

Сообщение от ALEGYR Посмотреть сообщение
С таким подходом, то есть когда ты делаешь обыкновенный релейный регулятор, а продаешь его как PID с микропрцессорным управлением, получается, что ты не скромный предприниматель, который честно делает что может, а голубой воришка Альхен, который только делает вид, что честно и тихо делает свою работу, а на самом деле он просто тупо и тихо приворовывает!
Наш барыга заорал про горящую шапку))) Сам ты голубой, кстате)))
И с каких херов я "предприниматель"? Тебе тупому сколько раз повторять, что я не предприниматель, это ты у нас мнишь себя гением бизьнеса)))

PS Да, то, что ты глуп, понятно. Но таких _сказочных_ дебилов не бывает. Ты немного перегнул с тупостью в этом посту, и она уже не выглядит натурально. Теперь она, увы, выглядит слишком толстым троллингом, направленным на то, чтобы я просто плюнул на тебя и перестал отвечать. Но нет, Машенька, я не остановлюсь. Потому что ты, чмо драное, слишком широко стал разевать моську на людей, которым ты и в подметки не годишься ни по уровню интеллекта, ни по профессионализму, ни даже по чувству юмора. И как ты не пытайся скрыть за вот этой гиперболизацией собственной тупости в твоем крайнем посте, я прекрасно знаю, что ты и _на самом деле_ очень, очень тупой, жадный, и неспособный ни к чему старикашка, ради внимания к своей персоне (которого тебе стало не хватать со времен, когда ты мог научить кого-то чему-то в на форуме ремонтников - то время ушло с видеокассетами, а ничему новее ты научиться не смог) в инете клоунничающий на этом сайте

Короче, Сашуль-Машуль, работающая установка твоя где? Ась? Машууууля!

Последний раз редактировалось AR_Favorit; 18.11.2017 в 06:06.
AR_Favorit вне форума  
Непрочитано 18.11.2017, 10:30  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

Друг мой, Игорек!
Не стану комментировать всю твою портянку тупизны, а рассмотрю только 10 строчек твоего кода, в которых наиболее ярко проявляется все твое постозвонство и глубокий дилетантизм, граничащий с клиническим кретинизмом!
Итак берем первую строку
Цитата:
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
Она говорит, что
если некоторая целочисленная переменная pid_counter МЕНЬШЕ тысячи некоторой целочисленной переменной EE_PID_TIME, то увеличиваем переменную pid_counter на единицу, и не обращаем никакого внимания на PID.
Мы просто тупо релюхой включаем или выкличаем нагреватель, если некоторая переменная control больше или меньше некоторого счетчика heat_counter, который тут же увеличиваем на единицу (оператор heat_counter++), и если этот счетчик выходит за пределы некоторой переменной EE_PID_TIME*1000, то сбрасываем счетчик heat_counter в ноль!
То есть, релюха с контактами HEAT_ON и HEAT_OFF трещит НЕЗАВИСИМО от "умного" PIDа! И нам не очень нужна переменная control!!! Просто если она будет равна 1, то релюха будет трещать с одной частотой, а если она будет равна 2, 3,4,5 и тд, то с другой частотой!!! Счетчик то heat_counter у нас крутится все время, и его совсем не волнует температура нагреваемого ТЭНа!!!

Но мы крутые амбедеры, и обещали заказчику сделать PID регулятор!
Поэтому мы включаем умного, и начинаем лепить расчет управляющего сигнала PID. То есть мы переходим к рассмотрению состояния

если же некоторая целочисленная переменная pid_counter БОЛЬШЕ тысячи некоторой целочисленной переменной EE_PID_TIME, то включаем умного и начинаем городить огород по расчету управляющего сигнала PID.
В этой ветке мы сразу сбрасываем счетчик pid_counter
потом из флоатной переменной EE_FUEL_TARGET_TEMP вычитаем флоатную переменную temp и получаем флоатную переменную ошибки рассогласования PID_curr_err
То есть например из дробного числа 10.5 вычитаем дробное число 9.9 и получаем дробное число 0.6
После этого мы сравниваем интегральную составляющую PIDа integral_err с ДВУМЯ тысячами значений переменной EE_PID_TIME То есть мы ТЕМПЕРАТУРУ сравниваем со ВРЕМЕНЕМ!!!, и если ТЕМПЕРАТУРА больше ВРЕМЕНИ, то к текущему значению integral_err прибавляем температуру ошибки рассогласования PID_curr_err. Ну а поскольку переменная PID_curr_err у нас флоатная (0.6), то и переменная integral_err тоже будет флоатной, даже если она и была раньше целым числом ( 5 + 0.6 = 5.6)
После этих подготовительных вычислений, мы начинаем вычислять переменную control по формуле control = (int32_t)EE_PID_P*PID_curr_err;
То есть некоторое целочисленное число 123 умножаем на дробное число 5.6 и получаем дробное число 688,8 То есть и переменная control у на тоже флоатное!!!
Далее к флоатной переменной control мы прибавляем какую-то маленькую флоатную хрень (integral_err*(int32_t)EE_PID_I)/1000; и вычитаем большую флоатную хрень!!! После чего запоминаем текущее значение флоатной ошибки рассогласования PID_curr_err для следующего вычисления флоатной переменной control

Ну и что мы тут навычисляли? А тут мы навычисляли управляющий сигнал control для PID регулятора, который говорит регулятору на сколько градусов система нагревания отстает от заданного значения температуры нагрева ТЭНа! То есть, переменная control имеет размерность ГРАДУСЫ(!)

Ну и что мы тут натворили этим кодом? А натворили мы тут ХРЕНЬ!!!
Ведь сигнал управления control PID регулятора измеряется у нас в ГРАДУСАХ, а мы его сравниваем со временем heat_counter, которое измеряется в микросекундах, да еще может ИЗМЕНЯТЬСЯ во времени!!! Ведь счетчик heat_counter суммируется не равными отрезками времени, так как если pid_counter меньше значения EE_PID_TIME*1000, то счетчик heat_counter суммируется БЕЗ учета времени на вычисление сигнала управления control а если больше, то ВМЕСТЕ со временем затрачиваемым на вычисление сигнала управления control!!!

Вот такие вот дела, Игорек!
Нехорошо мокрое сравнивать с гладким, и говорить что что-то при этом нагревается! Да еще с использованием 32-х разрядных интов и крутейшего, с запасом, контроллера!!!
Ты тупо трещишь релюшкой, И по счетчику heat_counter И по сигналу control, а говоришь что PIDом регулируешь!

Кстати, PID регулирование и придумано было для того, чтобы иметь возможность непрерывного регулирования и добиваться НУЛЕВОГО рассогласования, а не для того чтобы трещать релюхой, и радоваться что регулируешь с точностью +-1, и НИКОГДА не добиваешься заданного значения!!!

Последний раз редактировалось ALEGYR; 18.11.2017 в 17:10.
ALEGYR вне форума  
Непрочитано 18.11.2017, 10:55  
rafik65
Почётный гражданин KAZUS.RU
 
Аватар для rafik65
 
Регистрация: 19.02.2011
Адрес: Жуковский, МО
Сообщений: 3,265
Сказал спасибо: 3,605
Сказали Спасибо 7,518 раз(а) в 1,582 сообщении(ях)
rafik65 на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

".. мать четырех программистов, ищет непсихованного преподавателя, что бы научить меня интернету .. "
__________________
ничего нет сложнее простого решения
без ТЗ результат ХЗ.
rafik65 вне форума  
Эти 9 пользователя(ей) сказали Спасибо rafik65 за это сообщение:
agache (18.11.2017), AR_Favorit (18.11.2017), Galbert (18.11.2017), leoblp (19.11.2017), Saadov (18.11.2017), stalkernet (19.11.2017), Sukhanov (19.11.2017), yurii61 (18.11.2017), Борода88 (18.11.2017)
Непрочитано 18.11.2017, 18:29  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию

Сообщение от ALEGYR Посмотреть сообщение
Друг мой, Игорек!
Не друг я тебе, Машенька)

Сообщение от ALEGYR Посмотреть сообщение
рассмотрю только 10 строчек твоего кода,
Отлично! Это еще раз покажет, насколько ты вообще можешь понять, что делает тот или иной участок программного кода. Поехали!

Сообщение от ALEGYR Посмотреть сообщение
Итак берем первую первая строка
Код:
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
Она говорит, что
если некоторая целочисленная переменная pid_counter МЕНЬШЕ тысячи некоторой целочисленной переменной EE_PID_TIME, то увеличиваем переменную pid_counter на единицу, и не обращаем никакого внимания на PID.
Неплохо, очень неплохо! То есть, твои предыдущие вопли о "1000 раз в секунду, реализовать PID регулирование" отменяются, поднапрягшись, ты всего за ночь смог увидеть, что те самые шесть строк, которые ты не можешь сам написать, и гуглишь в инетах, выполняются на деле не 1000 раз в секунду, а 1 раз в количество секунд, заданное "некоторой целочисленной переменной EE_PID_TIME". Это количество секунд называется периодом регулирования.


Сообщение от ALEGYR Посмотреть сообщение
Мы просто тупо релюхой включаем или выкличаем нагреватель, если некоторая переменная control больше или меньше некоторого счетчика heat_counter, который тут же увеличиваем на единицу (оператор heat_counter++), и если этот счетчик выходит за пределы некоторой переменной EE_PID_TIME*1000, то сбрасываем счетчик heat_counter в ноль!
И тут абсолютно верно. В исполнительном цикле, длительность которого совпадает с периодом регулирования, и отсчитываемом счетчиком миллисекунд heat_counter, часть цикла - когда выходное значение PID (которое ты назвал "некоторая переменная") сontrol больше или heat_counter, нагреватель включен, а другую часть - когда сontrol меньше heat_counter, нагреватель выключен.
То бишь переменная сontrol у нас регулирует заполнение ШИМ-сигнала, идущего на исполнительное реле, и имеющего постоянный период, задаваемый переменной EE_PID_TIME в секундах, совпадающий с периодом регулирования.

Всё пока хорошо, но, по ходу, твои способности на этом иссякли, поскольку дальше началась хрень. Началась вот с этого:

Сообщение от ALEGYR Посмотреть сообщение
То есть, релюха с контактами HEAT_ON и HEAT_OFF трещит НЕЗАВИСИМО от "умного" PIDа! И нам не очень нужна переменная control!!! Просто если она будет равна 1, то релюха будет трещать с одной частотой, а если она будет равна 2, 3,4,5 и тд, то с другой частотой!!! Счетчик то heat_counter у нас крутится все время, и его совсем не волнует температура нагреваемого ТЭНа!!!
Ну вот с какого рожна "релюха" будет "трещать" с разной частотой?! Релюха будет трещать всегда с одной и той же частотой. Независимо от того, равен control 1, 10, 100, 1000...
Ведь период выходного ШИМ-сигнала никак от control не зависит, и хоть control будет равен 5, хоть 500, все равно: если EE_PID_TIME равен 1, релюха будет в течение 1 секунды один раз включаться, и один раз выключаться. Если EE_PID_TIME равен 3, релюха будет в течение 3 секунд один раз включаться, и один раз выключаться. Период всегда один и тот же, заданный в уставках, а частота - это 1/период, и она тоже всегда одна и та же. От control зависит только какую часть периода нагреватель включен, а какую выключен.

Дальше твой бред идет по нарастающей:

Сообщение от ALEGYR Посмотреть сообщение
потом из флоатной переменной EE_FUEL_TARGET_TEMP вычитаем флоатную переменную temp и получаем флоатную переменную ошибки рассогласования PID_curr_err
То есть например из дробного числа 10.5 вычитаем дробное число 9.9 и получаем дробное число 0.6
Тебе, тупому, сколько раз повторять, что там нет никаких флоатных переменных? Лятел ты упоротый, это мой код, и я НЕ ставил в нем флоатов. Потому, что они тут нахрен не нужны. Ты никак не можешь понять, что это в только твоей головешке в программе зачем-то надо определять температуру обязательно "в градусах с целыми и десятыми". А на самом деле можно поступить горааааздо элегантней - взять да и установить внутри программы (программа наша, что хотим, то и делаем!), например, основную единицу измерения температуры - миллиградус. И все расчеты вести в ней. Для пользователя при отображении температуры добавим точечку перед последними тремя цифрами, и, например, когда наша программа насчитает температуру твоего перегревшегося мозга 38123 миллиградуса, пользователь увидит вполне понятное ему число 38.123 (градуса). Сечешь, Машунь? Программа считает с точностью до одной тысячной градуса - а никаких флоатов для этого не понадобилось, обошлись интами.

Мне одной тысячной в программе не нужно, и я запросто обхожусь волюнтаристски введенной величиной "дециградус", то есть программа считает в десятых долях градуса.

Я понимаю, почему ты никак не можешь понять этот момент: потому, что ты не пишешь своего кода, пока без этого совсем не становится невозможно обойтись, а дергаешь из инета чужой. Ту же библиотеку термодатчика. Она, по скудоумию ее автора, считывая значение с не очень-то и точного датчика, выдает результат во флоатах, вместо того, чтоб выдавать в интах, умножая на некоторую степень десятки.

У меня же измерение температуры написано мной, и сразу выдает в нужной мне форме - "дециградусах", Int-ом. И когда пользователь задает уставку, на экранчике он видит 60 гр.С, а программа сохраняет в еепроме значение "600", 600 дециградусов. А если он выберет 61, то программа сохранит "610". Ферштейн, Мань?

Сообщение от ALEGYR Посмотреть сообщение
После этого мы сравниваем интегральную составляющую PIDа integral_err с ДВУМЯ тысячами значений переменной EE_PID_TIME То есть мы ТЕМПЕРАТУРУ сравниваем со ВРЕМЕНЕМ!!!, и если ТЕМПЕРАТУРА больше ВРЕМЕНИ, то к текущему значению integral_err прибавляем температуру ошибки рассогласования PID_curr_err.
С какого хера мы сравниваем со временем "ТЕМПЕРАТУРУ"? Это в твоей больной голове управляющий сигнал с выхода PID - "ТЕМПЕРАТУРА". В реальности же в данном применении у нас выходной сигнал PID-а - именно время (время включения нагревателя в каждом периоде). И все три части, из которых этот самый выходной сигнал суммируется - включая рассматриваю интегральную - соответственно, тоже в моём случае время.

Вообще твой идиотизм тут объясним тем, что ты просто не понимаешь, что такое PID-регулятор.

"Внутри" него, Машуль, нету никаких "температур" и "времен". А есть только безразмерный (абстрактный) входной сигнал (ошибка), и безразмерный же (абстрактный) выходной сигнал (управление).

Параметры же этих сигналов мы вольны выбирать сами (ну конечно, елси мы можем написать регулятор, а не вынуждены гуглить чужой код))). Под свои нужды.

Кстати, Машка, а знаешь зачем вообще вот это сравнение текущего накопленного интегрального значения с некоей величиной? Этого ты в википедии не прочитаешь, и в учебнике тоже. Попробуй угадать))) Нам надо больше лулзов.

Дальше пошел уже откровенный бред, показывающий, что ты не смог разобраться в шести (шести, Карл!) строках.
Сообщение от ALEGYR Посмотреть сообщение
Ну а поскольку переменная PID_curr_err у нас флоатная (0.6), то и переменная integral_err тоже будет флоатной, даже если она и была раньше целым числом ( 5 + 0.6 = 5.6)
После этих подготовительных вычислений, мы начинаем вычислять переменную control по формуле control = (int32_t)EE_PID_P*PID_curr_err;
То есть некоторое целочисленное число 123 умножаем на дробное число 5.6 и получаем дробное число 688,8 То есть и переменная control у на тоже флоатное!!!
Далее к флоатной переменной control мы прибавляем какую-то маленькую флоатную хрень (integral_err*(int32_t)EE_PID_I)/1000; и вычитаем большую флоатную хрень!!! После чего запоминаем текущее значение флоатной ошибки рассогласования PID_curr_err для следующего вычисления флоатной переменной control
Для тупорылых дебилов еще раз: там нет ни одного флоата! Ни одного "дробного" числа))) Даже близко нет)))


Сообщение от ALEGYR Посмотреть сообщение
Ну и что мы тут навычисляли? А тут мы навычисляли управляющий сигнал control для PID регулятора, который говорит регулятору на сколько градусов система нагревания отстает от заданного значения температуры нагрева ТЭНа! То есть, переменная control имеет размерность ГРАДУСЫ(!)
Мда. Шесть строк добили слабенький машкин мозжечок. Браво! Господа, теперь вы в курсе: если на входе пид-регулятора у нас температура, то и на выходе будет.... температура! Мы же внутри больше не оперировали ни с чем, только с температурой и безразмерными коэффициентами!

На самом деле Сань, хотя для тебя сие и непостижимо, входной сигнал ПИДа хоть и является заданной в градусах, килограммах, микроалегирах величиной - для самого ПИДа размерности НЕ имеет. Это просто число. Всё. И на выходе просто число. И мы вольны решать, будут эти числа от нуля до единицы, или от минус ста до плюс ста, или от минус миллиарда до миллиарда, просто, используя соответствующий порядок весовых коэффициентов составляющих ПИД. Да-да, Машунь, эти самые коэффициенты, которые пользователь на экранчике видит, когда задает их, и их внутреннее представление в памяти устройства - как и в случае с уставкой температуры - вовсе не одно и то же, хотя и связано прямой зависимостью)))

В моем случае входной сигнал от 0 до 1200 (что составляет температуру от 0 до 120 градусов, при температуре ниже 10 градусов установку заказчика вообще нельзя эксплуатировать, поэтому нет смысла возиться с отрицательными значениями, при попытке включения устройство выдает соответствующий код ошибки и ждет весны , а греть масло больше 70 градусов смысла не имеет - если оно не горит в горелке, будучи подогретым до 70 градусов, опять же согласно инструкции на установку его использовать нельзя. И в режиме эксплуатации нагрев до 80 гр.С - тоже выдает ошибку и обесточивает нагреватель через аварийную цепь - или не настроены коэффициенты, или оптореле пробито. Работа до 120 градусов предусмотрена только для настройки установки - чтобы подобрать коэффициенты ПИД-алгоритма, чтоб не валиться в ошибку при каждом перерегулировании))).

А выходной сигнал в моем случае, от ноль до ~3*(период регулирования в миллисекундах) девочка ты наша тупенькая, не какие-то "на сколько градусов система отстает", а вычисленное на основе этого "отставания", а так же проинтегрированного значения всех предыдущих "отставаний", и производной от скорости изменения этого самого "отставания" количество миллисекунд, которое за один период регулирования нагреватель должен находиться во включенном состоянии. Причем, что характерно, это количество может быть выдано даже больше, чем всего миллисекунд в периоде регулирования, поскольку в коде явно отсутствует специальный оператор, ограничивающий максимальное выходное значение, и который обычно ставят в конце функции - это потому, что исполнительная часть выполнена толерантно к такому представлению выходного сигнала, и если из-за большой накопленной ошибки интегрирования ПИД-алгоритм требует от нее более 100% мощности, она все равно просто включает нагреватель на максимально возможные 100%.

Сообщение от ALEGYR Посмотреть сообщение
Ну и что мы тут натворили этим кодом? А натворили мы тут ХРЕНЬ!!!
Ведь сигнал управления control PID регулятора измеряется у нас в ГРАДУСАХ, а мы его сравниваем со временем heat_counter, которое измеряется в микросекундах, да еще может ИЗМЕНЯТЬСЯ во времени!!! Ведь счетчик heat_counter суммируется не равными отрезками времени, так как если pid_counter меньше значения EE_PID_TIME*1000, то счетчик heat_counter суммируется БЕЗ учета времени на вычисление сигнала управления control а если больше, то ВМЕСТЕ со временем затрачиваемым на вычисление сигнала управления control!!!

Вот такие вот дела, Игорек!
Нехорошо мокрое сравнивать с гладким, и говорить что что-то при этом нагревается! Да еще с использованием 32-х разрядных интов и крутейшего, с запасом, контроллера!!!
Ты тупо трещишь релюшкой, И по счетчику heat_counter И по сигналу control, а говоришь что PIDом регулируешь!
Ну а дальше наша Маша, не сумев разглядеть в шести строках того, что они делают (а они не просто "умножают какую-то хрень на какую-то другою хрень", как сумел прокомментировать сей код человек, который не умеет программировать, а выполняют все необходимые вычисления - пропорциональной, интегральной и дифференциальной составляющих и их суммирование с результатом, представленным в виде количества миллисекунд из общего цикла регулирования, в течение которых нагреватель включен), делает достойные своей тупости выводы из своего же собственного непонимания работы нескольких строк кода.

Я вчера и правда подумал, что это такой троллинг - когда Шурка прикидывается тупорылым, чтобы побесить того, кто ему что-то объясняет, но увы, я ошибался. Он и правда настолько туп. Как обезьяний самец в зоопарке, который, увидев посетителя, тут же бросился рассмотреть - а не больше ли у того пипирка, чем у него самого, и, не углядев пипирки вовсе (поскольку посетитель-то в штанах), принялся радостно вопить и швыряться калом во все стороны. И ему весело, и посетитель доволен - он ради этого шоу и приходил в зоопарк. Смотреть на умную обезьяну, сидящую в углу вольера и читающую книжку - было бы скучно, а вот на такой упоротый экземпляр, как наша Маня, нескончаемое веселье)))

Платы у заказчика работают, температура поддерживается достаточно точно, и когда идет первоначальный нагрев бачка - доходит до 70 и дальше не растет, и не падает, и когда по мере расхода автоматика подкачивает в бачок холодное топливо - начав проседать, быстренько возвращается точно к заданному, все, как у людей. А наша Машка, которая сама ПИД сделать не может, скачанный с инета ПИД настроить под свои нужды не умеет (три набора коэффициентов для разных значений ошибки - это шо за пипец, три набора, Карл? ПИД для того и нужен, чтобы с одним набором самостоятельно вычислять, когда нужно регулировать "агрессивно", а когда "консервативно", для этого он и "ПИД," а не "П"))))), живет в своём воображаемом мире, где она разработчик, а у меня ничего не работает, и даже ПИД - не ПИД...


И вишенка на торте.
Сообщение от ALEGYR Посмотреть сообщение
Кстати, PID регулирование и придумано было для того, чтобы иметь возможность непрерывного регулирования и добиваться НУЛЕВОГО рассогласования
Нет, Машаня, ПИД-регулирование было придумано не просто для этого. Оно было придумано исключительно для того, чтобы иметь эту возможность в нелинейных и/или инерционных системах. Таких, как бачок с маслом с помещенным в него ТЭНом, или китайский термостол, или даже термофен, который расплавит припой, которым деталька с маковое зернышко крепится к плате. В линейных и неинерционных системах оно нахрен не нужно было бы. Видишь, как получается, ты не знаешь самых основ того, о чем пытаешься рассуждать, поэтому всегда получается так смешно)))

Да, и это самое, Саньбо.... Ты забыл продемонстрировать работу своей конструкции. Не томи, показывай! xD

Последний раз редактировалось mike-y-k; 13.06.2022 в 23:07. Причина: 6.6
AR_Favorit вне форума  
Непрочитано 18.11.2017, 19:39  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию

Сообщение от AR_Favorit Посмотреть сообщение
Неплохо, очень неплохо!
Конечно не плохо!
Плохо когда некий умничающий амбедер, так щепетильно относится и использованию ресурсов применяемого микроконтроллера, что простую некоторую целочисленную переменную EE_PID_TIME, ПОСТОЯННО ТУПО умножает на 1000 "EE_PID_TIME*1000", вместо того чтобы сразу написать значение в 1000 раз больше заданного!!!
Я теперь понимаю зачем тебе крутые ресурсы микроконтроллера, и почему тебе не хватает ардуины!
Ведь в ардуине можно просто написать
EE_PID_TIME = 3000; и записать условие
if (pid_counter‹(EE_PID_TIME)) pid_counter++;

а для крутого микроконтроллера, ОБЯЗАТЕЛЬНО нужно писать
EE_PID_TIME = 3;и в строке условия все время УМНОЖАТЬ это значение на 1000(!),
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
то есть вводить в код программы еще одну дополнительную константу (у нас же памяти много!) и еще одну операцию умножения (у нас же крутой микроконтроллер, и нам пох сколько времени и ресурсов оперативной памяти от тратит на еще одну операцию умножения!).

Чтобы стало понятно что написано выше, объясняю на пальцах
Компилятор увидев твой код
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
для выражения EE_PID_TIME*1000 введет дополнительную рабочую переменную "ТЕМP" и еще один дополнительный операнд умножения и вместо двух ячеек памяти твой код будет занимать 4

ячейка 1 - хранит EE_PID_TIME = 3
ячейка 2 - хранит pid_counter
ячейка 3 - хранит 1000
ячейка 4 - хранит ТЕМP то есть результвт умножения EE_PID_TIME на 1000

У нормального программиста код будет занимать 3 ячейки памяти

ячейка 1 - хранит EE_PID_TIME = 3000
ячейка 2 - хранит pid_counter

и никаких дополнительных орераций умножения!!! Что даже и для ардуины весьма не затруднительно!!!

P.S
Игорек, зря ты написал еще одну портянку своей тупизны!
Ведь первая твоя портянка показала, что ты совсем не разбираешься в том что программируешь, и градусы сравниваешь с микросекундами! А а на второй твоей портянке пришлось показать еще, что ты и кодер никакой!!!

Сообщение от AR_Favorit Посмотреть сообщение
Ты забыл продемонстрировать работу своей конструкции. Не томи, показывай! xD
Во-первых, я не обещал!
Во-вторых, ты не заслужил!

Последний раз редактировалось mike-y-k; 13.06.2022 в 23:08. Причина: 6.6
ALEGYR вне форума  
Непрочитано 18.11.2017, 20:36  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию

Сообщение от ALEGYR Посмотреть сообщение
Конечно не плохо!
простую некоторую целочисленную переменную EE_PID_TIME, ПОСТОЯННО ТУПО умножает на 1000 "EE_PID_TIME*1000", вместо того чтобы сразу написать значение в 1000 раз больше заданного!!!
Ага. Прикинь, какое расточительство. Каждую миллисекунду умножение. Забавно, что ты не спросил, за сколько тактов выполняет целочисленное 32-битное умножение STM32, и сколько это будет в наносекундах))), Наверное потому, что после того как я дам ответ, и спрошу, сколько выполняется умножение флоатов на урдуине (я уже спрашивал, но ты, чушка, типа не заметил вопроса, ибо не знаешь))), станет понятно, сравнимо ли такое расточительство с использованием перемножения флоатов на ардуине.

Но формально соглашусь, пересчитать цикл регулирования в миллисекунды можно было бы и непосредственно в момент изменения этой уставки в сервисном меню. Сэкономил бы пару тактов проца каждую миллисекунду.

Сообщение от ALEGYR Посмотреть сообщение
Я теперь понимаю зачем тебе крутые ресурсы микроконтроллера, и почему тебе не хватает ардуины!
Ведь в ардуине можно просто написать
EE_PID_TIME = 3000; и записать условие
if (pid_counter‹(EE_PID_TIME)) pid_counter++;
Почему ты решил, что мне "не хватает ардуины"?! Ардуины недостаточно для платки от печки. Где никакого ПИДа нету, а есть необходимость быстрой пересылки по параллельной шине данных в дисплей, с частотой, превышающей физические способности меги.
А тут скорости не нужно - и я выбрал весьма дешевый контроллер, намного дешевле ардуины)

Сообщение от ALEGYR Посмотреть сообщение
а для крутого микроконтроллера, ОБЯЗАТЕЛЬНО нужно писать
EE_PID_TIME = 3;и в строке условия все время УМНОЖАТЬ это значение на 1000(!),
А еще крутой компилятор от крутого контроллера запросто соптимизирует эту запись так, что на самом деле никакого "умножения всё время" не будет))) Но это для тебя пока слишком сложно)))


Но ты опять все испортил, развив нормальную мысль в дикий бред:
Сообщение от ALEGYR Посмотреть сообщение
Компилятор увидев твой код
if (pid_counter‹(EE_PID_TIME*1000)) pid_counter++;
для выражения EE_PID_TIME*1000 введет дополнительную рабочую переменную "ТЕМP" и еще один дополнительный операнд умножения и вместо трех ячеек памяти твой код будет занимать 5

ячейка 1 - хранит EE_PID_TIME = 3
ячейка 2 - хранит pid_counter
ячейка 3 - хранит pid_counter
ячейка 4 - хранит 1000
ячейка 5 - хранит ТЕМP то есть результвт умножения EE_PID_TIME на 1000
Ты ширше своей ардуины всё равно смотреть не можешь. А я тебе доступно поясню: поскольку у меня не ардуина, на которую дятлы вроде тебя тихо дрочат в ночной тишине, а устройство, которое будет использоваться людьми - у него есть специальное сервисное меню, где в зависимости от конфигурации установки заносятся разные значения уставок. Одна из уставок - тот самый период PID-регулирования. Он для разных объемов баков и разной мощности нагревателей выбирается разным, это должно быть понятно. И поскольку устанавливается он человеком, Машунь, то на экране отображается его значение для человека - в секундах. В любом случае, Мань, хоть я храни в памяти число "3", хоть я храни в памяти сразу в миллисекундах - "3000", мне в программе понадобятся всё те же ячейки памяти: для хранения отображаемого на экране значения, для той самой 1000 на которую мы его умножаем для использования внутри программы, и для хранения уже результата. Как ни крути, Манюш, поскольку это уставка, которую нужно менять - памяти уйдет одинаково.

Сообщение от ALEGYR Посмотреть сообщение
У нормального программиста код будет занимать 3 ячейки памяти

ячейка 1 - хранит EE_PID_TIME = 3000
ячейка 2 - хранит pid_counter
ячейка 3 - хранит pid_counter
Маша, ты обосрался. Зачем pid_counter-у две ячейки, если его значение не может превышать значение EE_PID_TIME, дял которого у тебя хватило одной ячейки? Ты просто восхитительно дебилен

Сообщение от ALEGYR Посмотреть сообщение
Ведь первая твоя портянка показала, что ты совсем не разбираешься в том что программируешь, и градусы сравниваешь с микросекундами! А а на второй твоей портянке пришлось показать еще, что ты и кодер никакой!!!
Ололо, Машуня, ты дрищи от злости сколько хочешь, но код-то рабочий (можешь поспрашивать у народа ) но тем самым ты только показываешь свою неспособность разбираться в нормально написанных программах

А то, какой концерт ты устроил из-за одного умножения и одного байтика, после того, как тебя возили твоей обоссанной мордой по твоему идиотскому ардуиноподелию с неизвестно за каким хером постоянно перемножающимися флоатами и массивами из флоатов же - просто великолепен. Ты отличное, эталонное, дебильное тупое чучело, Манюш, спасибо тебе за то, что ты такое есть, на твоем фоне даже таким посредственным программистам как я, допустившим лишнее умножение в программе проца (которая 95% времени всё равно не делает вообще ничего, поскольку выбранный _за дешевизну_ проц еще и неприлично быстр по сравнению с твоей инвалидской ардуней), удается почувствовать себя реально неплохими специалистами. Ведь все познается в сравнении. По сравнению с кем-то я сер и неумел, как школьник с той ардуиной. Но по сравнению с тобой - я гений программирования))) Еще раз спасибо тебе за это! Живи подольше! И обязательно покажи нам свою чудо-машину, снимающую детальку.

Сообщение от ALEGYR Посмотреть сообщение
Во-первых, я не обещал!
Во-вторых, ты не заслужил!
Ага, ага, в-третьих ты делал ее для себя, а не чтобы что-то мне доказать.
В-четвертых, я как "постослов" не смогу оценить всей ее крутизны.
В-пятых...
В-шестых...
.....
Ну и скромненько в конце -
И, в-десятых, она, зараза, не работает, потому что СаняМаня болтливое форумное чмо с ардуиной, китайским термостолом и мотком синей изоленты, а не какой-то там разработчик

Последний раз редактировалось mike-y-k; 13.06.2022 в 23:09. Причина: 6.6
AR_Favorit вне форума  
Непрочитано 18.11.2017, 20:40  
ALEGYR
Вид на жительство
 
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
ALEGYR на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

Сообщение от Galbert Посмотреть сообщение
З.ы. Вы оба столько пишете... Когда вы работаете? Нормальные люди тут (не П.П. кто) выполняют свою работу кто как умеет или обучен. А вы всю неделю в рабочее время ...... Потрясающие анализы!
А мы не бухаем на работе, вот и время появляется!
Кроме того, позволю тебе напомнить, что в России более десятка часовых поясов! Поэтому когда AR_Favorit на работе я сплю! А когда AR_Favorit НЕ на работе, я еще НЕ сплю! Вот и не страдает работа!!!
ALEGYR вне форума  
Непрочитано 18.11.2017, 20:50  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Сколько видов работ вы выполняете без оплаты ?

А я вообще не работаю. Вот придет партия платок с монтажа, тогда поработаю - прошивки залью, в коробку сложу, в СДЕК отвезу, пусть едут в свою Москву.
AR_Favorit вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Сколько дней максимум Вы можете выдержать без интернета? Don_Ambrosio Отвлекитесь, эмбеддеры! 20 06.06.2008 16:54


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot