CP 343-1 Lean und AG_RECV mit variablen Datenlängen über Ethernet

buff

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe folgendes Problem, und noch nirgendwo eine Antwort gefunden.

Ich muss per Ethernet über eine CPU315-2DP/CP343-1 Lean (343-1CX10-0XE0) daten von Lichtschranken empfangen. Ich kann an den Lichtschranken nichts einstellen(vor allem nicht die Datenlänge im Header mitgeben). Außerdem ist der Transfer sehr Zeitkritisch.

Zum Ablauf: Ich sende zum Empfänger 1 Kommandobyte, und empfange auf jeden Fall 1 Echo dieses Bytes, sowie 2 Byte Daten. Es funktioniert wenn ich die daten sofort per AG_RECV abzuholen. Jedoch ist dann der Datentransfer zu langsam. Ich muss so schnell wie möglich wieder einen Befehl an die Lichtschranke senden, damit die Messauflösung möglichst groß wird, und ich viele Datenbytes bekomme.

Also hatte ich überlegt, den Puffer der CP "vollaufen" zu lassen (Arrayfeld, typ Byte), und am ende der Messung die Daten Byteweise abzuhoen, bis kein NDR mehr kommt.(Da ist es nicht mehr so Zeitkrtisch!) Jedoch kommt hier der Fehler "Zielbereich zu klein".

Gibt es da eine lösung oder ein eleganteres vorgehen? Ich weiß nicht (oder nur in etwa) wie groß die Datenmenge wird, die pro Messung anfällt. Wenn ich die Messwerte in ein Großes Array lege habe ich das Problem, dass ich nicht weiß wann das Array voll ist.

Mfg
Buff
 
Aus deiner Beschreibung ersehe ich nicht wie viele Daten theoretisch kommen können.
Wenn ich richtig gelesen habe kommt auf jede Anforderung( ein Byte) eine Antwort (2Byte) zurück.
Du weißt doch wie oft die Anfrage gestartet wurde, daher ist dir ja bekannt wie viele Antworten in dem Empfangsfach liegen.
Interessant ist, ob du eine komplette Messung in dem CP liegen lassen und dann später abholen kannst.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bike!

du hast recht, ich kann abzählen wieviele Kommandos ich gesendet habe und diese dann abholen!

Jedoch habe ich dann ein problem, sobald ein Kommando verloren geht, oder ein Byte falsch übertragen wurde. Entweder würde der Puffer nicht voll werden, und ich bekomme kein NDR oder die Werte lägen in einer falschen Reihenfolge im Array. Dann könnte es passieren, dass die Daten falsch bewertet würden! Ansonsten habe ich auch schonmal darüber nachgedacht...

Wäre halt die frage ob es anders geht...

Buff
 
Hallo Bike!

du hast recht, ich kann abzählen wieviele Kommandos ich gesendet habe und diese dann abholen!

Jedoch habe ich dann ein problem, sobald ein Kommando verloren geht, oder ein Byte falsch übertragen wurde. Entweder würde der Puffer nicht voll werden, und ich bekomme kein NDR oder die Werte lägen in einer falschen Reihenfolge im Array. Dann könnte es passieren, dass die Daten falsch bewertet würden! Ansonsten habe ich auch schonmal darüber nachgedacht...

Wäre halt die frage ob es anders geht...

Buff

Wie wird denn von der PLC gesendet?
Jedes Telegramm wird doch vom CP geprüft und falsche bzw fehlerhafte Telegramm wird doch verworfen und nicht gespeichert, soweit ich es kenne.
Welches Protokoll wird denn verwendet?


bike
 
Zurück
Oben