- среднее и действующее значения токов и выходного напряжения;
- коэффициент пульсации выпрямленного напряжения;
- коэффициент мощности и т.д.
ПРИЛОЖЕНИЕ 1
PROGRAM primer
INTEGER iwork(5)
parameter n=2
REAL l(n,n),r(n,n),rv(n),lv(n),lob(n,n),e(n),lo,la,ro,ra
real alfa(2),tok(2),a(n,n),b(n),work(6*n+3)
COMMON /matrix/a,b
external fun
pi=3.141592654
c
c вводятся, если нужно, необходимые значения и параметры
write(6,1)
1 format(' введите значения Едвиг, Угла упр.(град) и шага интегрир.')
read(5,*)edwig,ugol,dt
c
c присваиваются и вычисляются требуемые величины и векторы
t=0.
tk=0.08
tper=0.-dt
lo=0.001
ro=0.1
ra=1.
la=0.02
to=t
re=1.e-6
ae=0.
iflag=1
do 2 i=1,2
rv(i)=10000.
2 lv(i)=100.
c
c формирование вектора alfa, задание начальных токов
alfa(1)=ugol
alfa(2)=ugol+180.
do 10 i=1,2
if(alfa(I).ge.360.)alfa(i)=alfa(i)-360.
10 tok(i)=0.
c определение переменной, необходимой для численного дифференцирования
tokst=tok(1)+tok(2)
c
c подготовка к выводу информации на график
c ------------------------------------------------------write(6,101)
101 format(' каков шаг печати (целое число)?')
read(5,*)nipp
nip=nipp
call graf_init
c окно для вывода напряжения на двигателе
call init(1,10.,5.,700.,110.,0.,0.08,-100.,100.)
c окно для вывода тока, протекающего через двигатель
call init(2,10.,125.,700.,110.,0.,0.08,-100.,100.)
c окно для вывода тока, протекающего через тиристор VD2
call init(3,10.,245.,700.,110.,0.,0.08,-100.,100.)
c окно для вывода тока, протекающего через тиристор VD1
call init(4,10.,365.,700.,110.,0.,0.08,-100.,100.)
c
c цикл пошагового моделирования работы управляемого выпрямителя
c ---------------------------------------------------------------30 continue
c
c вычисление относительного времени периода
tper=tper+dt
if(tper.gt.0.02)tper=tper-0.02
c
c блок логики, реализующий функцию запирания и отпирания тиристоров
do 20 i=1,2
if(tok(i).ge.0)go to 15
c оператор, корректирующий вычислительную ошибку
if(tok(i).lt.-1.e-4)tok(i)=-1.e-4
rv(i)=10000.
lv(i)=100.
15 if(abs(tper-alfa(i)/18000).gt.dt/2)go to 20
rv(i)=0.001
lv(i)=0.00001
20 continue
c
c Определение реальных значений матриц Параметров L u R
l(1,1)=lo+lv(1)+la
l(1,2)=la
l(2,1)=la
l(2,2)=lo+lv(2)+la
r(1,1)=ro+rv(1)+ra
r(1,2)=ra
r(2,1)=ra
r(2,2)=ro+rv(2)+ra
c
c вычисление матриц L**(-1), A=-L**(-1)*R u B=L**(-1)*E
call obra(l,lob,n,ifl)
if(ifl.eq.0)go to 35
print*,' ищите ошибку, матрица особенная'
stop
35 e2=100*sin(100*pi*t)
e(1)=e2-edwig
e(2)=-e2-edwig
do 40 i=1,2
b(i)=0
do 40 j=1,2
a(i,j)=0
b(i)=b(i)+lob(i,j)*e(j)
do 40 k=1,2
40 a(i,j)=a(i,j)-lob(i,k)*r(k,j)
c
c моделирование выпрямителя на 1 шаг (dt)
75 CALL RKF45(fun,n,tok,t,to,re,ae,iflag,work,iwork)
go to(88,82,83,84,85,86,87,88),iflag
83 iflag=2
re=re*10
go to 75
84 iflag=2
go to 75
85 iflag=2
ae=1.e-6
go to 75
86 iflag=2
re=re*10
go to 75
87 iflag=2
go to 75
88 stop111
c интегрирование на один шаг закончилось успешно
82 t=to
to=to+dt
re=1.e-6
ae=0.
c вывод результатов моделирования
tokdwg=tok(1)+tok(2)
udwig=ra*tokdwg+la*(tokdwg-tokst)/dt+edwig
tokst=tokdwg
nip=nip+1
if(nip.lt.nipp)go to 30
nip=0
call QUT(1,t,udwig)
call QUT(2,t,tokdwg)
call QUT(3,t,tok(2))
call QUT(4,t,tok(1))
if(t.lt.tk) go to 30
end
subroutine fun(t,x,xp)
c подпрограмма вычисления правых частей системы дифференциальных уравнений с
real x(2),xp(2)
common /matrix/a(2,2),b(2)
do 10 i=1,2
xp(i)=b(i)
do 10 j=1,2
c оператор, необходимый для корректирования вычислительной погрешности
if(x(j).lt.-2.e-4)x(j)=-2.e-4
xp(i)=xp(i)+a(i,j)*x(j)
10 continue
return
end
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.