Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 23.05.2014, 14:13   #1 (permalink)
Agnophobia
Новичок
 
Регистрация: 02.03.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите с выводом графика в Паскале

Ребят, очень нужна помощь по программе. Нужно, чтобы она рисовала графики зависимостей тока от времени и угловой скорости от времени. По каким-то причинам, она не хочет этого делать, выдает пустые оси с сеткой и все.

Код:
program fili;
uses crt, Graph;
var dv,Udp,Uds,Udt,kdp,kds,kdt,krp,krs,krt,tpp,Uz,
Fi,w,Uship,kship,tship,Ic,Ia,Mn,Mdob,Mmax,Ia_max,
Ra,Trs,Trp,Trt,Fi_max,dUp1,dUw1,dUt1,Tac,c,
Jc,dt,w_max,t,Uz1,n,Urs,Urt,dUt,dUp,dUp0,dUw,Urp1,Urp,
Uacp,Urs1,dUs,dUw0,Urt1,dUt0,Uship1,Ia1,dI,w1,Tm,Fi1,k,x,t1,Udp1:real;
RAZ,NEL,m:integer;
q: String;

GrDriver,GrMode,Color: Integer;

begin
clrscr;

Ra:=0.93;               {Активное сопротивление якоря цепи}
Tac:=0.0045;            {Постоянная времени якорной цепи}
Uz:=10;                {Максимальное напряжение задания}
m:=12;                  {Разрядность АЦП}
krs:=4.31;              {Коэффициент усиления регулятора скорости}
Trs:=0.036;             {Постоянная времени регулятора скорости}
krt:=7.24;             {Коэффициент усиления регулятора тока*}
Trt:=0.0045;             {Постоянная времени регулятора тока*}
kship:=10.33;             {Коэффициент тиристорного преобразователя}
Tship:=0.0002;
krp:=2.19;
Trp:=0.09;
c:=0.822;               {Конструктивная постоянная двигателя}
Jc:=0.036;             {Момент инерции системы}
tpp:=0.24;              {Время переходного процесса}
dt:=0.0001;             {Шаг по времени}
w_max:=125.65;          {Максимальная скорость на выходе системы}
Mn:=7.4;                 {Номинальный момент на выходе системы}
Ia_max:=71;              {Максимальный ток на выходе электрической части двигателя}
t:=0;                   {Время начала переходного процесса}
n:=0;                   {Начало нумерации}
w:=0;                   {Начальная угловая скорость}
Fi:=0;
Urs:=0;                 {Начальное напряжение на выходе регулятора скорости}
Urt:=0;                 {Начальное напряжение на выходе регулятора тока}
Ia:=0;                  {Начальный ток на выходе электической части двигателя}
dUw:=0;                 {Начальное напряжение на входе АЦП}
dUt:=0;                 {Начальное напряжение на входе регулятора тока}
dUp:=0;
kdp:=0.95;
Tm:=0.0045;
dv:=0.462748;

writeln('Введите напряжение задания, U');
readln(Uz);
if Uz=0 then
Uz1:=0.9
else
Uz1:=Uz;
Udp:=Fi*kdp;
writeln('Исследовать разомкнутую систему? [1-да*/2-*нет]');
readln(RAZ);

if RAZ=2 then begin
writeln('Включить нелинейность? [1-да*/2-*нет]');
k:=2*(Uz1/Uz);
x:=6*(Uz1/Uz);
readln(NEL);
clrscr;
end;

Color:=15;
GrDriver:=VGA;GrMode:=VGAHi;InitGraph(GrDriver,GrMode,'d:\downloads\BP70\BGI');

if RAZ=1 then begin
kdp:=0;
tpp:=10*dt;
NEL:=2;
tpp:=10*dt;
dt:=tpp/500;
k:=0.025*(Uz1/Uz);
x:=6*(Uz1/Uz);
end;

if RAZ=2 then begin
if abs(Udp)>=Uz then Udp:=Uz*abs(Udp)/Udp;
end;
dUp1:=Uz-Udp;

if RAZ=2 then begin
if abs(dUp1)>=Uz then dUp1:=Uz*abs(dUt)/dUp1;
end;
Urp1:=Urp+Krp*(dUp-dUp0)+(Krp*dUp*dt)/Trp;

if RAZ=2 then begin
if abs(Urp1)>=Uz then Urp1:=Uz*abs(Urp1)/Urp1;
end;
Uds:=w*kds;

if RAZ=2 then begin
if abs(Uds)>=Uz then Uds:=Uz*abs(Uds)/Uds;
end;
dUw1:=Urp1-Uds;

if RAZ=2 then begin
if abs(dUw1)>=Uz then dUw1:=Uz*abs(dUw1)/dUw1;
end;
dv:=10/((exp(m*ln(2)))-1);
Uacp:=dv*trunc(dUw1/dv);

Urs1:=Urs+Krs*(dUw-dUw0)+(Krs*dUs*dt)/Trs;

if RAZ=2 then begin
if abs(Urs1)>=Uz then Urs1:=Uz*abs(Urs1)/Urs1;
end;
Udt:=Ia*kdt;

if RAZ=2 then begin
if abs(Udt)>=Uz then Udt:=Uz*abs(Udt)/Udt;
end;
dUt1:=Urs1*Udt;

if RAZ=2 then begin
if abs(dUt1)>=Uz then dUt1:=Uz*abs(dUt1)/dUt1;
end;
Urt1:=Urt+Krt*(dUt-dUt0)+(Krt*dUt*dt)/Trt;

if RAZ=2 then begin
if abs(Urt1)>=Uz then Urt1:=Uz*abs(Urt1)/Urt1;
end;
Uship1:=Uship+(kship*Urt1-Uship)*(dt/Tship);
Ia1:=Ia+((1/Ra)*Uship1-Ia)*(dt/Tac);

if NEL=1 then Ic:=0;
if NEL=2 then begin
if abs(w)<=0.5*w_max then Mdob:=(Mn/(0.5*w_max))*w
else Mdob:=Mn;
end;
dI:=Ia1-Ic;
w1:=w*(Ra*dI*dt)/(c*Tm);
Fi1:=(w*(Ra*dI*dt)/(c*Tm))*t;
t1:=t+dt;

PutPixel
(Round(50+t*500/tpp),Round(350-w*450/(k*w_max)),15);
PutPixel
(Round(50+t*500/tpp),Round(350-Ia*450/(x*Ia_max)),15);


Line(50,350,630,350);
Line(630,350,620,347);
Line(630,350,620,353);
Line(50,10,50,450);
Line(50,10,47,20);
Line(50,10,53,20);

OutTextXY(60,25,'w, rad/s');
OutTextXY(0,25,'I, A');
OutTextXY(605,358,'t, s');

Str(Uz:3:1,q);
OutTextXY(270,20,'Uz = '+q+' V');
Str(w1:7:4,q);
OutTextXY(480,10,'w = '+q+' rad/s');
Str(Ia1:7:4,q);
OutTextXY(480,20,'I = '+q+' A');
Str(Fi:7:4,q);
OutTextXY(480,30,'Fi = '+q+' rad');

Line(150,50,150,350);
Line(150,368,150,450);
Line(250,50,250,350);
Line(250,368,250,450);
Line(350,50,350,350);
Line(350,368,350,450);
Line(450,50,450,350);
Line(450,368,450,450);
Line(550,50,550,350);
Line(550,368,550,450);

Line(50,50,54,50);
Line(104,50,550,50);
Line(50,100,54,100);
Line(104,100,550,100);
Line(50,150,54,150);
Line(104,150,550,150);
Line(50,200,54,200);
Line(104,200,550,200);
Line(50,250,54,250);
Line(104,250,550,250);
Line(50,300,54,300);
Line(104,300,550,300);
Line(50,400,54,400);
Line(104,400,550,400);
Line(50,450,54,450);
Line(104,450,550,450);

Str(0:1,q);
OutTextXY(30,356,q);

Str((100*tpp/500):5:4,q);
OutTextXY(125,356,q);
Str((200*tpp/500):5:4,q);
OutTextXY(225,356,q);
Str((300*tpp/500):5:4,q);
OutTextXY(325,356,q);
Str((400*tpp/500):5:4,q);
OutTextXY(425,356,q);
Str((500*tpp/500):5:4,q);
OutTextXY(525,356,q);

Str((x*Ia_max*(50/450)):5:1,q);
OutTextXY(0,300,q);
Str((x*Ia_max*(100/450)):5:1,q);
OutTextXY(0,250,q);
Str((x*Ia_max*(150/450)):5:1,q);
OutTextXY(0,200,q);
Str((x*Ia_max*(200/450)):5:1,q);
OutTextXY(0,150,q);
Str((x*Ia_max*(250/450)):5:1,q);
OutTextXY(0,100,q);
Str((x*Ia_max*(300/450)):5:1,q);
OutTextXY(0,50,q);
Str((x*(-Ia_max)*(50/450)):5:1,q);
OutTextXY(0,400,q);
Str((x*(-Ia_max)*(100/450)):5:1,q);
OutTextXY(0,450,q);

Str((k*(-w_max)*(100/450)):5:1,q);
OutTextXY(60,450,q);
Str((k*(-w_max)*(50/450)):5:1,q);
OutTextXY(60,400,q);
Str((k*w_max*(50/450)):5:1,q);
OutTextXY(60,300,q);
Str((k*w_max*(100/450)):5:1,q);
OutTextXY(60,250,q);
Str((k*w_max*(150/450)):5:1,q);
OutTextXY(60,200,q);
Str((k*w_max*(200/450)):5:1,q);
OutTextXY(60,150,q);
Str((k*w_max*(250/450)):5:1,q);
OutTextXY(60,100,q);
Str((k*w_max*(300/450)):5:1,q);
OutTextXY(60,50,q);
if t1<tpp then
begin
t:=t1;
w:=w1;
Urs:=Urs1;
Urt:=Urt1;
Ia:=Ia1;
dUw:=dUw1;
dUt:=dUt1;
end;
readln;
end.
Agnophobia вне форума   Ответить с цитированием

Старый 23.05.2014, 14:13
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно ответы найденные в этих темах вам помогут

Проблема с выводом приложений
Задача в Паскале на построение графика функции
Намотка вторичной обмотки ИТ со средним выводом
Проблема с выводом изображения на дисплей
Проблемы с выводом изображения на монитор

Старый 23.05.2014, 14:44   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Посмотрю, но не сегодня. И ТОЛЬКО при условии, что будет выложена задача целиком, т.е. алгоритм нахождения всех этих токов да угловых скоростей.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.05.2014, 16:21   #3 (permalink)
Agnophobia
Новичок
 
Регистрация: 02.03.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Посмотрю, но не сегодня. И ТОЛЬКО при условии, что будет выложена задача целиком, т.е. алгоритм нахождения всех этих токов да угловых скоростей.
Алгоритм выполнен в Visio, но думаю, что это не проблема.
Заранее спасибо.
Вложения
Тип файла: 7z Алгоритм.7z (37.5 Кб, 88 просмотров)
Agnophobia вне форума   Ответить с цитированием
Старый 23.05.2014, 16:46   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Agnophobia Посмотреть сообщение
Алгоритм выполнен в Visio, но думаю, что это не проблема. Заранее спасибо.
Посмотрел - нет, это не то. Мне не нужна блок-схема, мне бы желательны формулы, по которым решается задача. Или никак?
Vladimir_S вне форума   Ответить с цитированием
Старый 23.05.2014, 18:07   #5 (permalink)
Agnophobia
Новичок
 
Регистрация: 02.03.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Посмотрел - нет, это не то. Мне не нужна блок-схема, мне бы желательны формулы, по которым решается задача. Или никак?
У меня есть только расчеты самих регуляторов и величин, которые используются для моделирования электропривода. У нас стоит задача по схеме построить алгоритм (блок-схему) и написать по ней программу, которая выдает характеристики и значения тока и угловой скорости. Все расчеты этих токов, скоростей и положений ведутся непосредственно в программе.
Счетчики(выходные величины) расположены в конце самой блок-схемы dI(ток), w1(угловая скорость), Fi(положение). И претензий вроде к этому всему не было. Проблема только с выводом графиков.
Я понимаю, что так разобраться в этом всем не получится, но может быть допущена какая-то элементарная ошибка, в которой кроется вся суть проблемы.
Agnophobia вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.05.2014, 20:09   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Да-а... Друг мой, Вы что же, никогда не слышали о таком понятии, как цикл? Ладно, нарисовали координатную сетку, проведя каждую прямую индивидуально (хотя, конечно, следовало бы через циклы), разметили, а дальше? А дальше Вы сосчитали значение своих зависимостей в одной-единственной точке и эту точку вывели на экран оператором PutPixel. А надо для каждой из выводимых функций задать циклы! Например, если Вы наперед знаете количество точек N=T/dt, где T - полный интервал времени, то цикл можно задать в виде
for i:=0 to N do
begin
{здесь дается приращение t в виде t:=t+dt; либо t:=dt*i; дальше для этого t вычисляются значения обеих функций, дальше и t, и полученные значения пересчитываются в графические переменные и выводятся на экран либо оператором PutPixel (если Вы хотите рисовать точками), либо LineTo (если непрерывной кривой; в этом случае нужно, правда, перед запуском цикла загнать графический маркер в исходную позицию оператором MoveTo) }
end;
Можно также воспользоваться циклами с предусловием
While t<=T do
begin
{содержимое цикла то же, что и в предыдущем случае}
end;
либо с постусловием
Repeat
{содержимое цикла}
Until t>T;
Но хоть какой-то цикл, да нужен, а у Вас вовсе никакого нет. Так чего ж Вы ждёте от программы?
Vladimir_S вне форума   Ответить с цитированием
Старый 24.05.2014, 21:15   #7 (permalink)
Agnophobia
Новичок
 
Регистрация: 02.03.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Да-а... Друг мой, Вы что же, никогда не слышали о таком понятии, как цикл? Ладно, нарисовали координатную сетку, проведя каждую прямую индивидуально (хотя, конечно, следовало бы через циклы), разметили, а дальше? А дальше Вы сосчитали значение своих зависимостей в одной-единственной точке и эту точку вывели на экран оператором PutPixel. А надо для каждой из выводимых функций задать циклы! Например, если Вы наперед знаете количество точек N=T/dt, где T - полный интервал времени, то цикл можно задать в виде
for i:=0 to N do
begin
{здесь дается приращение t в виде t:=t+dt; либо t:=dt*i; дальше для этого t вычисляются значения обеих функций, дальше и t, и полученные значения пересчитываются в графические переменные и выводятся на экран либо оператором PutPixel (если Вы хотите рисовать точками), либо LineTo (если непрерывной кривой; в этом случае нужно, правда, перед запуском цикла загнать графический маркер в исходную позицию оператором MoveTo) }
end;
Можно также воспользоваться циклами с предусловием
While t<=T do
begin
{содержимое цикла то же, что и в предыдущем случае}
end;
либо с постусловием
Repeat
{содержимое цикла}
Until t>T;
Но хоть какой-то цикл, да нужен, а у Вас вовсе никакого нет. Так чего ж Вы ждёте от программы?
Спасибо, буду пробовать
Я с языками программирования можно сказать вообще не знаком, не моя это сфера, поэтому и такие ошибки.
Agnophobia вне форума   Ответить с цитированием
Старый 24.05.2014, 22:33   #8 (permalink)
Agnophobia
Новичок
 
Регистрация: 02.03.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

В общем, попробовал я ввести эти циклы, но ничего не изменилось, графики так и не рисуются.
Прям беда какая-то.
Agnophobia вне форума   Ответить с цитированием
Старый 25.05.2014, 08:59   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Agnophobia Посмотреть сообщение
В общем, попробовал я ввести эти циклы, но ничего не изменилось, графики так и не рисуются.
Прям беда какая-то.
Естественно, не видя Ваших проб, ничего сказать не могу. Единственное, чем могу пока помочь - это в качестве образца дать ссылку на тему, где осуществляется построение графика простой функции. Посмотрите, может быть понятнее станет:
Построение графика нелинейного уравнения, Turbo Pascal
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 17:43.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.