24.11.2004

SPS Programmierung

autosps

 

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.

strasse

Förderer: (Nachlauf beginnt, wenn Weiche 1 umgesteuert oder Rinne 1 Aus)

rinne2

Weiche: (Umsteuern beginnt erst dann, wenn der Transportweg hinter der Weiche läuft.)

weiche1

Straße: ("Ein", "Aus" und "Silo 1" bis "Silo 3" durch Hardware oder von der Visualisierung)

strassea

 

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:

tank

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 (Ueberlauf = "max", Pumpe = "K1")

vrieg01

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")

vrieg02

U( ;O   "ein";
O   "M1";
)   ;
U   "aus";
=   "M1";:BR|BR: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")

vrieg03

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

abatz.de Jörn Abatz - Technische Software Impressum