9.6.2000

SPS-Software

logik.png

Prinzip einer Förderstraße mit Verzweigungen

Laufzeitüberwachung: 100 Timer werden ersetzt durch 100 Merker

Verriegelungen: statisch, dynamisch, mit Wiederanlauf?

Programmierung der Siemens-S7 mit Microsoft "Excel"


Zementtransport als Beispiel für eine einfache Massengut-Förderstraße mit Verzweigungen. Die Einschaltreihenfolge geht vom Silo aus nach rückwärts bis Rinne 1, um Stauungen auszuschließen. Die Ausschaltreihenfolge ist umgekehrt. Zur Entleerung der Rinnen ist eine Nachlaufzeit erforderlich. Die "Entstaubung" (Absaugen der - nun stark mit Zement verstaubten - Förderluft und Rückfördern des Zementstaubs in den Transportweg) besteht wiederum aus mehreren Aggregaten mit eigener Ein-/Ausschaltreihenfolge. Umschalten auf ein anderes Silo erfolgt ohne Unterbrechung.

Förderstraße mit Verzweigungen
Förderer:
(Nachlauf beginnt,
wenn Weiche 1
umgesteuert
oder Rinne 1 Aus)
Start und Verriegelung Rinne 2
Weiche:
(Umsteuern beginnt
erst dann, wenn der
Transportweg hinter
der Weiche läuft.)
Umsteuern Weiche 1
Straße:
("Ein", "Aus" und
"Silo 1" bis "Silo 3"
durch Hardware
oder von der
Visualisierung)
Straße Ein/Aus


 

Laufzeitüberwachung: Timer durch Merker ersetzen

Wenn - wie z.B. in der Siemens S7 - Timer eine knappe Ressource sind, wenn man aber andererseits für jeden Antrieb ein bis zwei Timerfunktionen braucht, lohnt sich eine Technik, mit der man z.B. 100 einzelne Timerfunktionen ersetzen kann durch 2 Timer und 101 Merker.

Die Methode ist nicht für zeitkritische Funktionen geeignet, sondern nur für Störungen, die ohnehin zum Abschalten eines Anlagenteils führen. Die Überwachungszeit hat nur eine Genauigkeit von - 0 / + 100 Prozent, d.h. bei einer programmierten Zeit von z.B. 5 Sekunden spricht die Überwachung an zwischen 5 und 10 Sekunden nach Auftreten der Fehlerbedingung.

Man programmiert zwei Timer ("017fast1" und "017fast2") in üblicher Weise als frei laufenden Impulsgeber, so daß sie einen globalen Impulsmerker ("017fast") setzen. (Die NOP 0 Anweisungen sind nur für die Darstellung in "Funktionsplan" bzw. "Kontaktplan" nötig):

NETWORK
TITLE =fast flash - indicating errors - "off" time

U "017fast1";
L S5T#500MS;
SE "017fast2";
NOP 0;
NOP 0;
NOP 0;
NOP 0;
NETWORK
TITLE =fast flash - indicating errors - "on" time

UN "017fast2";
L S5T#500MS;
SE "017fast1";
NOP 0;
NOP 0;
NOP 0;
U "017fast1";
= "017fast";

Fehlerbedingung für eine Laufzeitüberwachung ist z.B. "Motorschütz gesetzt ("035mot"), aber Impuls von Bewegungsinitiator ("035spuls") fehlt". Möglich wäre auch z.B. "Luftventil geöffnet, aber Endlage fehlt", oder "Schütz gesetzt, aber Rückmeldung fehlt". Diese Störungen dürfen erst gemeldet werden, wenn die Zeit für die entsprechende mechanische Bewegung abgelaufen ist. 

Wenn der Impulsmerker "017fast" - bei erfüllter Fehlerbedingung - zum erstenmal kommt, wird der Ersatzmerker ("035swarn") gesetzt. Wenn der Impulsmerker zum zweitenmal kommt (d.h. bei gesetztem Ersatzmerker), wird das Störungsbit gesetzt. (Die beiden entsprechenden Netzwerke müssen - wie üblich - in umgekehrter Reihenfolge programmiert werden):

NETWORK
TITLE =speed error flag (1 = error)

U "035swarn";
U "017speed";
S "035serr";
U "017alarmr";
R "035serr";
NOP 0;
NETWORK
TITLE =speed error internal pre-warning flag

U "035mot";
UN "035spuls";
U "017speed";
S "035swarn";
U( ;
ON "035mot";
O "035spuls";
O "017alarmr";
) ;
R "035swarn";
NOP 0;

("017alarmr" ist der allgemeine Alarmreset).


 

Verriegelungen: statisch oder dynamisch, mit oder ohne Wiederanlauf?

Statische Verriegelung erfolgt durch Zustände, dynamische Verriegelung durch Zustands-Übergänge.

Beispiel Tankbefüllung:  Die Pumpe wird mit dem Sicherheitskontakt "Überlauf" statisch verriegelt, d.h. die Pumpe stoppt und kann auch nicht eingeschaltet werden, solange die Überlaufmeldung ansteht.

Statische Verriegelung
ohne Wiederanlauf:

(Überlauf = "max",
Pumpe = "K1")
U( ;
O  "ein";
O  "K1";
)  ;
U  "aus";
U  "max";
=  "K1";

Wiederanlauf wird eingesetzt, wenn es sich bei dem Tank z.B. um einen Vorratstank einer Wasserversorgung handelt. Die Pumpe soll vorübergehend stoppen bei "Voll"-Niveau.

Statische Verriegelung
mit Wiederanlauf:
(Zwischenmerker = "M1")
U( ;
O  "ein";
O  "M1";
)  ;
U  "aus";
=  "M1";

U  "M1";
U  "max";
=  "K1";

Die Verriegelung mit dem "Voll"-Kontakt kann dynamisch erfolgen, d.h. die Pumpe wird ausgeschaltet, wenn das "Voll"-Niveau überschritten wird, sie kann aber am Bedienungs-Terminal wieder eingeschaltet werden, solange nicht das "Überlauf"-Niveau erreicht ist.

Sinn macht diese Verriegelungsart dann, wenn die Pumpe z.B. bei "Voll"-Niveau aus- und bei "Leer"-Niveau wieder eingeschaltet wird:

Dynamische Verriegelung:
(Impulse auf negativer Flanke von "voll" bzw. "leer": "vimpuls" und "limpuls")
U  "voll" ;
FN "vflanke";
=  "vimpuls;
 
U  "leer" ;
FN "lflanke";
=  "limpuls";

U( ;
O  "ein";
O  "limpuls";
O  "K1";
)  ;
U  "aus";
UN "vimpuls";
U  "K1";
=  "K1";


S7-Programmierung mit Microsoft "Excel"

Beispiel für ein Programmteil., das mit Microsoft "Excel" geschrieben wurde. Es ist so geschrieben, daß es von der S7-Software ebenso in FUP (Funktionsplan) oder in KOP (Kontaktplan) dargestellt und ausgedruckt werden kann.

Es handelt sich um das "Förderband 035" des Projekts "Ölmühle". (Die Bezeichnung "035" ist hier gleich der Seitennummer im E-Plan.) Es kann nach vorn und nach hinten verriegelt werden, mit und ohne automatischen Wiederanlauf.

Zur Verriegelung dienen die Merker "035kill" und "035wait". "035kill" löst die Selbsthaltung, "035wait" läßt die Selbsthaltung stehen und stoppt den Antrieb nur vorübergehend.

Die Störungen werden einzeln flankenüberwacht und können - je nach Bedarf - die Störungshupe einschalten und/oder mit verschiedenen Blinktakten im Leuchtbild angezeigt werden.

Da nicht genügend Timerfunktionen zur Verfügung stehen, wird die Laufüberwachung des einzelnen Förderers nicht mit einem Timer, sondern mit einem Merker realisiert (siehe Netzwerk "speed error internal pre-warning flag").

Die beteiligten Programmteile sind:
Name Text Gruppe Vorgänger Nachfolger
035 Förderband 2161.18 Verwiegung 37 038 038
xx xx xx xx xx
038 Förderer 2161.17.2 xx xx xx
017 Allgemeine Funktionen - - -
xx xx xx xx xx

Die einzelnen Bits bedeuten:
Name Text Funktion gesetzt gelesen
035kill Verriegelungsmerker 1 0=Abschaltung 035 035
035wait Verriegelungsmerker 2 0=Zwischenhalt 035 035
035ovld Motorschutzschalter 0=Störung Eingang 035
035oerr Motorschutz Störung 1=steht an 035 035, 017
035oquit Motorschutz quittiert 1=quittiert 035 035
xx xx xx xx xx
xx xx xx xx xx
xx xx xx xx xx
xx xx xx xx xx
xx xx xx xx xx

FUNCTION "035FC" : VOID
TITLE =drivbs - conveyor with belt & speed switches
VERSION : 0.1
 
BEGIN
NETWORK
TITLE =interlock 1 - kill flag
//drive is switched off when kill flag is 0
O "017intl";
O "038mot";
= "035kill";
NETWORK
TITLE =interlock 2 - wait flag
//drive stops temporarily when wait flag is 0
O M 0.0;
ON M 0.0;
= "035wait";
NETWORK
TITLE =overload error flag (1 = error)
 
UN "035ovld";
= "035oerr";
NETWORK
TITLE =overload error acknowledge flag
 
U "035oerr";
U "017alarmr";
S "035oquit";
UN "035oerr";
R "035oquit";
NOP 0;
NETWORK
TITLE =overload error - edge detection
 
U "035oerr";
FP "035oedge";
= "035opuls";
NETWORK
TITLE =belt error flag (1 = error)
 
UN "035belt";
U "035mot";
S "035berr";
U "035belt";
U "017alarmr";
R "035berr";
NOP 0;
NETWORK
TITLE =belt error acknowledge flag
 
U "035berr";
U "017alarmr";
S "035bquit";
UN "035berr";
R "035bquit";
NOP 0;
NETWORK
TITLE =belt error - edge detection
 
U "035berr";
FP "035bedge";
= "035bpuls";
NETWORK
TITLE =speed sensor - rising edge detection
 
U "035spd";
FP "035sedge";
= "035spuls";
NETWORK
TITLE =speed error flag (1 = error)
 
U "035swarn";
U "017speed";
S "035serr";
U "017alarmr";
R "035serr";
NOP 0;
NETWORK
TITLE =speed error internal pre-warning flag
 
U "035mot";
UN "035spuls";
U "017speed";
S "035swarn";
U( ;
ON "035mot";
O "035spuls";
O "017alarmr";
) ;
R "035swarn";
NOP 0;
NETWORK
TITLE =speed error acknowledge flag
 
U "035serr";
U "017alarmr";
S "035squit";
UN "035serr";
R "035squit";
NOP 0;
NETWORK
TITLE =speed error - edge detection
 
U "035serr";
FP "035tedge";
= "035tpuls";
NETWORK
TITLE =error pulses switch horn on
 
O "035opuls";
O "035bpuls";
O "035tpuls";
O "017horn";
= "017horn";
NETWORK
TITLE =pushbuttons switch preset flag on/off
 
U( ;
O "035on";
O "035preset";
) ;
U "035kill";
U "035off";
UN "035oerr";
UN "035berr";
UN "035serr";
= "035preset";
NETWORK
TITLE =power runs when preset is 1 and wait is 1
 
U "035preset";
U "035wait";
= "035mot";
NETWORK
TITLE =lamp
 
O "035mot";
O "017alarmr";
O ;
U "035preset";
UN "035mot";
U "017wait";
O ;
U "035oerr";
UN "035oquit";
U "017fast";
O ;
U "035oerr";
U "035oquit";
U "017slow";
O ;
U "035berr";
UN "035bquit";
U "017fast";
O ;
U "035berr";
U "035bquit";
U "017slow";
O ;
U "035serr";
UN "035squit";
U "017fast";
O ;
U "035serr";
U "035squit";
U "017slow";
O ;
UN "035off";
U "035ovld";
U "017off";
= "035lmp";
END_FUNCTION