Elektronik2000.de

Elektronik2000.de Forum (http://elektronik2000.de:443/forum/)
-- Willkommen - Allgemein Bereich (http://elektronik2000.de:443/forum/forum.php?id=6)
  -- Projekte von E2000-Benutzern (http://elektronik2000.de:443/forum/forum.php?id=54)


Seiten (1): [1]
 
Samurai1967

Samurai1967
Probleme mit Telnet-Protokoll (@Akim; @Tropby)
Hallo Miteinander,

ich bin z. Zt. dabei den Einsatz von E2000 für eine Schachtüberwachung von Getränkeautomaten zu prüfen.

Die Firmware steht und liefert die benötigten Daten.
(Auf Eingangsknopfdruck bzw. Schalter wird die aktuelle Füllmenge vom jeweiligen Schacht um 1 dekrementiert; Leermeldung vom Schacht erfolgt sobald Schachtschalter länger als 10 Sekunden geschlossen bleibt).
Die Daten liefert das Board alle sauber.

Ich habe ja einen kleinen Telnet-Client geschrieben und nutze das Protokoll schon eine Weile mit dem org. AVR-NET-IO.

Hier ist mir folgendes aufgefallen:
Wenn ich z. B. mit meinem Telnet-Client permanent (z. b. alle 5 Sekunden) die Zustände vom Pollin-Board abfrage funktioniert das wunderbar und ich kann die Daten sauber in ein ASCII-File "reinstrudeln".

Wenn ich das mit der E2000-Firmware mache läuft das mal eine Stunde, 2 Stunden oder auch nur 10 Minuten sauber.
Dann erhalte ich keine Antwort mehr vom E2000-Board.

Das ist mir auch schon beim Basteln des kleinen Telnet-Client aufgefallen, dass ab und zu das Board nicht erreichbar war.

Nun wäre es halt schade, das Projekt mit einer anderen Firmware zu machen, zumal auch E2000 die Zustände puffert
und ich hier nicht (z. B. mit der Pollin-Firmware) so schnell Abfragen muss, damit mir kein Schaltvorgang entgeht.

Ich will natürlich nicht ausschließen, dass ich da in meinem Programm "Mist" gebaut habe.
(wobei mein Programm keine Probleme mit der Abfrage der Pollin-Firmware hat.)
Mein Gedanke war:
- Öffne Netzwerkverbindung zu E2000
- Frage Passwort ab
- Frage die Daten ab
- Schließe Netzwerkverbindung
Das funktioniert auch soweit, wie gesagt mal länger mal kürzer.

Mir ist auch aufgefallen, wenn das Passwort z. B. "test" heißt, wird auch "test1" oder "test12" akzeptiert.

Muß ich bei der Telnet-Abfrage am Zeilenende außer CR + LF noch z. B. ein \r\n (wie bei Pollin) oder irgendwas schicken?

Könnt Ihr mir da mal ein bisschen Hintergrund-Infos geben oder einen Schubs in die Richtung in der ich Suchen kann?
_________________________
- AVR-NET-IO mit Pollin 1.03+Eigenbau K8IO+LCD (Fernstart div. Rechner)
- AVR-NET-IO mit Pollin 1.03+K8IO+Funksender (Funksteckdosen+Tests)
- E2000-NET-IO mit E2000 2.2.1c+ADD1.3+I2C-LCD (Lernen/Spielen)
##### Nähere Infos auf http://www.oliver-schlenker.de.vu #####
 
Tropby (Administator)
Hallo Samurai,

warscheinlich schließt das E2000-NET-IO Board die Verbindung, da es inerhalb von 5 Sekunden mindestens eine Nachricht werwartet. Wenn dein Program manchmal zu langsam abfragt dann kann dieser Effekt auftreten. Versuche es doch mal im 2 Sekunden Takt. Dann sollte das Problem nicht auftreten.

Das Board kann maximal 3 Verbindungen gleichzeitig aufbauen. In der Logik kannst du neben dem Verbindungsstatus im Hauptbildschirm sehen wie viele Verbindungen zur Zeit offen sind. Wenn dein Tel-Net Client die Verbindung nicht ordnungsgemäß schließt kann es sein, dass eine Verbindung hängen bleibt und dann erst nach einigen Minuten wieder freigegeben wird.

Ich würde dir für das Programm raten, nicht nach jeder abfrage die Verbindung zu schließen. Wie gesagt, wenn da ein Fehler beim schließen passiert dann hängt die Verbindung in der Luft und man kann nicht sagen welchen Zustand diese Verbindung hat. Ich würde es so wie wir es auch machen in der Software machen:
1. Verbindung aufbauen
2. Passwort senden (Ja ich weiß das ist in der Designer-Handy-Software noch falsch)
3. Daten abfragen
4. Daten abfragen
.
.
.
n. Verbindung schließen wenn Programm geschlossen wird

Wenn zwischendurch die Verbindung verloren geht (Das sollte dir eigentlich der Socket den du programmiert hast sagen, dass keine Verbindung besteht). Dann einfach neu aufbauen. Also bei Punkt 1 erneut beginnen.

Das Passwort wird nur soweit eingelesen wie es im Speicher stellen hat. Daher kann hinter dem eigentlichen Passwort stehen was will. Das kommt daher da der Atmel nicht unendlich speicher hat, aber über Telnet ein viel zu langer String übertragen werden könnte.

Wir interpretieren die Daten Byte für Byte und können auch kleine Ethernet-Frames verarbeiten. Um die Kommunikation schnell zu halten haben wir die größe der Ethernet-Frames beschrängt. Dies hat in deinem Fall keinen einfluss, da sich darum Windows/Linux kümmert, wenn du eine Verbindung aufbaust. Als Zeilenende wird bei uns ein "chr( 13 )" benutzt ( 0x0D ).

Nach der ASCII Tabelle müsste das ein <CR> sein:
http://www.torsten-horn.de/techdocs/ascii.htm

Das ist historisch daraus gewachsen bei uns, da die RETURN Taste den Tastencode "13" generiert und dieser in der ersten Testversion mit übertragen wurde. Immer wenn dieses Zeichen erkannt wird, dann wird der Befehl ausgeführt. Es schadet jedoch nicht noch ein <LF> hinterher zu senden. Dieses wird jedoch weggeschmissen (Windows sendet standardmäßig als Zeilenende <CR> + <LF>. Dies wurde so umgesetzt im E2000-NET-IO Board. Daher funktionieren reine UNIX Anwendungen nicht. Diese senden im Normalfall nur ein <LF>;) = Zwinker.

Ich denke mal, dass waren erstmal genug "Hintergrund-Infos".

mfg
Tropby
_________________________
Elektronik2000.de | Software-Entwickler
 
Samurai1967

Samurai1967
Hallo Tropby,

danke für die superschnelle Antwort.

Das werde ich mal entsprechend überprüfen.

Wäre echt schade, wenn ich das nicht zum Laufen bekäme!
_________________________
- AVR-NET-IO mit Pollin 1.03+Eigenbau K8IO+LCD (Fernstart div. Rechner)
- AVR-NET-IO mit Pollin 1.03+K8IO+Funksender (Funksteckdosen+Tests)
- E2000-NET-IO mit E2000 2.2.1c+ADD1.3+I2C-LCD (Lernen/Spielen)
##### Nähere Infos auf http://www.oliver-schlenker.de.vu #####
 
Samurai1967

Samurai1967
Hallo Tropby,

habe die Sache hinbekommen.

Mir war das mit dem 5-Sekunden-Timeout nicht bewusst.
(Solltet Ihr vielleicht auch in der Befehlsliste des Telnet-Protokolls anzeigen!)

Abgesehen davon hatte ich im Quellcode noch ein Timing-Problem bzgl. Fenster und Netzwerkverbindung.

Danke für die Hilfe!
_________________________
- AVR-NET-IO mit Pollin 1.03+Eigenbau K8IO+LCD (Fernstart div. Rechner)
- AVR-NET-IO mit Pollin 1.03+K8IO+Funksender (Funksteckdosen+Tests)
- E2000-NET-IO mit E2000 2.2.1c+ADD1.3+I2C-LCD (Lernen/Spielen)
##### Nähere Infos auf http://www.oliver-schlenker.de.vu #####
Seiten (1): [1]
 

24.11.2024 - 06:30:39