Помогите понять текст ПИД-регулятора на C++

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

Помогите понять текст 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 )

 

 

 

art100
Offline
Зарегистрирован: 09.03.2014


#include "v_pid.h"

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;
    qreal diff = m_differential / m_period * (input - m_lastInput);
    qreal result = m_proportional * input + sum + diff;

    result = qMax(m_minSaturation, result);
    result = qMin(m_maxSaturation, result);

    m_lastResult = sum;
    m_lastInput = input;

    return result;
}

это взято от сюда

#ifndef __V_PID_H
#define __V_PID_H

#include <QtGlobal>

#include <v_cs_global.h>

class CS_LIBRARY_EXPORT VPid
{
public:
    VPid(qreal proportional, qreal integral, qreal differential,
         qreal period, qreal minSaturation, qreal maxSaturation);

    qreal getValue(qreal input);

private:
    qreal m_lastResult;
    qreal m_lastInput;

    qreal m_proportional;
    qreal m_integral;
    qreal m_differential;
    qreal m_period;
    qreal m_minSaturation;
    qreal m_maxSaturation;
};

#endif /* __V_PID_H */

а это взято из

v_cs_global.h

а это взято из графического движка Qt

который ссылается... и т.д. и т.п.

А какое отношение имеет графический движок для Linix-Windows 32бит-64бит в малюпасенькой 8 битовой ардуинке?

Мало-ли всякого на заборе написано, разве это там за забором?

Такой подход к роботам требует как минимум такой подход к железу

 

здесь ползалки бегалки хваталки обсуждать имеет смысл такие

купил набор

собрал

отладил программу

погнал за тапочками в соседнюю комнату

как видите синенькие мозги ArduinoUnoR3+КонтакторЩиток+СервоМоторчик+УльтроЗвоковыеГлазкиПохожеВместоЗахвата+ИнфроКрасныйПрименичекДляУправления значительно меньше и отлаженнее для 3-ех задач

1.бежать

2.ообегать

3.хватать

1.обратно бежать-тащить

2.оббегать

3.отпускать

1.бежать

2.оббегать

3.хватать

1.обратно бежать-тащить

дальше продолжать или все уже понятно

 

 

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

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

Не могу разобраться  в логике программы  - откуда вдруг берутся  НЕ БУДУЧИ РАНЕЕ ПРИСВОЕННЫМИ  значения m_integral и m_period  ?

http://s57.radikal.ru/i158/1406/af/475cf9056c10.jpg

 

 

 

art100
Offline
Зарегистрирован: 09.03.2014

DIS_0021008 пишет:

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

Не могу разобраться  в логике программы  - откуда вдруг берутся  НЕ БУДУЧИ РАНЕЕ ПРИСВОЕННЫМИ  значения m_integral и m_period  ?

http://s57.radikal.ru/i158/1406/af/475cf9056c10.jpg

вот же в вашем тексте

#include <QtGlobal>

#include <v_cs_global.h>

v_cs_global.h

а это взято из графического движка Qt

кривой код

нате вам на сайт ерунду все равно никто не читает

у нас все равно ничерта не работает

а пыль в глаза пускать усеем

это у ардуинщиков за тапками бегают роботы

а у остальных...

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

я имел ввиду определение значения переменной, а не её типа

чему например равно значение m_integral к моменту его первого использования в правой части выражения в функции VPid ?

qreal sum = m_lastResult + m_integral * m_period * input;

и  переменные типа private появляются не динамически, а существуют всегда и сохраняют свое значение до следующего вызова функции VPid ?

private:
    qreal m_lastResult;
    qreal m_lastInput;
 
    qreal m_proportional;
    qreal m_integral;
    qreal m_differential;
    qreal m_period;
    qreal m_minSaturation;
    qreal m_maxSaturation;

здесь запоминание значений для использования в  следующем вызове?

m_lastResult = sum;
m_lastInput = input;

 

а где в программе присваиваются значения для другим переменным с префиксом "m_" ?

art100
Offline
Зарегистрирован: 09.03.2014

DIS_0021008 пишет:

я имел ввиду определение значения переменной, а не её типа

чему например равно значение m_integral к моменту его первого использования в правой части выражения в функции VPid ?

qreal sum = m_lastResult + m_integral * m_period * input;

и  переменные типа private появляются не динамически, а существуют всегда и сохраняют свое значение до следующего вызова функции VPid ?

private:
    qreal m_lastResult;
    qreal m_lastInput;
 
    qreal m_proportional;
    qreal m_integral;
    qreal m_differential;
    qreal m_period;
    qreal m_minSaturation;
    qreal m_maxSaturation;

здесь запоминание значений для использования в  следующем вызове?

m_lastResult = sum;
m_lastInput = input;

 

а где в программе присваиваются значения для другим переменным с префиксом "m_" ?

так вот  же

 static const qreal FACE_SIZE = 0.4;

 static const qreal speeds[] = { 3.8f, 4.4f, 5.6f };
 static const qreal amplitudes[] = { 2.0f, 2.5f, 3.0f };

http://arduino.cc/ здесь причем?

 

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

объясните пожалуйста проще ,

1) интересуют начальные значения переменных с префиками " m_"  и откуда они  берутся   m_integral к моменту  первого использования в правой части выражения в функции VPid ?

2) private это не динамическая память - да или нет? 

3)значения  переменных   "m_"  (тип private) сохраняются в пямяти до следующего вызова VPid - да или нет?

а где в программе присваиваются значения для другим переменным с префиксом "m_" ?

Цитата:

так вот  же

 static const qreal FACE_SIZE = 0.4;

 static const qreal speeds[] = { 3.8f, 4.4f, 5.6f };
 static const qreal amplitudes[] = { 2.0f, 2.5f, 3.0f };

но где в этом коде переменные с префиксами "m_" ?

Цитата:
http://arduino.cc/ здесь причем?
увы, я не понимаю вашего вопроса, мне бы на мои ответы получить, чтобы адаптировать текст ПИД для ардуино

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

помогите пожалуйста разобьраться с вопросами

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

кто разбирается в С++

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

И что непонятного то?

Библиотеки же подключают:

#include <QtGlobal>
#include <v_cs_global.h>

перемннные инициализируются в конструкторе класса соотвествующими функцыиями из подключенных библиотек.

Или вас смущает упрощенное написание? Вобщем этот код не применим к ардуино.

toly
Offline
Зарегистрирован: 17.05.2014

Начальные значения у private переменных m_ххх появляются в момент создания объекта, на первом листинге строки 03...08 - это инициализация внутренних переменных класса значениями из параметров конструктора (которые передаются при создании объекта). Разумеется, значения сохраняются пока созданный экземпляр класса существует

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

NeiroN пишет:
И что непонятного то? Библиотеки же подключают: перемннные инициализируются в конструкторе класса соотвествующими функцыиями из подключенных библиотек. Или вас смущает упрощенное написание? Вобщем этот код не применим к ардуино.

Что код неприменим без переделки понятно. Синтаксисом С++ не владею отсюда и вопросы

qreal result = m_proportional * input + sum + diff;

здесь m_proportional = выхов функции, если да, то где текст тела функции, какие процедуры в нем  выполняются ? Очень хочу разобраться с ПИД и не могу из-за моего незнания С++. 

Выручайте пожалуйста.

toly пишет:

Начальные значения у private переменных m_ххх появляются в момент создания объекта, на первом листинге строки 03...08 - это инициализация внутренних переменных класса значениями из параметров конструктора (которые передаются при создании объекта). Разумеется, значения сохраняются пока созданный экземпляр класса существует

 

А в какой момент он существует, существует ли после окончания вызова функции vpid ? Пока я не умею  мыслить категориями С++

--------------------------------------------------------------------------------------------------------------------------

PS: если не в тягость, помогите пожалуйста преобразовать код этого ПИД-регулятора 

http://robot-develop.org/archives/2833

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

toly
Offline
Зарегистрирован: 17.05.2014

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

DIS_0021008
Offline
Зарегистрирован: 13.06.2014

toly пишет:

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

спасибо, понял что схожие обозначения использованы и для констант  m_integral , m_period , m_differential, m_differential, m_proportional

и для переменных  m_lastResult , m_lastInput

alexval2007
Offline
Зарегистрирован: 10.11.2012
yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012