Davon von 0 bis X auslesen...?

MSP

Level-2
Beiträge
210
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wir arbeiten im Moment an einem Hochregallager, wo wir die Daten des Lagers ( alle Fächer ) in einem UDT ( array[0..3,0..5] ) ablegen, ob es belegt ist, frei etc.

Nun haben wir vor einen Automatikmodus einzubauen, welcher vom 1. Fach bis zum letzten Fach jedes einzeln prüfen soll ob es belegt ist oder nicht.

Es soll halt automatisch eingelagert werden, wobei dies nur in Fächer geschehen darf, wo noch nichts per Hand eingelagert wurde.

Daher würden wir gerne von Fach 1 beginnend bis zum letzten Fach im Array jedes einzeln nach und nach prüfen.

In C/C++ würde ich nun eine Variable i nehmen und diese von 0 bis i durchlaufen lassen, hätte also einen definierten Beginn und ein definiertes Ende.

Nur wie macht man so etwas in Step7? Wir wollen halt das ganze dynamisch halten, sprich im UDT die Anzahl der Fächer ändern können und nichts im Programm weiter ändern...

Da wir nur auf die Basisunterlagen der Ausbildung von Siemens zugreifen können/zugriff haben, ist dieses Thema leider ein wenig in der Grauzone bei uns...

Wie regelt Ihr solche Aufgaben, oder ist dies eine Denkweise in die Falsche Richtung?

MfG,
Michael
 
hallo msp,

ich würde es so machen:

einen schleifenzähler als dint definieren: z.B. dintSchleife
n Fachanzahl als dint definieren: z.B. dintFaecher

dann pro fach in einem datenbaustein ein word. dort könnte auf dem 0.Bit der zustand des gebers und auf dem 1.Bit der Zustand frei und dem 2.Bit besetzt gelegt werden.

den entsprechenden FC würde ich bei Bedarf über eine Flanke aufrufen.

Im FC:
L L#0 //Initialisierung
T dintSchleifen

AUF DBxy

NEXT: NOP 0

L dintSchleifen //Beinn ist beim Byte 0 des Datenbausteines
SLD 3
L DW#16#84000000
OD
LAR1

U DBX [AR1,P#0.0] //dummes Programm, musst du entsprechend
S DBX [AR1,P#0.1] //schreiben
R DBX [AR1,P#0.2]
UN DBX [AR1,P#0.0]
R DBX [AR1,P#0.1]
S DBX [AR1,P#0.2]

L dintSchleifen
l L#2
+D
T dintSchleifen

L dintSchleifen
L dintFaecher
>D
SPB ENDE
SPA NEXT


ENDE: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und Danke :)

Eine Frage, der Teil hier...

Code:
L dintSchleifen 
l L#2 
+D 
T dintSchleifen

Gehe ich recht in der Annahme das ich hier den Wert dintSchleife mittels +D um 1 erhöhe?
Der Befehl sagt mir leider ( noch ) nichts, genau wie die Zeile I L#2 :?

Gruss,
Michael
 
MSP schrieb:
Gehe ich recht in der Annahme das ich hier den Wert dintSchleife mittels +D um 1 erhöhe?
Der Befehl sagt mir leider ( noch ) nichts, genau wie die Zeile I L#2 :?

Gruss,
Michael

so ist es.

l#2 (ist kein i sondern ein L) :wink:
so wird eine zahl im format dint (2 worte) dargestellt.
ein L 2 (INT) würde es auch tun, da die zahl rechtsbündig im akku liegt.

+d
addiert zum akku die vorher geladene zahl. in diesem fall dint.

+I für INT; +R für Real
 
Hallo nochmal :)

Also für das komplette Verständniss:

L dintSchleifen --> Lädt den Wert aus dintSchleife
l L#2 --> Lädt den Wert 2 als L -> dint in den Akku ( anderes Wort für den Datentypen LONG? ); 2 Byte; Hier geht also auch int etc pp.
+D --> Addiert den vorherigen dint-Wert zum Akkuinhalt.
T dintSchleifen --> Transferiert das ganze dann in dintSchleife

Das heisst wenn ich das selbe mit einer int-Zahl machen möchte, würde das so aussehen:

L intSchleife // Anderer Variablenname; Wert wird in den Akku geladen
L i#2 // Lädt den Wert 2 als Integer
+I // Addiert den Wert als Int auf den Akkuinhalt
T intSchleife // Transferieren des neuen Wertes in die Varibale intSchleife

Alles richtig oder eine Stelle falsch verstanden :?

Michael
 
Guten Morgen,

macht ja nichts, da eh noch Ferien bei uns sind und das Semester erst Ende August wieder startet und noch einiges an Material fehlt :evil: für unsere Arbeit, haben wir mehr als genug Zeit zur Verfügung zu Warten und uns in die Materie einzuarbeiten :)

Danke nochmals für Deine Hilfe,

Gruss,
Michael
 
Zurück
Oben