Lösungsmöglichkeit

mister_chaos

Level-1
Beiträge
17
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!
Als STEP7-Beginner komme ich nicht weiter. Vielleicht könnt ihr mir einen Kick geben wie ich das Problem lösen kann.
Also.....
Bekomme in einem DB 3 verschidene dezimalen Werte gleichzeitig.
Wert 1...Bereich von 1-100, Wert 2...Bereich von 1-10, Wert 3..Eine eins oder 0.
Beim Wert 1 und 2 sind alle möglichen Kombinationen erlaubt (z.B. 50 und 2). Eine bestimmte Kombination macht eine bestimmte Lampe an...also theoretisch 1000 Lampen.
So, nun werden mit Wert3, mit einer eins die Werte 1 und 2 ausgelesen und die bestimmte Lampe geht an. Nun kann ich so nacheinander 1-1000 Lampen schalten (mehrere Lampen können gleichzeitig an sein).
So, wenn nun werden mit Wert3, mit einer Null, die Werte 1 und 2 ausgelesen, und falls die Lampe an ist...wird diese ausgemacht. Die anderen Lampen müssen natürlich weiterleuchten.
Ich hoffe, das ist einigermaßen verständliche Beschreibung.
Hat jemand einen Tip wie ich das realisieren kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ja du kannst verschiedene Wertebereiche in einen DB legen, hier gibt es standarttypen wie BOOL, Byte, INT, Real......

Die Aufgabe klingt interesant, Falnkenauswerten von 3, dann mit dem Pointer auf die Adresse und mit nem EXODER verschalten :-D
Gruß

Ron
 
Die Frage ist, was soll passieren, wenn die SPS in Stop geht oder ausgeschaltet wird. Sollen dann die Lampenzustände gespeichert sein, so daß beim Wiederanlauf alles beim Alten ist?
(Dazu bräuchte man eine Wiederanlaufroutine, die alle Bits im DB einmalig abfragt und die Aussgänge steuert)

Ich würde als Ansatz einen DB erzeugen, der ein Array[1..100, 1..10] of Bool enthält (oder auch of Byte, je nach Bedarf).
Eigentlich benötigt man diesen auch um festzustellen, ob der Lampenzustand sich ändert. Diese ganze Abfrage wäre am Besten in SCL zu erledigen!

Wenn nun eine Lampe angewählt wird, schaut man in dem DB nach, wenn der Zustand identisch mit dem angewählten ist, passiert nichts, ansonsten schaltet man die Lampe an oder aus.

Unklar ist hier insgesamt noch, wie die Ausgänge denn zugeordnet werden sollen. Das muß 1. irgendwo festgelegt werden, und 2. muß der Ausgang dann entsprechend zugewiesen werden.

Also könnte man in das Array auch och mehr Infos ablegen, die da wären, Zustand des Ausgang, Ausgangsadresse. Über indirekte Adressierung kann man dann immer gleich den richtigen zugehörigen Ausgang steuern. Das in SCL oder AWL.
 
Vielen Dank erstmal für die Tips!
Zu den Lampen...vielleicht war ich nicht ganz korrekt...also, es gehen eigentlich zwei Lampen an, eine für Wert1 (1-100) und zweite für Wert2(1-10). Die Lampen sind in 2 DBs hinterlegt (BOOL).
SCL habe ich leider nicht :(
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Grrr...ich finde keinen Ansatz.
Also, habe mir nun eine Schlefie gebaut die aus dem DB den Wert3, also 1 oder 0 rauszieht. Und dann wird die Funnktion bei 1 "LampeAN" oder bei 0 "LampeAUS" gestartet.
Aber wie soll ich unterscheiden bei den ganzen Möglichkeiten?
Bei einem Gerät könnte ich einfach alle 10 Möglichkeiten abfragen und so die 10 Lampen für das eine Gerät anmachen. Ausmachen analog dazu negiert...
Aber wie mache ich das nun für 100 Geräte mit je 10 Möglichkeiten?
Hat jemand einen TIP?
Danke!
 
Hallo,

ich glaube dass es einfach geht!
Ich hab blos die Aufgabe nicht richtig verstanden :confused:

Wenn z.B.

Fach 1: 70
Fach 2: 3

Soll dann Lanpe Nr. 210 bearbeitet werden???

Gruß Micha
 
Hi!
Ja, z.B.
Es können 1..1000 Lampen an sein. Ich machs mal so:
Wenn Kombination (Wert1=70 und Wert2=3) dan mache Lampe50 an.
Beim Ausmachen analog dazu.(Wenn Wert1= 70 und Wert2=3) dann mache Lampe50 aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kannst du irgendwie einen logischen zusammenhang zwischen lampennummer und ihrer adressierung herstellen? das würde die sache ungemein vereinfachen ... so wie SPSKILLER z.b. auf die schlichte multiplikation gesetzt hat.
 
Hi!
Ja, z.B.
Es können 1..1000 Lampen an sein. Ich machs mal so:
Wenn Kombination (Wert1=70 und Wert2=3) dan mache Lampe50 an.
Beim Ausmachen analog dazu.(Wenn Wert1= 70 und Wert2=3) dann mache Lampe50 aus.

Na ja, dann würde ja mein Ansatz oben schon gehen, nicht alleine nur mit einer Boolean, sondern zusätzlich mit der Adresse der Lampe, wie auch immer man das dann kodiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das war nur ein Beispiel.
Also, die Lampen sind als BOOL in einem DB. Also DB100.DBX0.0-DBX100.0
Jede Lampe gehört zu einer bestimmten Kombination. Also Wert1=1 und Wert2=1 => Lampe1, Wert1=1 und Wert2=2 => Lampe2 usw.
 
Die Kombination bekomme ich aus einem DB. z.B. DB200.DBB1 und DB200.DBB2. Dort steht dann Wert1(1-100)und Wert2(1-10).
Im DB200.DBB3 steht dann nur 1 oder 0.
So, wenn eine 1 im Db200.DBB3 bedeutet das, dass eine Lampe angemacht werden soll. Die KOmbination steht dann im Db200.DBB1bzw2.
Beim Ausmachen steht imDB200.DBB3 eine 0. Wenn diese anliegt lese ich die Kombination aus und mache die entsprechende Lampe aus.
Die Lampen sind fortlaufend nummeriet, im DB100.
Also z.B. Wert1=1 und Wert2=3 =>Lampe3
Wert1=2 und Wert2=1=>Lampe11
 
Zuletzt bearbeitet:
... ich versuche es noch mal ...

Ich glaube, es ist schon allgemein verstanden worden, wie du die Lampen an (bzw. aus bekommst). Was wir wissen wollen ist, wie du anhand von Wert1 und Wert2 an die Lampenm-Nummer kommst ? Multiplikation ?

Gruß
LL
 
wert 1 und 2 sind in ihrem werte bereich vorgegeben? von wem?

ich würde wert 1 als byte-adresse und wert 2 als bit-adresse nehmen

wert1: 0..124
wert2: 0..7


(ich hoffe, ich hab mich jetzt nicht verrechnet :rolleyes:)

daraus kannst du dir auf einfache weise eine adressierung bauen.

Code:
*
      L     "wert1"
      SLD   3
      L     "wert2"
      +D    
      LAR1  

      AUF   DB     1

      L     "wert3"
      L     0
      ==I   
      SPBN  on
      CLR   
      =     DBX [AR1,P#0.0]
on:   L     "wert3"
      L     1
      ==I   
      SPBN  err
      SET   
      =     DBX [AR1,P#0.0]
      SPA   end

err:  NOP   0
//hier fehlerauswertung, z.b. lauflicht über alle ;)

end:  NOP   0
 
Zuletzt bearbeitet:
Zurück
Oben