Das hier ist mein ersten Programm. Teilweise zusammen kopiert und selbst geschrieben.
Ich möchte im unteren Teil des Programms eine CSV Datei schreiben. Was Ohne While schleife auch funktioniert.
Ich möchte aber nun jede Minute diese CSV Datei schreiben. Ich weiß aber noch nicht wie ich das machen soll?
Vieleicht mittels:
-Unterprogramm
-While schleife mit Timer
Wenn ich eine While schleife einbaue welche die bedingung True hat schreibt er mir meine CSV datei voll, aber er bearbeitet ja nur die Schleife und nicht mehr den Rest des Programms. Jetzt wäre die Idee die While schleife oder das Unterprogramm alles 60s aufzurufen. Das er für einen Zyklus die CSV schreibt.
Code: Alles auswählen
import Tkinter
from Tkinter import *
from Tkinter import *
import smbus
import ttk
import csv
import time
import threading
bus = smbus.SMBus(1)
mainWin = Tk()
mainWin.title('Analoge Eingabe')
bus = smbus.SMBus(1)
def wert(label,kanal,pb): #Variablen für Label,Kanal,Progressbar
def read():
var = bus.read_i2c_block_data(0x08,kanal,11) #Werte von Board in 11 stelliges Array schreiben
val = var[2]*256+var[1] #Berechnung der korrekten Zahlenwerte aus dem Array
label.config(text=str(val)) #Umwandeln der Integer Zahl in eine String Ziffer + Ausgabe in Label
label.after(20, read) #read() wird nach 20 ms erneut ausgeführt
pb.config(value=val) #Value der Progressbar wird angepasst
return val
return read()
#Label für Kanalbestimmung (unwichtig)
bai1 = ttk.Label(mainWin, width=9, text='Kanal 1: ')
bai1.grid(row=1,column=1)
bai2 = ttk.Label(mainWin, width=9, text='Kanal 2: ')
bai2.grid(row=2,column=1)
bai3 = ttk.Label(mainWin, width=9, text='Kanal 3: ')
bai3.grid(row=3,column=1)
bai4 = ttk.Label(mainWin, width=9, text='Kanal 4: ')
bai4.grid(row=4,column=1)
bai5 = ttk.Label(mainWin, width=9, text='Kanal 5: ')
bai5.grid(row=5,column=1)
#Label für Digitale Darstellung
labelai1 = ttk.Label(mainWin, width=5)
labelai1.grid(row=1,column=2)
labelai2 = ttk.Label(mainWin, width=5)
labelai2.grid(row=2,column=2)
labelai3 = ttk.Label(mainWin, width=5)
labelai3.grid(row=3,column=2)
labelai4 = ttk.Label(mainWin, width=5)
labelai4.grid(row=4,column=2)
labelai5 = ttk.Label(mainWin, width=5)
labelai5.grid(row=5,column=2)
#Progressbar für Analoge Darstellung
pb1 = ttk.Progressbar(mainWin, orient='horizontal', maximum=990, length=100, mode='determinate')
pb1.grid(row=1,column=3)
pb2 = ttk.Progressbar(mainWin, orient='horizontal', maximum=990, length=100, mode='determinate')
pb2.grid(row=2,column=3)
pb3 = ttk.Progressbar(mainWin, orient='horizontal', maximum=990, length=100, mode='determinate')
pb3.grid(row=3,column=3)
pb4 = ttk.Progressbar(mainWin, orient='horizontal', maximum=990, length=100, mode='determinate')
pb4.grid(row=4,column=3)
pb5 = ttk.Progressbar(mainWin, orient='horizontal', maximum=990, length=100, mode='determinate')
pb5.grid(row=5,column=3)
#Die wert-Funktion wird mit den 3 Parametern bestückt
kw1 = wert(labelai1,0x00,pb1)
kw2 = wert(labelai2,0x01,pb2)
kw3 = wert(labelai3,0x02,pb3)
kw4 = wert(labelai4,0x03,pb4)
kw5 = wert(labelai5,0x04,pb5)
print ("kw1:",kw1)
print ("kw2:",kw2)
print ("kw3:",kw3)
print ("kw4:",kw4)
print ("kw5:",kw5)
gps=0
while time.time(5.0):
csvOut=open("/home/pi/Ana_Value.csv", "a")
spamWriter = csv.writer(csvOut, delimiter=';', quotechar='|')
spamWriter.writerow( ['Wert1:', kw1, 'Wert2:', kw2, 'Wert3:', kw3, 'Wert4:', kw4, 'Wert5:', kw5, 'GPS:', gps, ] )
csvOut.close()
mainWin.mainloop()
Noch ne Frage die mich interesiert, (ich komme aus der Siemens SPS Welt) hier wird Das Programm Zyklisch abgearbeitet. Wieso wird die CSV bei Python nicht in jeden Zyklus beschrieben wenn das Programm alleine mit diesem
Code: Alles auswählen
csvOut=open("/home/pi/Ana_Value.csv", "a")
spamWriter = csv.writer(csvOut, delimiter=';', quotechar='|')
spamWriter.writerow( ['Wert1:', kw1, 'Wert2:', kw2, 'Wert3:', kw3, 'Wert4:', kw4, 'Wert5:', kw5, 'GPS:', gps, ] )
csvOut.close()