While True wird durch den break-befehl nicht beendet..
Verfasst: Freitag 4. November 2022, 21:32
Hallo Leute,
ich habe ein kleines Problem mit meinem Programm und verstehe nicht so ganz wieso es nicht das tut was es tun sollte.
Bin jetzt schon seit Stunden im Internet unterwegs, konnte aber leider noch keine Lösung finden.
Ich bin nicht so ganz Fit mit Python und eigentlich immer noch am lernen. Da ich nur ab und zu ein Programm schreibe fehlt mir da wohl die nötige "Übung".
Okay zum Problem.
Ich benutze 2 Rechner (Linux) um ein Filterrad zu Steuern. Die Verbindung zwischen den Programmen läuft über ein Socket-Programm.
Der Steuer-Rechner sendet einen Befehl an den Socket-Rechner und das Socket-Programm wertet es auf dem 2ten Rechner aus und steuert das Filterrad.
Mein Problem ist dass das zweite "while True" durch den "break" nicht beendet wird.
Soweit funktioniert eigentlich alles. Wen ich über einen Test-Button auf dem Steuer-Rechner ein "test" sende dann wird das erkannt.
Die Anfrage an das Filterrad wird über die Serielle gesendet und das Rad meldet die Offset-Position in Form "P1 Offset 2" zurück.
Der Wert "10" wird erkannt und die Offset-Meldung wird angezeigt.
Ich erwarte jetzt das die while Schleife beendet wird und der letzte Befehl "print("Befehl ausgeführt !"+"\n")" ausgeführt wird, aber das ist nicht der Fall.
Ich bin mir sicher das es elegantere Lösungen gibt, aber momentan bin ich noch Anfänger, also habt bitte Nachsicht.
Gruß
Thomas
ich habe ein kleines Problem mit meinem Programm und verstehe nicht so ganz wieso es nicht das tut was es tun sollte.
Bin jetzt schon seit Stunden im Internet unterwegs, konnte aber leider noch keine Lösung finden.
Ich bin nicht so ganz Fit mit Python und eigentlich immer noch am lernen. Da ich nur ab und zu ein Programm schreibe fehlt mir da wohl die nötige "Übung".
Okay zum Problem.
Ich benutze 2 Rechner (Linux) um ein Filterrad zu Steuern. Die Verbindung zwischen den Programmen läuft über ein Socket-Programm.
Der Steuer-Rechner sendet einen Befehl an den Socket-Rechner und das Socket-Programm wertet es auf dem 2ten Rechner aus und steuert das Filterrad.
Code: Alles auswählen
import socket
import os
import serial
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.2.15", 50000)) #Adresse auf der der Socket läuft
s.listen(1)
print("Server gestartet!"+"\n")
port ="/dev/ttyUSB0"
ser = serial.Serial(port, baudrate=9600, timeout=0)
def sende_sequenz(daten):
sende_text = daten + "\n"
print("daten werden übertragen : "+ daten)
ser.write(sende_text.encode())
try:
while True:
komm, addr = s.accept()
while True:
data = komm.recv(1024)
if not data:
komm.close()
break
daten = data.decode()
print("Daten Empfangen :" + daten)
if daten =="test":
sende_sequenz("o1")
empf_buffer = []
while True:
for c in ser.read():
empf_buffer.append(str(chr(c)))
if c == 10:
wert = ''.join(empf_buffer)
print("Empfangen",wert)
ser.flushInput()
empf_buffer.clear()
break
print("Befehl ausgeführt !"+"\n")
komm.send(daten.encode())
finally:
s.close()
Soweit funktioniert eigentlich alles. Wen ich über einen Test-Button auf dem Steuer-Rechner ein "test" sende dann wird das erkannt.
Die Anfrage an das Filterrad wird über die Serielle gesendet und das Rad meldet die Offset-Position in Form "P1 Offset 2" zurück.
Der Wert "10" wird erkannt und die Offset-Meldung wird angezeigt.
Ich erwarte jetzt das die while Schleife beendet wird und der letzte Befehl "print("Befehl ausgeführt !"+"\n")" ausgeführt wird, aber das ist nicht der Fall.
Ich bin mir sicher das es elegantere Lösungen gibt, aber momentan bin ich noch Anfänger, also habt bitte Nachsicht.
Gruß
Thomas