Sehr lange Zeichenketten über RS232 einlesen

Antworten
dimmi
Beiträge: 7
Registriert: Samstag 28. August 2010, 14:14

Sehr lange Zeichenketten über RS232 einlesen

Beitrag von dimmi » Freitag 25. März 2011, 07:46

Hallo Forum.

Ich bin mal wieder auf der Suche nach einem Tip. Meine Suche war bisher recht erfolglos.

Ich würde gerne diverse Komponenten mit ProfiLab verbinden, welche relativ viele Daten am Stück über die serielle Schnittstelle schicken.

Ist es möglich, einen seriellen Datenstrom von ca. 800 Zeichen (400 Nutzzeichen, jeweils mit Trennzeichen getrennt, abgeschlossen mit 13 10) sinnvoll mit ProfiLab zu verarbeiten?
Ich scheitere wahrscheinlich daran, dass die serielle Schnittstelle nur 255 Zeichen buffern kann. Man möge mich bitte korrigieren, falls ich hier falsch liege.

Wenn ich mit $Part die Daten trenne, kommt irgendwann der Punkt, an dem schon existierende Daten überschrieben werden.

Habt Ihr hierfür eine Idee ?

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Sehr lange Zeichenketten über RS232 einlesen

Beitrag von Scorp » Sonntag 27. März 2011, 15:59

Hallo dimmi,

ich könnte natürlich auch falsch liegen, aber so ein UART mit FIFO speichert nur 15 Zeichen.
Wenn die empfangenen Zeichen nicht schnell genug vom Betriebssystem oder Programm ausgelesen werden,
sollte die Schnittstelle einfach warten oder es gehen Zeichen verloren, wenn keinerlei Handshake eingerichtet ist.
Was ich mir eher bei fehlenden Zeichen vorstellen könnte, wäre die Möglichkeit, dass das erwartete Stringende (13 10) auch innerhalb der Nutzdaten vorkommen kann.
Wenn du genau weißt, wieviel Zeichen es mindestens sein müssen, dann kontrolliere die Länge des Comstrings und bei Unterschreiten der Mindestlänge liest du noch einen
String ein und verbindest ihn mit dem Vorherigen.
Sollten Zeichen verloren gehen, dann probiere eine kleinere Übertragungsrate oder prüfe, ob die Signale RTS/DTR bestimmte Pegel haben müssen.
Die lassen sich mit einer Funktion in Profilab beeinflussen.

M.f.G. Scorp

dimmi
Beiträge: 7
Registriert: Samstag 28. August 2010, 14:14

Re: Sehr lange Zeichenketten über RS232 einlesen

Beitrag von dimmi » Sonntag 27. März 2011, 20:36

Hi Scorp.

Das mit den 255 Zeichen scheint schon so zu sein. Habe es mit hTerm nachgeprüft. Eine Kolonne von 251 Zeichen konnten sauber verarbeitet werden. Der darauf folgende Datensatz hat dann alles verworfen. Prinzipiell kann ich der Komponente auch sagen, sie soll die Daten unterteilen und über acht RS232 ausgeben. Aber mein Rechner hat nur neun. Zu wenig, um so verschwenderisch damit umzugehen.

Ich bin aber heute einen Schritt weiter gekommen. Meine Komponente sendet jetzt jeweils 16 Datensaetze (max. 160 Zeichen), gefolgt von einem 13 10. Danach kommen die nächste 16 Datensaetze, wieder ein 13 10, und so weiter...

Ich habe den $out von der Seriellen auf 12 $Buffer gelegt und steuere den Write der Buffer über einen Dezimalzähler an. Dieser Zähler erhält seinen Clk vom Busy des Seriellen Bausteins. Somit wird bei jedem 13 10 der Teilstring mit 16 Datensätzen in einem anderen Buffer geladen. Von dort aus wird er dann noch passend weiterverarbeitet.

Morgen werde ich mich noch um die Synchronisation kümmern, damit die Daten auch immer an die gleichen Stelle kommen.

Allerdings scheint mir der Weg doch noch etwas steinig. Vielleicht findet sichbja auch noch ein anderer Lösungsweg...

Dimmi

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Sehr lange Zeichenketten über RS232 einlesen

Beitrag von KAKTUS » Sonntag 27. März 2011, 22:24

Du kannst ja auch bei einem Trennzeichen die Daten mit einem Com String empfangen Baustein einlesen. Die DAten in einem Buffer zwischenspeichern.

Mit einem weiteren Baustein ließt du bei 13 10 ein. Wenn BSY high dann alle DAten verwerten.

Stelle doch bitte mal einen Beispiel Datenstrom ein.
stachlige Grüße, Kaktus

Antworten

Zurück zu „Thema RS232“