subroutine Pump_Traction_Motor(Pump_No) use Pump_VARIABLES use CPumpsVariables use CDrillingConsoleVariables use CDataDisplayConsoleVariables use CSimulationVariables IMPLICIT NONE INTEGER :: Pump_No !>>>>>>>>>>>>>>>>>>>>>>> DATA <<<<<<<<<<<<<<<<<<<<<<<<<<< PUMP(Pump_No)%TL = 0.112985*PUMP(Pump_No)%Torque/2.d0 La = 1700.*1d-6 !170.*1d-6 !1700.*1d-6 !Lf = 260.*1d-6 Lf = 0.d0 Ra = 9.5*1d-3 !0.1d0 !9.5*1d-3 !Rf = 5.4*1d-3 Rf = 0.d0 !******** controller ******* Kpn = 11. !3. !=11. !Kin = 50. Kpi = 100. Kii = 900. PUMP(Pump_No)%time = PUMP(Pump_No)%time_step PUMP(Pump_No)%dt = 1.d-5 PUMP(Pump_No)%error = .001 !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< PUMP(Pump_No)%n = PUMP(Pump_No)%time/PUMP(Pump_No)%dt !PUMP(Pump_No)%w_ref = (pi*(PUMP(Pump_No)%N_ref+102.d0)/30.d0) PUMP(Pump_No)%w_ref = (pi*(PUMP(Pump_No)%N_ref)/30.d0) !if (PUMP(Pump_No)%N_ref<=0.) then ! PUMP(Pump_No)%w_ref = 0. !end if !if (PUMP(Pump_No)%N_ref<=0.) then ! PUMP(Pump_No)%w_ref = 0. ! PUMP(Pump_No)%w_old = 0. ! PUMP(Pump_No)%w = 0. !end if PUMP(Pump_No)%ia_er = 1. PUMP(Pump_No)%w_er = 1. PUMP(Pump_No)%x_er = 1. PUMP(Pump_No)%i = 1 !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DO WHILE (PUMP(Pump_No)%i<=PUMP(Pump_No)%n) !>>>>>>>>>>>> Runge-Kutta Method (4th order) <<<<<<<<<<<<<< call Pump_dx((PUMP(Pump_No)%i*PUMP(Pump_No)%dt),PUMP(Pump_No)%ia,PUMP(Pump_No)%w,PUMP(Pump_No)%x,Pump_No) call Pump_dia((PUMP(Pump_No)%i*PUMP(Pump_No)%dt),PUMP(Pump_No)%ia,PUMP(Pump_No)%w,PUMP(Pump_No)%fii,PUMP(Pump_No)%x,Pump_No) call Pump_dw((PUMP(Pump_No)%i*PUMP(Pump_No)%dt),PUMP(Pump_No)%ia,PUMP(Pump_No)%w,PUMP(Pump_No)%fii,PUMP(Pump_No)%TL,Pump_No) PUMP(Pump_No)%K1x=PUMP(Pump_No)%dt*PUMP(Pump_No)%dx PUMP(Pump_No)%K1ia=PUMP(Pump_No)%dt*PUMP(Pump_No)%dia PUMP(Pump_No)%K1w=PUMP(Pump_No)%dt*PUMP(Pump_No)%dw call Pump_dx((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K1ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K1w/2.),PUMP(Pump_No)%x+(PUMP(Pump_No)%K1x/2.),Pump_No) call Pump_dia((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K1ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K1w/2.),PUMP(Pump_No)%fii,PUMP(Pump_No)%x+(PUMP(Pump_No)%K1x/2.),Pump_No) call Pump_dw((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K1ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K1w/2.),PUMP(Pump_No)%fii,PUMP(Pump_No)%TL,Pump_No) PUMP(Pump_No)%K2x=PUMP(Pump_No)%dt*PUMP(Pump_No)%dx PUMP(Pump_No)%K2ia=PUMP(Pump_No)%dt*PUMP(Pump_No)%dia PUMP(Pump_No)%K2w=PUMP(Pump_No)%dt*PUMP(Pump_No)%dw call Pump_dx((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K2ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K2w/2.),PUMP(Pump_No)%x+(PUMP(Pump_No)%K2x/2.),Pump_No) call Pump_dia((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K2ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K2w/2.),PUMP(Pump_No)%fii,PUMP(Pump_No)%x+(PUMP(Pump_No)%K2x/2.),Pump_No) call Pump_dw((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+(PUMP(Pump_No)%dt/2.),PUMP(Pump_No)%ia+(PUMP(Pump_No)%K2ia/2.),PUMP(Pump_No)%w+(PUMP(Pump_No)%K2w/2.),PUMP(Pump_No)%fii,PUMP(Pump_No)%TL,Pump_No) PUMP(Pump_No)%K3x=PUMP(Pump_No)%dt*PUMP(Pump_No)%dx PUMP(Pump_No)%K3ia=PUMP(Pump_No)%dt*PUMP(Pump_No)%dia PUMP(Pump_No)%K3w=PUMP(Pump_No)%dt*PUMP(Pump_No)%dw call Pump_dx((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+PUMP(Pump_No)%dt,PUMP(Pump_No)%ia+PUMP(Pump_No)%K3ia,PUMP(Pump_No)%w+PUMP(Pump_No)%K3w,PUMP(Pump_No)%x+PUMP(Pump_No)%K3x,Pump_No) call Pump_dia((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+PUMP(Pump_No)%dt,PUMP(Pump_No)%ia+PUMP(Pump_No)%K3ia,PUMP(Pump_No)%w+PUMP(Pump_No)%K3w,PUMP(Pump_No)%fii,PUMP(Pump_No)%x+PUMP(Pump_No)%K3x,Pump_No) call Pump_dw((PUMP(Pump_No)%i*PUMP(Pump_No)%dt)+PUMP(Pump_No)%dt,PUMP(Pump_No)%ia+PUMP(Pump_No)%K3ia,PUMP(Pump_No)%w+PUMP(Pump_No)%K3w,PUMP(Pump_No)%fii,PUMP(Pump_No)%TL,Pump_No) PUMP(Pump_No)%K4x=PUMP(Pump_No)%dt*PUMP(Pump_No)%dx PUMP(Pump_No)%K4ia=PUMP(Pump_No)%dt*PUMP(Pump_No)%dia PUMP(Pump_No)%K4w=PUMP(Pump_No)%dt*PUMP(Pump_No)%dw PUMP(Pump_No)%x_new = PUMP(Pump_No)%x_old+((PUMP(Pump_No)%K1x+(2.*PUMP(Pump_No)%K2x)+(2.*PUMP(Pump_No)%K3x)+PUMP(Pump_No)%K4x)/6.) PUMP(Pump_No)%ia_new = PUMP(Pump_No)%ia_old+((PUMP(Pump_No)%K1ia+(2.*PUMP(Pump_No)%K2ia)+(2.*PUMP(Pump_No)%K3ia)+PUMP(Pump_No)%K4ia)/6.) PUMP(Pump_No)%w_new = PUMP(Pump_No)%w_old+((PUMP(Pump_No)%K1w+(2.*PUMP(Pump_No)%K2w)+(2.*PUMP(Pump_No)%K3w)+PUMP(Pump_No)%K4w)/6.) !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< PUMP(Pump_No)%x_old = PUMP(Pump_No)%x_new PUMP(Pump_No)%ia_old = PUMP(Pump_No)%ia_new PUMP(Pump_No)%w_old = PUMP(Pump_No)%w_new PUMP(Pump_No)%x = PUMP(Pump_No)%x_new PUMP(Pump_No)%ia = PUMP(Pump_No)%ia_new PUMP(Pump_No)%w = PUMP(Pump_No)%w_new PUMP(Pump_No)%Te = PUMP(Pump_No)%fii*PUMP(Pump_No)%ia_new !PUMP(Pump_No)%Vt = PUMP(Pump_No)%x_new+Kpi*(Kpn*((30.*PUMP(Pump_No)%w_ref/pi)-(30.*PUMP(Pump_No)%w_new/pi))-PUMP(Pump_No)%ia_new) !IF (PUMP(Pump_No)%Vt>810.) THEN ! PUMP(Pump_No)%Vt = 810. !ELSE IF (PUMP(Pump_No)%Vt<0.) THEN ! PUMP(Pump_No)%Vt = 0. !END IF PUMP(Pump_No)%i = PUMP(Pump_No)%i+1 END DO !>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end subroutine Pump_Traction_Motor