Sollwert über HMI und PLS (DP/DP Koppler) in S7 ändern

superkato

Level-1
Beiträge
220
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich habe einen sollwert (hab ich in DB10 2.0 als real) dieser soll von einem PLS via DP/DP Koppler und einem OP77A verändert werden können.

Wie gehe ich bei sowas vor ? in dem DB10 2.0 habe ich ja bereits einen defaulwert von 5.0 (bar) drin.

wenn ich jetzt vom op77a den wert ändern will wie gehe ich da vor?

also meine funktion ruft den sollwert immer vom DB10 2.0 auf.

Soll ich dann im HMI den wert anzeigen lassen und dann mittels E/A Feld den wert verändern lassen?

das PLS kann ja dann auch auf den DB10 2.0 zugreifen und den wert verändern.

oder gibts da spezielle richtlinien oder bausteine / tricks?

Vielen Dank für eure Mühen!

mfg
sK
 
Hallo superkato,

zunächst, ein REAL an Adresse 2 heißt DB10.DBD2 (keine Kritik, nur Info)

Die Sache mit dem OP77 sollte keine Probleme bereiten.
Dieses greift dann direkt auf den DB10 zu. Ist dann ein E/A-Feld benutzt, wird ein im DB geänderter Wert angezeigt.

Ein Problem wird die Anbindung der PLS über DP-Koppler sein.
Diese Schnittstelle ist wie Eingänge und Ausgänge zu sehen.
Wenn die PLS also einen Wert (in den Eingang) schreibt, kann sie einen im DB geänderten Wert so nicht zurücklesen.
Natürlich kannst du den Wert im DB über den DP-Koppler (Ausgang) der PLS anbieten.
Ob die PLS das handeln kann, weis ich nicht.

Falls die PLS "nur" schreibt, kannst du ihren Wert in einem anderen DBD zwischenspeichern und nur bei dessen Änderung in deinen DB10.DBD2 übernehmen.
Dann hat sie aber keinen gültigen Wert bei sich stehen, falls du über das OP änderst.

Übrigens zu dem Thema DP-Koppler aus dem anderen post:
deine Angaben innerhalb des DP-Modul (zB 1Byte-E,...32Byte-A usw) müssen auf der Gegenseite komplimentär sein. D.h. was bei dir Eingang ist, muss dort Ausgang sein und umgekehrt (gleiche Stelle, Datenbreite usw).

Gruß Roland
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok! hab ich verstanden :)

BTW: was entspricht dann eigentlich einem 16 bit unsigned und 32 bit unsigned und jeweils signed auf der SPS ?

Ja der DP/DP Koppler ist ja dann im prinzip wie eine Ein- und Ausgabegruppe, und auf der anderen Seite I/O mäßig gedreht.

Ich hab das jetzt so realisiert mit dem OP und PLS:

in einem DB steht der aktuelle Sollwert. Die PLS kann ihn lesen und verändern, ebenso das HMI. Mein Programm greift dann jeweils auf diesen Wert zu. Ich glaub ich hab da komplizierter gedachta als es eigentlich ist.

Vielen Dank Pfälzer!
 
Vorzeichenlose Ganzzahl-Typen gibt es bei der S7 genaugenommen nicht. Da alle Ganzzahl-Operatoren nur für vorzeichenbehaftete Typen gelten (INT oder DINT).

ah ok ich frage nur weil ich von einem profibs dp slave

daten bekomme laut tabelle im format 32 bit unsigned und 16bit signed und 16 bit unsigned.

an
(32 bit unsinged) PEW50 => DB20. DBD0
(16 bit unsinged) PEW54 => DB20. DBW4
(16 bit unsinged) PEW56 => DB20. DBW6

ist doch so korrekt im prinzip oder ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ah ok ich frage nur weil ich von einem profibs dp slave

daten bekomme laut tabelle im format 32 bit unsigned und 16bit signed und 16 bit unsigned.

an
(32 bit unsinged) PEW50 => DB20. DBD0
(16 bit unsinged) PEW54 => DB20. DBW4
(16 bit unsinged) PEW56 => DB20. DBW6

ist doch so korrekt im prinzip oder ?

(32 bit unsinged) PED50 => DB20. DBD0

sollte es dann heißen.
Aber in der Schreibweise steckt noch kein Datentyp, das ergibt sich erst über die Symbolik bzw. Operationen die du auf diese Speicherbereiche evtl. ausführen möchtest. DBW/DBD sind ja reine Adressangaben (Wort/Doppelwort bzw. 16/32 Bits).
 
ah stimmt!

geht darum das ich 32bit unsinged eine Zahl bekomme bzw. eine Sekundenzahl, die würde ich gerne in Stunden umrechenen bzw REAL.
 
(32 bit unsinged) PEW50 => DB20. DBD0
(16 bit unsinged) PEW54 => DB20. DBW4
(16 bit unsinged) PEW56 => DB20. DBW6

ist doch so korrekt im prinzip oder ?

Ja, passt !

singed und unsinged sagt aus, wie du den Wert interpretieren musst.

Singed bedeutet MIT Vorzeichen:
das MSB (höchstwertige Bit) gibt das Vorzeichen an.
0=positiv, 1=negativ (bei negativ sind alle Wertigkeitbits invertiert)

Unsigned bedeutet OHNE Vorzeichen:
alle bits sind Wertigkeitbits, daher nur positive Werte
Da das MSB hier eine Wertigkeit (höchste) darstellt, ist damit der doppelte Bereich wie bei "signed" darstellbar. Jedoch nur positiv.

Edit:
Das gilt natürlich nur, wenn die 16bit / 32bit einen Wert darstellen.
Werden darin einzelne Bits übertragen, ist es ohne Bedeutung.

Nochmal Edit:
Man seid ihr wieder schnell.
PED50: Richtig, hatte ich gar nicht bemerkt.

Gruß Roland
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ah stimmt!

geht darum das ich 32bit unsinged eine Zahl bekomme bzw. eine Sekundenzahl, die würde ich gerne in Stunden umrechenen bzw REAL.

Und da musst du eben aufpassen, weil die S7 keine vorzeichenlosen Typen kennt.
Zumindest wenn du vorhast den Wert mit dem eingebauten "DTR"-Befehl in eine Gleitkommazahl zu konvertieren.
Denn dann bekommst du bei Werten größer (2^31)-1 einen negativen Wert bei der Konvertierung heraus, obwohl dir jemand über den Bus einen positiven Wert schicken wollte.
 
ja ich denk aber 2^31 reicht vollkommen aus :D

Ist eigentlich der "L und T" Befehl das gleiche wie der Move Befehl in FUP?

also
L DB20.DBD2
T MD20

Movebox mit ein uns augang wie oben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ah gut zu wissen.

da wäre noch was :D

ich hab das PEW200
und ich möchte das siebte biz also 200.7 an den DB21.DBX0.0 weitergeben.

er akzeptiert aber das PEX200.7 nicht nur E200.7 (ist ein dp slave) :(
 
Ah gut zu wissen.

da wäre noch was :D

ich hab das PEW200
und ich möchte das siebte biz also 200.7 an den DB21.DBX0.0 weitergeben.

er akzeptiert aber das PEX200.7 nicht nur E200.7 (ist ein dp slave) :(

Auf die PE kann auch nicht Bitweise zugegriffen werden, du musst mindestens ein Byte laden. Das kannst du ja in die Lokaldaten umspeichern, und diese dann Bitweise abfragen!
 
Zurück
Oben