|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- subroutine TopDrive_Traction_Motor
-
- use CDrillingConsoleVariables
- use CDataDisplayConsoleVariables
- use CSimulationVariables
- use CTopDrivePanelVariables
- use TopDrive_VARIABLES
- use equipments_PowerLimit
-
- IMPLICIT NONE
-
- !integer :: jnomb
- !jnomb = 0
-
- !>>>>>>>>>>>>>>>>>>>>>>> DATA <<<<<<<<<<<<<<<<<<<<<<<<<<<
- TDS%TL = (TDS%String_Torque+TDS%ConstLoad)/(TDS%Mech_Efficiency*TDS%Conv_Ratio)
-
- La = 1700.*1d-6
- Lf = 260.*1d-6
- Ra = 9.5*1d-3
- !Rf = 5.4*1d-3
- Rf = 0.
-
- !******** controller *******
- Kpn = 50.d0
- Kin = 3.d0
- Kpi = 100.d0
- Kii = 900.d0
-
- TDS%time = TDS%time_step
- TDS%dt = 1.d-5
- TDS%error = .001
-
- !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
- TDS%n = TDS%time/TDS%dt
- TDS%w_ref = (pi*(TDS%N_ref)/30.)
- TDS%ia_ref_limit = TopDriveTorqueLimitKnob/60.d0
-
- TDS%ia_er = 1.
- TDS%w_er = 1.
- TDS%x_er = 1.
- TDS%y_er = 1.
-
- TDS%i = 1
-
- !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- DO WHILE (TDS%i<=TDS%n)
-
-
- !>>>>>>>>>>>> Runge-Kutta Method (4th order) <<<<<<<<<<<<<<
-
- call TDS_dx((TDS%i*TDS%dt),TDS%ia,TDS%w,TDS%x,TDS%y)
- call TDS_dy((TDS%i*TDS%dt),TDS%ia,TDS%w,TDS%x,TDS%y)
- call TDS_dia((TDS%i*TDS%dt),TDS%ia,TDS%w,TDS%fii,TDS%x,TDS%y)
- call TDS_dw((TDS%i*TDS%dt),TDS%ia,TDS%w,TDS%fii,TDS%TL)
- TDS%K1x = TDS%dt*TDS%dx
- TDS%K1y = TDS%dt*TDS%dy
- TDS%K1ia = TDS%dt*TDS%dia
- TDS%K1w = TDS%dt*TDS%dw
-
- call TDS_dx((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K1ia/2.),TDS%w+(TDS%K1w/2.),TDS%x+(TDS%K1x/2.),TDS%y+(TDS%K1y/2.))
- call TDS_dy((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K1ia/2.),TDS%w+(TDS%K1w/2.),TDS%x+(TDS%K1x/2.),TDS%y+(TDS%K1y/2.))
- call TDS_dia((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K1ia/2.),TDS%w+(TDS%K1w/2.),TDS%fii,TDS%x+(TDS%K1x/2.),TDS%y+(TDS%K1y/2.))
- call TDS_dw((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K1ia/2.),TDS%w+(TDS%K1w/2.),TDS%fii,TDS%TL)
- TDS%K2x = TDS%dt*TDS%dx
- TDS%K2y = TDS%dt*TDS%dy
- TDS%K2ia = TDS%dt*TDS%dia
- TDS%K2w = TDS%dt*TDS%dw
-
- call TDS_dx((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K2ia/2.),TDS%w+(TDS%K2w/2.),TDS%x+(TDS%K2x/2.),TDS%y+(TDS%K2y/2.))
- call TDS_dy((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K2ia/2.),TDS%w+(TDS%K2w/2.),TDS%x+(TDS%K2x/2.),TDS%y+(TDS%K2y/2.))
- call TDS_dia((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K2ia/2.),TDS%w+(TDS%K2w/2.),TDS%fii,TDS%x+(TDS%K2x/2.),TDS%y+(TDS%K2y/2.))
- call TDS_dw((TDS%i*TDS%dt)+(TDS%dt/2.),TDS%ia+(TDS%K2ia/2.),TDS%w+(TDS%K2w/2.),TDS%fii,TDS%TL)
- TDS%K3x = TDS%dt*TDS%dx
- TDS%K3y = TDS%dt*TDS%dy
- TDS%K3ia = TDS%dt*TDS%dia
- TDS%K3w = TDS%dt*TDS%dw
-
- call TDS_dx((TDS%i*TDS%dt)+TDS%dt,TDS%ia+TDS%K3ia,TDS%w+TDS%K3w,TDS%x+TDS%K3x,TDS%y+TDS%K3y)
- call TDS_dy((TDS%i*TDS%dt)+TDS%dt,TDS%ia+TDS%K3ia,TDS%w+TDS%K3w,TDS%x+TDS%K3x,TDS%y+TDS%K3y)
- call TDS_dia((TDS%i*TDS%dt)+TDS%dt,TDS%ia+TDS%K3ia,TDS%w+TDS%K3w,TDS%fii,TDS%x+TDS%K3x,TDS%y+TDS%K3y)
- call TDS_dw((TDS%i*TDS%dt)+TDS%dt,TDS%ia+TDS%K3ia,TDS%w+TDS%K3w,TDS%fii,TDS%TL)
- TDS%K4x = TDS%dt*TDS%dx
- TDS%K4y = TDS%dt*TDS%dy
- TDS%K4ia = TDS%dt*TDS%dia
- TDS%K4w = TDS%dt*TDS%dw
-
- TDS%x_new = TDS%x_old+((TDS%K1x+(2.*TDS%K2x)+(2.*TDS%K3x)+TDS%K4x)/6.)
- TDS%y_new = TDS%y_old+((TDS%K1y+(2.*TDS%K2y)+(2.*TDS%K3y)+TDS%K4y)/6.)
- TDS%ia_new = TDS%ia_old+((TDS%K1ia+(2.*TDS%K2ia)+(2.*TDS%K3ia)+TDS%K4ia)/6.)
- TDS%w_new = TDS%w_old+((TDS%K1w+(2.*TDS%K2w)+(2.*TDS%K3w)+TDS%K4w)/6.)
-
- !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
- TDS%x_old = TDS%x_new
- TDS%y_old = TDS%y_new
- TDS%ia_old = TDS%ia_new
- TDS%w_old = TDS%w_new
- TDS%x = TDS%x_new
- TDS%y = TDS%y_new
- TDS%ia = TDS%ia_new
- TDS%w = TDS%w_new
- TDS%Te = TDS%fii*TDS%ia_new
-
- !if (jnomb==0) then
- ! print*, 'TDS%Vt0=', TDS%Vt
- ! jnomb=1
- !end if
- TDS%ia_ref = TDS%y_new+Kpn*((30.0*TDS%w_ref/pi)-(30.0*TDS%w_new/pi))
- call RTTorqueLimit
- TDS%Vt = TDS%x_new+(Kpi*(TDS%ia_ref-TDS%ia_new))
- !call PowerLimits
- !if (Power_sigma>max_Power_sigma) then
- ! TDS%Vt = TDS%Vt
- !else
- ! TDS%Vt = TDS%x_new+(Kpi*(TDS%ia_ref-TDS%ia_new))
- !end if
-
- IF (TDS%Vt>810.) THEN
- TDS%Vt = 810.0
- ELSE IF (TDS%Vt<0.) THEN
- TDS%Vt = 0.0
- END IF
-
-
-
-
- TDS%i = TDS%i+1
-
-
- END DO
- !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
-
-
-
-
- END subroutine
|