Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Mit Structured Text und einem RevPi Core 3 eine Fußgängerampel steuern

pedestrian_crossing_521fae3921b2b3d8d08b6473c0b5ad8fcca2bcc2.jpg

Ein Structured-Text-Programm (SPS) zur Steuerung einer Fußgängerampel, das auf unserem vorherigen Ampelbeispiel aufbaut.

Nachdem ich in meinem letzten Blogbeitrag mithilfe von Structured Text in LogiCAD 3 eine einfache Ampelanlage simuliert habe, wollte ich dieses Projekt nun zu einer Fußgängerampel weiterentwickeln. Hierzu wären ein Eingang in Form einer Taste, über die der Fußgänger die Verkehrsampel auslöst, und ein zusätzlicher Ausgang für die Anzeige zum Queren der Straße hinzuzufügen. Noch echter wirkt die Ampel durch einen Warnsummer, der dem Fußgänger mitteilt, dass die Verkehrsampel bald wieder grün wird und die Straße nicht mehr sicher überquert werden kann.

Hardware

Auch hier verwende ich den RevPi Core 3 und ein DIO, das an einer auf eine 5 mm dicke, lasergeschnittene MDF-Platte befestigten DIN-Hutschiene montiert ist. Zusätzlich zur bestehenden Konfiguration musste ich jetzt 24 V an die Eingangsklemmen des DIO anschließen und anhand des Abschnitts How to Connect the Power Supply (Netzteil anschließen) der Kurzanleitung die Verbindungen überprüfen.

Input_X2_ead8189c67fe4589d66a7343787f32462c5330e8.jpg

Das Netzteil wird mit dem X2-Stecker des DIO-Moduls verbunden – die 24 V an Pin 1 und die Erdung an Pin 2.

Das Licht der Fußgängerampel, eine weiße LED (763-7905) und ein Summer (626-157) wurden an die Ausgänge 4 bzw. 5 des DIO-Moduls angeschlossen. Anschließend wurde die Taste an Eingang 1 angeschlossen. Dabei war die Nummerierung der Eingänge (ausgehend von der rechten unteren Ecke des Steckers und des 24-V-Netzteils) zu beachten. Da die Eingänge 24 V vom Netzteil erhalten, war ich zunächst davon ausgegangen, dass die Taste auf einer Seite geerdet werden sollte. Nachdem ich noch einmal die Kurzanleitung und diesen Post im Forum gelesen hatte, wurde mir klar, dass sie an die 24 V angeschlossen werden muss.

Als Nächstes habe ich eine einfache Acrylhalterung für die dem Fußgänger zugewandten Komponenten (Taste, Summer und weiße LED) ausgeschnitten und zurechtgebogen und die LED spaßeshalber mit einem grünen Ampelmännchen im ostdeutschen Stil versehen.

Einstellungen

Dann musste ich den neuen Komponenten in den Konfigurationseinstellungen des RevPi geeignete Namen geben. Hierzu habe ich den Abschnitt „Value Editor“ (Werte-Editor) verwendet und außerdem die entsprechenden Änderungen an der Datei für die globalen Einstellungen in LogiCAD 3 vorgenommen.

RevPiResource_02d39e259141107aef9ac70bd07c919f962f6094.png

Hierzu klicken Sie in LogiCAD im Projektmanager unter „Revolution Pi“ mit der rechten Maustaste auf RevolutionPiResource (Ressource für Revolution Pi) und anschließend auf Change IO Configuration (E/A-Konfiguration ändern). Dadurch wird die PiCtory-Seite in Ihrem Standard-Webbrowser geöffnet.

Pictory_add_buzzer_f54e23a70617af48e178800eafbd56d33f1ba749.png

Bearbeiten Sie die Ein- und Ausgänge im Abschnitt „Value Editor“ (Werte-Editor) in der rechten unteren Ecke von PiCtory. Ich habe Ausgang 4 in „Ampel_4“, Ausgang 5 in „Summer_5“ und Eingang 1 in „Taste_1“ umbenannt.

Sie speichern die Änderungen, indem Sie auf die Datei klicken und Save as Start-Config (Als Startkonfiguration speichern) auswählen.

Wenn Sie nun wieder in Logi.Cad 3 mit der rechten Maustaste auf „RevolutionPiResource“ (Ressource für Revolution Pi) klicken und „Load IOConfiguration“ (E/A-Konfiguration laden) wählen, wird die Konfigurationsdatei vom RevPi abgerufen und die Datei mit den globalen Einstellungen im LogiCAD-3-Projekt entsprechend aktualisiert.

Der ST-Code

PROGRAM RevolutionPiProgram

	VAR  
	wait : TON; 
	count : INT;
	END_VAR
		
	VAR_EXTERNAL	
		Red_1 : BOOL;
		Amber_2 : BOOL;
		Green_3 : BOOL;
		Cross_4 : BOOL;
		Buzzer_5 : BOOL;
		Button_1 : BOOL;
	END_VAR

CASE count OF
	0: //init
		count := count 4;
	
     		
	1: // Amber
   		
   		Red_1 	:= False;
   		Amber_2 := True;
   		Green_3 := False;
		Cross_4 := False;
		Buzzer_5 := False;
   		
   		wait(IN:=TRUE, PT:=T#7s);
   		
   		IF wait.Q THEN
   			wait(IN:=FALSE);
   			count := count + 1;
   		END_IF;
	
   2: // Red and Cross

		Red_1 := True;
		Amber_2 := False;
		Green_3 := False;
		Cross_4 := True;
		Buzzer_5 := False;

		wait(IN:=TRUE, PT:=T#10s);
	
		IF wait.Q THEN
			wait(IN:=FALSE);
			count := count + 1;
		END_IF;
	
   3: // Red, Amber and Buzzer
  		
   		Red_1 := True;
		Amber_2 := True;
		Green_3 := False;
		Cross_4 := False;
		Buzzer_5 := True;

		wait(IN:=TRUE, PT:=T#5s);
	
		IF wait.Q THEN
			wait(IN:=FALSE);
			count := count + 1;
		END_IF;
		
   4:  // Green
		IF Button_1 = FALSE THEN count := 1;
		END_IF;
		
		Red_1 := False;
		Amber_2 := False;
		Green_3 := True;
		Cross_4 := False;
		Buzzer_5 := False;
     	 		
		ELSE
		count := 4;

END_CASE;
	
END_PROGRAM

Am Anfang des Codes werden die Variablen gesetzt:

VAR_EXTERNAL

Die externen Variablen müssen genau mit den Bezeichnungen für die in PiCtory und der Konfigurationsdatei in LogiCAD 3 festgelegten Eingänge und Ausgänge übereinstimmen.

Dann kommt die Anweisung:

count := 4;

Sie schickt das Programm zum Anweisungsblock mit der Nummer 4. Diese Anweisungen prüfen zunächst, ob die Taste gedrückt wurde. Wenn nicht, wird das grüne Licht eingeschaltet und alle anderen Leuchten und der Summer werden ausgeschaltet. Da es sich um ein ST-Programm handelt, wird es in einer Schleife ausgeführt, d. h., es kehrt zum Anfang zurück und beginnt von vorn. Das Ergebnis ist, dass das grüne Licht weiter leuchtet, bis ein Tastendruck erkannt wird. In diesem Fall wird der Anweisungsblock mit der Nummer 1 aufgerufen und anschließend die gesamte Sequenz durchlaufen.

Jeder Block enthält einen Zeitgeber:

wait(IN:=TRUE, PT:=T#5s);

So lässt sich ganz einfach festlegen, wie lange ein Schritt der Sequenz dauert, indem man den Wert nach „T#“ ändert. In diesem Beispiel beträgt er 5 Sekunden – „10s“ wären 10 Sekunden und „10ms“ 10 Millisekunden.

Obwohl es nicht zwingend notwendig ist, habe ich in jeden Anweisungsblock die Werte der einzelnen Variablen eingefügt. So ist es einfacher zu erkennen (und gegebenenfalls zu ändern), was bei den einzelnen Schritten des Vorgangs geschieht.

buildandload_7066c973755c433b6b26efc4dd315d1d2637da71.png

Sobald LogiCAD 3 mit dem RevPi verbunden und der Code erstellt und hochgeladen wurde, reagierten die Leuchten, die Taste und der Summer wie erwartet.

Potenzial

Bei diesem Beispiel handelt es sich um eine einfache Abfolge von Ereignissen mit nur 4 Schritten. Es kann jedoch problemlos mit mehr Ausgängen und/oder verschiedenen Kombinationen von Ausgängen ergänzt werden, die nacheinander unterschiedlich lange ausgeführt werden. Das heißt, dass die Schaltung durch geringfügige Änderungen verschiedene Leuchten, Summer, Motoren oder was auch immer auslösen und mit zusätzlichen Eingängen wie zum Beispiel Temperatur- oder Bewegungssensoren weiterentwickelt werden kann.

I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.
DesignSpark Electrical Logolinkedin