RS232 Senden und Empfangen

Antworten
Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

RS232 Senden und Empfangen

Beitrag von Chip » Freitag 30. Mai 2014, 14:32

Hallo Zusammen,

wie im angehängten File als Beispiel dargestellt möchte ich via RS232 über eine Vor-Auswahl mittels der Schalter,
im COM-Baustein fest hinterlegte Strings über eine RS232-Schnittstelle zu einem Zielgerät senden.
Das Zielgerät antwortet danach über die gleiche Schnittstelle mit 2 Antwort-Byte.
Also z.B. COM1 senden und empfangen mit 115200, 8, N, 1

Das funktioniert im Prinzip schon ganz gut, aber leider nicht immer!
Immer wieder scheint es Timing-Probleme zu geben und ich kann dem Inhalt
der Antwortbytes eigentlich nicht trauen.

Wenn ich das ganze z.B. mit HTerm betrachte, passen jedoch die Sende- und die Antwortbytes!
Das Zielgerät tut also was es soll und die COM-Schnittstelle am PC auch.

Wie könnte ich sicherstellen, dass der Wechsel zwischen String senden und
Antwort erhalten - und natürlich der Inhalt der Antwortbytes - mit den ProfiLab-Bauteinen wirklich sicher passt?

Danke für jeden Tip!
Dateianhänge
RS232_SEND_RETURN.prj
(13.97 KiB) 446-mal heruntergeladen

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: RS232 Senden und Empfangen

Beitrag von IKT » Freitag 30. Mai 2014, 15:44

Hallo Chip,

warum nicht zuerst mal 'langsam', z.B. 9600 baud, sollte für die paar Byte reichen. Danach kann die Geschwindigkeit gesteigert werden, bis Probleme auftauchen.

Ansonsten Simulationsgeschwindigkeit auf 'HOCH' setzen (frisst mehr Leistung)!

Dein 'delay' = Monoflop (=1Sek. scheint sehr lang zu sein), versuche 0.2 Sek.

Generell zu 'timing':
viewtopic.php?f=21&t=3983&p=13927#p13927
++++++
Gruss/regards IKT

hrathke
Beiträge: 158
Registriert: Montag 12. Dezember 2011, 21:10

Re: RS232 Senden und Empfangen

Beitrag von hrathke » Samstag 31. Mai 2014, 22:09

Hallo,

meines Erachtens versuchst Du etwas gleichzeitig zu Senden und zu Empfangen ...
Füge doch einmal eine Verzögerung von z.B. 100ms vor dem Clock Eingang des Empfangen Baustein ein (oder ändere die Verknüpfung auf den Q Ausgang des Monoflops) je nachdem wie Dein Gerät normalerweise antwortet...

Gruß
HR

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Dienstag 3. Juni 2014, 06:29

Hallo IKT und HR,

vielen Dank für Eure Tips!
Ich habe nun die Verzögerungsbausteine eingefügt und mit verschiedenen
Zeiten herumgespielt, war aber noch nicht wirklich erfolgreich.

Ich habe nun probiert, vor den beiden Antwortbytes ein CR als drittes Bytes zu senden,
welches ich über einen weiteren der COM-Bausteine auswerte.
Die Idee war, damit zu sehen, ob das CR richtig ankommt und damit zu hoffen/anzunehmen, dass die beiden folgenden Bytes
in diesem Fall auch korrekt übertragen werden.
Tatsächlich wird das CR nicht immer richtig erkannt und ich vermute, dass sich hier irgendwie
die COM-Bausteine nicht immer korrekt mit dem PC-COM-Port synchronisieren.
Besonders wenn z.B. die Spannungsversorgung am Zielgerät kurz unterbrochen wird, machen die COM-Bausteine
danach was sie wollen d.h. die Kommunikation scheint zu stehen, aber die Ausgangsbits zeigen irgendwelche, für mich undefinerten
Zustände.

Gibt es hierzu evtl. einen Schaltungsvorschlag, bzw. wie funktioniert eigentlich das korrekte "Einrasten" des RS232-Dialoges, wenn die Busteilnehmer z.B. CR oder LF an die COM-Bausteine des PL senden?
Nun, auf das eigentliche xxxxbaud, 8, N, 1-Protokoll habe ich ja keinen Einfluss/Zugriff, oder?
Den eigentlichen Handshake mit dem PC machen die COM-Bauteine des PL ja für mich unsichbar im Hintergrund...??

Sorry, aber mir fehlen hier wohl ein Paar "Basics"....

Viele Grüße,
Chip

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: RS232 Senden und Empfangen

Beitrag von tmm » Dienstag 3. Juni 2014, 08:37

Hallo Chip,

zuerst würde ich einen Taktgeber an den CLK Eingang von dem Empfangen Baustein hängen, wenn der schnell genug taktet, dann geht nix verloren. Alternativ geht auch ein "kurzgeschlossener Inverterbaustein" als Taktgeber an dem Eingang. Dann würde ich den 2. Empfangsbaustein weg lassen und das eingelesene Byte "wegspeichern", bevor das nächste am Ausgang angelegt wird. Evtl. läuft die Schaltung nicht stabil, weil 2 Bausteine fast gleichzeitig auf die Schnittstelle zugreifen.

Gruß MM

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Dienstag 3. Juni 2014, 15:24

Hallo MM,

auch Dir herzlichen Dank für Deinen Rat!

Ich konnte nun die Software des Zielgerätes anpassen und den Aufbau aktuell mit nur noch 9600b betreiben.
Die Sache läuft nun erheblich stabiler!
Also ist es doch ein Timing-Problem der beiden "Black Boxen" COM-Baustein und PC-COM-Port...?

Hm, wenn es nur an der Übertragungsgeschwindigkeit liegt, bleibt also immer das Risiko, dass der Handshake mal nicht klappt, oder?

Liebe Grüße,
Chip

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: RS232 Senden und Empfangen

Beitrag von IKT » Dienstag 3. Juni 2014, 18:30

Hallo zusammen,

Serielle Kommunikation war schon immer so ... z.B.:
- je länger die 'Leitung' (Verdrahtung) desto tiefer die Baud-Rate.
- je mehr 'Störungen' auf der 'Leitung', ... wie oben
dazu kommt hier:
- PL's Ausführungsgeschwindigkeit ist limitiert (egal ob 'HOCH' oder 'TIEF')

Tests heute mit PL und meinem ARDUINO ('altes' Modell mit ATMEGA168/16KHz):
- RS232 = 19'200,N,8,1
- PL Oszilator-Taktfrequenz 10Hz
- fest 'verdrahtetes' Delay von 50 MiliSec zwischen senden und empfangen (nur ein und derselbe Oszi.)
... läuft ohne Probleme! PL - Taktfrequenz 'TIEF' ~ 600 Hz.

PS: ... bei mehreren Bytes (TMM) = COM-String-Empfangen verwenden, da entfällt die 'Wegspeicherei'!
++++++
Gruss/regards IKT

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: RS232 Senden und Empfangen

Beitrag von tmm » Dienstag 3. Juni 2014, 19:51

Hallo IKT,
ich dachte Chip braucht die einzelnen Byte-Muster für irgend etwas (wegen den 2 Empfängerbausteinen in der Schaltung) - deshalb der Vorschlag mit dem wegspeichern.

Gruß MM

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Mittwoch 4. Juni 2014, 07:18

Guten Morgen Zusammen,

@ITK:
Deinen Test finde ich sehr interessant! Es wäre klasse, wenn Du mir das .prj-File als Beispiel hochladen könntest...
@MM:
Ja, ich verdrahte jedes Bit der beiden Antwortbytes welche die beiden COM-Bausteine bereitstellen an weitere Schaltungsteile, die abhängig von deren Zuständen dann entsprechend reagieren.
Deinen Vorschlag mit dem Wegspeichern finde ich ebenfalls sehr interessant!
Hast Du mir evtl. auch ein Beispiel als Anregung wie die Schaltung dann aussehen könnte?

Liebe Grüße,
Chip

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: RS232 Senden und Empfangen

Beitrag von IKT » Mittwoch 4. Juni 2014, 08:58

Hallo zusammen,

@Chip,
Project-Datei ohne ARDU... (HW + SW) bringt nichts (kann nicht getested werden).
Welche HW willst Du denn seriell 'anhängen', denn davon hängt es nicht unwesentlich ab, wie und wie schnell die serielle Kommunikation implementiert sein muss (z.B.: Handshake, CRC-Checks etc.). Bei solchen Fragestellungen ist die Menge der Informationen vielfach entscheidend, wie, wann, was, warum 'gemacht wird'. [edit] Schaltplan unten ... [/edit]
@tmm,
Zwei Byte einzeln aus einem String 'herausholen', ist doch mit einfacher Mathe zu lösen.
Dateianhänge
rs232_send_return-1.prj.jpg
RS232 Verbindung mit ARDUINO: send command - receive DATA (ASCII)
rs232_send_return-1.prj.jpg (123.93 KiB) 12159 mal betrachtet
++++++
Gruss/regards IKT

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: RS232 Senden und Empfangen

Beitrag von tmm » Mittwoch 4. Juni 2014, 12:01

Halo IKT,

meine Lösung wäre:
Bytes übertragen und die dann byteweise trennen, danach den ASCII-Code der einzelnen Zeichen verwenden; dann geht auch nix verloren :-)

Chip hat sich für die "Bit-Lösung" entschieden, deshalb war mein Vorschlag die die eingelesenen "Zeichen" irgendwo hin zu speichern (wenn er mit ASCII Zeichen < 32 zu tun hat, dann ist die Bit-Version evtl. besser geeignet als die Byteversion - bin mir aber nicht sicher ob das wirklich einfacher ist).

Gruß MM

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Mittwoch 4. Juni 2014, 12:18

Hallo IKT,

vielen Dank für Deine schnelle Antwort und das JPG!
Nun, das Zielgerät sendet derzeit einfach 3 Byte: $0d, also CR, als Referenz um zu sehen ob die Übertragung steht,
dann Byte 1 und Byte 2. Keine Checksumme etc...

Viele Grüße,
Chip

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: RS232 Senden und Empfangen

Beitrag von IKT » Mittwoch 4. Juni 2014, 12:50

@tmm,

schon verstanden, jedoch kein Problem, da:
- String in einzelne Byte's trennen, danach
- A/D Wandler (8bit - range 0-255/-128 bis +127)
danach hast Du die einzelnen Bit's und kannst damit weiter verfahren, wie es Dir gefällt ...

Solange Chip keine weiteren Angaben* zur Verfügung stellt, ist es von unserer Seite müssig, zu 'Rätselraten'.

* Bitte genaue Angaben zumindest für das eingesetzte Protokoll! Auch Angaben zur Applikation sind in diesem Zusammenhang hilfreich; was genau soll NACH der Kommunikation alles 'angestellt' werden?

@Chip,
ganz schlecht (äusserst unüblich!), da CR oder LF oder auch CR+LF eigentlich immer als Abschluss-Zeichen und/oder als Trenn-Zeichen (zwischen den beiden Bytes) benutzt wird, also NACH den eigentlichen Daten kommt.
Z.B.: Daten-Byte + 'TAB' ('StrichPunkt' usw.) + Daten-Byte + CR+LF (oder CR oder LF alleine). Dieses 'Format' kann als String gesendet und weiter verarbeitet werden (einfachste Methode soweit verfügbare Info vorliegt!).
++++++
Gruss/regards IKT

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Mittwoch 4. Juni 2014, 14:25

@IKT
Das Zielgerät ist "Marke Eigenbau" mit einem PIC18F43K22 und
prüft auf die entsprechende Anfrage einfach ein paar Sensoren und gibt
deren Zustände synchron zu den einzelnen Bits zurück. Also je Bit ein Sensor, im Prinzip.
Den RS232-Handshake mit dem PL macht also der PIC.
Anfangs hatte ich das CR-Byte und den entsprechnenden COM-Baustein gar nicht vorgesehen.
Eigentlich brauche ich nur die 2 Byte, welche auf "Knopfdruck", also sehr langsam, vom Zielgerät abgerufen
werden.

Viele Grüße,
Chip

IKT
Beiträge: 554
Registriert: Mittwoch 4. November 2009, 18:32

Re: RS232 Senden und Empfangen

Beitrag von IKT » Mittwoch 4. Juni 2014, 15:31

Hallo Chip,
Den RS232-Handshake mit dem PL macht also der PIC
verstehe ich im besten Fall zur Hälfte:
Handshake (Hände schütteln) geht nur wenn beide 'willig' sind. Also mal 'Butter bei die Fische':
wer tut was (zuerst)
danach etc. ...

Z.B. bei meinem PRJ wie folgt:
- ARDUINO 'hat Strom', hatte gesendet, keine Antwort bekommen, ist im Schlafmodus
- PL-PRJ wird gestartet, weckt Ardu auf, Ardu beginnt zu senden (keine reelle Daten - SEINEN Init.-String), PL versucht zu empfangen (Beginn des Handshakes)
- PL bekommt ARDU Init.-String "0,0,0", schaltet darauf um auf senden + anschl. empfangen
- PL sendet Kommando 'gib Daten raus' ("C" oder "c" entspricht dezimal 67/99), Ardu erkennt die Aufforderung und antwortet entsprechend mit: sendet Daten usw.
sowas in der Art, beschreibt die Interaktion zwischen den beiden beteiligten 'Parteien'.
Es ist durchaus mühsam sowas 'in Worte' zu fassen, desswegen wurden u.a. Timing-Diagramme entworfen. Bringt aber 'Licht ins Dunkel'.

Wenn Du n'en (Eigenbau) PIC hast, kannst Du den ja entsprechend programmieren, wie es nacher auf PL-Seite am einfachsten Auszuwerten ist ...

ARDUINO Programm erkennt (bekommt jedes Mal genau ein Byte zugeschickt):
"C", "c" im Moment das einzige akzeptierte Kommando = liest Zustände und sendet Daten
"A", "a" sendet Fehlermeldung: "undefined Command"
auf alle 'anderen' gibt es eine Fehlermeldung: "undefined ERROR" ... oder so ähnlich, dies ist ja nur ein reiner COM-Test.
Obiges ist mit Protokoll gemeint!
++++++
Gruss/regards IKT

Chip
Beiträge: 11
Registriert: Freitag 21. Februar 2014, 12:55

Re: RS232 Senden und Empfangen

Beitrag von Chip » Donnerstag 5. Juni 2014, 06:55

Hallo IKT,

vielen Dank für Deine Mühe!
Ich denke, ich verstehe was Du meinst....

Viele Grüße,
Chip

Antworten

Zurück zu „Thema RS232“