Probleme TCP-Verbindung CP343 mit externer Peripherie (AG_Receive)

bx76

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr SPS Spezialisten,
ich bin am verzweifeln und hoffe ich finde hier jemand der mir ein Stück weiter helfen kann.

Folgende Situation:
Ich möchte mit einer Siemens CPU 315 mit einem CP343-1 Advanced auf eine externe Peripherie zugreifen. Verbindung hab ich aufgebaut (TCP - Verbindung) war kein Ding. Es ist auch nicht weiter schwierig gewesen die ersten Daten vom Empfangsbaustein zu lesen, doch jetzt kommts.

Da ich mich erst vor kurzem mit dem AG_Receive (FC6) Baustein erst angefreundet hab weiß ich nicht wie der so richtig reagiert.

Problem:
Ich bekomme ständig und das recht schnell neue Daten in den dafür vorgesehenen DB, wie kann ich das aufhalten? Soll ich nach empfang der Daten den Baustein auf enable setzen?

Hab ich auch schon versucht, jedoch kommt es hin und wieder vor das NDR dann auf True geht ich dies aber nicht mehr zurück setzen kann.

Wie Ihr seht ich benötige wirklich dringend Hilfe wie ich das angehen kann und bitte kommt nicht mit irgendwelchen Beispielprogrammen von Siemens, die hab ich bereits versucht.

Vielen Dank
 
Problem:
Ich bekomme ständig und das recht schnell neue Daten in den dafür vorgesehenen DB, wie kann ich das aufhalten? Soll ich nach empfang der Daten den Baustein auf enable setzen?
Warum ist das ein Problem?
Die meisten haben das Problem das die Daten zu langsam kommen.
Egal!
Entweder Du überspringst den Aufruf des FC6 und rufst ihn nur im (?) Sekundentakt auf, oder Du sendest auf der Gegenseite langsamer (Aktivierung des FC5).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mit einer Siemens CPU 315 mit einem CP343-1 Advanced
[...]
Verbindung hab ich aufgebaut (TCP - Verbindung) war kein Ding.
Die Verbindung baut sich ja auch vollkommen von alleine auf, wenn sie richtig projektiert ist. ;)

Da ich mich erst vor kurzem mit dem AG_Receive (FC6) Baustein erst angefreundet hab weiß ich nicht wie der so richtig reagiert.
[...]
und bitte kommt nicht mit irgendwelchen Beispielprogrammen von Siemens, die hab ich bereits versucht.
Die Beispielprogramme von Siemens sind das Grundgerüst, um spielerisch zu testen, wie Kommunikation funktioniert.

Wie der FC6 "AG_RECV" arbeitet findest Du in der Step7-Baustein-Onlinehilfe mit F1 und in Siemens-Beispielen,
die Du nicht genannt haben willst.

Problem:
Ich bekomme ständig und das recht schnell neue Daten in den dafür vorgesehenen DB, wie kann ich das aufhalten?
Vielleicht solltest Du nur dann Daten von dem Kommunikationspartner anfordern, wenn Du die auch empfangen willst.
Falls der Kommunikationspartner keine besondere Aufforderung zum Senden braucht und zyklisch sendet, dann mußt
Du halt alle Daten empfangen und verarbeiten.

Gruß
Harald
 
Erst einmal vielen Dank für Eure schnellen Antworten.
Ich glaub ich sollte Euch mal mein Problem genauer beschreiben.

Die externe Peripherie die ich ansteure sendet sekündlich einen Leitungsüberwachungsframe (Bsp. AABB0007AACC). Wenn ich nun ein Kommando absetze, dann bekomme ich auch die richtigen Daten (zumindest sehe ich das im Empfangs DB. Da die Daten im DB wie in einem Ringpuffer behandelt werden weiß ich nie genau auf welchem Array Byte mein Header landet, also muss ich die ankommenden Daten auf den Header überprüfen.

Wenn ich den Receive Baustein zyklisch aufrufe, dann kommen die Daten sehr schnell, vielleicht mach ich da auch was falsch. Wie würdet Ihr prinzipiell dieses Thema angehen, denn wie gesagt ich bin was das Thema angeht neu und obwohl ich mich in den CP343 und die FC's eingelesen hab will es irgendwie nicht funktionieren.

Danke Euch schon mal im voraus.
Falls Ihr meine Erläuterungen nicht versteht, einfach Fragen.
 
Erst einmal vielen Dank für Eure schnellen Antworten.
Ich glaub ich sollte Euch mal mein Problem genauer beschreiben.

Die externe Peripherie die ich ansteure sendet sekündlich einen Leitungsüberwachungsframe (Bsp. AABB0007AACC). Wenn ich nun ein Kommando absetze, dann bekomme ich auch die richtigen Daten (zumindest sehe ich das im Empfangs DB. Da die Daten im DB wie in einem Ringpuffer behandelt werden weiß ich nie genau auf welchem Array Byte mein Header landet, also muss ich die ankommenden Daten auf den Header überprüfen.

Wenn ich den Receive Baustein zyklisch aufrufe, dann kommen die Daten sehr schnell, vielleicht mach ich da auch was falsch. Wie würdet Ihr prinzipiell dieses Thema angehen, denn wie gesagt ich bin was das Thema angeht neu und obwohl ich mich in den CP343 und die FC's eingelesen hab will es irgendwie nicht funktionieren.

Danke Euch schon mal im voraus.
Falls Ihr meine Erläuterungen nicht versteht, einfach Fragen.


Hm, bekommst du Telegramme mit verschiedenen Längen geschickt ???
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja. Einmal die Leitungsüberwachung, dann die Response auf das Kommando, worin sich die benötigten Nutzdaten befindet und falls ein Kommando nicht ausführbar ist bekomme ich auch eine Response.

Mir würde es aber reichen wenn ich die Nutzdaten mit entsprechendem Header Filtern könnte und diese Datenlänge ist immer gleich.

Das Problem ist der Ringpuffer im DB.

Ach noch was, ich nehme auch gern Tips an wie man dies in SCL programmieren könnte, denn das Ergebnis sollte ein FB sein der all das abhandelt.(nur als Info)
 
Zuletzt bearbeitet:
Hallo, ich hab Euch noch ne Info bzw. Frage zu meinem Thema:

Ich hab nun ein Programm erstellt, dass den Empfangsbaustein sobald er Daten empfängt am EN Eingang auf False geschaltet wird. Funktioniert soweit auch und NDR geht auch auf True bzw. die Datenlänge zeigt die zu erwartende Datenlänge an.

Jedoch hab ich nun das Problem dass dies nur einmalig geht, sobald ich mit meinem Sendebaustein wieder ein Kommando absetzt so reagiert der Receivebaustein nicht mehr, ist wie eingefroren, was kann ich tun? Muß ich die Daten aus dem DB weg speichern? Falls ja wie?

Denn wenn ich hierfür eine Lösung hätte wäre mein Thema so gut wie geschafft.



Danke
 
Meiner Meinung nach muß der AG_RECV-Baustein immer enabled sein, also immer aufgerufen werden.
Ein disablen oder nicht-Aufrufen bringt nichts, der CP empfängt ja trotzdem Datenpakete, der AG_RECV
holt die nur vom CP in die CPU. Das Verhalten des CP kann nur mit FC10 AG_CNTRL beeinflußt werden
(Disconnect, Connect, Reset ...).

NDR=1 zeigt an, wenn ein neues Datenpaket vom CP zur CPU kopiert wurde, LEN zeigt dann an, wie
groß das Paket war. Es kann aber z.B. auch ERROR=1 und STATUS=W#16#8185 angezeigt werden,
dann wurde z.B. ein Datenpaket größer als der angegebene RECV-Puffer empfangen.
Die meiste Zeit wird AG_RECV aber NDR=ERROR=0 und STATUS=W#16#8180 oder W#16#8181 anzeigen:
"Es liegen noch keine Daten vor" oder "Auftrag läuft".

Also: AG_RECV frei laufen lassen und ERROR und NDR + LEN auswerten.

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Infos, bin zwar jetzt etwas schlauer was den CP angeht, jedoch hab ich immer weniger Plan wie ich den Sch... geregelt bekomme.
:confused::confused::confused::confused:
 
Zurück
Oben