Skip to content

Commit

Permalink
Merge branch 'brstu:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
gleb7499 authored Oct 19, 2024
2 parents a92e83d + 129be80 commit cd09760
Show file tree
Hide file tree
Showing 28 changed files with 807 additions and 7 deletions.
10 changes: 5 additions & 5 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
|8|Козлович Антон|||||||||||
|9|Козловская Анна|||||||||||
|10|Колодич Максим|||||||||||
|11|Крагель Алина|[as0006311](./trunk/as0006311/)|:white_check_mark:|:white_check_mark:||||||||
|11|Крагель Алина|[as0006311](./trunk/as0006311/)|:white_check_mark:|:white_check_mark:|:white_check_mark:|||||||
|12|Куликович Иван|||||||||||
|13|Кульбеда Кирилл|||||||||||
|14|Кухарчук Илья|[as0006314](trunk/as0006314)||||||||||
Expand All @@ -40,11 +40,11 @@
|18|Поплавский Владислав|||||||||||
|19|Савко Павел|||||||||||
|20|Соколова Маргарита|||||||||||
|21|Стельмашук Иван|||||||||||
|21|Стельмашук Иван|[as0006321](./trunk/as0006321/)|:white_check_mark:|:white_check_mark:||||||||||
|22|Тунчик Антон|||||||||||
|23|Филипчук Дмитрий|||||||||||
|24|Ярмола Александр|[as0006325](./trunk/as0006325/)|:white_check_mark:|:white_check_mark:|:white_check_mark|||||||
|25|Ярмолович Александр|||||||||||
|24|Ярмола Александр|[as0006325](./trunk/as0006325/)|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|||||
|25|Ярмолович Александр|[as0006326](./trunk/as0006326/)|:white_check_mark:|:white_check_mark:||||||||

## Группа АС-64

Expand All @@ -56,7 +56,7 @@
|4|Булавский Андрей Сергеевич|||||||||||
|5|Бурак Илья Эдуардович|||||||||||
|6|Горкавчук Никита Михайлович|[as64220038](./trunk/as64220038/)|:white_check_mark:|:white_check_mark:||||||||
|7|Евкович Андрей Викторович|||||||||||
|7|Евкович Андрей Викторович|[as0006407](./trunk/as0006407/)|:white_check_mark:|:white_check_mark:||||||||
|8|Ежгунович Глеб Михайлович|||||||||||
|9|Иванюк Иван Александрович|[as0006409](./trunk/as0006409/)|:white_check_mark:|:white_check_mark:|||||||||
|10|Игнаткевич Кирилл Сергеевич|||||||||||
Expand Down
23 changes: 23 additions & 0 deletions trunk/as0006311/task_02/doc/doxygen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Отчёт

## Об отчёте

Данный отчет содержит информацию о программе, моделирующей ПИД-регулятор. В качестве объекта управления используется математическая модель, а также классы линейной и нелинейной природы.
## Классы

### Класс `MathematicalModel`

Это абстрактный базовый класс для математических моделей. Он включает виртуальную функцию calcOutput, которую необходимо реализовать в производных классах. Эта функция принимает текущий выход, предыдущий выход и входной сигнал, возвращая вычисленную модель результата.

### Класс `LinearModel`

Класс LinModel, который наследует MathModel, представляет собой линейную модель. Он включает два коэффициента: coefficientAи coefficientB, используется для вычисления выходного значения формулы coefficientA * currentOutput + coefficientB * input.

### Класс `NonLinearModel`

представляет нелинейную математическую модель. Данный класс наследуется от абстрактного класса MathModel и реализует его виртуальную функцию calcOutput. Имеет четыре приватных переменных - coefficientA, coefficientB, coefficientC и coefficientD, которые используются в формуле для вычисления выходного значения модели. Конструктор класса принимает значения коэффициентов coefficientA, coefficientB, coefficientC и coefficientD и инициализирует соответствующие приватные переменные.

Функция calcOutputпереопределена в классе NonlinearModelи использует формулу coefficientA * currentOutput - coefficientB * pow(previousOutput, 2) + coefficientC * input + coefficientD * sin(input)для вычисления выходного значения на основе текущих и выходных значений, а также входного значения.
### Класс `PIDController`

Класс PIDRegulatorреализации работы ПИД-регулятора. Он включает три коэффициента: gainP, gainIи gainD, которые соответствуют пропорциональному, интегральному и дифференциальному составляющему регулятору. Функция calcOutputпринимает текущую величину ошибки и вычисляет управляющий сигнал, о гравитации на этих коэффициентах и ​​накопленных ошибках.
82 changes: 82 additions & 0 deletions trunk/as0006311/task_02/doc/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<p align="center"> Министерство образования Республики Беларусь</p>
<p align="center">Учреждение образования</p>
<p align="center">“Брестский Государственный технический университет”</p>
<p align="center">Кафедра ИИТ</p>
<br><br><br><br><br><br><br>
<p align="center">Лабораторная работа №2</p>
<p align="center">По дисциплине “Теория и методы автоматического управления”</p>
<p align="center">Тема: “Изучение ПИД-регуляторов”</p>
<br><br><br><br><br>
<p align="right">Выполнил:</p>
<p align="right">Студент 3 курса</p>
<p align="right">Группы АС-63</p>
<p align="right">Крагель А.М.</p>
<p align="right">Проверил:</p>
<p align="right">Ситковец Я. С.</p>
<br><br><br><br><br>
<p align="center">Брест 2024</p>

---

## Цель работы:
Написать программу на языке C++, которая моделирует работу ПИД-регулятора. В качестве объекта управления: математическая модель, которая была получена в прошлой работе. Реализуйте программу с использованием объектно-ориентированного подхода, включая не менее трех классов с использованием наследования.
## Ход работы
Была реализована программа на языке С++, моделирующая работу ПИД-регулятор. Для документирования программы был использован инструмент Doxygen, затем документация была преобразована в Markdown (.md). Результаты работы программы были записаны в файл results.txt.

Итерация 1:
Выход линейной модели: 0.5
Выход нелинейной модели: 0.284147
Ошибка: 0.215853
Управляющий сигнал: 0.36695

Итерация 2:
Выход линейной модели: 0.9
Выход нелинейной модели: 0.471095
Ошибка: 0.428905
Управляющий сигнал: 0.793894

Итерация 3:
Выход линейной модели: 1.22
Выход нелинейной модели: 0.550058
Ошибка: 0.669942
Управляющий сигнал: 1.3755

Итерация 4:
Выход линейной модели: 1.476
Выход нелинейной модели: 0.572912
Ошибка: 0.903088
Управляющий сигнал: 2.05861

Итерация 5:
Выход линейной модели: 1.6808
Выход нелинейной модели: 0.578363
Ошибка: 1.10244
Управляющий сигнал: 2.80242

Итерация 6:
Выход линейной модели: 1.84464
Выход нелинейной модели: 0.579586
Ошибка: 1.26505
Управляющий сигнал: 3.59022

Итерация 7:
Выход линейной модели: 1.97571
Выход нелинейной модели: 0.579856
Ошибка: 1.39586
Управляющий сигнал: 4.41258

Итерация 8:
Выход линейной модели: 2.08057
Выход нелинейной модели: 0.579915
Ошибка: 1.50065
Управляющий сигнал: 5.26251

Итерация 9:
Выход линейной модели: 2.16446
Выход нелинейной модели: 0.579928
Управляющий сигнал: 6.13446

Выход линейной модели: 2.23156
Выход нелинейной модели: 0.579931
Ошибка: 1.65163
Управляющий сигнал: 7.02403
57 changes: 57 additions & 0 deletions trunk/as0006311/task_02/doc/results.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Итерация 1:
Выход линейной модели: 0.5
Выход нелинейной модели: 0.284147
Ошибка: 0.215853
Управляющий сигнал: 0.36695

Итерация 2:
Выход линейной модели: 0.9
Выход нелинейной модели: 0.471095
Ошибка: 0.428905
Управляющий сигнал: 0.793894

Итерация 3:
Выход линейной модели: 1.22
Выход нелинейной модели: 0.550058
Ошибка: 0.669942
Управляющий сигнал: 1.3755

Итерация 4:
Выход линейной модели: 1.476
Выход нелинейной модели: 0.572912
Ошибка: 0.903088
Управляющий сигнал: 2.05861

Итерация 5:
Выход линейной модели: 1.6808
Выход нелинейной модели: 0.578363
Ошибка: 1.10244
Управляющий сигнал: 2.80242

Итерация 6:
Выход линейной модели: 1.84464
Выход нелинейной модели: 0.579586
Ошибка: 1.26505
Управляющий сигнал: 3.59022

Итерация 7:
Выход линейной модели: 1.97571
Выход нелинейной модели: 0.579856
Ошибка: 1.39586
Управляющий сигнал: 4.41258

Итерация 8:
Выход линейной модели: 2.08057
Выход нелинейной модели: 0.579915
Ошибка: 1.50065
Управляющий сигнал: 5.26251

Итерация 9:
Выход линейной модели: 2.16446
Выход нелинейной модели: 0.579928
Управляющий сигнал: 6.13446

Выход линейной модели: 2.23156
Выход нелинейной модели: 0.579931
Ошибка: 1.65163
Управляющий сигнал: 7.02403
Binary file added trunk/as0006311/task_02/images/Linear_model.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions trunk/as0006311/task_02/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cmake_minimum_required (VERSION 2.4.0)
project (pidcontroller)

add_executable(pidcontroller main.cpp)
114 changes: 114 additions & 0 deletions trunk/as0006311/task_02/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

class MathematicalModel {
public:
virtual double calculateOutput(double current, double previous, double input) const = 0;
virtual ~MathematicalModel() = default;
};

class LinearModel : public MathematicalModel {
private:
double a;
double b;

public:
explicit LinearModel(double a, double b) : a(a), b(b) {}

double calculateOutput(double current, double previous, double input) const override {
return a * current + b * input;
}
};

class NonLinearModel : public MathematicalModel {
private:
double a;
double b;
double c;
double d;

public:
NonLinearModel(double a, double b, double c, double d)
: a(a), b(b), c(c), d(d) {}

double calculateOutput(double current, double previous, double input) const override {
return a * current - b * pow(previous, 2) + c * input + d * sin(input);
}
};

class PIDController {
private:
double kp;
double ki;
double kd;
double lastError = 0.0;
double accumulatedError = 0.0;

public:
explicit PIDController(double kp, double ki, double kd)
: kp(kp), ki(ki), kd(kd) {}

double compute(double error) {
accumulatedError += error;
double deltaError = error - lastError;
double output = kp * error + ki * accumulatedError + kd * deltaError;
lastError = error;
return output;
}
};

int main() {
setlocale(LC_ALL, "Russian");

double linearA = 0.8;
double linearB = 0.5;

double nonLinearA = 0.8;
double nonLinearB = 0.5;
double nonLinearC = 0.2;
double nonLinearD = 0.1;

double linearOutput = 0.0;
double nonLinearOutput = 0.0;
double lastNonLinearOutput = 0.0;

double inputValue = 1.0;

LinearModel linearModel(linearA, linearB);
NonLinearModel nonLinearModel(nonLinearA, nonLinearB, nonLinearC, nonLinearD);
PIDController pidController(1.0, 0.5, 0.2);

vector<double> linearOutputs;
vector<double> nonLinearOutputs;
vector<double> errors;
vector<double> controlOutputs;

for (int i = 1; i <= 10; i++) {
linearOutput = linearModel.calculateOutput(linearOutput, 0, inputValue);
nonLinearOutput = nonLinearModel.calculateOutput(nonLinearOutput, lastNonLinearOutput, inputValue);
lastNonLinearOutput = nonLinearOutput;

double error = linearOutput - nonLinearOutput;
double controlOutput = pidController.compute(error);

linearOutputs.push_back(linearOutput);
nonLinearOutputs.push_back(nonLinearOutput);
errors.push_back(error);
controlOutputs.push_back(controlOutput);
}

// Вывод результатов для каждой итерации
for (int i = 0; i < 10; i++) {
cout << "Итерация " << i + 1 << ":\n";
cout << "Выход линейной модели: " << linearOutputs[i] << '\n';
cout << "Выход нелинейной модели: " << nonLinearOutputs[i] << '\n';
cout << "Ошибка: " << errors[i] << '\n';
cout << "Управляющий сигнал: " << controlOutputs[i] << '\n';
cout << '\n';
}

return 0;
}
36 changes: 36 additions & 0 deletions trunk/as0006321/task_01/doc/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Отчет о лабораторной работе: Моделирование температуры объекта

# Цель работы
Цель данной лабораторной работы заключается в разработке программы на C++, которая будет моделировать температуру объекта, описываемую линейной и нелинейной математическими моделями.

# Введение
Температура объекта может быть описана с помощью дифференциального уравнения, которое при дискретизации преобразуется в линейную и нелинейную модель. Линейная модель позволяет предсказать температуру на основе предыдущих значений и передаваемого тепла, тогда как нелинейная модель учитывает дополнительные эффекты.

# Описание моделей
1. Линейная модель:
y_{t+1} = a*y_t + b*u_t
Здесь:
- y_t — текущая температура,
- u_t — передаваемое тепло,
- a и b — коэффициенты.

2. Нелинейная модель:
y_{t+1} = a*y_t - b*(y_{t-1})^2 + c*u_t + d*sin(u_{t-1})
Здесь:
- y_{t-1} — предыдущее значение температуры,
- c и d — дополнительные коэффициенты.

# Описание алгоритма
1. Ввод данных: Пользователь вводит коэффициенты a, b, c, d и количество шагов времени t.
2. Линейная модель:
- Пользователь вводит начальное значение температуры y и передаваемое на каждой итерации тепло u.
- Программа вычисляет температуру на каждом шаге по линейной формуле и выводит результаты.
3. Нелинейная модель:
- Пользователь вводит начальное значение температуры для второго массива и передаваемое на каждой итерации тепло.
- Программа вычисляет температуру по нелинейной формуле, учитывая предыдущее значение температуры и выводит результаты.

# Результаты
Программа успешно моделирует температуру объекта в соответствии с заданными формулами. Пользователь может вводить различные коэффициенты и управляющие сигналы, что позволяет анализировать влияние этих параметров на температуру.

# Выводы
В ходе лабораторной работы была разработана программа, позволяющая моделировать температуру объекта с использованием линейной и нелинейной моделей. Результаты моделирования показывают, как изменения в коэффициентах и передаваемом тепле влияют на температуру объекта. Данная программа может быть использована для дальнейших исследований в области управления температурой в различных системах.
4 changes: 4 additions & 0 deletions trunk/as0006321/task_01/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.10)
project(Task01)

add_executable(Task01_6321 main.cpp)
Loading

0 comments on commit cd09760

Please sign in to comment.