Programm für Paternoster Regal

P

progi12

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

habe folgendes Problem: Ich soll für ein Paternosterregal mit 38 Regalfächern ein Ablaufprogramm schreiben. Nach Eingabe des Zielfaches sollte die Steuerung (Siemens S7-200) den kürzesten Weg berechnen und die kürzeste Richtung ansteuern. Ich hab`s schon mit folgender Formel versucht
1. Rechnung Betrag(Quellfach - Zielfach)
2. Rechnung Betrag (Quellfach-Zielfach-Anzahlfächer)
Abfrage welcher Wert kleiner ist dannn entweder rechtsrum oder linksrum

aber die Ergebnisse sind frustrierend :oops: Hat mir jemand einen Tipp wie ich es am besten programmieren kann oder eine passende Formel für die Berechenung des Kürzesten Weges.
 
progi12 schrieb:
Abfrage welcher Wert kleiner ist dannn entweder rechtsrum oder linksrum

aber die Ergebnisse sind frustrierend :oops: Hat mir jemand einen Tipp wie ich es am besten programmieren kann oder eine passende Formel für die Berechenung des Kürzesten Weges.
Unter der Annahme daß:
1. Die fächer fortlaufend von 1 -38 nummeriert sind.
2. Der Weg von einem Fach zum anderen immer gleich lang ist egal ob von 4 nach 5 oder von 26 nach 27:
3. rechtsherum aufsteigende Fachnummern bedeutet

If ((Ziel -Quelle +38 ) modulo 38 ) < (38/2) then rechts else links.
Erklärung "modulo" liefert den Rest beim Teilen. Das spart dir irgenwelche Fallunterscheidungen für negative und positive Differenzen.
Das +38 sorgt dafür, daß die Modulo-Funktion nur positive Zahlen vorgesetzt bekommt.
Beispiel. Ziel 3, Quelle 37
3-37 = -34.
-34 +38 =4
4 mod 38 = 4
4 < 19, besser rechts/vorwärts

Beispiel. Ziel 37, Quelle 3
37-3 = 34.
34 +38 =72
4 mod 38 = 34 (72 / 38 = 1, rest 34)
34 > 19, besser links/rückwärts
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
bin zwar nicht so der Experte aber ich versuch mich mal :D

Mit Zielfach meinst du wahrscheinlich eine Artikel oder Sachnummer o.ä.

Denn wenn du das Zielfach direkt angibst brauchst du nichst ermitteln.

Würde so anfangen:

In einen DBeine Structur mit 38 "Fächern" als String oder Arrays of Char deklariert in dem dann die, ich nenns mal Sachnummern stehen.

Nun in SCL die Istposition (z.b. Fach 18 ) nehmen und durch 2 schleifen
die Sachnummern über die Indexvariable der Structur vergleichen.
Jeder Schleife eine andere Laufvariable z.b I1 und I2.

zum schluss vergleichen welche laufvariable kleiner ist und du weisst welche richtung.

Hoffe ich hab deine Frage richtig verstanden...

Gruss Andy
 
"Modulo" Funktion auch in S7-200

Vielen Dank für den Tipp zottel.
Der Befehl "Modulo" gibt es in der S7-200 nicht im Befehlsforrat. Welcher Simatic code wäre hier nötig.
 
Hallo,

wenn der Befehl 'modulo' nicht zu Verfügung steht,
kann man vor der Berechnung des Offsets durch
einen Vergleich Ziel < Quelle und entsprechender
Addition verhindern, das man negative Werte erhält.

Für den Rechtslauf (aufsteigend) gilt:
if (Ziel< Quelle) ? Ziel = Ziel + AnzahlFächer (+38)
else:Ziel = Ziel;
Offset = Ziel - Quelle;
if(Offset < (Anzahl/2) ? =Rechtlauf
else: =Linkslauf


mfg.
Rolf
 
Programm läuft

Hallo zusammen,

vielen herzlichen Dank für euere Bemühung. Ohne die nutzlichen Tipps hätte ich es nicht hinbekommen.

Aber jetzt läufts!!!! :D

Danke an alle die sich Gedanken gemacht haben. Bis zum nächsten Mal.
 
Zurück
Oben