Step 7 Übungsaufgabe Safe mit 3 Zahlen

DAXX

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi@ all,

zunächst einmal möchte ich mich jetzt schon bei euch für die ganzen Infos bedanken, die mir bis jetzt schon viel geholfen haben. (Dank der Sufu)
Nun habe ich aber doch ein Problem das ich aktuell nicht lösen kann (sehe den Wald vor lauter Bäumen nicht mehr und mein Hirn schaltet aus) :D

Kurz zur Aufgabe ...
Wie in der Überschrift schon steht möchte ich ein kleines Zahlenschloss zu übungszwecken umsetzen. (Und da ich es gern kompliziert mag muss man mehr drücken als an einem normalen Zahlenschloss)
Damit sich das Schloss Öffnet muss mit dem Schalter "GO" begonnen werden -> Eingabe der ersten Zahl -> "GO" -> zweite Zahl ... usw. -> "OPEN" -> Bolzen entriegelt.
Mit "CLOSE" wird wieder verriegelt und der Timer läuft (hier 10sek. ... weil ja nur Übung).
Wird eine Zahl falsch eingegeben und am ende mit "OPEN" bestätigt sperrt sich der Schrank auch wieder über den Timer.
Wenn ich was vergessen haben einfach fragen ;)

Hier mein bisheriges Programm ...
01.jpg
02.jpg
Momentane Probleme:
1. Bis zur Eingabe der ersten (korrekten) Zahl läuft alles. Problem ist nur, das ich am ende ja meine Weiterschaltbedingung (M3.0) zurücksetze. Diese kann ich auch nicht wieder neu setzen (um die 2te Zahl einzugeben).
Die Lösung ist bestimmt einfach ... aber ich sitze jetzt schon zu lange an dem Teil als das mein Hirn da noch was sinnvolles hervorbringt :?
2. Ich habe in der Simulation gemerkt, das ich, wenn ich bei der ersten Zahl einfach mal jeder Ziffer Drücke und dann wieder auf "GO" drücke die SPS weiter schaltet. Was ja auch nicht Sinn und zweck ist.

Bitte an alle fleißigen Helfer:
Eine fertige Lösung ist zwar schön und gut ... aber wenn möglich erst mal nur ein paar Winks mit dem Zaunpfahl. Will es ja lernen. Wenn ich dann genug Pfähle zusammen habe aber der Zaun noch nicht steht nehme ich gern auch eine fertige Lösung :p

Sollte ich irgendwann alles so weit habe, das es funktioniert, werde ich (meine) Lösung auch hier reinstelen.

Bis dahin viele Liebe Grüße

DAXX
 
Eine Möglichkeit wäre es in einer Schrittkette umzusetzen.

Z.B.
Schritt 0: Eingabe starten
Schritt 1: Erste Zahl eingeben
Schritt 2: Zweite Zahl eingeben
Schritt 3: Dritte Zahl eingeben
Schritt 4: Prüfung

Die eingegebenen Zahlen müsstest du dir dann wie auch immer merken.
 
zu 1.

mach doch mal nicht am Ende von Netzwerk 4
u M 4.0
r M 3.0
und am Ende von Netzwerk 5
u M 4.1
r M 3.0
und am Ende von Netzwerk 6
u M 4.2
r M 3.0
sondern ganz am Ende ein neues Netzwerk 8
u (
o e 3.0
o e 3.1
o e 3.2
o e 3.3
o e 3.4
o e 3.5
o e 3.6
o e 3.7
o e 4.0
o e 4.1
)
r M 3.0
Dann laufen alle Erkennungen für die erste, zweite und dritte Zahl, und erst danach wird die Startbedingung gelöscht, die dann mit <GO> wieder gesetzt werden muss...

zu 2.

im Netzwerk 7 muss natürlich auch noch ein ODER-Pfad, der bei NOT ( m 4.0 u m 4.1 u m 4.2 ) u ( taste_01 o taste_02 etc. ) , der den Timer zum Sperren aufzieht.

Klar?
Sonst weiter fragen! Wir wollen ja auch, dass Du was lernst ;-)
 
Hallo DAXX,

Und? Bist Du weiter gekommen?

Beim Experimentieren mit Deinem Code sind mir noch ein paar andere Dinge aufgefallen:

Der Timer sollte die Tür besser auch sperren, wenn jemand zweimal hintereinander GO drückt.
Oder hintereinander zwei Zahlen ( auch die richtigen ) eingegeben werden, ohne dazwischen GO zu drücken.
Ohnehin bei jeder falschen Zahl.
etc.

Wenn Du das in AWL ausprogrammieren willst?!

Außerdem sollte man immer von vornherein so programmieren, dass man jemandem Fremden den Code geben kann und sagt: Ändere mal bitte das Schloss auf 386 und mach, dass man nach der ersten und nach der zweiten Zahl zweimal auf GO drücken muss...

Viel Erfolg! Und halte uns auf dem Laufenden! Auch, wenn Du aufgegeben hast!
Grüße Tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle die schon geantwortet haben.
Wenn ich dazu komme, werde ich alles nacheinander durch gehen und mir anschauen.
Das Problem bei mir ist, ich bin kein Schüler und habe die Software auch nicht bei mir zu Hause.
d.h.: Ich kann nur programmieren, lernen und testen wenn ich auf Arbeit bin.

Zudem muss ich so schnell es eben geht die SPS beherrschen und Sicher Programmieren können (aufgeben ist daher keine Option Tom... :D )
Einlernen werde ich mich auf S7 (um alles zu verstehen)
Später soll ich die FANUC Steuerung (Ladder III) lernen
und in 2-3 Jahren Soll ich die Bedieneroberfläche für unsere Firma "Entwerfen" und in die SPS reinhacken.

Kurz ... auch wenn meine Antworten hier etwas länger dauern ... werde ich mein Vorankommen hier Melden ;)

Gruß DAXX
 
So ... habe jetzt noch einmal drüber geschaut.

@Thomas_v2.1
Von dieser Schrittkette habe ich schon oft gelesen ... aber wie "aktiviere" finde ich die denn in S7? Unter der Hilfe wird nichts gefunden.
Bei sps-lehrgang finde ich nur diesen Satz:
Schrittketten können schon mit den bereits bekannten Programmiersprachen AWL, KOP und FUP implementiert werden. Lässt die Programmierumgebung den Einsatz von Strukturierungsmitteln zu, so wird die Programmieraufgabe deutlich vereinfacht. Weiterhin existieren spezielle Programmiersprachen, die speziell auf die Erstellung von Schrittketten zugeschnitten sind und graphische Programmiersysteme (Graph7).
Da steht zwar drin das es in AWL auch geht ... aber wie???

@winnman
Klar wäre das eine Lösung! Und einfach wäre es auch. Aber ich möchte die Aufgaben so umsetzen wie sie gestellt sind. ;)

@Tom...
Der Tipp mit dem entfernen in Netzwerk 4, 5, 6 und dem hinzufügen von NW8 ist absolut genial!
Problem bei der Simulation ist jetzt nur ... (Code ist ja 911)
Sobald ich die erste "1" drücke Setzt er mir gleich beide Merker (M4.1 & M 4.2). Warum er das macht ist mir klar ... mal sehen wie ich das noch ausmerze.

Das mit dem 7ten Netzwerk und dem ODER-Pfad konnte ich jetzt nicht nachvollziehen. Denn wenn jede Zahl M3.0 Zurück setzt habe ich das ursprüngliche Problem ja gar nicht mehr.

... kommen wir zu deinem 2ten Post ...

In meinen Augen Sperrt der Timer ja den Safe. Grund dafür ist ja, das der Timer beim Speichern der Korrekt eingegebenen Zahl, immer abgefragt wird. Wenn der läuft geht ja nix in meinem Code.
Den Safe bei jedem übel zu "sperren" also 2x GO oder direkt bei einer Falschen Zahl, erachte ich hier nicht als Sinvoll.

Und wie meinst du das hier ...
Außerdem sollte man immer von vornherein so programmieren, dass man jemandem Fremden den Code geben kann und sagt: Ändere mal bitte das Schloss auf 386 ...
Es kann doch jeder ändern. Oder meinst du das wegen der Übersichtlichkeit? Gibt es da Empfehlungen wie man Programmieren sollte???

Gruß Roland

P.S.: Das Programm setze ich hier wieder rein, wenn ich den einen Fehler ausgemerzt habe (den mit der 1 drücken und beide Merker setzen).
 
Oder meinst du das wegen der Übersichtlichkeit? Gibt es da Empfehlungen wie man Programmieren sollte???

Genau so meine ich das.
Code soll natürlich funktionieren, aber eben auch lesbar sein.

Die Schrittkette empfielt sich bei Dir, das das Problem tatsächlich eine sequentielle Abfolge ist.
In AWL nimmt man sich eine Variable "Schritt" oder "Job" vom Typ Integer und hängt da alles dran.

Wenn der Sperrtimer abgelaufen ist, also wieder eine Eingabe möglich, wird "Schritt" auf 1 gesetzt.

Wenn Schritt "1" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "1" ist und jemand drückt <GO>, wird "Schritt auf "2" gesetzt.

Wenn Schritt "2" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "2" ist und jemand drückt die richtige erste Zahl, wird "Schritt auf "3" gesetzt.

Wenn Schritt "3" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "3" ist und jemand drückt <GO>, wird "Schritt auf "4" gesetzt.

etc...

Damit ergeben sich sehr viele einfach aufgebaute Netzwerke und die Sache bleibt übersichtlich.
Wichtig ist bei der Schrittkette, dass man aufpasst, dass man sich nicht "festfahren" kann!

Viel Erfolg!
Grüße Tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Schritt "1" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "1" ist und jemand drückt <GO>, wird "Schritt auf "2" gesetzt.

Wenn Schritt "2" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "2" ist und jemand drückt die richtige erste Zahl, wird "Schritt auf "3" gesetzt.

Wenn Schritt "3" ist und jemand drückt eine falsche Taste, wird der Safe wieder per Timer gesperrt.
Wenn Schritt "3" ist und jemand drückt <GO>, wird "Schritt auf "4" gesetzt.

Vom "Sicherheitsaspekt" ist es allerdings nicht so günstig nach einer falsch eingegebenen Stelle sofort abzubrechen.
Damit benötige ich bei drei Stellen nur noch maximal 30 Versuche um den Code zu knacken, anstelle der sonst maximalen 1000 wenn ein falscher Code immer erst am Ende der Eingabe überprüft, bzw. eine Falscheingabe signalisiert wird.
 
(Und da ich es gern kompliziert mag muss man mehr drücken als an einem normalen Zahlenschloss)
Damit sich das Schloss Öffnet muss mit dem Schalter "GO" begonnen werden -> Eingabe der ersten Zahl -> "GO" -> zweite Zahl ... usw. -> "OPEN" -> Bolzen entriegelt.
Mit "CLOSE" wird wieder verriegelt und der Timer läuft (hier 10sek. ... weil ja nur Übung).
Man kann die Code-Eingabe ja kompliziert gestalten, was aber nicht notwendig heißt, daß es auch kompliziert programmiert werden muß. ;)
Im Prinzip hast Du doch einfach ein 6-stelliges Codeschloß, wobei jede zweite Eingabe die Taste "GO" sein muß.

Ich würde ein Schieberegister (FIFO) für 6 bis 8 Zeichen programmieren und bei jedem Tastendruck ein zugehöriges Zeichen in den FIFO einschieben. Nach richtiger Eingabefolge steht die richtige Zeichenfolge im FIFO drin, was das Schloß entriegelt.
Ist das Schloß offen, dann führt jeder Tastendruck zum Schließen des Schlosses, oder das Einschieben in den FIFO wird gesperrt bis CLOSE gedrückt wird. CLOSE braucht einfach nur irgendein Zeichen in den FIFO einschieben.
Wozu Du noch einen Timer brauchst, erschließt sich mir nicht.

Beispiel:
* = GO
# = OPEN
C = CLOSE

Key: 123
Eingabe --> '*1*2*3#' --> richtig, Schloß öffnen
'CLOSE' --> '1*2*3#C' --> falsch --> Schloß schließt

Harald
 
Nachtrag: wenn man die Ziffern und Sondertasten in je 4 Bit als Hexadezimalziffer codiert, dann reicht für den FIFO ein DWORD und das Vergleichen auf richtige Eingabefolge wird besonders einfach.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vom "Sicherheitsaspekt" ist es allerdings nicht so günstig nach einer falsch eingegebenen Stelle sofort abzubrechen.
Damit benötige ich bei drei Stellen nur noch maximal 30 Versuche um den Code zu knacken, anstelle der sonst maximalen 1000 wenn ein falscher Code immer erst am Ende der Eingabe überprüft, bzw. eine Falscheingabe signalisiert wird.

Der außenstehende Falscheingeber "sieht" ja aber nicht, dass das Schloss intern gesperrt wurde und alle seine Eingaben sinnlos sind?!
Macht also nichts!
 
Hallo Leute,

sorry für die späte Antwort! Ich hatte nur noch wenig Zeit gehabt um mein Programm weiter verfeinern zu können. Fertig ist das Programm aber nicht geworden und es wird auch nicht mehr fertig werden!
Grund ist einfach ... Ich soll in Zukunft kein Siemens mehr machen, sondern nur noch FANUC. Bin zwar nicht übermäßig glücklich darüber ... aber da kann ich auch nichts daran ändern.
Ich kann euch das Programm hier (unfertig) herein kopieren ... sofern gewünscht.

Nochmals Danke für die Hilfe und vll. sieht man sich bei FANUC wieder :p

Gruß DAXX
 
Zurück
Oben