Seite 1 von 1

Zugriff auf die serielle Schnittstelle

Verfasst: Dienstag 25. April 2006, 07:25
von z1936z
Hallo!

Ich habe eine Aufgabe, in der ich über serielle Schnittstelle auf ein Gerät(Schreiblesekopf) zugreifen soll. Ich soll die Daten aus dem Gerät auslesen und dann in txt-Datei diese Daten speichern. Im Folgenden soll ich Daten auf dieses Gerät schicken.
Leider habe ich überhaupt keine Vorstellung, wie man das realisiert. Guter Information konnte ich im Internet nicht finden. Kann mir jemand ein paar Quelle mit solcher Information vorschlagen, lieber mit Beispielen.

Danke im Voraus!

Verfasst: Dienstag 25. April 2006, 10:37
von jAN
schau mal hier

Verfasst: Dienstag 25. April 2006, 15:42
von mitsuhiko
Das soll jetzt wirklich kein Vorwurf sein, aber Sucht denn keiner? :shock:

Verfasst: Dienstag 25. April 2006, 17:28
von jAN
hab ich doch^^

Verfasst: Donnerstag 27. April 2006, 11:30
von z1936z
Hallo alle zusammen,

auf dieser Seite war ich schon. Das Beispiel hab ich sogar schon zu meiner Aufgabe angepasst, aber trotzdem verstehe ich davon nicht viel. Das Programm ist ohne Beschreibung, deswegen habe ich um Quellen nach anderen Informationen gebetet.

Danke!

Verfasst: Donnerstag 27. April 2006, 11:44
von z1936z
Jetzt aber nach dem ich die Daten von mein Gerät geladen habe, gibt es ein weiteres Problem, mit der Combobox.
Den Programmcode habe ich reduziert.

Code: Alles auswählen

from Tkinter import *
from serial import Serial
import Tix
import tkFileDialog
import string

#############################################################################################
class MainWindow:
    bl = 0
    def __init__ (self):
        self.fenster = Tix.Tk()
        self.fenster.title("ID40 SLK")
        self.fenster.resizable(0,0)

        self.fenster.columnconfigure(0, weight=1) 
        self.fenster.rowconfigure(0, weight=1) 

        self.text = Text(self.fenster, width=100, height=40,
                         wrap=WORD, font=('Arial', 10)) 
        self.text.grid(row=0, column=0, sticky="nesw") 

        self.verticalScroller = Scrollbar(self.fenster, orient="vertical") 
        self.verticalScroller.grid(row=0, column=1, sticky="ns") 

        self.text['yscrollcommand'] = self.verticalScroller.set 
        self.verticalScroller['command'] = self.text.yview

        self.frame1 = Frame(self.fenster)
        self.bt_dg = Button(self.frame1, text="  Diagramm zeigen  ",
                            command=self.diagramm_anzeigen).grid(row=3, column=4,
                                                                 padx=3, pady=3)
        self.frame1.grid(row=1)     
        self.__addMenueleiste()
        self.__addDateimenue()
        self.fenster.mainloop()
    #-------------------------------------------------------------------------------
    def __addMenueleiste(self):
        self.menueleiste=Menu(self.fenster)               
        self.fenster.configure(menu=self.menueleiste)
    #-------------------------------------------------------------------------------
    def __addDateimenue(self):         
        self.dateimenue=Menu(self.menueleiste)
        self.dateimenue.add_command(label='Laden', command=self.laden)
        self.dateimenue.add_command(label='Speichern', command=self.speichern)
        self.dateimenue.add_separator()  
        self.dateimenue.add_command(label='Beenden', command=self.beenden)
        self.menueleiste.add_cascade(label="Datei", menu=self.dateimenue)
    #-------------------------------------------------------------------------------
    def speichern(self):
        self.datei = tkFileDialog.asksaveasfile()
        if self.datei:
            self.datei.write(self.text.get(1.0, END))
            self.datei.close()            
    #-------------------------------------------------------------------------------
    def diagramm_anzeigen(self):
        diagramm = Diagramm()
    #-------------------------------------------------------------------------------
    def laden(self):
        self.datei = tkFileDialog.askopenfile()
        text = self.datei.read()
        self.sys_text = text
        self.text.insert(INSERT , self.sys_text)
        self.bl = 1
    #-------------------------------------------------------------------------------
    def beenden(self):
        self.fenster.destroy()       
###########################################################################################
class Diagramm:
    def __init__ (self):
        self.fenster = Tix.Tk()
        self.fenster.title("ids-Grafiken")     
        self.fenster.resizable(0,0)
        self.bt_beenden = Button(self.fenster, text="  Beenden  ",
                                 command=self.beenden).pack(padx=3, pady=3,
                                                            side=BOTTOM)
        self.zeichnung = Zeichnung(self.fenster)
        self.daten = Daten(self.fenster, self.zeichnung)
        self.fenster.mainloop()              
    #-------------------------------------------------------------------------------
    def beenden(self):
        self.fenster.destroy()
#############################################################################################
class Zeichnung:
    def __init__(self, fenster):
        self.c = Canvas(master=fenster, width='20c', height='21c')
        self.c.pack()
        self.x_achse = self.c.create_line('0.5c', '20c', '19.5c', '20c')
        j = 36
        for i in range(0,32):
            self.kr = self.c.create_line(j, '20c', j, '20.2c')
            self.kr_zh = self.c.create_text(j, '20.5c', text=i)
            j = j + 22         
        self.list_balke = []
        self.list_zahl = []
        j = 36
        for i in range(0,32):
            self.balke = self.c.create_line(j, "20c", j, "20c", fill="red", width="0.3c")
            self.list_balke.append(self.balke)
            self.text = self.c.create_text(j, "20c", text="")
            self.list_zahl.append(self.text)
            j = j + 22
#############################################################################################
class Daten:
    def __init__ (self, fenster, zeichnung):
        self.addCombobox(fenster)
    #-------------------------------------------------------------------------------
    def addCombobox(self, fenster):
        self.varcombo = Tix.StringVar() 
        self.combo = Tix.ComboBox(fenster, editable=1, dropdown=1,
                                  command=self.suchen, variable=self.varcombo)
        self.combo.entry.config(state='readonly')
        self.combo.insert(0, "ids.powerup_counts") 
        self.combo.insert(1, "ids.expect_ack_retrys")
        self.combo.insert(2, "ids.expect_waitack_retrys") 
        self.combo.insert(3, "ids.expect_data_retrys")
        self.combo.insert(4, "ids.expect_data_pup_received") 
        self.combo.insert(5, "ids.expect_data_nak_packet")
        self.combo.insert(6, "ids.expect_data_invalid_packet") 
        self.combo.insert(7, "ids.expect_ack_cks_invalid")
        self.combo.insert(8, "ids.expect_ack_nak_packet") 
        self.combo.insert(9, "ids.expect_ack_invalid_packet")
        self.combo.insert(10, "ids.expect_waitack_cks_invalid") 
        self.combo.insert(11, "ids.expect_waitack_nak_packet")
        self.combo.insert(12, "ids.expect_waitack_invalid_packet") 
        self.combo.insert(13, "ids.expect_ack_pup_received")
        self.combo.insert(14, "ids.log_on_retries")
        self.combo.pack(fill=BOTH)
    #-------------------------------------------------------------------------------
    def suchen(self, evt):
        ex = self.varcombo.get()
        print ex + " NICHTS"       
###########################################################################################
mw = MainWindow() 

Das Problem liegt daran, das in die Funktion suche keinen Name aus der Combobox übergegeben wird.

print + „NICHTS“ ist hier für den Test.

Danke im Voraus!

Verfasst: Donnerstag 27. April 2006, 12:31
von z1936z
Falls man die Klasse „MainWindow“ auf die Kommentare setzt, wird der Name ohne Probleme übergegeben. Die Fehler soll irgendwo in „MainWindow“ liegen, aber wo, kann ich nicht finden!

Verfasst: Donnerstag 27. April 2006, 13:26
von z1936z
Jetzt habe ich den Quellcode noch reduziert. Das Problem liegt in der Zeile 7, wenn man kein Widget von der Klasse „Main Window“ erzeugt, dann ist alles in Ordnung, woran es liegt?

Code: Alles auswählen

from Tkinter import *
import Tix

#############################################################################################
class MainWindow:
    def __init__ (self):
        self.fenster = Tix.Tk()
        self.fenster.title("1")
        diagramm = Diagramm()
        self.fenster.mainloop()
#############################################################################################
class Diagramm:
    def __init__ (self):
        self.fenster = Tix.Tk()
        self.fenster.title("2")
        self.daten = Daten(self.fenster)
        self.fenster.mainloop()              
#############################################################################################
class Daten:
    def __init__ (self, fenster):
        self.varcombo = Tix.StringVar() 
        self.combo = Tix.ComboBox(fenster, editable=1, dropdown=1,
                                  command=self.suchen, variable=self.varcombo)
        self.combo.entry.config(state='readonly')
        self.combo.insert(0, "ids.powerup_counts") 
        self.combo.insert(1, "ids.expect_ack_retrys")
        self.combo.insert(2, "ids.expect_waitack_retrys") 
        self.combo.insert(3, "ids.expect_data_retrys")
        self.combo.insert(4, "ids.expect_data_pup_received") 
        self.combo.insert(5, "ids.expect_data_nak_packet")
        self.combo.insert(6, "ids.expect_data_invalid_packet") 
        self.combo.insert(7, "ids.expect_ack_cks_invalid")
        self.combo.insert(8, "ids.expect_ack_nak_packet") 
        self.combo.insert(9, "ids.expect_ack_invalid_packet")
        self.combo.insert(10, "ids.expect_waitack_cks_invalid") 
        self.combo.insert(11, "ids.expect_waitack_nak_packet")
        self.combo.insert(12, "ids.expect_waitack_invalid_packet") 
        self.combo.insert(13, "ids.expect_ack_pup_received")
        self.combo.insert(14, "ids.log_on_retries")
        self.combo.pack(fill=BOTH)
    #-------------------------------------------------------------------------------
    def suchen(self, evt):
        ex = self.varcombo.get()
        print ex + " NICHTS"       
###########################################################################################
mw = MainWindow()

Verfasst: Donnerstag 27. April 2006, 21:31
von BlackJack
Es darf pro Programm nur ein Exemplar von `Tkinter.Tk` oder `Tix.Tk` geben. Das ist sozusagen das Ur-Widget, deshalb wird es in Programmen auch oft an den Namen `root` gebunden.

Wenn Du neben dem Hauptfenster noch weitere, unabhängige Fenster haben möchtest, dann nimm dafür `Tkinter.Toplevel`.

Verfasst: Dienstag 2. Mai 2006, 08:07
von z1936z
Wenn Du neben dem Hauptfenster noch weitere, unabhängige Fenster haben möchtest, dann nimm dafür `Tkinter.Toplevel`
Für das zweite Fenster habe ich jetzt Toplevel genommen. Aber ich weiß nicht, wie ich jetzt darauf diese Combobox platzieren kann. Könntest du an meinem Beispiel mir zeigen, wie es seien soll.

Danke im Voraus!!!!

Verfasst: Dienstag 2. Mai 2006, 08:18
von z1936z
Ich habe verstanden!!!
Ist alles in Ordnung, funktioniert!!!

Danke für die Hilfe!