Step 7 Merker abfragen?

Den1uX

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

ich habe eine kleine, wenn auch vielleicht blöde Frage. Aber was soll ich sagen, bin halt einfach nicht besonders erfahren und sowohl Google als auch die Forensuche haben leider nicht das gewünschte Ergebnis geliefert.

Ich möchte abfragen, ob der Wert eines Merkers auf 1 liegt. Ich arbeite mit FUP, STEP7 5.4 und einer S7-314C-2DP. Jetzt habe ich folgendes Thema gefunden und mich versucht danach zu orientieren: https://www.sps-forum.de/simatic/57235-merkerbyte-vergleichen-2.html. Vor allem der Beitrag mit dem Screenshot von Lipperlandstern hat mir Hoffnung gemacht.

Jedoch ist es bei mir so, dass der Merker (in meinem Fall MB1) rot markiert wird mit der Meldung "Aktualdatentyp DWORD passt nicht zu formalem Datentyp INT des Formelparameters". Macht ja Sinn, aber warum scheint es auf dem Screenshot von Lipperlandstern kein Problem zu sein bei mir aber schon? Kann man Merkern einen Datentyp zuordnen?

Wie gesagt, ich bin da wirklich unerfahren und würde nicht fragen, wenn ich nicht schon versucht hätte zu recherchieren.

Über kurze Hilfe würde ich mich sehr freuen und bedanke mich im Voraus!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mal einen Screenshot von deinem Programmteil machen. Es macht mich etwas stutzig, dass du MB1 vergleichen möchtest aber die Meldung "Aktualdatentyp DWORD..." kommt.
Mit was vergleichst du denn?
 
Lieg vermutlich an der Typüberprüfung, (Welche es seit Step7 V5.5 HF irgendwas sowieso nicht mehr gibt).

Ein MB ist eben kein "INT".
KOP/FUP Editor Öffnen, dann Extras - Einstellungen - KOP/FUP - Haken bei Typüberprüfung von Operanden entfernen
 
Ich versuche zu schauen, ob MB1 = 1 ist. In einem anderen Netzwerk schreibe ich unter bestimmten Bedingungen in MB1 eine 1 rein, die ich an der Stelle abfragen will. Wie gesagt lasse ich mich gerne korrigieren, wenn die Vorgehensweise falsch ist. Allerdings würde es ja gehen, wenn ichs richtig machen würde :rolleyes:

Step7.jpg

Danke schon mal im Voraus.

//Edit: Ahh sorry MSB, hab deinen Beitrag verpennt. Hab dem Folge geleistet und es wird nicht mehr als Fehler markiert. Danke!
 

Anhänge

  • Step7.jpg
    Step7.jpg
    17,6 KB · Aufrufe: 34
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal ein Auszug von dieser Seite:
https://www.brix.de/elektrik/sps/sps-grundlagen.html

[h=3]Vergleicher[/h] Es scheint zunächst 18 Vergleicher zu geben, doch wenn man sie sich anschaut, stellt man fest, dass es nur 6 Stück sind, die es aber jeweils in drei Gruppen gibt. Die Gruppen sind aufgeteilt nach den Datenformaten der zu vergleichenden Eingänge: Es gibt solche für Integer- (Int), Doppelinteger- (DInt) und Reelle (Real) Zahlen. Alle Vergleicher funktionieren gleich, hier im Beispiel wird nur der Integer-Vergleicher betrachtet.
Ein Vergleicher hat zwei Eingänge IN1 und IN2. Zwischen diesen beiden Eingängen steht in dieser Reihenfolge das Vergleichszeichen des Vergleichers und bildet eine Aussage, die "wahr" (1) oder "falsch" (0) sein kann. Der Wahrheitswert dieser Aussage wird am Ausgang des Vergleichers ausgegeben.
Es gibt also die Aussagen:

IN1 > IN2 (IN1 größer IN2)

IN1 >= IN2 (IN1 größer oder gleich IN2)

IN1 < IN2 (IN1 kleiner IN2)

IN1 <= IN2 (IN1 kleiner oder gleich IN2)

IN1 == IN2 (IN1 gleich IN2)

IN1 <> IN2 (IN1 ungleich IN2)
Wie man sieht, hätte man entweder die beiden "größer-" oder die beiden "kleiner-"Vergleiche auch weglassen können, da sie sich durch das bloße Vertauschen der Operanden ineinander überführen lassen.
Beide Eingänge müssen vom Typ "Int" sein, sonst wird der Vergleicher im KOP/AWL/FUP-Editor wegen des Typ-Konfliktes nur als AWL dargestellt. Notfalls muss man die im Programm vorhandenen Werte in einen der Typen wandeln, die die Verleicher beherrschen. Dies ist das Hauptproblem im Umgang mit Vergleichern. Das heißt, genau genommen hat dies gar nichts mit den Vergleichern zu tun, sondern mit der Art wie der KOP/AWL/FUP-Editor mit Variablentypen und deren Konflikten umgeht: Einen Typkonflikt, kann der Editor nur erkennen, wenn die entsprechende Variable auch in der (globalen) Symboltabelle eingetragen ist. Holt man also aus dem Dual-Ausgang eines Siemens-Zählers ein Merkerwort ab und gibt dieses auf den Eingang eines Integer-Vergleichers wird alles funktionieren und "normal" aussehen, bis man das Merkerwort in die Symboltabelle einträgt. Dort muss man es nämlich als "Word" oder als "Int" eintragen. Hat man dies getan, wird dasjenige Netzwerk in dem der Typkonflikt auftritt (bei "Int" am Zähler, bei "Word" am Vergleicher) nur noch als AWL dargestellt. Die Typüberprüfung kann man allerdings auch unter "Extras: Voreinstellungen: FUP/KOP: Typen überprüfen" abstellen, dann hat man allerdings auch gar keinen Hinweis auf Typkonflikte mehr.
So bleibt nur, auf passende Typen zu achten und am besten keinen Siemenszähler zubenutzen, sondern einen solchen, wo gleich ein Integer oder Doppel-Integer herauskommt. Eine andere Möglichkeit ist die Typumwandlung mit einem Wandler oder das bloße Verschieben des Inhaltes über eine MOVE-Box, die keinen Typkonflikt kennt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Statt MB1 und MB2 könntest Du auch generell mit WORD/INT arbeiten und MW2 und MW4 verwenden, das würde besser zur Anweisung/Box "CMP==I" passen (16-Bit-Vergleich). Einfach Typprüfung abschalten ist gerade bei Anfängern eher nicht zu empfehlen (auch wenn Siemens das nun "heimlich" zwangsmässig gemacht hat) - besonders wenn dann ein "CMP==I" auf MD1 womöglich ohne Meckern durchgelassen wird (was in Wirklichkeit ein CMP==I mit MW3 ist).

Harald
 
Zurück
Oben