Учреждение образования «Гомельский государственный
технический университет имени П. О. Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Автоматизированный электропривод»
“Моделирование типовых статических и динамических элементов САУ”
Исполнитель: студент гр. ЭП-31
Силивончик А. М.
Руководитель: преподаватель
Захаренко В.С.
Гомель 2005
Цель работы:
-ознакомиться с алгоритмами моделирования статических элементов систем автоматического управления;
-ознакомиться с приемами моделирования динамических элементов;
-получить практические навыки составления программ моделирования по системам дифференциальных уравнений.
Задание:
В данной работе необходимо составить программу для моделирования по системе уравнений системы, состоящей из статических и динамических элементов, рассчитать на ней процессы в системе, и построить диаграммы выходного и внутренних сигналов.
X1=sin(31.4·t), X2=1, K1=1, Y01=0.5, T2=0.5, K3=1, T3=0.4, Интервал расчета 0.5, шаг расчета 0.001. Метод Эйлера. |
Порядок выполнения работы:
1)В соостветствии со схемой модели согласно задания составить нелинейную смешанную систему алгебраических и дифференциальных уравнений.
2)Написать программу моделирования по системе уравнений в соответствии с заданным методом численного решения систем дифференциальных уравнений и составленной системой уравнений.
3)Используя заданные параметры входных воздействий и звеньев модели с помощью составленной программы рассчитать переходной процесс.
4)Построить в программе MathCAD диаграммы переходных процессов.
Ход работы
Составляем систему алгебраических и дифференциальных уравнений:
Описание переменных
Y, Yp Значения переменных модели, для которых есть дифференциальные уравнения, на текущем и предыдущем шагах расчета, соответственно
Z Значения переменных модели, для которых есть алгебраические уравнения, на текущем шаге расчета
lK, lT, ly0 Параметры звеньев: коэффициент передачи, постоянная времени и уровень ограничения, соответственно
xm Величина скачка (амплитуда) входных переменных
tk, dt, t Интервал и шаг расчета, текущее время
i Счетчик шагов расчета
N Количество шагов расчета
f Файл вывода
filename Имя файла вывода
f Файл ввода
Yp, t, dt, Y, Z То же, что и в программе
F Рассчитываемые значения правых частей дифференциальных уравнений
j Счетчик дифференциальных уравнений
Y Значения переменных модели (для которых есть дифференциальные уравнения), по которым рассчитываются правые части дифференциальных уравнений
t Текущее время
Z Рассчитываемые значения алгебраических уравнений
F Рассчитываемые значения правых частей дифференциальных уравнений
x Значения входных воздействий
Процедура расчета значений входных воздействий cX
t Текущее время
x Рассчитываемые значения
Текст программы
Program L1Example;
{Metod Ejlera}
Type
DArray = array [1..10] of double;
Procedure pX(xm, w: DArray; tt: double; var x: DArray);
begin
if tt > 0 then x[2] := xm[2] else x[2] := 0;
end;
Procedure pF(Y, K, T, x0, y0, xm, w: DArray; tt: double; var Z, F: DArray);
var
x: DArray;
begin
pX(xm, w, tt, x);
x[1]:=sin(31.4*tt);
F[1] := X[2]/T[2];
F[2] := (K[3]*Y[1] - Y[2])/T[3];
Z[1] := K[1]*X[1];
if Z[1] > y0[1] then Z[1] := y0[1]
else if Z[1] < -y0[1] then Z[1] := -y0[1];
Z[2] := Z[1] * Y[2];
end;
Procedure pY(Yp, K, T, x0, y0, xm, w: DArray; tt, dt: double;
var Y, Z: DArray);
var
F: DArray;
i: integer;
begin
pF(Yp, K, T, x0, y0, xm, w, tt-dt, Z, F);
for i := 1 to 2 do
Y[i] := Yp[i] + dt*F[i];
end;
Procedure pIn(var K, T, x0, y0, xm, w: DArray; var tk, dt: double;
var filename: string);
var
f: text;
begin
write('Vvedite imja fajla vvoda ');
readln(filename);
assign(f, filename);
reset(f);
write('Vvedite imja fajla vivoda ');
readln(f, filename);
write('X2 ');
readln(f, xm[2]);
write('T2 ');
readln(f, T[2]);
write('K1 ');
readln(f, K[1]);
write('T3 ');
readln(f, T[3]);
write('K3 ');
readln(f, K[3]);
write('y01 ');
readln(f, y0[1]);
write('t ');
readln(f, tk);
write('dt ');
readln(f, dt);
close(f);
end;
Var
Y, Yp, Z, K, T, x0, y0, xm, w: DArray;
tk, dt, tt: double;
i, N: integer;
f: text;
filename: string;
Begin
pIn(K, T, x0, y0, xm, w, tk, dt, filename);
assign(f, filename);
rewrite(f);
fillchar(Y, sizeof(Y), 0);
fillchar(Yp, sizeof(Yp), 0);
fillchar(Z, sizeof(Z), 0);
tt := 0;
writeln(f, tt:13:5, Y[1]:13:5, Y[2]:13:5, Z[2]:13:5);
N := round(tk/dt);
for i := 1 to N do
begin
tt := dt*i;
pY(Yp, K, T, x0, y0, xm, w, tt, dt, Y, Z);
writeln(f, tt:13:5, Y[1]:13:5, Y[2]:13:5, Z[2]:13:5);
Yp := Y;
end;
close(f);
End.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.