Step 7 DP Float Werte Konsistent übertragen >32Byte

deathfun

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

von einem DP Slave können mit einem Befehlsbyte verschiedene Datensätze angefordert werden welche 53-125 Byte (Float) enthalten. Zu dem Gerät gibt es natürlich auch eine GSD Datei die Module für 8, 16, 32 und 62 Worte (STD und Kons.) enthalten sind.

Leider verfügt die Komponente des DP Slave nur über zwei Steckplätze und die maximale Länge Konsistenter Daten in der CPU* ist auf 32Byte begrenzt. Im Universalmodul kann ich zwar die die Konsistenz von Bereich auf Einheit ändern, jedoch nur auf Byte/Wort.

Da es sich bei den zu übertragenden Werten fast ausschließlich um Messwerte Handelt fürchte ich es könnte ab und an Unsinn in den Messwerten stehen wenn diese nicht zusammenhängend übertragen werden, also mindestens zu 4Byte Blöcken.


Hat jemand eine Idee wie ich an diese Daten sinnvoll verarbeiten kann ohne Gefahr zulaufen häufig Unfug in den Werten zu haben? Die Werte gehen auch aufs WinCC und Teilweise in Archive, seltsame Ausreißer durch nicht komplett geladene Floatzahlen währen hier nicht gut.




Gruß
Deathfun



*314C 2-DP und 414 2-DP
 
Wenn die Module sinnvoll aufgebaut sind sollte es keine Überschneidung eines 4-Byte Real Wertes auf zwei Blöcke geben.
Wenn du einen 32 Byte Block konsistent lesen kannst, ließen sich dort 8 Real Zahlen konsistent unterbringen.
4 Bytes kannst du auch konsistent über PED/PAD übertragen, ohne die SFC14/15.
Oder die legst deinen Slave ins Prozessabbild und greifst dann über E/A darauf zu, das ist immer konsistent.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

du meinst also ich könnte ohne Probleme einen Inkonsistenten PEW Bereich für den Slave anlegen und mit Doppelwortzugriffen die Daten einzeln Werte (Schleife) auslesen?

Wenn dem so ist, sehr gut! Danke für deine Hilfe, war mir nicht sicher ob die Daten Zusammenhängend im Prozessabbild liegen.


´
Gruß
Deathfun
 
Ab CPUs mit einem bestimmten Firmwarestand ist das möglich, siehe:
http://support.automation.siemens.com/WW/view/de/8751062

Zugriffe auf Peripherieadressen benötigen aber ordentlich Zykluszeit. Ich würde trotzdem auf die jeweiligen Blöcke mit den SFCs zugreifen.

Es kann auch sein dass ein 32-Byte Block zusammengehört. Ich hatte kürzlich einen Slave dem ich erst eine Nummer für einen angeforderten Datensatz schicken musste, und er mir dann in der Antwort die Nummer zurückgemeldet hat und ich dann die nachfolgenden Daten (32 Bytes) anhand dieser Nummer zuordnen konnte. D.h. hier war eine Konsistenz über die 32 Bytes notwendig.
 
Hallo Thomas,

es ist hier ähnlich. Ich schicke dem Slave ein Befehls Byte mit Informationen was genau ich haben möchte und dieser Antwortet nun mit 126Byte (1 x Befehls Byte + 29 x FloatWerte).


Ich hätte nun aus deiner vorherigen Antwort verstanden, dass ich statt der Module mit 8, 16, 32, 62 Wörtern Konsistent Lesen einfach das Universal Modul nehme und einen entsprechend Großen Eingangsbereich für die Werte anlege. Diesen würde ich nun über zwei AnyPointer und BlockMove Stück für Stück in DWords in einen DB schreiben.

Falls du mit den SFC die SFC14/15 meinst so funktionieren diese doch nur mit Konsistenten Daten oder? Die SPS (später wohl die og. 400er) hat natürlich noch reichich anderes zu tun und darf sich daran nicht aufhängen. Wie also sollte ich es am besten anstellen?



Gruß
Deathfun
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn deine CPU nur max. 32 Byte konsistente Daten unterstützt, kannst du mit dem Universalmodul auch nichts dran ändern. Und das scheint eine relativ alte 314 zu sein bei der man wahrscheinlich auch noch nicht die Größe des Prozessabbilds einstellen kann, und das auch bestimmt nur max. 128 Bytes groß ist.

Bist du dir sicher mit deinem 1x Befehlsbyte und 29x Float? Dann wäre ein Modul ja kürzer als 32 Byte. Stört aber auch nicht, solange die 4 Bytes eines Floats innerhalb eines konsistenten Moduls liegen.
Ich würde 4 Stück der angebotenen 32 Byte Module (oder was auch immer dein Slave anbietet) in die Konfig reinziehen und dort Konsistenz über gesamte Länge einstellen. Im Programm dann 4x DPRD_DAT für jedes Modul aufrufen. Mehr kannst du mir der CPU imho nicht rausreißen.
 
Hallo Thomas,

ganz so einfach ist es dann doch nicht. Gerne würde ich mehrere 32Byte Module, die oben genannten 8Wort Module, nehmen und sie stecken. Leider sind nur 2 Steckplätze vorhanden, also maximal 64Byte der benötigten (29x4Byte + 1Byte) 116Byte.


Gruß
Deathfun
 
Zurück
Oben