0% found this document useful (0 votes)
5 views4 pages

AT Project Python G3.py

The document contains a Python script that calculates and visualizes the tractive force and engine speed of a vehicle across different gears. It defines several functions to compute vehicle dynamics based on engine speed and gear ratios, and plots the results using Matplotlib. The script also determines the decrease in engine speed when shifting gears and displays the results graphically.

Uploaded by

williamchiqichoi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views4 pages

AT Project Python G3.py

The document contains a Python script that calculates and visualizes the tractive force and engine speed of a vehicle across different gears. It defines several functions to compute vehicle dynamics based on engine speed and gear ratios, and plots the results using Matplotlib. The script also determines the decrease in engine speed when shifting gears and displays the results graphically.

Uploaded by

williamchiqichoi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

import matplotlib.

pyplot as plt
import numpy as np

# Functions
def tractive_force(v_v,i_x):
F_d = (1-lambda_d(v_v,i_x))*0.9*engine_power(engine_speed(v_v,i_x))/v_v*10**3
return (F_d)

def engine_speed(v_v,i_x):
n_e = (v_v * i_x * 60) / (2 * np.pi * r_dyn * i_fd)
return(n_e)

def vehicle_speed(n_e,i_x):
v_v = (n_e * 2 * np.pi * r_dyn * i_fd) / (i_x * 60)
return(v_v)

def lambda_d(v_v,i_x):
lambda_d = (v_w(v_v,i_x)-v_v)/v_w(v_v,i_x)*100
return(lambda_d)

def v_w(v_v,i_x):
v_w = omega_w(v_v,i_x)*r_dyn
return(v_w)

def n_w(v_v,i_x):
n_w = engine_speed(v_v,i_x)/(i_x*i_fd)
return(n_w)

def omega_w(v_v,i_x):
omega_w = n_w(v_v,i_x)*2*np.pi/60 #rps
return(omega_w)

def engine_power(n_e):
if n_e >= 1000 and n_e <= 2900:
P_e = (-4.87918637427334367e+00) + 2.43089071441204667e-02*n_e + (-
5.80164848308363865e-07)*n_e**2
elif n_e > 2900 and n_e <= 5250:
P_e = (-7.36710266228974007e+01) + 7.73849754777409804e-02*n_e + (-
1.26450489849465041e-05)*n_e**2 + 6.69847786717427827e-10*n_e**3
elif n_e > 5250 and n_e <= 5550:
P_e = (-4.15125000000000227e+02) + 1.89000000000000112e-01*n_e + (-
1.80000000000000106e-05)*n_e**2
return(P_e)

#1. Tractive force


r_dyn = 0.319186
i_fd = 1
nmin = 1000
nmax = 5550
steps = 4551
n = np.linspace(nmin,nmax,steps)
vert = []
index = []
decrease_speed = []

#a. Gear 1
v1 = np.zeros(len(n))
Fd1 = np.zeros(len(n))
for i,e in enumerate(n):
v1[i] = vehicle_speed(e,17.6)
Fd1[i] = tractive_force(v1[i],17.6)
vert.append(v1[-1])

ne1 = np.zeros(len(n))
for i,e in enumerate(n):
v1[i] = vehicle_speed(e,17.6)
ne1[i] = engine_speed(v1[i],17.6)

#b. Gear 2
v2 = np.zeros(len(n))
Fd2 = np.zeros(len(n))
for i,e in enumerate(n):
v2[i] = vehicle_speed(e,10.33)
Fd2[i] = tractive_force(v2[i],10.33)
vert.append(v2[-1])

ne2 = np.zeros(len(n))
for i,e in enumerate(n):
v2[i] = vehicle_speed(e,10.33)
ne2[i] = engine_speed(v2[i],10.33)

i = np.abs(v2 - v1[-1]).argmin()
index.append(i)

decrease_speed.append(round(ne1[-1]-ne2[i],0))

#c. Gear 3
v3 = np.zeros(len(n))
Fd3 = np.zeros(len(n))
for i,e in enumerate(n):
v3[i] = vehicle_speed(e,6.68)
Fd3[i] = tractive_force(v3[i],6.68)
vert.append(v3[-1])

ne3 = np.zeros(len(n))
for i,e in enumerate(n):
v3[i] = vehicle_speed(e,6.68)
ne3[i] = engine_speed(v3[i],6.68)

i = np.abs(v3 - v2[-1]).argmin()
index.append(i)

decrease_speed.append(round(ne2[-1]-ne3[i],0))

#d. Gear 4
v4 = np.zeros(len(n))
Fd4 = np.zeros(len(n))
for i,e in enumerate(n):
v4[i] = vehicle_speed(e,4.62)
Fd4[i] = tractive_force(v4[i],4.62)
vert.append(v4[-1])

ne4 = np.zeros(len(n))
for i,e in enumerate(n):
v4[i] = vehicle_speed(e,4.62)
ne4[i] = engine_speed(v4[i],4.62)

i = np.abs(v4 - v3[-1]).argmin()
index.append(i)

decrease_speed.append(round(ne4[-1]-ne3[i],0))

#e. Gear 5
v5 = np.zeros(len(n))
Fd5 = np.zeros(len(n))
for i,e in enumerate(n):
v5[i] = vehicle_speed(e,3.35)
Fd5[i] = tractive_force(v5[i],3.35)
vert.append(v5[-1])

ne5 = np.zeros(len(n))
for i,e in enumerate(n):
v5[i] = vehicle_speed(e,3.35)
ne5[i] = engine_speed(v5[i],3.35)

i = np.abs(v5 - v4[-1]).argmin()
index.append(i)

decrease_speed.append(round(ne5[-1]-ne4[i],0))

#f. Gear 6
v6 = np.zeros(len(n))
Fd6 = np.zeros(len(n))
for i,e in enumerate(n):
v6[i] = vehicle_speed(e,2.52)
Fd6[i] = tractive_force(v6[i],2.52)
vert.append(v6[-1])

ne6 = np.zeros(len(n))
for i,e in enumerate(n):
v6[i] = vehicle_speed(e,2.52)
ne6[i] = engine_speed(v6[i],2.52)

i = np.abs(v6 - v5[-1]).argmin()
index.append(i)

decrease_speed.append(round(ne6[-1]-ne5[i],0))

# Results
print(decrease_speed)

# Figures
# plt.figure()
# plt.plot(v1, Fd1)
# plt.xlabel("Vehicle speed $v_v$ (m/s)")
# plt.ylabel("Tractive force $F_d$ (N)")
# plt.grid()
# plt.show()

# plt.figure()
# plt.plot(v1,Fd1,"b-",v2,Fd2,"r-",v3,Fd3,"g-",v4,Fd4,"k-",v5,Fd5,"y-",v6,Fd6,"m-")
# plt.xlabel("Vehicle speed $v_v$ (m/s)")
# plt.ylabel("Tractive force $F_d$ (N)")
# plt.grid()
# plt.show()

plt.figure()
plt.plot(v1,ne1,"b-",v2,ne2,"r-",v3,ne3,"g-",v4,ne4,"k-",v5,ne5,"y-",v6,ne6,"m-")
plt.vlines(x=vert[0],ymin=ne1[-1],ymax=ne2[index[0]], color="black", linestyle="-")
plt.vlines(x=vert[1],ymin=ne2[-1],ymax=ne3[index[1]], color="black", linestyle="-")
plt.vlines(x=vert[2],ymin=ne3[-1],ymax=ne4[index[2]], color="black", linestyle="-")
plt.vlines(x=vert[3],ymin=ne4[-1],ymax=ne5[index[3]], color="black", linestyle="-")
plt.vlines(x=vert[4],ymin=ne5[-1],ymax=ne6[index[4]], color="black", linestyle="-")
plt.vlines(x=vert[5],ymin=1000,ymax=ne6[-1], color="black", linestyle="-")
plt.xlabel("Vehicle speed $v_v$ (m/s)")
plt.ylabel("engine rotational frequency $n_e$ (s^(-1))")
plt.grid()
plt.show()

You might also like