TIA S7-1200 Buzzer Game mit HMI Anbindung

SPS_Step

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

Ich suche eine Lösung, ein "erster von 4" oder Buzzer Spiel mit einer S7-1200 zu programmieren. Hat einer von euch so etwa schon durchgeführt?

Es soll erkennen, welcher von 4 Tastern am schnellsten gedrückt hat. Außerdem soll die Zeit zu jeder Gruppe gemessen und auf einem HMI angezeigt werden.

Muss ich bei S7-1200 etwas besonderes an den Eingängen wie bei der Logo beachten?

Gruß
 
Von allen 4 Buzzern die Flanken abfragen. Mit jeder Flanke die aktuelle Zeit abspeichern und nachdem alle 4 gedrückt wurden die Differenzen ausrechnen. Die kannst du dann in eine HMI Variable kopieren und anzeigen.
Was musstest du denn bei der Logo und den Eingängen beachten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hausaufgaben? o_O
Du hast ja sicher einen Auslöser, also z.B. ein "ab jetzt darfst du drücken", dort dann einfach einen Timer starten, und diesen mit Tasterdruck stoppen oder halt die Zeit bei bei Tasterdruck "abspeichern". Das Ganze kannst du dan am HMI anzeigen.
Bei den Hardwareeingängen brauchst du nichts beachten, 24V über den Taster und fertig.
 
Es soll erkennen, welcher von 4 Tastern am schnellsten gedrückt hat. Außerdem soll die Zeit zu jeder Gruppe gemessen und auf einem HMI angezeigt werden.

Muss ich bei S7-1200 etwas besonderes an den Eingängen wie bei der Logo beachten?
Konzept, ungetestet:
Die Digitaleingänge wo die Buzzer angeschlossen werden, vom selben Eingangsbyte wählen, also alle von Kanaladresse E0.x oder alle von E1.x, falls die Hardware-Eingänge byteweise eingelesen werden.

Bei den Digitaleingängen einstellen:
Eingangsfilter gleich, z.B. "0.1 millisec"
[v] Erkennung der steigenden Flanke aktivieren
Prozessalarm: Hardware interrupt (Standard OB40)

Im Hardware interrupt OB (OB40) schreiben die auslösenden Eingänge einen Wert 1..4 je nach eigener Kanalnummer in eine globale Variable "Erster_Buzzer" (BYTE oder USINT).

Code:
IF "Erster_Buzzer" = 0 THEN
    CASE #IChannel OF
        1:  "Erster_Buzzer" := 1; //Buzzer 1 an E0.0
        2:  "Erster_Buzzer" := 2; //Buzzer 2 an E0.1
        3:  "Erster_Buzzer" := 3; //Buzzer 3 an E0.2
        4:  "Erster_Buzzer" := 4; //Buzzer 4 an E0.3
    END_CASE;
END_IF;
//und die Systemzeit oder den Zählerstand des Systemzeitgebers in eine zweite globale Variable "Endzeitpunkt" schreiben
Die Case-Nummern müssen an die IChannel-Nummer der Buzzer-Eingänge angepasst werden. Falls die S7-1200 mehrere Module hat, die Prozessalarm auslösen, dann auch die LADDR auswerten, ob der Alarm vom Modul mit den Buzzern kommt.

Der Start/Spielfreigabe-Button
- schreibt die Systemzeit oder den Zählerstand des Systemzeitgebers in eine globale Variable "Startzeitpunkt"
- schreibt eine 0 in die globale Variable "Erster_Buzzer". Wer zu früh drückt wird dadurch gelöscht.


Was musstest du denn bei der Logo und den Eingängen beachten?
hier das fertige LOGO-Projekt: https://www.sps-forum.de/threads/siemens-logo-8.98600/
(gut daß der Fragesteller damals so einen aussagekräftigen Thread-Titel gewählt hatte, da war ich völlig überrascht wie schnell ich den Thread wiedergefunden habe ;) )

Harald
 
Die Case-Nummern müssen an die IChannel-Nummer der Buzzer-Eingänge angepasst werden. Falls die S7-1200 mehrere Module hat, die Prozessalarm auslösen, dann auch die LADDR auswerten, ob der Alarm vom Modul mit den Buzzern kommt.

und was passiert, wenn zufälligerweise zwei gleichzeitig gedrückt werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"gleichzeitig" müsste schon auf ein paar Nanosekunden gleichzeitig sein. Wenn das tatsächlich passiert, dann wird (mehr oder weniger zufällig? und vermutlich unbeeinflussbar) vom Betriebssystem der SPS ein Eingang bevorzugt. Auf jeden Fall können bei der Prozessalarm-Lösung nie 2 Eingänge gleichzeitig im SPS-Programm ankommen, weil für jede Alarmquelle ein eigener OB-Aufruf generiert wird, die nacheinander abgearbeitet werden.

PS: man müsste mal alle 4 Digitaleingänge auf den selben Taster verdrahten und sehen, ob immer und wenn ja welcher Eingang da gewinnt. Notfalls müsste man beim Spiel auslosen/auswürfeln, wer mit welchem Buzzer spielt. Oder vorher alle 4 Buzzer abklemmen und in zufälliger Reihenfolge wieder anklemmen.

Harald
 
Zuletzt bearbeitet:
Zurück
Oben