##### Pogostnost izpada zveze - S53MV 18.09.2016 #####
##### Posodobljeno za Python 3.x - A. blatnik 12.01.2019 ####


import time,serial,math,sys 	#uporabljene funkcije

m=1000			#mejna vrednost meritev
port='COM10'		#ime zaporednega vmesnika

print("*** Pogostnost izpada zveze - 12.01.2019 ***")
n=int(input("Vstavi stevilo meritev: "))

f0=[0]			#postavi vsa polja na zacetne vrednosti
f1=[0]
f2=[0]
f3=[0]
i=1
while i<=m:
	f0=f0+[i]
	f1=f1+[0]
	f2=f2+[0]
	f3=f3+[0]
	i=i+1

#odpri comport port, 115200bps, 8bit, brez paritete
print("Pocakaj na lenobni USB...")
comport=serial.Serial(port,115200,timeout=1)
comport.setRTS(False)	#sprosti /BOOTLOADER
comport.setDTR(False)	#sprosti /RESET
time.sleep(3)
comport.flushInput()	#pocisti sprejemni vmesnik
comport.readline()

i=n			#podatki iz merilnega sprejemnika v polja f1, f2 in f3
while i>0:
	s=comport.readline()
	j=int(math.pow(10.0,(float(s[0:5])-20)*0.05))	#kanal #1 - zelena krivulja
	if j<=m:
		f1[j]=f1[j]+1
	k=int(math.pow(10.0,(float(s[6:11])-20)*0.05))	#kanal #2 - rdeca krivulja
	if k<=m:
		f2[k]=f2[k]+1
	if k>j:		#izbira vecjega od j,k - modra krivulja
		j=k
	if j<=m:
		f3[j]=f3[j]+1
	i=i-1
	sys.stdout.write('\rZbiranje podatkov:%i'%(i,))
	sys.stdout.flush()

comport.close()		#zapri comport port
t=time.ctime()		#zabelezi cas meritve

f1[0]=f1[0]/float(n)	#integriraj in normiraj krivulje pogostnosti izpada
f2[0]=f2[0]/float(n)
f3[0]=f3[0]/float(n)
i=1
while i<=m:
	f1[i]=f1[i]/float(n)+f1[i-1]
	f2[i]=f2[i]/float(n)+f2[i-1]
	f3[i]=f3[i]/float(n)+f3[i-1]
	i=i+1

print("\r\nPocakaj na nalaganje grafike...")
import matplotlib.pyplot as plt
print("Risanje krivulj...")
plt.plot(f0,f1,'g-')	#kanal #1 - zelena krivulja
plt.plot(f0,f2,'r-')	#kanal #2 - rdeca krivulja
plt.plot(f0,f3,'b-')	#izbira vecjega - modra krivulja
plt.axis([0, m, 0.0, 1.0])
plt.title('Izpad zveze - '+str(n)+' meritev  '+t)
plt.xlabel('Prag sprejemnika')
plt.ylabel('Pogostnost izpada')
plt.show()

#konec programa
