-
Notifications
You must be signed in to change notification settings - Fork 0
/
geardata.py
executable file
·85 lines (77 loc) · 2.81 KB
/
geardata.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Programm zur Berechnung / Darstellung von Gangdiagrammen für Motorräder, analog des bekannten geardata.
# Anders als dort können hier jedoch zwei komplette Diagramme übereinander gelegt und somit einfacher verglichen werden.
# Ebenso wird der Drehzahlabfall beim Hochschalten angezeigt.
# Die Eingabedaten (Parameter) sind in yaml Files gespeichert, 2 Beispiele sind hier angefügt, eigentlich selbsterklärend.
# Momentan ist es ein einfaches Kommandozeilen-Programm mit 1 oder 2 Parameter-Files als Argument(e)
# Die einzige Nonstandard-Python Library die benötigt wird ist aktuell matplotlib
# ggf. folgt hier auch noch eine GUI Version auf Basis von PyQt5... (wobei jeder der einen Editor bedienen kann, hier sehr schnell verschiedene Setups vergleichen kann)
import sys, yaml
import matplotlib.pyplot as plt
Verbose = True
StartRPM = 0 # 8500
def get_params(datafile):
with open(datafile) as f:
try:
ymldata = yaml.safe_load(f)
except yaml.YAMLError as e:
print(e)
quit()
global IP
IP = float(ymldata['IP'][0].split(':')[0]) / float(ymldata['IP'][0].split(':')[1])
global Ig
Ig = []
for IG in ymldata['IGtr']:
Ig.append(float(IG.split(':')[0]) / float(IG.split(':')[1]))
global ISek
ISek = float(ymldata['ISek'][0].split(':')[0]) / float(ymldata['ISek'][0].split(':')[1])
global TyreCirc
TyreCirc = float(ymldata['TyreCirc'])
global RefRPM
RefRPM = int(ymldata['RefRPM'])
if (Verbose):
print("IP:%f" % IP)
print("Igtr:")
print(Ig)
print("ISek:%f" % ISek)
print("TyreCirc: %f" % TyreCirc)
print("RPM: %d" % RefRPM)
datafile0 = ''
datafile1 = ''
if (len(sys.argv) <= 1):
print('Usage: %s datafile1 <datafile2>' % sys.argv[0])
quit()
if (len(sys.argv) > 1):
datafile0 = sys.argv[1]
if (len(sys.argv) > 2):
datafile1 = sys.argv[2]
get_params(datafile0)
nextG = 1
NumGears = len(Ig) - 1
for Igang in Ig:
x = [StartRPM, RefRPM, RefRPM*(Ig[nextG]/Igang)]
EndSpeed = (RefRPM/IP/Igang/ISek*TyreCirc)*60/1000
y = [(StartRPM/IP/Igang/ISek*TyreCirc)*60/1000, EndSpeed, EndSpeed]
plt.plot(x,y, color='red')
if (nextG < NumGears):
nextG = nextG + 1
if (len(datafile1) > 0):
get_params(datafile1)
nextG = 1
NumGears = len(Ig) - 1
for Igang in Ig:
x = [StartRPM, RefRPM, RefRPM*(Ig[nextG]/Igang)]
EndSpeed = (RefRPM/IP/Igang/ISek*TyreCirc)*60/1000
y = [(StartRPM/IP/Igang/ISek*TyreCirc)*60/1000, EndSpeed, EndSpeed]
plt.plot(x,y, color='blue')
if (nextG < NumGears):
nextG = nextG + 1
Title = datafile0;
if (len(datafile1) > 0):
Title = Title + ' / ' + datafile1
plt.title(Title)
plt.ylabel('Km/H')
plt.xlabel('RPM')
plt.grid(True)
plt.show()