Praktische Programmierung einer SPS-Steuerung für einen Elektrohebezug (S7-1200-Ladder-Diagramm + SCL-Implementierung in zwei Sprachen)
📌 Programmierung der SPS-Steuerung für einen Elektrohebezug (S7-1200 – Praxisbeispiel) In diesem Artikel wird die Siemens S7-1200 (CPU 1212C DC/DC/DC) als zentrale Steuerung verwendet. Unter Einsatz der Entwicklungsumgebung TIA Portal V17 und einer gemischten Programmierung aus LAD (Ladder-Diagramm) und SCL (Strukturierter Text) werden die logische Steuerung der Auf- und Abwärtsbewegung des elektrischen Hebezeugs, , Überlastschutz, Endlagenschutz, Not-Aus-Verriegelung, Umschaltung zwischen Fernbedienung und Handbedienung sowie eine Selbstdiagnose bei Störungen. Das vollständige Programm umfasst 4 FC-Blöcke, 1 DB-Block und 1 OB1-Hauptzyklus und kann direkt in ein reales Projekt importiert und verwendet werden.
Bei herkömmlichen Elektrohebezeugen dominierte lange Zeit die Steuerungsart ”Nockensteuerung + Relais + Schütz”; die elektrischen Schaltpläne bestanden aus Dutzenden von Zwischenrelais und Zeitrelais, was die Fehlersuche erschwerte und eine Anbindung an das Informationssystem der Fabrik unmöglich machte. Mit dem Voranschreiten von Industrie 4.0 verlangen immer mehr Fabriken die Anbindung von Hebezeugen an MES-/SCADA-Systeme, um Funktionen wie die Überwachung des Anlagenzustands, die Erfassung von Betriebsdaten und die Frühwarnung bei Störungen zu realisieren. Der Ersatz der Relaislogik durch eine SPS ist ein unvermeidlicher Trend. Basierend auf den praktischen Erfahrungen aus einem von Krued Heavy Industry realisierten Projekt in einem Automobilzulieferwerk (zentralisierte Steuerung von 68 Elektrohebezeugen) wird in diesem Artikel der gesamte Prozess der Erstellung eines SPS-Steuerungsprogramms für Elektrohebezeuge detailliert dargestellt, einschließlich der E/A-Zuordnungstabelle, der Kontaktplanlogik, des SCL-Fehlersbehandlungscodes sowie die Gestaltung der HMI-Überwachungsbildschirme sowie den gesamten Prozess des Programm-Downloads und der Inbetriebnahme.
I. Hardwarekonfiguration und E/A-Zuweisung
1.1 Auswahl der Hardware
| Ausrüstung | Modellnummer | Anzahl | Anmerkung |
|---|---|---|---|
| SPS-CPU | S7-1200 1212C DC/DC/DC | 1 | 6ES7 212-1AE40-0XB0, 8DI/6DO |
| Digitales Erweiterungsmodul | SM 1223 DI 8×24 VDC / DO 8×24 VDC | 1 | 6ES7 223-1BH32-0XB0 |
| Analog-Erweiterungsmodul | SM 1231 AI 4×13 Bit | 1 | 6ES7 231-4HD32-0XB0, 4–20 mA |
| HMI-Touchscreen | KTP400 Basic PN | 1 | 6AV6 647-0AD11-3AX0, 4,3 Zoll |
| Zwischenrelais | RIM 24 VDC 2CO | 6 | Trennung zwischen SPS-Digitalausgang und Schützspule |
| Schaltnetzteil | EDR-120-24 | 1 | AC 220 V → DC 24 V, 5 A |
1.2 IO-Zuweisungstabelle
| Adresse | Symbol | Funktionen | Typ | Erläuterung |
|---|---|---|---|---|
| %I0.0 | SB1_UP | Aufwärts-Schaltfläche | DI | Griff nach oben, normalerweise offen |
| %I0.1 | SB2_DN | Abwärts-Schaltfläche | DI | Griff nach unten, normalerweise offen |
| %I0.2 | SB3_LT | Schaltfläche „Nach links“ | DI | Hebel links, normalerweise offen |
| %I0.3 | SB4_RT | Schaltfläche „Nach rechts“ | DI | Hebel rechts, normalerweise offen |
| %I0,4 | SQ1_UL | Obergrenze | DI | Endschalter, normalerweise geschlossen |
| %I0,5 | SQ2_DL | untere Stelle | DI | Endschalter, normalerweise geschlossen |
| %I0,6 | SB0_EST | Not-Aus-Schalter | DI | Normalerweise geschlossener Kontakt, 0 = Auslösen |
| %I0,7 | FR_OL | Thermoschalter | DI | Thermoschalter, normalerweise geschlossen |
| %I1.0 | OL1_OVLD | Überlastsignal | DI | Ausgang des Überlastbegrenzers, normalerweise offen |
| %I1.1 | RC_SEL | Umschalten zwischen Fernbedienung und Controller | DI | 0 = Joystick, 1 = Fernbedienung |
| — | Analogeingang: Überlastsensor (4–20 mA → 0–20 t) | |||
| Adresse | Symbol | Funktionen | Typ | Erläuterung |
|---|---|---|---|---|
| %Q0.0 | KM1_UP | Aufwärtsschütz | DO | Steuerungsschütz für den Hauptstromkreis beim Anheben |
| %Q0,1 | KM2_DN | Absenk-Schütz | DO | Schütz für den Hauptstromkreis der Absenksteuerung |
| %Q0,2 | KM3_LT | Schütz auf der linken Seite | DO | Steuerung des Hauptstromkreis-Schützes in der linken Reihe |
| %Q0,3 | KM4_RT | Rechtsseitiges Schütz | DO | Steuerung des Hauptstromkreis-Schützes auf der rechten Seite |
| %Q0,4 | KA1_ALM | Störungsmeldung | DO | Ansteuerung von akustischen und optischen Alarmgeräten |
| %Q0,5 | KA2_RUN | Betriebsanzeige | DO | Grüne Betriebsanzeige |
II. Programmierung mit LAD-Ladder-Diagrammen
2.1 Architektur des Hauptprogramms OB1
OB1 ist der Hauptzyklus-Organisationsblock, dessen Abtastzyklus standardmäßig 10 ms beträgt. Die folgenden FC-Blöcke werden in der Reihenfolge ihrer Ausführung aufgerufen:
| Aufrufreihenfolge | FC-Block | Funktionen | Programmiersprachen |
|---|---|---|---|
| 1 | FC100_Sicherheit | Sicherheitsverriegelungen (Not-Aus/Endschalter/Thermoschalter/Überlastschutz) | LAD |
| 2 | FC200_HoistCtrl | Steuerungslogik für den Hubvorgang (Auf/Ab/Verriegelung) | LAD |
| 3 | FC300_TravelCtrl | Betriebssteuerungslogik (linke Spur/rechte Spur/Verriegelung) | LAD |
| 4 | FC400_Fehlerdiagnose | Fehlerdiagnose und Alarm (SCL) | SCL |
2.2 Sicherheitsverriegelung FC100 (LAD-Diagramm)
// FC100: Sicherheitsverriegelungslogik
// Alle Sicherheitsbedingungen sind in Reihe geschaltet – wird eine der Bedingungen nicht erfüllt, wird der Betrieb unterbunden
"SB0_EST" "SQ1_UL" "SQ2_DL" "FR_OL" "SafetyOK"
----|/|-------------|/|-------------|/|-------------|/|-------------------- ----( )
// Überlastverriegelung: Bei Überlast ist nur das Absenken zulässig
"OL1_OVLD" "SB2_DN"
----| |------------| |------------------------------------------------------- ----( "Overload_DN_Only" )
// Rücksetzen des Überlastsignals (manuelle Bestätigung)
"Overload_DN_Only" "SB1_UP" "Overload_Latch"
----| |------- ------------| |----------------------------------------------------( )
2.3 Hubsteuerung FC200 (LAD-Blockschaltbild)
// FC200: Steuerungslogik für den Hubvorgang
// Aufwärtsfahrt: SafetyOK + oberer Endschalter nicht ausgelöst + keine Überlastung + Abwärtsfahrt nicht aktiv + Aufwärts-Taste
// Abwärtsfahrt: SafetyOK + unterer Endschalter nicht ausgelöst + Aufwärtsfahrt nicht aktiv + Abwärts-Taste (bei Überlastung ist nur Abwärtsfahrt zulässig)
"SafetyOK" "SQ1_UL" "Overload_Latch" "KM2_DN" "SB1_UP" "KM1_UP"
----| |------------ -| |-------------|/|----------------|/|-----------| |----------( )
| |
"KM1_UP" |
----| |------------------------------------------------------- ---------------------+
"SafetyOK" "SQ2_DL" "KM1_UP" "SB2_DN" "KM2_DN"
----| |-------------| |----------- --------------------|/|-----------| |----------( )
| |
"KM2_DN" |
----| |--------------------------------------------------------------------- -------+
// Elektrische Verriegelung: KM1 und KM2 dürfen keinesfalls gleichzeitig aktiv sein
"KM1_UP" "KM2_DN" "Interlock_OK"
----| |---------- -| |--------------( ) // Dient der Fehlererkennung; darf im Normalbetrieb nicht durchgeschaltet sein
2.4 Verzögerungsschutz – Schutz vor häufigen Starts
// Schutz vor häufigem Einschalten: Nach jedem Ausschalten wird eine Verzögerung von 500 ms eingehalten, bevor ein erneutes Einschalten zulässig ist
// Verhindert das häufige Ein- und Ausschalten des Schützes innerhalb kürzester Zeit (Kontaktflattern/Lichtbogen)
"KM1_UP"
----|/|------------------------------------------------------ -----------------------
"KM2_DN" TON_Start_Delay
----|/|---------------- [TON: #Temp_StartDelay ]
PT= T#500MS
Q= "Start_Allowed"
// In den Hauptsteuerkreis einbinden
"Start_Allowed" "SB1_UP" "KM1_UP" // Aufwärts
----| |----------------| |-----------( )
III. SCL-Fehlercodes
3.1 FC400_FaultDiag (SCL-strukturierter Text)
// FC400: Fehlerdiagnose und Alarmierung
// Sprache: SCL (Strukturierter Text)
// Funktion: Echtzeitüberwachung des Gerätestatus, Erkennung von 13 Fehlerarten, Ausgabe von Fehlercodes an die HMI
FUNCTION FC400_FaultDiag : Void
VAR_INPUT
I_SafetyOK : Bool; // Status der Sicherheitsverriegelung
I_KM1_UP : Bool; // Rückmeldung "Schütz ein"
I_KM2_DN : Bool; // Rückmeldung des Absenk-Schützes
I_Overload_Latch : Bool; // Überlastverriegelung
I_OL1_OVLD : Bool; // Signal des Überlastsensors
I_RunHours : Real; // Kumulierte Betriebszeit (Stunden)
END_VAR
VAR_OUTPUT
Q_FaultCode : Int; // Fehlercode-Ausgabe an HMI
Q_FaultMsg : String[40]; // Fehlerbeschreibung
Q_Alarm_Output : Bool; // Akustischer und optischer Alarm
Q_TotalRunHours : Real; // Gesamtbetriebszeit
END_VAR
VAR
vFaultCount : Int; // Fehlerzähler
vPrev_KM1 : Bool; // Erkennung der ansteigenden Flanke des Schützes
vPrev_KM2 : Bool; // Erkennung der abfallenden Flanke des Schützes
vOverloadTimer : Time; // Dauer der Überlastung
END_VAR
// === Liste der Fehlererkennungen ===
Q_FaultCode := 0; // Standardmäßig kein Fehler
Q_Alarm_Output := FALSE;
vFaultCount := 0;
// Fehler 1: Not-Aus-Taste gedrückt
IF I_SafetyOK = FALSE AND
'SB0_EST' = FALSE THEN
Q_FaultCode := 1;
Q_FaultMsg := "Not-Aus-Taste wurde betätigt";
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 2: Auslösung des oberen Endschalters
IF 'SQ1_UL' = FALSE THEN
Q_FaultCode := 2;
Q_FaultMsg := "Auslösung des oberen Endschalters (zu geringer Abstand zwischen Haken und Rolle)";
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 3: Auslösen des unteren Endschalters
IF 'SQ2_DL' = FALSE THEN
Q_FaultCode := 3;
Q_FaultMsg := "Auslösung des unteren Endschalters (weniger als 3 Seilwindungen auf der Trommel)";
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 4: Überlastung des Thermorelais
IF 'FR_OL' = FALSE THEN
Q_FaultCode := 4;
Q_FaultMsg := 'Motorüberlastschutz (Thermoschalter ausgelöst)';
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 5: Überlast
IF I_Overload_Latch THEN
Q_FaultCode := 5;
Q_FaultMsg := 'Überlastbegrenzer ausgelöst (Last > 110%)';
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 6: KM1/KM2 gleichzeitig angezogen (Schütz klemmt)
IF I_KM1_UP AND I_KM2_DN THEN
Q_FaultCode := 6;
Q_FaultMsg := "Schwerwiegender Fehler: Hoch- und Niedriggeschwindigkeitsschütz gleichzeitig angezogen";
vFaultCount := vFaultCount + 1;
END_IF;
// Fehler 7: Fehlerhafte Rückmeldung des Schützes (Ausgangsbefehl stimmt nicht mit der Rückmeldung überein)
IF ("KM1_UP" = TRUE AND I_KM1_UP = FALSE) OR
('KM2_DN' = TRUE AND I_KM2_DN = FALSE) THEN
Q_FaultCode := 7;
Q_FaultMsg := "Fehlerhafte Reaktion des Schützes (möglicherweise blockiert/Spule durchgebrannt)";
vFaultCount := vFaultCount + 1;
END_IF;
// Bei Vorliegen eines Fehlers wird der Alarmausgang des Antriebs aktiviert
IF vFaultCount > 0 THEN
Q_Alarm_Output := TRUE;
END_IF;
// === Kumulierte Laufzeit ===
Q_TotalRunHours := I_RunHours +
(TIME_TO_REAL(TIME_NOW() - „Start_Time“)) / 3600000,0;
END_FUNCTION
IV. HMI-Überwachungsbildschirm und Kommunikationskonfiguration
4.1 HMI-Variablentabelle und Bildschirmgestaltung
| HMI-Bildschirm | Inhalt anzeigen | Verknüpfte DB-Variablen |
|---|---|---|
| Startbildschirm | Gerätestatus/Aktuelle Last/Betriebszeit | DB1.Status / DB1.Auslastung / DB1.Betriebsstunden |
| Steuerungsbildschirm | Virtuelle Schaltflächen „Nach oben“/„Nach unten“/„Nach links“/„Nach rechts“ | Verwendung beim Umschalten zwischen manuellem und automatischem Modus |
| Fehlerbildschirm | Fehlercode/Beschreibung/Zeitpunkt des Auftretens/Reset-Taste | DB1.FaultCode / DB1.FaultMsg |
| Parameterbildschirm | Überlast-Sollwert / Betriebszeit zurücksetzen / Passwort ändern | DB1.Overload_Set / DB1.Password |
4.2 Konfiguration der PROFINET-Kommunikation (Botou-Konfiguration)
// Netzwerkparameter der Gerätekonfiguration // 1. S7-1200 CPU 1212C // IP: 192.168.0.10 // Subnetzmaske: 255.255.255.0 // PROFINET-Gerätename: plc-hoist-01 // 2. KTP400 Basic HMI // IP: 192.168.0.20 // Subnetzmaske: 255.255.255.0 // Gerätename: hmi-hoist-01 // 3. HMI-Verbindungskonfiguration (in der HMI-Konfiguration einstellen) // Verbindungstyp: PROFINET (S7-1200) // HMI-Gerät: HMI_1 [192.168.0.20] // Steuerung: plc-hoist-01 [192.168.0.10] // Zugangspunkt: S7ONLINE // Subnetz: PN/IE_1 // 4. Beispiel für eine HMI-Variablenverbindung (SPS-Tag → HMI-Tag) // "DB1".FaultCode → "FaultCode" (Int, Abtastrate 500 ms) // "DB1".Load_Current → "CurrentLoad" (Real, Abtastzyklus 200 ms) // "DB1".Status_Running → "IsRunning" (Bool, Abtastzyklus 100 ms)
V. Herunterladen und Debuggen des Programms
5.1 Schritte zum Herunterladen
// Download-Ablauf (TIA Portal V17) // 1. Das gesamte Projekt kompilieren (Project → Build → Rebuild All) // Sicherstellen, dass "0 errors, 0 warnings" angezeigt wird // 2. Zielgerät auswählen (Select target device) // Online-Zugriff → SPS erkannt → IP-Adresse 192.168.0.10 zugewiesen // 3. Hardware-Konfiguration herunterladen (Download HW config) // Die SPS wird automatisch neu gestartet (ca. 15 Sekunden) // 4. Softwareprogramm herunterladen (Download SW) // "Download all blocks" auswählen → Vorhandenes Programm überschreiben // 5. Online-Überwachung (Go online) // Auf das "Brillen"-Symbol klicken, um in den Online-Überwachungsmodus zu wechseln // Beobachten, ob die grünen Pfade im Kontaktplan wie erwartet durchgeschaltet sind // 6. Variablen erzwingen (Force table) – für die Fehlersuche // Hiermit kann der DI-Zustand erzwungen werden, ohne dass die Tasten tatsächlich betätigt werden müssen // Beispiel: Erzwingen Sie %I0.0=1, um das Drücken der Auf-Taste zu simulieren // Hinweis: Löschen Sie nach Abschluss der Fehlersuche unbedingt alle erzwungenen Werte
5.2 Checkliste für die Inbetriebnahme
☐ Not-Aus betätigt → Alle KM-Ausgänge auf 0, Alarmausgang Q0.4 auf 1
☐ Not-Aus-Rücksetzung + Endschalter nicht ausgelöst → SB1 drücken → KM1 zieht an → Motor fährt nach oben
☐ SB1 freigeben → KM1 freigeben → Motor stoppt
☐ Bei steigendem Wert wird die Obergrenze von SQ1 ausgelöst → KM1 wird sofort abgeschaltet
☐ Wenn KM1 einrastet, wird SB2 betätigt → KM2 darf nicht einrasten (Überprüfung der Verriegelung)
☐ Überlastsignal eingeht → Anfahren gesperrt, nur Abfahren möglich
☐ Häufige Ein- und Ausschaltintervalle < 500 ms → Keine Reaktion beim zweiten Mal (Verzögerungsschutz funktioniert ordnungsgemäß)
☐ Auf dem HMI-Fehlerbildschirm werden der korrekte Fehlercode und die korrekte Fehlerbeschreibung angezeigt
☐ Keine Unterbrechung der PROFINET-Kommunikation (kein Alarmfenster auf dem HMI)
Häufig gestellte Fragen
Frage: Um wie viel steigen die Kosten, wenn die Relaissteuerung durch eine SPS ersetzt wird?
Antwort: Bei der Umstellung eines einzelnen Elektrohebezeugs von Relaissteuerung auf SPS-Steuerung steigen die Hardwarekosten um etwa 1.500 bis 2.500 Yuan (S7-1200-CPU ca. 800 Yuan + Erweiterungsmodul ca. 600 Yuan + HMI ca. 1.200 Yuan + Zubehör ca. 300 Yuan). Bei der zentralen Steuerung mehrerer Geräte sinken die Kosten pro Gerät jedoch deutlich – in einem Fall mit 68 Geräten stiegen die Kosten für die SPS-Steuerung pro Gerät nur um etwa 350 Yuan. Zudem verkürzt die SPS-Lösung die Zeit für die Fehlerbehebung bei 40%, ermöglicht Fernüberwachung und vorbeugende Wartung, sodass die langfristigen Betriebs- und Wartungskosten sowie die Ausfallverluste weit unter denen der Relaissteuerung liegen.
Frage: Kann man ein Programm für einen Elektrohebezug auch nur mit Kontaktplänen schreiben, wenn man die Programmiersprache SCL nicht beherrscht?
Antwort: Das ist durchaus möglich. Die in diesem Artikel behandelten Modelle FC100, FC200 und FC300 wurden alle in LAD programmiert; lediglich für die Fehlerdiagnose des FC400 wurde SCL verwendet. Die Fehlerdiagnose lässt sich zwar auch mit LAD-Zustandswörtern und Vergleichsbefehlen realisieren, doch SCL ist bei der Zeichenfolgenverarbeitung und bei mathematischen Operationen übersichtlicher. Für rein technische Anwendungsszenarien ist der Schaltplan-Stil der LAD-Sprache für Elektriker leichter verständlich. Es wird daher empfohlen, die Kernlogik in LAD und die Zusatzfunktionen in SCL zu programmieren.
Frage: Wie entscheidet man sich zwischen einer SPS-Steuerung und einem Frequenzumrichter?
Antwort: Die SPS-Lösung dient der Logiksteuerung (Ein-/Aus-Steuerung), die Frequenzumrichter-Lösung der Drehzahlregelung (Drehzahlsteuerung). Es handelt sich hierbei nicht um eine Entweder-oder-Entscheidung. Die ausgereifteste Lösung für Elektrohebezeuge ist die Kombination aus ”SPS + Frequenzumrichter”: Die SPS übernimmt die Logik (Not-Aus/Endschalter/ Verriegelung/Alarm), während der Frequenzumrichter für den Motorantrieb (Sanftanlauf/Drehzahlregelung/Bremsung) zuständig ist. Bei Hebezeugen über 5 t empfiehlt sich der Einsatz eines Frequenzumrichters, um eine langsame und präzise Positionierung zu erreichen. Bei Hebezeugen unter 5 t mit einseitiger Nutzung ist die Lösung „SPS + Schütz“ völlig ausreichend.
Frage: Was ist die bessere Wahl: S7-1200 oder S7-200 SMART?
Antwort: Die S7-200 SMART ist kostengünstiger (CPU ca. 500 Yuan) und eignet sich für die Einzelmaschinensteuerung von bis zu 10 Maschinen. Die S7-1200 unterstützt PROFINET-Echtzeit-Ethernet und eignet sich für die Vernetzung mehrerer Maschinen sowie den Anschluss an MES-/SCADA-Systeme. Empfehlung: Einzelmaschine/kleine Stückzahlen → S7-200 SMART (kostengünstig); zentrale Überwachung mehrerer Maschinen → S7-1200 (vernetzt); PROFINET-Kommunikation mit Frequenzumrichtern erforderlich → zwingend S7-1200. Die Programmieransätze beider Plattformen sind identisch, sodass die Kosten für die Programmübertragung gering sind.