Merker werden überschrieben

Freddy

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hy Jungs.....

Ich habe ein kleines Problem bei einer Realisierung.

In der Anlage ist eine S7-200 und ein TP177A vorhanden.


Auf dem Tp sind mehrere Pulldownfenster und jedem ist ein Merkerbyte zugeordnet. Überall ist die gleiche Textliste vorhanden.

Textliste:

1 Schieber 1 vor
2 Schieber 1 zurück
3 Schieber 2 vor
4 Schieber 2 zurück
5 Pausezeit.
usw.

Ich jage nun alle Merkerbyte durch einen Fc der einen Simplen vergleich hat.

Merkerbyte10 == 1 = M 0.0

Merkerbyte10 == 2 = M 0.1


Nehmen wir jetzt an im ersten Pulldownfenster ist Schieber 1 vor angewählt und im Zweiten schieber 2 vor.

die Merkerbyte werden nun durch den Fc gejagt......


Leider werden bei den verschiedene durchgängen die Merker wieder auf 0 gesetzt hat mir jemand eine Alternative?






Danke im Voraus

Gruss Freddy
 

Anhänge

  • s7-200.1.JPG
    s7-200.1.JPG
    216,7 KB · Aufrufe: 61
  • s7-200.2.JPG
    s7-200.2.JPG
    238,6 KB · Aufrufe: 45
  • TP177A.JPG
    TP177A.JPG
    238,4 KB · Aufrufe: 35
Hallo Freddy,

sehe ich das Richtig?
Du übergibst dem Baustein ein Merkerbyte das die Auswahl darstellt, schreibst dann das Ergebnis Deines Vergleiches direkt auf Merker?
Und das bei jedem Bausteinaufruf.
Das Ergebnis muss auch eine IN/OUT oder nur OUT sein und kein fester Merker.

Es werden doch sonst bei jedem Bausteinaufruf die gleichen Merker überschrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
heeey Paule....
Danke für deine schnelle Antwort

Ja du siehst das richtig....

aber egal ob ich in/out oder out variable nehem es wird doch trotzdem überschrieben oder raff ich irgendwas nicht ganz ?.....

Den die Bedingung ist ja z.b. in einem Merkerbyte erfüllt und dann in den restlichen Merkerbytes nicht, im gleichen Zyklus.....
 
Hi Freddy,

aber Du übergibst dem Baustein doch nur die Auswahl, sprich: MB 10 ; MB 11 ; MB 12
In dem Baustein (immer derselbe) fragst Du das Auswahlfeld auf 1 ; 2 oder 3 ab, und setzt dann immer den selben Merker 9.0 ; M 9.1 ; M 9.2

Das heißt beim ersten Aufruf des Bausteines wird der Merker 9.1 zugewiesen weil das MB 10 eine 2 hat.
Beim nächsten Aufruf desselben Bausteines wird der Merker 9.0 zugewiesen weil das MB 11 eine 1 hat. Nun wird der Merker 9.1 doch wieder auf False gesetzt.
Nimm für die Zuweisung eine OUT-Variable vom Typ Byte oder einzelne Bool. Und bei der Beschaltung einmal das Merkerbyte 9 und beim nächsten mal ein anderes.

Code:
L #Auswahl
L 1
==I
= #Ausgang_1   // Wird über OUT_Variable mit M 9.0 verschaltet
 
L #Auswahl
L 2
==I
= #Ausgang_2   // Wird über OUT_Variable mit M 9.1 verschaltet
 
danke vielmal werde es bei gelegnheit probieren....

habe noch 2 alternativen:

1.

befor ich den Funktionsbaustein aufrufe setze ich alle Merker zürück.
Im Bausten selber setze ich sie.


FC11:

R M0.0
R M0.1
R M0.2
usw

call fc 12
Mw10 #eingabefeld


call fc 12
Mw11 #eingabefeld


call fc 12
Mw12 #eingabefeld



FC 12:

L 1
L #eingabefeld
==
S M0.0

L 2
L #eigabefeld
==
S M0.1

L 3
L #eingabefeld
==
S M0.2

usw


Jetzt muss einfach der FC1 und Fc 2 vor dem Verwenden der Merker (M0.0,M0.1,M0.2...) abgearbeitet werden.



2. Ich vergleiche die Merkerbyte auf bits udn verknüpfe sie mit einer oder Verbindung beim Befehl bin ich mir jetzt nicht ganz sicher bei Worter ist es ja Ow und ich glaube bei byte ob bin mir aber nicht sicher


Ob Mb10 0000 0001
Ob MB11 0000 0001
Ob Mb12 0000 0001

= M 0.0

Gruss Freddy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
befor ich den Funktionsbaustein aufrufe setze ich alle Merker zürück.
Im Bausten selber setze ich sie.

FC11:

R M0.0
R M0.1
R M0.2
usw

call fc 12
Mw10 #eingabefeld // wenn hier 1 dann wird M 0.0 gesetzt


call fc 12
Mw11 #eingabefeld // wenn hier 2 dann wird M 0.1 gesetzt ( Merker 0.0 bleibt immer noch gesetzt )


call fc 12
Mw12 #eingabefeld



FC 12:

L 1
L #eingabefeld
==
S M0.0

L 2
L #eigabefeld
==
S M0.1

L 3
L #eingabefeld
==
S M0.2

usw

Jetzt muss einfach der FC1 und Fc 2 vor dem Verwenden der Merker (M0.0,M0.1,M0.2...) abgearbeitet werden.


2. Ich vergleiche die Merkerbyte auf bits udn verknüpfe sie mit einer oder Verbindung beim Befehl bin ich mir jetzt nicht ganz sicher bei Worter ist es ja Ow und ich glaube bei byte ob bin mir aber nicht sicher


Ob Mb10 0000 0001
Ob MB11 0000 0001
Ob Mb12 0000 0001

= M 0.0

// Das ist auch keine Lösung

Hi Freddy,
sorry aber das geht so nicht!

Du darfst in einem Parametrierbaustein keinen direkten Merker zuweisen.

Code:
call fc 12
MB10 #eingabefeld
M9.0 #Ausgang_1
M9.1 #Ausgang_2
M9.2 #Ausgang_3
 
call fc 12
MB11 #eingabefeld
M10.0 #Ausgang_1
M10.1 #Ausgang_2
M10.2 #Ausgang_3
 
call fc 12
MB12 #eingabefeld
M11.0 #Ausgang_1
M11.1 #Ausgang_2
M11.2 #Ausgang_3
 
FC12
 
L 1
L #eingabefeld
==
= #Ausgang_1
 
L 2
L #eigabefeld
==
= #Ausgang_2
 
L 3
L #eingabefeld
==
= #Ausgang_3

Du kannst die Ausgänge auch auf ein Byte oder Array legen.

Wie gesagt ich kenne keine 200er daher wird der Syntax nicht stimmen, aber mir geht es hier um die Logik.
 
hmmm okeee ich versteh dich aber das ist extrem mühsam .....


Ich habe sicherlich 20 eigabefelder und texlisten von bis zu 20 Einträgen..

also wären das rund 400 variablen die ich benötige *verwirrt*

gibt es nicht noch etwas einfacheres?

gruss
 
hmmm okeee ich versteh dich aber das ist extrem mühsam .....


Ich habe sicherlich 20 eigabefelder und texlisten von bis zu 20 Einträgen..

also wären das rund 400 variablen die ich benötige *verwirrt*

gibt es nicht noch etwas einfacheres?
Nein, nein.
Du musst doch nur die Zuweisung genauso parametrierbar machen wie die Abfrage.
Das wird eher kürzer.

Kann sich hier nicht mal einer Einklinken der das auf einer 200er proggen kann. :(
Da wird man doch wohl auch auf die Bits eines OUT-Byte schreiben können.
Von der Aufgabenstellung sollte das doch nun klar sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
call fc 12
MB10 #eingabefeld
M9.0 #Ausgang_1 Hier brauchst du ein merker
M9.1 #Ausgang_2 Hier brauchst du ein merker
M9.2 #Ausgang_3 Hier brauchst du ein merker

call fc 12
MB11 #eingabefeld
M10.0 #Ausgang_1 Hier brauchst du ein merker
M10.1 #Ausgang_2 Hier brauchst du ein merker
M10.2 #Ausgang_3 Hier brauchst du ein merker

call fc 12
MB12 #eingabefeld
M11.0 #Ausgang_1 Hier brauchst du ein merker
M11.1 #Ausgang_2 Hier brauchst du ein merker
M11.2 #Ausgang_3 Hier brauchst du ein merker




dan machts du eine oder verknüpfung nehme ich an

U M9.0
U M10.0
U m11.0

= A 0.0
 
ja genau


egal im welchem Fenster eine 1 ist wird z.b der Ausgang A0.0 gesetzt


wen in einem anderen eine 2 ist wird der ausgang A0.1 gesetzt


so in dieser art

verstehst du was ich will?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja genau


egal im welchem Fenster eine 1 ist wird z.b der Ausgang A0.0 gesetzt


wen in einem anderen eine 2 ist wird der ausgang A0.1 gesetzt


so in dieser art

verstehst du was ich will?
 
@Danke Dalbi,
ich dachte schon nur mir ist das zu hoch. :D

Freddy wenn Du immer den gleichen Ausgang ansteuerst warum gibt es so viel verschiedene Pulldownmenüs mit verschiedenen Variablen?
Du kannst doch in verschiedenen Bildern dann immer die gleiche Variable nehmen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Danke Dalbi,
ich dachte schon nur mir ist das zu hoch. :D

Freddy wenn Du immer den gleichen Ausgang ansteuerst warum gibt es so viel verschiedene Pulldownmenüs mit verschiedenen Variablen?
Du kannst doch in verschiedenen Bildern dann immer die gleiche Variable nehmen.


Heey paule.... also ich probiere es nochmals von vorne an zu erklären ^^

die 20 Pulldown Fenster mit der Auswahl legen eine Reihenfolge für Hydraulikzylinder fest.

der Bediener kann also selber die Reihenfolge festlegen:

1 Beispiel:

Zylinder 1 vor
Zylinder 2 vor
Wartezeit 1s
Zylinder 1 zurück
Warezeit 5s
Zylinder 2 zurück

2. Beispiel

Zylinder 5 vor
Wartezeit 1s
Zylinder 5 zurück

usw...

Es ist also mehr oder weniger Frei-Programmierbar

Die Ansteuerung der Ventil macht mir keine Probleme.....
Aber für die Grundstellung und Überwachung muss ich wissen welche Funktionen auf dem Panel angewählt sind.

Denn wen der Zylinder 5 z.B nich angewält ist...sind die Sensoren nicht angeschlossen, also kann ich ihn auch nicht überwachen.....

Darum will ich alle Pulldownfenster abfragen um abzuklären welche Funktionen angewählt sind......

Dann seh ich welche Zylinder ich überwachen muss......

Habe ich ein bisschen Licht ins Dunkle gebracht?
 
Denn wen der Zylinder 5 z.B nich angewält ist...sind die Sensoren nicht angeschlossen, also kann ich ihn auch nicht überwachen.....

Darum will ich alle Pulldownfenster abfragen um abzuklären welche Funktionen angewählt sind......

Dann seh ich welche Zylinder ich überwachen muss......

Habe ich ein bisschen Licht ins Dunkle gebracht?

Hi Freddy,

dann probieren wir das mal mit einer Schleife:

Code:
      SET
      R M 9.0
 
      L 10 // Offset für MB 10
      T #Offset
 
      L 20 // Pulldown
Anf:  T #Schleife
      L MB[Offset]  // Abfrage der MB 10 bis 30
      L 1               // Wenn einer eine 1 hat
      ==I  
      S M 9.0         // dann Merker setzen und Abfrage verlassen
      SPB END
      L #Offset      // sonst nächstes Merkerbyte abfragen
      + 1
      T #Offset
      L #Schleife
      LOOP Anf
END:  NOP 0
// Das gleiche kopieren auf 2 Abfragen und dann Merker 9.1 setzen
 
Hi Freddy,

dann probieren wir das mal mit einer Schleife:

Code:
      SET
      R M 9.0
 
      L 10 // Offset für MB 10
      T #Offset
 
      L 20 // Pulldown
Anf:  T #Schleife
      L MB[Offset]  // Abfrage der MB 10 bis 30
      L 1               // Wenn einer eine 1 hat
      ==I  
      S M 9.0         // dann Merker setzen und Abfrage verlassen
      SPB END
      L #Offset      // sonst nächstes Merkerbyte abfragen
      + 1
      T #Offset
      L #Schleife
      LOOP Anf
END:  NOP 0
// Das gleiche kopieren auf 2 Abfragen und dann Merker 9.1 setzen


Das ist ja dan ungwfähr das was ich gestern vorgeschlagen habe nicht?
FC11:

R M0.0
R M0.1
R M0.2
usw

call fc 12
Mw10 #eingabefeld


call fc 12
Mw11 #eingabefeld


call fc 12
Mw12 #eingabefeld



FC 12:

L 1
L #eingabefeld
==
S M0.0

L 2
L #eigabefeld
==
S M0.1

L 3
L #eingabefeld
==
S M0.2

kommt ja aufs gleiche....

ausser das deine Lösung kompakter ist....

Jedoch sollte ich das ganze wen irgendwie möglich in Fup programmieren....

Wir haben mechaniker die auch ins programm schauen müssen und die verstehen von awl jetzt gar nichts leider....
 
Hallo Fredd,

ich weiss ja nicht ob du es schon wusstest, aber in der S7-200 gibt es auch "V" = Variablenspeicher davon hast Du viel mehr als von den Merkern zur Verfügung.

An dein Pulldown hängst du z.B. VB0 diesem übergibst Du Werte bei der Auswahl.

z.B. 0 = Aus; 1 = Ein1; 2 = Ein2; 4 = Ein3; 8 = Ein4; 16 = Ein5 32 = Ein6; 64 = Ein7; 128 = Ein8

dies entspricht dann unten auf deiner Steuerung

V0.0 = Ein1
V0.1 = Ein2
V0.2 = Ein3
...
V0.7 = Ein8

das nächste dann VB1 mit den Bits V1.0 - V1.7.

Gruss Daniel
 
Zurück
Oben