DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Математичне моделювання та дослідження роботи системи статичного слідкування за швидкістю задаючого вала

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Розрахункова робота
Предмет:
Динамічні елементи систем керування
Група:
СІ-21

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  РОЗРАХУНКОВА РОБОТА з курсу “Динамічні елементи систем керування” Тема 4. Варіант 1. Вхідна дія 4 «Математичне моделювання та дослідження роботи системи статичного слідкування за швидкістю задаючого вала» Частина 1. Розрахунок передатної функції системи та побудова графіків характеристик АФХ, АЧХ, ФЧХ Схема роботи пристрою :  Замінюємо похідні операторами Лапласа :    Побудуємо 3 графіки, які характеризують дану систему : АФХ, АЧХ, ФЧХ. 1. АФХ – Амплітудно-фазова характеристика 2. АЧХ – Амплітудно-частотна характеристика 3. ФЧХ – Фазо-частотна характеристика Текст програми написаний мовою C++ із виведенням результатів у файл : HEADER_FILE---------------------------------------------------------------------------------- //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Chart.hpp> #include <DbChart.hpp> #include <ExtCtrls.hpp> #include <TeEngine.hpp> #include <TeeProcs.hpp> #include <Series.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TDBChart *DBChart1; TDBChart *DBChart2; TDBChart *DBChart3; TButton *Button1; TLineSeries *Series2; TLineSeries *Series3; TLineSeries *Series1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); //Початок.Параметри системи-------------------------------------------------- double TM,T1,T2,C,KEMP,KEP,K1,K2; //Кінець.Параметри системи--------------------------------------------------- //Початок.Змінні табулювання------------------------------------------------- double w,wk,h,P,Q,H,Fi; //Кінець.Змінні інтегрування------------------------------------------------- //Початок.Додаткові змінні--------------------------------------------------- double K,D1,D2,D3; //Кінець.Додаткові змінні---------------------------------------------------- }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif CPP_FILE----------------------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include <Math.h> #include <vcl.h> #pragma hdrstop #include <fstream.h> #include <iostream.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; //Початок. Параметри системи------------------------------------------------- TM=0.006; T1=0.1; T2=0.02; C=2; KEMP=10; KEP=1; K1=1.01; K2=1; h=0.01; wk=400; //Кінець. Параметри системи-------------------------------------------------- //Початок. Створюємо та відкриваємо файл для запису даних-------------------- fopen("D:\DESK_w_P_Q_H_Fi.dat","w+"); fstream DESK_w_P_Q_H_Fi("D:\DESK_w_P_Q_H_Fi.dat"); //Кінець. Створюємо та відкриваємо файл для запису даних--------------------- //Початок. Обчислюємо АФХ, АЧХ, ФЧХ------------------------------------------ for (w=0;w<=wk;w=w+h) { K=C*K2*K1*KEP; D1=1+K*K2-(T1*T2+(T1+T2)*TM)*pow(w,2.0); D2=(T1+T2+TM)*w-T1*T2*TM*pow(w,3.0); D3=K*K1; P=(D1*D3)/(pow(D1,2.0)+pow(D2,2.0)); Q=-1.0*(D2*D3)/(pow(D1,2.0)+pow(D2,2.0)); H=pow((pow(P,2.0)+pow(Q,2.0)),(1.0/2.0)); Fi=atan(Q/P); if(P<0) { Fi=Fi-M_PI; } //Початок.Записуємо дані у файл---------------------------------------------- DESK_w_P_Q_H_Fi<<w<<" "<<P<<" "<<Q<<" "<<H<<" "<<Fi<<endl; //Кінець.Записуємо дані у файл----------------------------------------------- //Початок. Будуємо графіки АФХ, АЧХ, ФЧХ------------------------------------- Series1->AddXY(P,Q,"",clRed); Series2->AddXY(w,H,"",clRed); Series3->AddXY(w,Fi,"",clRed); //Кінець. Будуємо графіки АФХ, АЧХ, ФЧХ-------------------------------------- } //Кінець. Обчислюємо АФХ, АЧХ, ФЧХ------------------------------------------- //Початок.Закриваємо файл---------------------------------------------------- DESK_w_P_Q_H_Fi.close(); //Кінець.Закриваємо файл----------------------------------------------------- } //--------------------------------------------------------------------------- Графіки залежностей : Графік АФХ :  Графік АЧХ :  Графік ФЧХ :  Частина 2. Розрахунок перехідного процесу в системі та побудова графіків вихідної величини і помилки системи  Текст програми написаний мовою C++ із виведенням результатів у файл : HEADER_FILE---------------------------------------------------------------------------------- //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Chart.hpp> #include <DbChart.hpp> #include <ExtCtrls.hpp> #include <Series.hpp> #include <TeEngine.hpp> #include <TeeProcs.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TDBChart *DBChart1; TDBChart *DBChart2; TButton *Button1; TDBChart *DBChart4; TLineSeries *Series1; TDBChart *DBChart5; TLineSeries *Series2; TDBChart *DBChart6; TLineSeries *Series3; TLineSeries *Series4; TLineSeries *Series5; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); //Початок.Параметри системи-------------------------------------------------- double TM,T1,T2,C,KEMP,KEP,K1,K2; //Кінець.Параметри системи--------------------------------------------------- //Початок.Змінні інтегрування------------------------------------------------ double Y[4]; double tend,h,t,Tper,a; //Кінець.Змінні інтегрування------------------------------------------------- //Початок.Додаткові змінні--------------------------------------------------- double sw,sw2,k1,k2,k3,k4; //Кінець.Додаткові змінні---------------------------------------------------- }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif CPP_FILE----------------------------------------------------------------------------------------- //--------------------------------------------------------------------------- #include <Math.h> #include <vcl.h> #pragma hdrstop #include <fstream.h> #include <iostream.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //Початок. Вхідна дія------------------------------------------------------- double WBX(double,double sw1); double WBX(double arg,double sw1) { double a1,y,h1,Tper1; a1=0.1; Tper1=a1*2; h1=0.00001; if((0+sw1*Tper1-h1/2<=arg)&&(arg<a1+sw1*Tper1+h1/2)) { y=(arg-Tper1*sw1)/a1; }; return y; }; //Кінець. Вхідна дія--------------------------------------------------------- //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; //Початок. Параметри системи------------------------------------------------- TM=0.006; T1=0.1; T2=0.02; C=2; KEMP=10; KEP=1; K1=1.01; K2=1; h=0.00001; a=0.1; Tper=2*a; tend=4*Tper; //Кінець. Параметри системи-------------------------------------------------- //Початок. Створюємо та відкриваємо файл для запису даних-------------------- fopen("D:\DESK_t_UK_UP_WBUX_DW.dat","w+"); fstream DESK_t_UK_UP_WBUX_DW("D:\DESK_t_UK_UP_WBUX_DW.dat"); //Кінець. Створюємо та відкриваємо файл для запису даних--------------------- //Початок. Початові параметри побудови вхідної дії--------------------------- sw=0; sw2=1; //Кінець. Початові параметри побудови вхідної дії---------------------------- //Початок. Початкові умови--------------------------------------------------- Y[0]=0; Y[1]=0; Y[2]=0; //Кінець. Початкові умови---------------------------------------------------- //Початок. Обчислюємо UK, UP, w, QBUX, DQ------------------------------------ for (t=0;t<=tend;t=t+h) { //Початок. Параметри побудови вхідної дії------------------------------------ if((sw2*Tper-h/2<=t)&&(t<=sw2*Tper+h/2)) { sw=sw+1; sw2=sw2+1; }; //Кінець. Параметри побудови вхідної дії------------------------------------- //Введемо позначення--------------------------------------------------------- //1.Y[0]=UK //2.Y[1]=UP //3.Y[2]=WBUX //4.Y[3]=WBX-WBUX=DW //Введемо позначення--------------------------------------------------------- //Початок. Метод Рунге-Кутта------------------------------------------------- //Початок. Рівняння 1-------------------------------------------------------- k1=h*(K1*KEP*(K1*WBX(t,sw)-K2*Y[2])-Y[0])/T1; k2=h*(K1*KEP*(K1*WBX(t,sw)-K2*Y[2])-(Y[0]+k1/2))/T1; k3=h*(K1*KEP*(K1*WBX(t,sw)-K2*Y[2])-(Y[0]+k2/2))/T1; k3=h*(K1*KEP*(K1*WBX(t,sw)-K2*Y[2])-(Y[0]+k3))/T1; Y[0]=Y[0]+(k1+2*k2+2*k3+k4)/6; //Кінець. Рівняння 1--------------------------------------------------------- //Початок. Рівняння 2-------------------------------------------------------- k1=h*(K2*Y[0]-Y[1])/T2; k2=h*(K2*Y[0]-(Y[1]+k1/2))/T2; k3=h*(K2*Y[0]-(Y[1]+k2/2))/T2; k4=h*(K2*Y[0]-(Y[1]+k3))/T2; Y[1]=Y[1]+(k1+2*k2+2*k3+k4)/6; //Кінець. Рівняння 2--------------------------------------------------------- //Початок. Рівняння 3-------------------------------------------------------- k1=h*(C*Y[1]-Y[2])/TM; k2=h*(C*Y[1]-(Y[2]+k1/2))/TM; k3=h*(C*Y[1]-(Y[2]+k2/2))/TM; k4=h*(C*Y[1]-(Y[2]+k3))/TM; Y[2]=Y[2]+(k1+2*k2+2*k3+k4)/6; //Кінець. Рівняння 3--------------------------------------------------------- //Початок. Рівняння 4-------------------------------------------------------- Y[3]=WBX(t,sw)-Y[2]; //Кінець. Рівняння 4--------------------------------------------------------- //Кінець. Метод Рунге-Кутта-------------------------------------------------- //Початок.Записуємо дані у файл---------------------------------------------- DESK_t_UK_UP_WBUX_DW<<t<<" "<<Y[0] <<" "<<Y[1]<<" "<<Y[2]<<" "<<Y[3]<<endl; //Кінець.Записуємо дані у файл----------------------------------------------- //Початок. Будуємо графіки UK, UP, w, QBUX, DQ------------------------------- Series1->AddXY(t,Y[0],"",clRed); Series2->AddXY(t,Y[1],"",clRed); Series3->AddXY(t,Y[2],"",clRed); Series4->AddXY(t,WBX(t,sw),"",clRed); Series5->AddXY(t,Y[3],"",clRed); //КІнець. Будуємо графіки UK, UP, w, QBUX, DQ-------------------------------- } //Кінець. Обчислюємо UK, UP, w, QBUX, DQ------------------------------------- //Початок.Закриваємо файл---------------------------------------------------- DESK_t_UK_UP_WBUX_DW.close(); //Кінець.Закриваємо файл----------------------------------------------------- } //--------------------------------------------------------------------------- Графіки залежностей : Вихідна величина :  Помилка системи :  Список основних ідентифікаторів : Частина 1 : Fi – фаза w – частота H – амплітуда wk – кінцева частота табулювання h – крок табулювання TM, T1, T2, C, KEMP, KEP, K1, K2 – параметри системи P – дійсна частина передатної функції за Лапласом Q – уявна частина передатної функції за Лапласом DESK_w_P_Q_H_Fi – файл для запису результатів K, D1, D2, D3 – додаткові змінні для обрахунку P та Q Частина 2 : Y[4] – масив змінних інтегрування TM, T1, T2, C, KEMP, KEP, K1, K2 – параметри системи Tper – період t – час інтегрування WBX – вхідна частота tend – кінцевий час інтегрування sw, sw2 – перемикачі для поперіодної побудови вхідної величини h – крок інтегрування k1, k2, k3, k4 – коефіцієнти методу Рунне-Кутта DESK_t_UK_UP_WBUX_DW – файл для запису результатів Висновок : Дослідив роботу системи статичного слідкування за швидкістю задаючого вала. Розрахував частотні характеристики АФХ, АЧХ, ФЧХ та побудув їх графіки. Проінтегрував систему диференціальних рівнянь системи та побудував графіки вихідної частоти і помилки системи. Система намагається змусити вал обертатися із заданою частотою. Графік вихідної частоти свідчить про правильну роботу системи, оскільки повторює вхідну частоту, а отже і про вірно розв’язане поставлене завдання.
Антиботан аватар за замовчуванням

20.12.2013 18:00

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!