МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМЕНИ П.О.СУХОГО
Факультет автоматизированных и информационных систем
Кафедра «Автоматизированный электропривод»
Лабораторная работа №1
по “Моделированию в электроприводах”
«Моделирование типовых статических и динамических элементов САУ»
Исполнитель: студент гр. ЭП-31
Руководитель:
Гомель, 2006
· ознакомиться с алгоритмами моделирования статических элементов систем автоматического управления;
· ознакомиться с приемами моделирования динамических элементов;
· получить практические навыки составления программ при структурном моделировании.
В данной работе необходимо составить программу при структурном моделировании, состоящей из статических и динамических элементов, рассчитать на ней процессы в системе, и построить диаграммы выходного и внутренних сигналов.
Входные воздействия:
скачок X1 = 1
Параметры звеньев:
1. К1 = 1;X01=0,2;Y01=0.4; Интервал расчёта -0,5 с
2. T2= 0,07; Шаг расчета-0,005 с
3. К3 = 1, Т3 = 0,05;
1. В соответствии со схемой модели согласно задания составляем нелинейную смешанную систему уравнений.
2.Программа при структурном моделировании в соответствии с заданным методом численного решения (Усовершенствованный метод Эйлера).
Program Laba1;
{Выполнил ст. гр ЭП-31 }
Type
DArray = array [1..10] of double;
Var
Y, Yp, {Переменные модели}
lK, lT,ly0,lx0: DArray; {Параметры звеньев и входных воздействий}
tk, dt, t: double; {Интервал и шаг расчета, текущее время}
i, {Счетчик - номер шага расчета}
N: integer; {Количество шагов расчета}
f: text; {Файл вывода}
filename: string; {Имя файла}
{Расчет значений входных воздействий}
Procedure cX(t: double; var x: DArray);
begin
if t >= 0 then x[1]:=1
else x[1] := 0;
end;
{Вычитатель}
Function Sub (x1,x2:double):double;
begin
Sub:=x1-x2;
end;
{ Звено с ограничением}
Function Lim (x,k,y0,x0:double):double;
var
y:double;
begin
y:=0;
if x>x0 then y:=k*(x-x0)
else if x<-x0 then y:=k*(x+x0);
if y>y0 then y:=y0
else if y<-y0 then y:=-y0;
Lim:=y;
end;
{Интегрирующее звено}
Function Int (x,Yp,dt,T:double):double;
begin
Int:=Yp+dt*x/T;
end;
{ Апереодическое звено}
Function Ap (x,Yp,k,T,dt:double):double;
var
Bp:double;
begin
Bp:=Yp+dt*(k*x-Yp)/T;
Ap:=Yp+0.5*dt*((k*x-Yp)/T+(k*x-Bp)/T);
end;
{Подпрограмма расчета сигналов на текущем шаге}
Procedure CY (Yp:DArray;t,dt:double;var Y:DArray);
var
x:DArray;
begin
cX(t,x);
Y[1]:=Sub(x[1],Y[3]);
Y[2]:=Lim(Y[1],lk[1],ly0[1],lx0[1]);
Y[3]:=Int(Y[2],Yp[3],dt,lT[2]);
Y[4]:=Ap(Y[3],Yp[4],lk[3],lT[3],dt);
end;
{Подпрограмма ввода исходных данных}
Procedure pIn;
var
f: text; {Файл ввода}
begin
write('Введите имя файла ввода ');
readln(filename);
assign(f, filename);
reset(f);
write('Введите имя файла вывода ');
readln(f, filename);
write('Введите постоянную времени интегратора T2 ');
readln(f, lT[2]);
write('Введите коэффициент передачи апериодического звена K1 ');
readln(f, lK[1]);
write('Введите постоянную времени апериодического звена T3 ');
readln(f, lT[3]);
write('Введите коэффициент передачи звена с ограничением K3 ');
readln(f, lK[3]);
write('Введите уровень ограничения y0[1] ');
readln(f,ly0[1]);
write('Введите уровень ограничения x0[1] ');
readln(f,lx0[1]);
write('Введите интервал расчета ');
readln(f, tk);
write('Введите шаг расчета ');
readln(f, dt);
close(f);
end;
Begin
pIn; {Ввод исходных данных}
assign(f, filename); {Открытие файла вывода}
rewrite(f);
fillchar(Y, sizeof(Y), 0); {Задание нулевых начальных условий}
fillchar(Yp, sizeof(Yp), 0);
t := 0;
{Вывод значений в момент времени t=0}
writeln(f, t:13:5, Y[3]:13:5, Y[4]:13:5);
N := round(tk/dt); {Определение количества шагов расчета}
for i := 1 to N do {Цикл по шагам расчета}
begin
t := dt*i; {Определение текущего времени}
CY(Yp,t,dt,Y); {Расчет значений перменных на текущем шаге}
{Вывод рассчитанных значений}
writeln(f, t:13:5, Y[3]:13:5, Y[4]:13:5);
Yp := Y; {Перенос значений на шаг назад}
end;
close(f); {Закрытие файла вывода}
End.
Таблица соответствия переменных
Название переменной |
Назначение |
||
Программа |
|||
Y, Yp |
Массив значений переменных на текущем шаге расчета; Массив значений переменных на предыдущем шаге расчета |
||
lK, lT, lx0,ly0 |
Параметры звеньев: коэффициент передачи, постоянная времени, ширина зоны нечувствительности и уровень ограничения, соответственно |
||
xm, |
Параметры входных переменных: величина скачка (амплитуда) |
||
tk, dt |
Интервал и шаг расчета |
||
I |
Счетчик –номер текущего шага расчета |
||
N |
Количество шагов расчета |
||
F |
Текстовый файл для ввода исходных данных и вывода результатов |
||
filename |
Имя файла вывода |
||
Процедура ввода исходных данных pIn |
|||
lK, lT,lx0,ly0, xm, tk, dt, filename |
То же, что и в программе |
||
F |
Файл ввода |
||
Процедура расчета значений входных воздействий CX |
|||
t |
Текущее время |
||
x |
Рассчитываемые значения |
||
Функция расчета вычитателя Sub |
|||
x1,x2 |
Входной сигнал и сигнал, который вычитается |
||
лооо Функция расчета интегрирующего звена Int |
|||
Yp,x,dt,lt |
То же, что и в программе |
||
Функция расчета апереодического звена Ap |
|||
Yp,x,dt,lT,lk |
То же, что и в программе |
||
Функция расчета звена с ограничением Lim |
|||
X,lk,ly0,lx0 |
То же, что и в программе |
||
Процедура реализации модели CY |
|||
Yp,t,dt,Y |
То же, что и в программе |
||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.