Помогите понять текст ПИД-регулятора на C++
- Войдите на сайт для отправки комментариев
Пт, 13/06/2014 - 04:48
Помогите понять текст C++
Текст
http://robot-develop.org/archives/2833
robot-develop.org/wp-content/uploads/2011/09/pid.rar
VPid::VPid(qreal proportional, qreal integral, qreal differential, qreal period, qreal minSaturation, qreal maxSaturation) : m_proportional(proportional), //************** ВОПРОС это описание функции сохраняющей предыдущее значение ? m_integral(integral), //**************ВОПРОС это описание функции сохраняющей предыдущее значение ? m_differential(differential), //**************ВОПРОС это описание функции сохраняющей предыдущее значение ? m_period(period), //**************ВОПРОС это описание функции сохраняющей предыдущее значение ? m_minSaturation(minSaturation), //**************ВОПРОС это описание функции сохраняющей предыдущее значение ? m_maxSaturation(maxSaturation) //**************ВОПРОС это описание функции сохраняющей предыдущее значение ? { m_lastResult = m_lastInput = 0; } //**************ВОППРОС ГДЕ ТЕЛО ЭТИХ ФУНКЦИЙ ? qreal VPid::getValue(qreal input) { qreal sum = m_lastResult + m_integral * m_period * input; // *********** ВОПРОС m_integral и ему подобные = вызовы функции ? }
( этот же вопрос в виде скриншота http://s57.radikal.ru/i158/1406/af/475cf9056c10.jpg )
это взято от сюда
а это взято из
v_cs_global.h
а это взято из графического движка Qt
который ссылается... и т.д. и т.п.
А какое отношение имеет графический движок для Linix-Windows 32бит-64бит в малюпасенькой 8 битовой ардуинке?
Мало-ли всякого на заборе написано, разве это там за забором?
Такой подход к роботам требует как минимум такой подход к железу
здесь ползалки бегалки хваталки обсуждать имеет смысл такие
купил набор
собрал
отладил программу
погнал за тапочками в соседнюю комнату
как видите синенькие мозги ArduinoUnoR3+КонтакторЩиток+СервоМоторчик+УльтроЗвоковыеГлазкиПохожеВместоЗахвата+ИнфроКрасныйПрименичекДляУправления значительно меньше и отлаженнее для 3-ех задач
1.бежать
2.ообегать
3.хватать
1.обратно бежать-тащить
2.оббегать
3.отпускать
1.бежать
2.оббегать
3.хватать
1.обратно бежать-тащить
дальше продолжать или все уже понятно
хочу использовать этот ПИД-регулятор для температуры,
Не могу разобраться в логике программы - откуда вдруг берутся НЕ БУДУЧИ РАНЕЕ ПРИСВОЕННЫМИ значения m_integral и m_period ?
http://s57.radikal.ru/i158/1406/af/475cf9056c10.jpg
хочу использовать этот ПИД-регулятор для температуры,
Не могу разобраться в логике программы - откуда вдруг берутся НЕ БУДУЧИ РАНЕЕ ПРИСВОЕННЫМИ значения m_integral и m_period ?
http://s57.radikal.ru/i158/1406/af/475cf9056c10.jpg
вот же в вашем тексте
v_cs_global.h
а это взято из графического движка Qt
кривой код
нате вам на сайт ерунду все равно никто не читает
у нас все равно ничерта не работает
а пыль в глаза пускать усеем
это у ардуинщиков за тапками бегают роботы
а у остальных...
я имел ввиду определение значения переменной, а не её типа
чему например равно значение m_integral к моменту его первого использования в правой части выражения в функции VPid ?
qreal sum = m_lastResult + m_integral * m_period * input;
и переменные типа private появляются не динамически, а существуют всегда и сохраняют свое значение до следующего вызова функции VPid ?
здесь запоминание значений для использования в следующем вызове?
а где в программе присваиваются значения для другим переменным с префиксом "m_" ?
я имел ввиду определение значения переменной, а не её типа
чему например равно значение m_integral к моменту его первого использования в правой части выражения в функции VPid ?
qreal sum = m_lastResult + m_integral * m_period * input;
и переменные типа private появляются не динамически, а существуют всегда и сохраняют свое значение до следующего вызова функции VPid ?
здесь запоминание значений для использования в следующем вызове?
а где в программе присваиваются значения для другим переменным с префиксом "m_" ?
так вот же
http://arduino.cc/ здесь причем?
объясните пожалуйста проще ,
1) интересуют начальные значения переменных с префиками " m_" и откуда они берутся m_integral к моменту первого использования в правой части выражения в функции VPid ?
2) private это не динамическая память - да или нет?
3)значения переменных "m_" (тип private) сохраняются в пямяти до следующего вызова VPid - да или нет?
а где в программе присваиваются значения для другим переменным с префиксом "m_" ?
так вот же
но где в этом коде переменные с префиксами "m_" ?
помогите пожалуйста разобьраться с вопросами
кто разбирается в С++
И что непонятного то?
Библиотеки же подключают:
перемннные инициализируются в конструкторе класса соотвествующими функцыиями из подключенных библиотек.
Или вас смущает упрощенное написание? Вобщем этот код не применим к ардуино.
Начальные значения у private переменных m_ххх появляются в момент создания объекта, на первом листинге строки 03...08 - это инициализация внутренних переменных класса значениями из параметров конструктора (которые передаются при создании объекта). Разумеется, значения сохраняются пока созданный экземпляр класса существует
Что код неприменим без переделки понятно. Синтаксисом С++ не владею отсюда и вопросы
qreal result = m_proportional * input + sum + diff;
здесь m_proportional = выхов функции, если да, то где текст тела функции, какие процедуры в нем выполняются ? Очень хочу разобраться с ПИД и не могу из-за моего незнания С++.
Выручайте пожалуйста.
Начальные значения у private переменных m_ххх появляются в момент создания объекта, на первом листинге строки 03...08 - это инициализация внутренних переменных класса значениями из параметров конструктора (которые передаются при создании объекта). Разумеется, значения сохраняются пока созданный экземпляр класса существует
А в какой момент он существует, существует ли после окончания вызова функции vpid ? Пока я не умею мыслить категориями С++
--------------------------------------------------------------------------------------------------------------------------
PS: если не в тягость, помогите пожалуйста преобразовать код этого ПИД-регулятора
http://robot-develop.org/archives/2833
в обычный Си . Хочу испрользовать в учебных целях, угловая скорость не нужна - ввод вывод для температуры сделаю сам. Коэффициенты ПИД поставлю вручную, лишь бы работал.
m_propotrtional - это не вызов футкции, это обычная переменная внутри класса...по иде функция getValue это все что вам нужно, будет обычный С, только переменные которые объявлены внутри класса объявите глобально, дайте им начальные значения и функция все будет считать.
m_propotrtional - это не вызов функции, это обычная переменная внутри класса...по иде функция getValue это все что вам нужно, будет обычный С, только переменные которые объявлены внутри класса объявите глобально, дайте им начальные значения и функция все будет считать.
спасибо, понял что схожие обозначения использованы и для констант m_integral , m_period , m_differential, m_differential, m_proportional
и для переменных m_lastResult , m_lastInput
Вот еще http://playground.arduino.cc/Code/PIDLibrary
Вот неплохое введение в ПИД Карпов В.Э. ПИД-управление в нестрогом изложении