ЗАДАНИЕ
Цель работы – написать программу по алгоритму, настроить коэффициенты ПИД-регулятора.
Задание:
написать программу по алгоритму, приведенному на рисунке 1;
провести испытания для проверки корректности работы программы;
настроить коэффициенты ПИД-регулятора;
построить графики по полученным результатам.
Дополнительная информация для выполнения поставленного задания:
– общее число каналов;
– номер цикла;
– задающее значение на языке Python;
– задающее значение на языке C++;
– задающее значение на языке Pascal;
– пропорциональная составляющая;
– интегральная составляющая;
– дифференциальная составляющая;
– ассоциативная составляющая;
– текущее значение управляющего воздействия;
– пропорциональный коэффициент;
– интегральный коэффициент;
– дифференциальный коэффициент;
– коэффициент шума (помехи).
Вывод
Ввод
Кол-воитераций
Рисунок 1 – Блок схема алгоритм цифрового ПИД-регулирования
НАСТРОЙКА СРЕД РАЗРАБОТКИ
СРЕДА РАЗРАБОТКИ «Pуcharm2024.2.3»
Для написания программы был выбран язык программирования Python.
Для реализации выбрана среда разработки PyCharm2024.2.3.
Запустим программу для написания кода дважды кликнув на иконку программы, изображенную на рисунке 2.1.1.
Рисунок 2.1.1 – Иконка программы PyCharm2024.2.3.
В открывшемся окне программы сразу будет представлена среда разработки, где будет написана программа для ПИД-регулятора, что видно на рисунке 2.1.2.
Рисунок 2.1.2 – Окно среды разработки PyCharm2024.2.3.
СРЕДА РАЗРАБОТКИ «ONLINEGDB»
Для написания программы был выбран язык программирования C++.
Для реализации выбрана среда разработки OnlineGDB.
Запустим программу для написания кода перейдя на сайт с онлайн-компилятором, изображенный на рисунке 2.2.1.
Рисунок 2.2.1 – Сайт OnlineGDB
В открывшемся окне сайта сразу будет представлена среда разработки, где будет написана программа для ПИД-регулятора, это изображено на рисунке 2.2.2.
Рисунок 2.2.2 – Окно среды разработки OnlineGDB
СРЕДА РАЗРАБОТКИ «PASCALABCNET»
Для написания программы был выбран язык программирования Pascal. Для реализации выбрана среда разработки PascalABCNET. Запустим программу для написания кода дважды кликнув на иконку программы, изображенную на рисунке 2.3.1.
Рисунок 2.3.1 – Иконка программы PascalABCNET
В открывшемся окне программы сразу будет представлена среда разработки, где будет написана программа для ПИД-регулятора, что видно на рисунке 2.3.1.
Рисунок 2.3.1 – Окно среды разработки PascalABCNET
ОПИСАНИЕ РАЗРАБОТКИ И РАБОТЫ РАБОТЫ ПРОГРАММ
РАЗРАБОТКА И РАБОТА ПРОГРАММЫ НА ЯЗЫКЕ PYTHON
В окне среды разработки PyCharm2024.2.3. пропишем программу. Код программы и описания каждой строчки представлены на рисунке 3.1.1.
Рисунок 3.1.1 – Код программы и описания строчек
При запуске программы предлагается ввести 5 значений – , , , , . После их ввода программа произведёт расчеты и выведет значения , , , , и .
На рисунке 3.1.2 представлено «Окно вывода», в котором представлена информация по вводу значений и выводу полученных результатов после выполнения программы.
Рисунок 3.1.2 – «Окно вывода» после выполнения программы
РАЗРАБОТКА И РАБОТА ПРОГРАММЫ НА ЯЗЫКЕ C++
В окне среды разработки OnlineGDB пропишем программу. Код программы и описания каждой строчки представлены на рисунке 3.2.1
Р исунок 3.2.1 – Код программы и описания строчек
При запуске программы предлагается ввести 5 значений – , , , , . После их ввода программа произведёт расчеты и выведет значение , , , , и .
На рисунке 3.2.2 представлено «Окно вывода», в котором представлена информация по вводу значений и выводу полученных результатов после выполнения программы.
Рисунок 3.2.2– «Окно вывода» после выполнения программы
РАЗРАБОТКА И РАБОТА ПРОГРАММЫ НА ЯЗЫКЕ PASCAL
В окне среды разработки PascalABCNET пропишем программу. Код программы и описания каждой строчки представлены на рисунке 3.3.1.
Рисунок 3.3.1 – Код программы и описания строчек
Полный код представлен в Приложении 1
При запуске программы предлагается ввести 5 значений – Uz, k1, k2, k3, k4. После их ввода программа произведёт расчеты и выведет значения , Uп, Uи, Uд, Uа и Uф.
На рисунке 5 представлено «Окно вывода», в котором представлена информация по вводу значений и выводу полученных результатов после выполнения программы.
Рисунок 3.3.2 – «Окно вывода» после выполнения программы
ПРОВЕРКА РАБОТЫ ПРОГРАММ
РАБОТА ПРОГРАММЫ НА ЯЗЫКЕ PYTHON
После выполнения расчетов в программе введем все полученные значения в Microsoft Excel и получим таблицы, изображенные на рисунке 4.1.1.
Рисунок 4.1.1 – Таблицы полученных результатов
По ним сделаем графики, которые изображены на рисунке 4.1.2.
Первый график – рассогласование задающего воздействия от сигнала обратной связи, рассчитанное по формуле:
где – задающее воздействие, – текущее значение управляющего воздействия.
Второй график – пропорциональная составляющая, рассчитанная по формуле:
где – пропорциональный коэффициент.
Рисунок 4.1.2 – Графики зависимостей значений от номера цикла
Третий график – интегральная составляющая, рассчитанная по формуле:
где – интегральный коэффициент.
Четвертый график - дифференциальная составляющая, рассчитанная по формуле:
где – дифференциальный коэффициент, – первая разность величины рассогласования.
Пятый график – ассоциативная составляющая, рассчитанная по формуле:
где – коэффициент шума (помехи).
Так как ассоциативная составляющая зависит от помех, который сейчас отсутствует, то ассоциативная составляющая при любом времени имеет значение равное нулю. Если же коэффициент будет отличен от нуля, то график изменится.
Шестой график – управляющее воздействие, рассчитанное по формуле:
На графике видно, что оно выходит на установку при значении, заданному по заданию . Из этого следует, что коэффициенты подобраны верно, график выходит на установившийся режим.
Проверим работу программы с добавлением шумов. Для этого изменим коэффициент шума . Графики с добавлением шумов представлены на рисунке 4.1.3.
Рисунок 4.1.3 – Графики зависимостей с добавлением шумов
В этом случае ассоциативная составляющая не будет при любом времени равна нулю. Также добавятся шумы и на другие графики.
Если уменьшить коэффициент шумов , то графики снова изменяться, но на графиках шумов будет меньше, как видно на рисунке 4.1.4.
Рисунок 4.1.4 – Графики зависимостей с уменьшением значения шумов
Можно сделать вывод, что программа работает корректно и задание выполнено.
ПРОВЕРКА РАБОТЫ ПРОГРАММЫ НА ЯЗЫКЕ C++
После выполнения расчетов в программе введем все полученные значения в Microsoft Excel и получим таблицы, изображенные на рисунке 4.2.1.
Рисунок 4.2.1 – Таблицы полученных результатов
По ним сделаем графики, которые изображены на рисунке 4.2.2.
Первый график – рассогласование задающего воздействия от сигнала обратной связи, рассчитанное по формуле:
где – задающее воздействие, – текущее значение управляющего воздействия.
Второй график – пропорциональная составляющая, рассчитанная по формуле:
где – пропорциональный коэффициент.
Р исунок 4.2.2 – Графики зависимостей значений от номера цикла
Третий график – интегральная составляющая, рассчитанная по формуле:
где – интегральный коэффициент.
Четвертый график - дифференциальная составляющая, рассчитанная по формуле:
где – дифференциальный коэффициент, – первая разность величины рассогласования.
Пятый график – ассоциативная составляющая, рассчитанная по формуле:
где – коэффициент шума (помехи).
Так как ассоциативная составляющая зависит от помех, который сейчас отсутствует, то ассоциативная составляющая при любом времени имеет значение равное нулю. Если же коэффициент будет отличен от нуля, то график изменится.
Шестой график – управляющее воздействие, рассчитанное по формуле:
На графике видно, что оно выходит на установку при значении, заданному по заданию . Из этого следует, что коэффициенты подобраны верно, график выходит на установившийся режим.
Проверим работу программы с добавлением шумов. Для этого изменим коэффициент шума . Графики с добавлением шумов представлены на рисунке 4.2.3.
Рисунок 4.2.3 – Графики зависимостей с добавлением шумов
В этом случае ассоциативная составляющая не будет при любом времени равна нулю. Также добавятся шумы и на другие графики.
Если уменьшить коэффициент шумов , то графики снова изменяться, но на графиках шумов будет меньше, как видно на рисунке 4.2.4.
Р исунок 4.2.4 – Графики зависимостей с уменьшением значения шумов
Можно сделать вывод, что программа работает корректно и задание выполнено.
ПРОВЕРКА РАБОТЫ ПРОГРАММЫ НА ЯЗЫКЕ PASCAL
После выполнения расчетов в программе введем все полученные значения в Microsoft Excel и получим таблицы, изображенные на рисунке 4.3.1.
Рисунок 4.3.1 – Таблицы полученных результатов
По ним сделаем графики, которые изображены на рисунке 4.3.2.
Первый график – рассогласование задающего воздействия от сигнала обратной связи, рассчитанное по формуле:
где – задающее воздействие, – текущее значение управляющего воздействия.
Второй график – пропорциональная составляющая, рассчитанная по формуле:
где – пропорциональный коэффициент.
Рисунок 4.3.2 – Графики зависимостей значений от номера цикла
Третий график – интегральная составляющая, рассчитанная по формуле:
где – интегральный коэффициент.
Четвертый график - дифференциальная составляющая, рассчитанная по формуле:
где – дифференциальный коэффициент, – первая разность величины рассогласования.
Пятый график – ассоциативная составляющая, рассчитанная по формуле:
где – коэффициент шума (помехи).
Так как ассоциативная составляющая зависит от помех, который сейчас отсутствует, то ассоциативная составляющая при любом времени имеет значение равное нулю. Если же коэффициент будет отличен от нуля, то график изменится.
Шестой график – управляющее воздействие, рассчитанное по формуле:
На графике видно, что оно выходит на установку при значении, заданному по заданию . Из этого следует, что коэффициенты подобраны верно, график выходит на установившийся режим.
Проверим работу программы с добавлением шумов. Для этого изменим коэффициент шума . Графики с добавлением шумов представлены на рисунке 4.3.3.
Рисунок 4.3.3 – Графики зависимостей с добавлением шумов
В этом случае ассоциативная составляющая не будет при любом времени равна нулю. Также добавятся шумы и на другие графики.
Если уменьшить коэффициент шумов , то графики снова изменяться, но на графиках шумов будет меньше, как видно на рисунке 4.3.4.
Рисунок 4.3.4 – Графики зависимостей с уменьшением значения шумов
Можно сделать вывод, что программа работает корректно и задание выполнено.
ЗАКЛЮЧЕНИЕ
В данной практической работе была написана программа по заданному алгоритму.
Была проведена проверка работоспособности программы на языках Python, С++, Pascal.
Также были настроены коэффициенты ПИД-регулятора.
Выведены графики для рассогласования задающего воздействия от сигнала обратной связи, пропорциональной составляющей, интегральной составляющей, дифференциальной составляющей, ассоциативной составляющей и управляющего воздействия.
ПРИЛОЖЕНИЕ
Приложение 1 – Код программы на языке Python
i = 0 #Количество циклов
n = 50 #Ограничение по количеству циклов
Up = 0 #Пропорциональная составляющая
Ei = 0 #Суммарная величина рассогласования с момента включения регулятора
Eei = 0 #Сумма настоящей и прошлой итерации величины рассогласования
ei = 0 #Рассогласование задающего воздействия от сигнала обратной связи
ei1 = 0 #Текущая ошибка
k1 = float(input("Введите k1: ")) #Пропорциональный коэффициент
k2 = float(input("Введите k2: ")) #Интегральный коэффициент
k3 = float(input("Введите k3: ")) #Дифференциальный коэффициент
k4 = float(input("Введите k4: ")) #Коэффициент помехи (шум)
Ed = 0 #Первая разность величины рассогласования
Uu = 0 #Интегральная составляющая
Uac = 0 #Ассоциативная составляющая
U = 0 #Управляющее воздействие
Uz = int(input("Введите Uz: ")) #Задающее воздействие
while i < n: #Построим цикл While работающий при заданном условиии
i = i + 1 #Cчетчик количества циклов
ei = Uz - U #Рассчитываем рассогласование задающего воздействия от сигнала обратной связи
Up = k1 * ei #Рассчитываем пропорциональную составляющую
Ei = ei + Ei #Рассчитываем суммарную величину рассогласования с момента включения регулятора
Eei = ei + Ei #Рассчитываем сумму настоящей и прошлой итерации величины рассогласования
Uu = k2 * Ei #Рассчитываем интегральную составляющую
Ed = ei - ei1 #Рассчитываем первую разность величины рассогласования
ei1 = ei #Текущую ошибку делаем предыдущей для последующего цикла
Ud = k3 * Ed #Рассчитываем дифференциальную составляющую
Uac = k4 * ei * abs(Ed) #Расчитываем ассоциативную составляющую
U = Up + Uu + Uac + Ud #Расчет текущего значения управляющего возействия
print("Переменная ei", ei) #Вывод значений рассогласования задающего воздействия от сигнала обратной связи
print("Переменная Up", Up) #Вывод значений пропорциональной составляющей
print("Переменная Uu", Uu) #Вывод значений интегральной составляющей
print("Переменная Ud", Ud) #Вывод значений дифференциальной составляющей
print("Переменная Uac", Uac) #Вывод значений ассоциативной составляющей
print("Переменная U", U) #Вывод текущих значений управляющего возействия
if i >= n: #Задание условия if для окончания работы программы
break #Остановка работы программы
print ("Цикл завершен") #Вывод сообщения об окончании работы после завершения работы программы
Приложение 2 – Таблица полученных результатов на языке Python
i |
ei |
Up |
Uu |
Ud |
Uac |
U |
1 |
315 |
157.5 |
63.0 |
3.15 |
0.0 |
223.65 |
2 |
91.35 |
45.675 |
81.27 |
-2.236 |
0.0 |
124.708 |
Продолжение Приложения 2
3 |
190.291 |
95.145 |
119.328 |
0.989 |
0.0 |
215.463 |
4 |
99.536 |
49.768 |
139.235 |
-0.907 |
0.0 |
188.096 |
5 |
126.903 |
63.451 |
164.616 |
0.273 |
0.0 |
228.341 |
6 |
86.658 |
43.329 |
181.947 |
-0.402 |
0.0 |
224.874 |
7 |
90.125 |
45.0627 |
199.973 |
0.0346 |
0.0 |
245.07 |
8 |
69.929 |
34.964 |
213.958 |
-0.201 |
0.0 |
248.721 |
9 |
66.278 |
33.139 |
227.214 |
-0.036 |
0.0 |
260.317 |
10 |
54.682 |
27.341 |
238.151 |
-0.115 |
0.0 |
265.376 |
… |
||||||
40 |
0.942 |
0.471 |
313.708 |
-0.001 |
0.0 |
314.177 |
41 |
0.822 |
0.411 |
313.872 |
-0.001 |
0.0 |
314.282 |
42 |
0.717 |
0.358 |
314.016 |
-0.001 |
0.0 |
314.373 |
43 |
0.626 |
0.313 |
314.141 |
-0.0009 |
0.0 |
314.453 |
44 |
0.546 |
0.273 |
314.25 |
-0.0007 |
0.0 |
314.523 |
45 |
0.476 |
0.238 |
314.345 |
-0.0006 |
0.0 |
314.583 |
46 |
0.416 |
0.208 |
314.429 |
-0.0006 |
0.0 |
314.636 |
47 |
0.363 |
0.181 |
314.501 |
-0.00052 |
0.0 |
314.682 |
48 |
0.317 |
0.158 |
314.565 |
-0.0004 |
0.0 |
314.723 |
49 |
0.276 |
0.138 |
314.62 |
-0.0004 |
0.0 |
314.758 |
50 |
0.241 |
0.120 |
314.668 |
-0.0003 |
0.0 |
314.79 |
П риложение 3 – Код программы на языке C++
Приложение 4 – Таблица результатов на языке C++
j |
ei |
Uп |
Uи |
Uд |
Uа |
Uф |
1 |
330 |
165 |
66 |
3,3 |
0 |
234,30000 |
2 |
95,7 |
47,85 |
85,14 |
0,957 |
0 |
133,94700 |
3 |
196,053 |
98,0265 |
124,351 |
1,96053 |
0 |
224,33800 |
4 |
105,662 |
52,8312 |
145,483 |
1,05662 |
0 |
199,37100 |
5 |
130,629 |
65,3146 |
171,609 |
1,30629 |
0 |
238,23000 |
6 |
91,77 |
45,8851 |
189,96300 |
0,917703 |
0 |
236,76600 |
7 |
93,234 |
46,6171 |
208,61 |
0,932343 |
0 |
256,15900 |
Продолжение Приложения 4
8 |
73,8408 |
36,9204 |
223,378 |
0,7384 |
0 |
261,03700 |
9 |
68,963 |
34,4816 |
237,171 |
0,6896330 |
0 |
272,342 |
10 |
57,6581 |
28,8291 |
248,702 |
0,57658100 |
0 |
278,108 |
… |
||||||
40 |
1,0226 |
0,5113 |
328,585 |
0,01022580 |
0 |
329,107 |
41 |
0,89346 |
0,44673 |
328,764 |
0,00893433 |
0 |
329,219 |
42 |
0,7806 |
0,390335 |
328,92 |
0,00780640 |
0 |
329,318 |
43 |
0,68206 |
0,341034 |
329,056 |
0,00682007 |
0 |
329,404 |
44 |
0,59594 |
0,297974 |
329,175 |
0,00595947 |
0 |
329,479 |
45 |
0,520691 |
0,260345 |
329,28 |
0,00520752 |
0 |
329,545 |
46 |
0,454895 |
0,227448 |
329,371 |
0,00454834 |
0 |
329,603 |
47 |
0,397491 |
0,198746 |
329,45 |
0,00397461 |
0 |
329,653 |
48 |
0,3472 |
0,173645 |
329,519 |
0,00347290 |
0 |
329,697 |
49 |
0,303406 |
0,151703 |
329,58 |
0,00303345 |
0 |
329,735 |
50 |
0,265137 |
0,132568 |
329,633 |
0,00265137 |
0 |
329,768 |
Приложение 5 – Код программы на языке Pascal
Приложение 6 – Таблица полученных результатов на языке Pascal
Продолжение Приложения 6