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