CP340. DB-Überlauf (zu viele Zeichen abfangen ?)

noeppkes

Level-1
Beiträge
150
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein ASCII-Telegramm auf der CP340 (6ES7 340-1BH00-0AE0) laufen.
Dabei ist diese auf:
"Nach Ablauf der Zeichenverzugszeit 10msec."
eingestellt.
Eigentlich funktioniert das ganze wunderbar, wenn nicht ab und zu (aus welchen Gründen auch immer) zu viele Zeichen empfangen werden und dadurch der Empfangs-DB von der Grösse her nicht mehr reicht.

Es sind immer 23 Zeichen zu empfangen. Deswegen habe ich den DB auch auf 23 Zeichen angelegt. In der Zwischenzeit habe ich ihn mal auf 200 Zeiche erhöht. Damit ist das Problem verschwunden, jedoch würde ich gerne wissen, wie ich solch einen Überlauf abfangen kann.
Lief der Empfangs-DB über, so ging die CPU in STOP und die ganze Anlage stand still. Aus- und wieder Einschalten beseitigte dann das Problem.

Ich habe im Moment keinen Ansatz.
Kann mir hier jemand weiterhelfen.

noeppkes ...
 
1. Sollte der Empfangspuffer nie gleich der theoretischen Empfangsgöße sein.
2. Lässt sich das mit einem Fehler OB beheben
3. Was oder wer sendet denn die Daten ?
4. Wenn die Anlage aus ist, oder die CPU in Stop werden keine Daten empfangen. diese bleiben eventuell im Puffer des Sendegerätes stehen. Wenn du nun nur über Zeichenverzugszeit arbeitest werden nach dem Hochlauf der CPU alle Daten gesendet.

5. Kann es sein das du den Receivebaustein nur einschaltest wenn Du denkst es müßen Daten kommen ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Sollte der Empfangspuffer nie gleich der theoretischen Empfangsgöße sein.
--> O.K. Das dachte ich mir schon.

2. Lässt sich das mit einem Fehler OB beheben.
-->O.K. Welcher denn ?

3. Was oder wer sendet denn die Daten ?
--> Microcontroller. Nur auf "Anfrage" hin von der SPS

4. Wenn die Anlage aus ist, oder die CPU in Stop werden keine Daten empfangen. diese bleiben eventuell im Puffer des Sendegerätes stehen. Wenn du nun nur über Zeichenverzugszeit arbeitest werden nach dem Hochlauf der CPU alle Daten gesendet.
-->Daten werden nur an die SPS gesendet, wenn diese auch explizit von der SPS an den Microcontroller "angefragt" werden. (Master / Slave-Betrieb über RS485). SPS = Master, Microcontroller = Slave mit entsprechender Adresse.

5. Kann es sein das du den Receivebaustein nur einschaltest wenn Du denkst es müßen Daten kommen ?
--> Nein. Er ist immer eingeschaltet.

Im Prinzip möchte ich nichts anderes als erkennen, wenn solch ein Fehler auftritt und einfach den CP340 wieder "freimachen", d.h. Empfangspuffer löschen.
Die SPS frägt dann nach der TimeOut-Zeit den / die Microcontroller neu an. Das unbedingte empfangen des Telegrammes ist nicht so wichtig. Es geht hier um Raumtemperaturen, welche sowieso ständig abgefragt werden. Darum ist es egal, wenn mal eine oder zwei Telegramme verloren gehen.
Ich möchte eben nur nicht, dass die CPU ab und zu in den STOP rennt. Dann steht eben alles.

noeppkes ...
 
Der OB müßte der OB121, ansonsten wenn die CPU in Stopp gegangen ist im Diagnosepuffer nachsehen, da steht der OB mit nummer drin
zB. Angeforderter OB : Programmierfehler -OB (OB 121)

Was ist das denn für ein Gerät (Typ) mich interessiert warum du über Zeichenverzugszeit geht, das ist der schlechteste Weg.
Wie Lauten denn eine Antwort ?
Normalerweise vieleicht so
12.45C+CR+LF
Schau mal in den Empfangspuffer ob hinter der Temperatur nicht ein Hex 0A oder Hex 0D ankommt, und ändere das als Empfangsendeerkennung.

Der Empfangsbaustein muss beim Senden abgeschaltet werden.
EN_R=False
 
Der OB müßte der OB121, ansonsten wenn die CPU in Stopp gegangen ist im Diagnosepuffer nachsehen, da steht der OB mit nummer drin
zB. Angeforderter OB : Programmierfehler -OB (OB 121)

Was ist das denn für ein Gerät (Typ) mich interessiert warum du über Zeichenverzugszeit geht, das ist der schlechteste Weg.
Wie Lauten denn eine Antwort ?
Normalerweise vieleicht so
12.45C+CR+LF
Schau mal in den Empfangspuffer ob hinter der Temperatur nicht ein Hex 0A oder Hex 0D ankommt, und ändere das als Empfangsendeerkennung.
In der Tat. Den Microcontroller habe ich selbst programmiert. D.h. das Endezeichen kann ich frei definieren. Es ist aber schon CR + LF.
Ich weiss wohl, dass ich auch über das Ende-Zeichen gehen kann, jedoch kann es auch mal sein, dass dieses nicht richtig verstanden wird und somit der Empfangspuffer dann auch über läuft, weil dann 2 Telegramm oder mehr in den Empfangspuffer kommen könnten. Da schien es mir am sichersten zu sein, ich gehe über die Zeichenverzugszeit. die ist in jedem Fall immer da.


Der Empfangsbaustein muss beim Senden abgeschaltet werden.
EN_R=False

O.K. Das wusste ich nicht. Warum muss ich den diesen abschalten. Meiner ist immer aktiv !

noeppkes ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das abschalten ist von Siemens so beschrieben. Die FB's "Senden" und "Empfangen" kommunizieren ja über die E/A Ebene mit der Baugruppe. Diese würden sich dann gegenseitig stören.

Ich würde auf jeden Fall ein Zeichen als Endeerkennung eintragen. Die Zeichenverzugszeit bleibt ja trotzdem aktiv !
Das heisst wenn ein korrekter Satz empfangen wird kommt ein NDR, oder wenn die Zeichenverzugszeit abgelaufen ist. Sollten jetzt 100 Telegramme in Folge kommen die deinen Puffer zum überlaufen bringen könnten, käme durch das Endezeichen 100* ein NDR und nicht wie jetzt 1* mit Überlauf.
 
Zurück
Oben