##### Pogostnost izpada zveze - S53MV 18.09.2016 #####

#izvajanje potrebuje najmanj Anaconda2-4.1.1-Windows-x86 in pyserial-2.7.win32_py3k
import time,serial,math	#uporabljene funkcije
m=1000			#mejna vrednost meritev
port='COM14'		#ime zaporednega vmesnika

print'*** Pogostnost izpada zveze - S53MV 18.09.2016 ***'
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
	print 'Zbiranje podatkov:', i, '    \r',

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...   '+t
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
