Skip to content
This repository has been archived by the owner on Dec 28, 2023. It is now read-only.

[task_02] Add Solution #381

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
| 14 | [Поддубный Юрий](https://github.com/Yura-108) | [ii02414](trunk/ii02414) | ✅ | ✅ | ✅ | ✅ | ✅ | | | | 8|
| 15 | [Рекун Дмитрий](https://github.com/DmitryRekun) | [ii02415](trunk/ii02415) | ✅ | ✅ | ❌ | ❌ | ✅ | | | | 6|
| 16 | [Рудецкий Евгений](https://github.com/RuuuuuD3) | [ii02416](trunk/ii02416) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | | 9|
| 17 | Супрунович Илья | [ii02417](trunk/ii02417) | ❌ | ❌ | | ❌ | | | | | |
| 17 | [Супрунович Илья](https://github.com/IlyaSuprunovich)| [ii02417](trunk/ii02417) | ❌ | ❌ | | ❌ | | | | | 7|
| 18 | [Сухаревич Дмитрий](https://github.com/SukharevichDmitry)|[ii02418](trunk/ii02418)| ✅ | ✅ | ✅ | ✅ | ✅ | | | | 7|
| 19 | Терехов Николай | [ii02419](trunk/ii02419) | ✅ | ✅ | ✅ | ✅ | ✅ | | | | 8|
| 20 | Турубчук Екатерина | [ii02420](trunk/ii02420) | ❌ | ❌ | ❌ | ❌ | | | | | |
Expand Down
Binary file added trunk/ii02417/task_02/doc/Grafik.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 48 additions & 0 deletions trunk/ii02417/task_02/doc/report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<p align="center">Министерство образования Республики Беларусь</p>
<p align="center">Учреждение образования</p>
<p align="center">"Брестский Государственный технический университет"</p>
<p align="center">Кафедра ИИТ</p>
<br>
<br>
<p align="center">Лабораторная работа №2</p>
<p align="center">По дисциплине: "Общая теория интеллектуальных систем"</p>
<p align="center">Тема: "ПИД-регуляторы"</p>
<br>
<br>
<p align="right">Выполнил:<br>Студент 2 курса<br>Группы ИИ-24<br>Cупрунович И. С.</p>
<p align="right">Проверил:<br>Иванюк Д. С.</p>
<br>
<p align="center">Брест 2023</p>

---

# Общее задание #
1. Написать отчет по выполненной лабораторной работе №2 в .md формате (*readme.md*) и с помощью **pull request** разместить его в следующем каталоге: **trunk\ii0xxyy\task_02\doc**.
2. Исходный код написанной программы разместить в каталоге: **trunk\ii00xxyy\task_02\src**.
---
# Задание #
На C++ реализовать программу, моделирующую рассмотренный выше ПИД-регулятор. В качестве объекта управления использовать математическую модель, полученную в предыдущей работе. В отчете также привести графики для разных заданий температуры объекта, пояснить полученные результаты.

# Суть задания #

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

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

# Выполнение задания #

Вывод программы:
```
10
10
29.3911
48.0654
54.2351
55.5657
58.3342
58.6404
59.0638
60.3983
59.9994
```
![График](Grafik.png)
14 changes: 14 additions & 0 deletions trunk/ii02417/task_02/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
cmake_minimum_required (VERSION 3.8)

if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

project ("otis_laba_2")

add_executable (otis_laba_2 "otis_laba_2.cpp" )

if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET lab2 PROPERTY CXX_STANDARD 20)
endif()
56 changes: 56 additions & 0 deletions trunk/ii02417/task_02/src/otis_laba_2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>

class ModelSimulation {
public:
ModelSimulation() = default;

void simulate() {
// Вычисление коэффициентов
F0 = e * (fD / f0 + 1);
F1 = -e * (-f0 / g + 1 + 2 * fD / f0);
F2 = e * (fD / f0);

std::vector<double> Yt = { y, y };
std::vector<double> E = { w - y, w - y };

for (int temp = 2; std::abs(Yt.back() - w) > 0.1; temp++) {
E.push_back(w - Yt.back());
u = u1 + F0 * E.back() + F1 * E[E.size() - 2] + F2 * E[E.size() - 3];
Yt.push_back(a * Yt.back() - b * Yt[Yt.size() - 2] + c * u + d * std::sin(u1));
u1 = u;
}

// Вывод графика
std::for_each(Yt.begin(), Yt.end(), [](double value) {
std::cout << value << std::endl;
});
}

private:
double a = 0.5;
double b = 0.6;
double c = 0.6;
double d = 0.4;
double e = 0.9;
double f0 = 1.2;
double fD = 1.1;
double g = 1.1;
double u = 1.0;
double u1 = 1.0;
double w = 60;
double F0 = 0.0;
double F1 = 0.0;
double F2 = 0.0;
double y = 10.0;
};

int main()
{
ModelSimulation model;
model.simulate();

return 0;
}