Step 7 I-Device Kommunikation - Daten lesen/schreiben

Neurorancer

Level-2
Beiträge
580
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr geehrte Forum Mitglieder,

ich benötige einen Ratschlag.

Ich soll in Step7 V5.4 meine CPU (317F-2 PN/DP ) als I-Device betreiben.

Es geht mir erst einmal um den Austausch "normaler" (keine Safety) Daten.


Ich habe meine CPU als I-Device konfiguriert.
Der Anfangsbereich der Ankommenden Daten fängt bei der Adresse 5000 an, ich weiß auch welche Daten ankommen.

Frage: Ich würde die Daten gerne so aus der Adresse auslesen

//EW5000
L EW 5000 //Aktuellen Wert als Ganzzahl in AKKU1 laden
T DB50.DBW 0 //Wert in DB50 speichern

dies werde ich dann WORD für WORD machen.

Wahrscheinlich werde ich die eingelesenen WORDs gleich in Bits aufteilen oder zu REALS zusammenfassen,
sodass das DB50 korrekt gespießt wird.

Wird das Einsen der Daten funktionieren?

Dann gibt es noch eine andere Möglichkeit die Daten zu lesen,
und zwar über den DPRD-Baustein.
Dieser kann laut der Doku auch nur ein WORD lesen.

Ich würde für das Einlesen der Daten die erste Variante (AWL) nutzen wollen.
Gibt es einen Grund der dagegen spricht?
Oder einen Grund, dass mann unbedingt den DRPD Baustein nutzen soll?

Vielen Dank im Voraus!
 
Eine Frage am Rande:

Wie groß ist das AKU-Register bei einer 317F-2 PN/DP? Wo kann man es nachlesen?
Warum ich es frage: Ich könnte doch gleich ein Doppel WORD (REAL) einlesen.

//EW5000
L EDW 5000 //Aktuellen Wert als Ganzzahl in AKKU1 laden
T DB50.DBW 0 //Wert in DB50 speichern


 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann gibt es noch eine andere Möglichkeit die Daten zu lesen,
und zwar über den DPRD-Baustein.
Dieser kann laut der Doku auch nur ein WORD lesen.
Nein das ist komplett falsch. DPRD_DAT und DPWR_DAT verwendet man genau wenn man konsistent mehr als 4 Bytes lesen oder schreiben muss.
Um die Daten aus den I-Device Eingangs-Bereich zu lesen ist DPRD_DAT den klaren Wahl.
Du musst ein Ziel-DB einrichten, und für jeden konsistenten Bereich, ein STRUCT anlegen der genau den grösse von die I-Device Daten übereinstimmt.
Du kannst den STRUCT formatieren wie du willst, eventuell mit REALs wenn es dir passt. Nur wichtig ist den grösse von STRUCT muss mit den grösse von den I-Device Daten-Bereich passen.
Wenn du mehrere Eingangs-Bereiche konfiguriert hast, dann musst du mehrere STRUCTs (eventuell in denselben DB) einrichten, und mehrere DPRD_DAT aufrufe Programmieren.
 
Eine Frage am Rande:

Wie groß ist das AKU-Register bei einer 317F-2 PN/DP? Wo kann man es nachlesen?
Warum ich es frage: Ich könnte doch gleich ein Doppel WORD (REAL) einlesen.

//EW5000
L EDW 5000 //Aktuellen Wert als Ganzzahl in AKKU1 laden
T DB50.DBW 0 //Wert in DB50 speichern




Diese Frage hat sich erledigt.
Laut der DOKU: https://www.grollmus.de/simatic-sch...les/content/download/documentation/S7 AWL.pdf
kann man mit der Ladefunktion "L" Bools, WORDs und REALs laden.

Frage ist nur wie ich es eintippe (ich vergesse es ständig)

//Ist der Befehl für das Laden des BOOL Wertes korrekt?
L EB 5000.0

 
Eine Frage am Rande:

Wie groß ist das AKU-Register bei einer 317F-2 PN/DP? Wo kann man es nachlesen?
Warum ich es frage: Ich könnte doch gleich ein Doppel WORD (REAL) einlesen.


Bei allen 300ern ist der Akku 32 Bit lang also ja du könntest doppelworte lesen.
Du könntest aber auch einfach einen Blockmove über die gesamte zu kopierende Länge ausführen.
Der macht das wesentlich effizienter.
Die eingänge müssen einfach im Prozessabbild liegen.


mfG René
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein das ist komplett falsch. DPRD_DAT und DPWR_DAT verwendet man genau wenn man konsistent mehr als 4 Bytes lesen oder schreiben muss.
Um die Daten aus den I-Device Eingangs-Bereich zu lesen ist DPRD_DAT den klaren Wahl.
Du musst ein Ziel-DB einrichten, und für jeden konsistenten Bereich, ein STRUCT anlegen der genau den grösse von die I-Device Daten übereinstimmt.
Du kannst den STRUCT formatieren wie du willst, eventuell mit REALs wenn es dir passt. Nur wichtig ist den grösse von STRUCT muss mit den grösse von den I-Device Daten-Bereich passen.
Wenn du mehrere Eingangs-Bereiche konfiguriert hast, dann musst du mehrere STRUCTs (eventuell in denselben DB) einrichten, und mehrere DPRD_DAT aufrufe Programmieren.

OK, habe die Doku missverstanden.
Jetzt sehe ich den Vorteil des DPRD_DAT ein!
Die Daten aus der I-Device Kommunikation werden direkt in das DB geschrieben, richtig?
 
Ja, DPRD_DAT erledigt alles für dich auf einmal.
Du musst nur den Ziel-DB formatieren mit den gewünschte Daten-Struktur.

Ein Tip: Da auf den andere Seite genau dasselbe passieren muss, nur gespiegelt, dann lohnt es sich das jemand den Verantwortlichkeit für den Ziel/Quell-DB bekommt.
Und er übergibt dann diesen DB von sein STEP7 Projekt an den Partner für sein STEP7 Projekt.
Das vermeidet Missverständnisse und spart Arbeit.
 
Ja, DPRD_DAT erledigt alles für dich auf einmal.
Du musst nur den Ziel-DB formatieren mit den gewünschte Daten-Struktur.

Ein Tip: Da auf den andere Seite genau dasselbe passieren muss, nur gespiegelt, dann lohnt es sich das jemand den Verantwortlichkeit für den Ziel/Quell-DB bekommt.
Und er übergibt dann diesen DB von sein STEP7 Projekt an den Partner für sein STEP7 Projekt.
Das vermeidet Missverständnisse und spart Arbeit.

Perfekt! Danke vielmals!
 
Zurück
Oben