UDP-Daten mit CP343-1 Advanced auslesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Zuerst mal einen Datenbaustein mit der entsprechenden Länge und lauter DINT (32 Bit) als Empfangsfach. Diesen dann statt DB10 verwenden.
Dann müssen die Daten natürlich überhaupt erstmal im DB ankommen, daß ist ja bisher noch nicht der Fall gewesen. Egal was da ankommt, es muß zuerst überhaupt etwas im DB landen. Kommen die Daten von einem PC kannst du sie wahrscheinlich nicht gleich so verwenden, sonder mußt evtl. die Bytes vertauschen. Such mal hier im Forum, dazu läuft grad ein Thread. Wahrscheinlich einfacher könnte es sein, wenn die Daten gleich "gedreht" abgeschickt werden, da sich das in C ganz einfach machen läßt.

Sieh dir das mal an: http://www.esatex.com/SPS-Forum/showthread.php?t=11611

Ob das nötig ist hängt natürlich davon ab, in welchem Format die Daten vom PC weggehen.

Aus dem Empfangsfach heraus baust du dir dann mit einem FC die Daten zusammen und tranferrierst das Ergebnis jeweils in den DB10. Auf dessen Daten kannst du dann ganz normal im Step7-Programm zugreifen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wollte dich nicht durcheinanderbringen, hier mal ein Zitat aus dem Link:

Da bei Integer-Werten mit Motorola-Byteorder das H-Byte zuerst steht, befinden sich in dem Array db0 abwechselnd H- und L-Bytes.

Das werden wir sehen, wenn du erstmal überhaupt Daten in den DB bekommst.
Diese müssen dann noch entsprechend umgesetzt werden. Miit etwas Glück wird es kein Problem sein.
 
ich hab folgendes Problem:
Die Statistik der CP zeigt zwar das Daten empfangen werden, der FC6 jedoch nicht...

Ich hab die UDP-Verbindung parametriert und auch die CP...
was könnte hier noch nicht passen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du die richtige ID (Verbindungsnummer) angegeben?

Hier mal die Bedeutung der Parameter des FC6 aus der Siemens-Hilfe:

Parameter Deklaration Typ Wertebereich Bemerkung
========= ========= ====== =========== ====================================
ID INPUT INT 1,2...16 (S7-300)
1,2...64 (S7-400) Im Parameter ID wird die Verbindungsnummer der Verbindung angegeben.
_________ _________ ______ ____________ _____________________________________
LADDR INPUT WORD Baugruppen-AnfangsadresseBei der Konfiguration des CP mit STEP?7 HWKonfig wird die Baugruppen-Anfangsadresse in der Konfigurationstabelle ausgegeben. Geben Sie diese Adresse hier an.
_________ _________ ______ ____________ _____________________________________
RECV INPUT ANY(als VARTYPE sind nur zugelassen:BYTE, WORD und DWORD) Angabe von Adresse und LängeDie Adresse des Datenbereiches verweist alternativ auf:

- Merkerbereich
- DatenbausteinbereichBeachten Sie für die Längenangabe:Die Übertragung von Datensätzen bis zu 240 Byte erfolgt mit erhöhter Performance, wenn Sie die Längenangabe am Parameter RECV ebenfalls auf 240 beschränken!
_________ _________ ______ ____________ _____________________________________
NDR OUTPUT BOOL 0: -
1: neue Daten Der Parameter zeigt an, ob neue Daten übernommen wurden.
Zur Bedeutung im Zusammenhang mit den Parametern ERROR und STATUS siehe FC-Baustein AG_RECV: Auswerten der Anzeige (Industrial Ethernet).
_________ _________ ______ ____________ _____________________________________
ERROR OUTPUT BOOL 0: -
1: Fehlerfall Fehleranzeige
Zur Bedeutung im Zusammenhang mit den Parametern NDR und STATUS sieheFC-Baustein AG_RECV: Auswerten der Anzeige (Industrial Ethernet) .
_________ _________ ______ ____________ _____________________________________
STATUS OUTPUT WORD siehe nachfolgende Tabelle Statusanzeige
Zur Bedeutung im Zusammenhang mit den Parametern NDR und ERROR siehe FC-Baustein AG_RECV: Auswerten der Anzeigen (Industrial Ethernet).
_________ _________ ______ ____________ _____________________________________
LEN OUTPUT INT bei ISO-Transport und ISO-on-TCP:1,2,...8192bei UDP:1,2,...2048 Gibt die Anzahl der Bytes an, die vom Ethernet-CP in den Datenbereich übernommen wurden.· Bausteintyp beachten:

bei S7-300:
Bei älteren Ausgabeständen des FC AG_RECV (bis V3.0) ist der Datenbereich generell auf max. 240 Byte beschränkt. Die aktuellen Versionen lassen bis zu 8192 Byte zu.

bei S7-400:
Mit dem FC AG_RECV ist der Datenbereich generell auf max. 240 Byte beschränkt.

V5.0 SP3
Leider geht die Formatierung verloren, sollte aber lesbar sein.
 
Die Definitionen der Bausteine usw. hab ich alles selbst auch...

ID und LADDR stimmen sicher, als Datenpuffer haben wir jetzt testweise Merkerbytes genommen...
 
Ok, habs jetzt geschafft Daten zu empfangen...
Jetzt folgt noch die Sache mit dem Datenbaustein...
ich werde das ganze das nächste mal wenn ich Zeit habe probiern.

ich melde mich wieder, wenns weitere probleme gibt...
 
Der richtige Port war der Fehler...

Ich hab dem Softwareprogrammierer gesagt das Programm soll die Daten über Port 2000 rausschicken... es hat die Daten zwar AN den 2000er geschickt, allerdings nicht VOM 2000er...
der Ausgangsport war immer verschieden, da man bei der Verbindungsprojektierung aber einen fixen Port angeben muss, hats klarerweise nicht funktioniert...
 
ich krieg das mit dem Datenbaustein nicht hin....

Hab mir jetzt nochmal die Zustandsausgaben angschaut..

er zeigt Fehler 80B1 an, was soviel bedeutet wie: "Zielbereich ungültig"

Ich hab auch schon probiert den Datenbaustein auf lauter DINT-Werte zu ändern, es kommt der selbe Fehler...

Mein Lehrer hat gesagt normalerweise müsste die Steuerung die Daten einfach nacheinander in den Datenbaustein schreiben, also die ersten 4 Byte zur 1sten DINT-Variable, usw...

Liege ich bzw. liegt er da falsch?

EDIT: Sagt mal bin ich völlig verblödet?? wie kann ich einer DINT-Variable eine 0 zuweisen?? einfach 0 funzt nicht...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, hab das mit den DINT nochmal probiert.. jetzt funzts mal...

also er schreibt daten in den baustein...

komischerweise allerdings nur 20Byte... es sollten 56Byte sein...

kann ich irgendwo nachsehen wieviele Bytes hereinkommen?

EDIT: Hab gerade mit dem Programmierer geredet... jetzt stellt sich die Frage ob die Steuerung den Header des Pakets eigentlich auch in den Baustein schreibt oder nur die Daten??
 
Zuletzt bearbeitet:
eine andere Frage: Hat jemand eine Ahnung ob man den Port von dem die Daten gesendet werden irgendwie unbestimmt lassen kann?

Das könnte nämlich noch zu einem Problem werden...

Es ist eine UDP-Verbindung mit fixem Partner...

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich dreh noch durch mit der ganzen sache...
irgendwie bekommen wir nur komische werte in den Datenbaustein und es werden immer nur die ersten 20 Byte geschrieben obwohl die LEN-Variable 56 anzeigt...

Gibt es denn vl irgendeine andere Möglichkeit die zu empfehlen wäre?
Vl die Daten am PC weiterverarbeiten und irgendwie per OPC-Server in den Datenbaustein schreiben?
Ich hab jetzt schon des öfteren von Libnodave gelesen... kann ich mit dem was anfangen??

mfg neibeck
 
Wenn Len 56 anzeigt, dann sind auch 56 Byte empfangen worden, woher soll der FC6 sonst wissen, daß 56 Byte abgeschickt wurden? Was zeigt der Status an?
Hat der Programmierer ab Byte 21 vielleicht lauter Nullen übertragen? Ich weiß, blöde Frage, aber trotzdem. Interessant wären mal 2 Datenauszüge, erstens was genau wurde abgeschick, zweitens, was genau kam an.

OPC-Server geht natürlich, kostet aber.
Libnodave ist kostenlos und zu empfehlen , muß der Programmierer aber in sein Programm einbinden.
 
Zuletzt bearbeitet:
wenn ich das vorher gewusst hätte...
Das Programm schickt ja wirklich lauter Nullen...
Ich verfluche denjenigen der es geschrieben hat.. ich nenne jetzt keine Namen...

OPC-Server haben wir von der Schule...

Leider hat von uns keiner brauchbare Java oder C-Kenntnisse, also fällt Libnodave vorerst mal weg...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem Daten empfangen funktioniert jetzt... :)

Allerdings habe ich jetzt folgendes Problem...
Das UDP-Paket mit den aktuellen Positionsdaten wird viel öfter geschickt als wir benötigen... die CP speichert jedoch alle Daten die ankommen und der AG_RECV Baustein arbeitet diese nacheinander ab...
Kann ich den Empfangsbaustein irgendwie dazu bringen, nur das letze empfangene Paket abzuarbeiten?

mfg neibeck
 
Zuletzt bearbeitet:
Ne, keine Ahnung, wie oft kommt denn das? Kannst du denn die Daten nicht trotzdem holen und z.Bsp. in einen Dummy-DB speichern und überschreiben?
 
Zurück
Oben