Ansteuerung einer Schrittmotor-Achse mit Siemens SIMATIC S7-300 SPS: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 82: Zeile 82:
*M2-Motor: Schrittmotor
*M2-Motor: Schrittmotor
*M3-Motor: Schrittmotor
*M3-Motor: Schrittmotor
 
[[https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/Automatisierung_SPS/Projektdateien/Schaltplan/Schaltplan.vsdx Schaltplan-Originaldatei]]
[[Datei:https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/Automatisierung_SPS/Projektdateien/Schaltplan/Schaltplan.vsdx|mini|Schaltplan der Achsenansteuerung mittels SPS]]


==Dimensionierung der Ausgangssignale==
==Dimensionierung der Ausgangssignale==

Version vom 1. Februar 2017, 22:06 Uhr

Einleitung

Im Rahmen des Studiengangs Mechatronik der Hochschule Hamm-Lippstadt wird im 7. Fachsemester das Praktikum Produktionstechnik angeboten. Dieses Praktikum ist Teil des Fach-Moduls Global Production Engineering. In diesem Praktikum geht es um die Verwirklichung eines mechatronischen Produktionssystems (MPS) mittels Speicher Programmierbarer Steuerung (SPS), sowie die Ansteuerung von 3 Schrittmotor-Achsen im Rahmen des Hauptprojektes "Aufbau einer 3-D-Bearbeitungsmaschine" siehe linker Bereich des oberes Bildes.

Das Thema Ansteuerung einer Schrittmotor-Achse mit Siemens SIMATIC S7-300-CPU313C ist ein Teilthemengebiet des Projekts 3-D-Bearbeitungsmaschine_(Projekt_des_Schwerpunkts_GPE_im_Studiengang_MTR) und wurde von Stefan Schweins, Jonas Rüschenschmidt, sowie im darauffolgenden Jahr von Hendrik Pabst und Ziad Abuelkhair bearbeitet. Im Anschluss haben Pascal Siekmann und Gerhard Dick das Projekt fortgeführt.

Aufgabenstellung

Die Aufgabe des Praktikums war es, eine 3-D Bearbeitungsmaschine zu konstruieren und drei Achsen mit verschiedener Steuerungshardware anzusteuern. Ebenfalls sollten Bearbeitungskoordinaten für Werkstücke übermittelt werden können.

Die Aufgabe bestand darin, die Ansteuerung einer Zahnriemenachse mit Schrittmotor durch den Einsatz von einer speicherprogrammierbaren Steuerung, - kurz SPS, SIMATIC S7-CPU300-313C des Unternehmens Siemens zu realisieren.

Zur Ansteuerung der Schrittmotoren kommen GeckoDrive-Schrittmotortreiber zum Einsatz. Die Aufgabenstellung gliedert sich in folgende Teilaufgaben:

  • Aufbau
    • Einlesen und Einregeln der Soll-Position mittels RS232-Schnittstelle
    • Hardwareanalyse und Hardwareaufbau sowie Hinzunahme von Pulldown-Widerständen für die Endschaltersteuerung
    • Kabelfertigung
  • Test der Ansteuerung
    • Ausgabe eines digitalen Signals am Ausgang der SPS
  • Leistungsstufe ansteuern
    • Programmierung
    • Test mit abgeschraubter Verfahreinheit
    • Test und Inbetriebnahme der Endschalter
    • Dateneingabe über Arduino-Monitor
    • Achsenansteuerung für mehrere Achsen duplizieren und einlesen einer definierten Stringfolge
  • Test mit Steuerungsalgorithmus
    • Kommunikation mit Matlab-Steuerungsalgorithmus testen
    • Programmier-Review

Vewendete Hardware

  • SIEMENS Hutschiene
  • SIMATIC PS307
  • SIMATIC S7-300-CPU313C
  • SIMATIC CP340
  • GeckoDrive G201x
  • Leitung 25-polig
  • Stecker Sub-D 25-polig
  • Endschalter
  • Widerstände 7,2 kOhm – 8,4 kOhm
  • Pulldown-Widerstände


Verwendete Software

Siemens Simatic Step7 Manager

Eine Entwicklungsumgebung von Siemens zur Programmierung von Siemens SPS-Steuerungen.


Siemens Lizenzmanager

Die Verwendung von Siemens Step 7 ist nur unter Nutzung eines aktuellen Lizenzkeys möglich. Dieser muss zunächst über den Siemens Lizenzmanager in das Softwarepaket eingebunden werden.


HTerm

Die kostenfreie Software HTerm ermöglicht eine serielle Kommunikation über den RS232-Bus. Mit dieser wurde die serielle Schnittstelle eingerichtet und auf Ihre Funktion geprüft.


Versuchsaufbau

Verschaltung der Bauelemente

Abbildung 2: SPS-Ansteuerungsschaltplan

Um alle Hardwarekomponenten miteinander verbinden zu können, wurde ein Schaltplan erstellt, welcher die Verschaltung aller Bauteile veranschaulicht. Erläuterung des Schaltplans:

  • Power Supply 307: Stromversorgung der SPS-Steuerung
  • SPS-CPU-313C: CPU-Einheit der SPS-Steuerung
  • DI16/DO16xDC24V: Digitale Ein- und Ausgänge der SPS-Steuerung
  • Power Supply: Stromversorgung der Schrittmotortreiber
  • GD1-GeckoDrive: GeckoDrive G201X - Schrittmotortreiber
  • GD2-GeckoDrive: GeckoDrive G201X - Schrittmotortreiber
  • GD3-GeckoDrive: GeckoDrive G201X - Schrittmotortreiber
  • M1-Motor: Schrittmotor
  • M2-Motor: Schrittmotor
  • M3-Motor: Schrittmotor

[Schaltplan-Originaldatei]

Dimensionierung der Ausgangssignale

Um ein Schritt - bzw. Richtungs - Signal an eine Achse zu übertragen ist es notwendig die Signale an den Schrittmotortreiber zu senden, welcher den Schrittmotor ansteuert. Die Signale des SPS Moduls werden mit 24V ausgegeben, diese Spannung ist jedoch als Eingangsspannung für das GeckoDrive nicht geeignet, da dieser mit einer Spannung von 3.3V bis 5.5V arbeitet. Um zu gewährleisten, dass das GeckoDrive nicht beschädigt wird und die Signale richtig verarbeitet werden können, mussten die ensprechenden Ausgangssignale der S7 -300 neu dimensioniert werden. Hierfür wurden Widerstände zwischen den digitalen Ausgang des Step - bzw. Direction - Pins und den Eingang der jeweiligen Pins am GeckoDrive geschaltet. Um die Widerstande richtig bestimmen zu können, wurden Sie durch folgende Berechnung festgelegt:

  • Spannung der digitalen Ausgänge der SPS = 24V
  • Benötigte Spannung des GeckoDrive Direction-Pins = 3,3V bis 5,5V
  • Benötigte Spannung des GeckoDrive Step-Pins = 3,3V bis 5,5V
  • Stromstärke der GeckoDrive-Pins = 2,5mA (Datenblatt GeckoDrive)


R= U/I Ohmsches Gesetzt

R = (24V - 3,3V)/2,5mA = 8,2kΩ

R = (24V - 5,5V)/2,5mA = 7,4kΩ

Somit müssen die zwischengeschalteten Widerstände zwischen 7,4kΩ und 8,2kΩ liegen.

Versuchsdurchführung

Nachdem alle Hardwarekomponenten miteinander verschaltet und die benötigten Ausgangssignale mittels Widerständen dimensioniert wurden, konnte ein Großteil des Programmes zur Steuerung der Achsen geschrieben werden.

Grundkonfiguration von Step 7

Abbildung 4: Einrichtungsassistent in Step 7
Abbildung 4: Öffnen der Hardware-Konfiguration
Abbildung 4: Hardware-Update installieren
Abbildung 4: Einbinden der erforderlichen Hardware
Abbildung 4: Parametrieren der seriellen Schnittstelle
Abbildung 4: Erstellen einer Datenbank zur Speicherung von Daten
Abbildung 4: Anlegen von Datensätzen innerhalb einer Datenbank
Abbildung 4: Erstellen der Instanz-Datenbank für den Empfang der seriellen Daten
Abbildung 4: Erstellen einer Symboltabelle

Weil es zu Projektbeginn einige Schwierigkeiten bei Verbindungsherstellung der seriellen Datenverbindung und dem Auslesen der Daten gab, erfolgt an dieser Stelle eine Schritt-für-Schritt-Anleitung zur Grundkonfiguration des Systems.

  • Windows 7, 32 Bit benötigt, USB-Lizenz über Lizenz-Manager installieren
  • Installations-Assistent ausführen. Falls CPU nicht vorhanden, beliebige CPU auswählen
  • Hardware-Konfiguration öffnen, Hardware-Updates installieren, benötigte Hardware auswählen (wichtig: die Seriennummer muss genau übereinstimmen!)
  • Hardware-Konfiguration: PS307, CPU313C, CP340-RS232C
  • CP340 parametrieren -> Rechtsklick auf CP340 -> Objekteigenschaften -> Parameter -> ASCII-Kodierung einstellen, weitere Protokollparameter nach Klick auf das blaue Brief-Symbol (Baudrate, Datenbit-Länge, Parität) konfigurierbar
  • Speichern und übersetzen, Hardware-Konfiguration schliessen
  • OB1 öffnen, FB2 per Drag and Drop einfügen
  • Datenbausteine erstellen, Instanz-DB1 für eingehende Daten, globale DB20 zur Speicherung der Daten
  • Symboltabelle zur Verwaltung der Variablen erstellen

Ein erstes Programm zum Empfang von seriellen Daten

Beispielprogramm zum Empfang über serielle Schnittstelle und Extraktion eines Datensatzes

 AUF   "Daten"                     // Datenbaustein öffnen
 CALL  "P_RCV" , "FB 2 zugehörig"  // Serielle Schnittstelle empfangen und in Datenbaustein schreiben
   EN_R  :=TRUE
   R     :=M0.1
   LADDR :=256
   DB_NO :=20
   DBB_NO:=1
   NDR   :=M0.0
   ERROR :=M0.2
   LEN   :=MW28
   STATUS:=MW30
 // Zustandsbytes der seriellen Kommunikation
 U     M      0.0                  // Auftrag fertig ohne Fehler (1 Zyklus lang)
 S     A      4.0
 U     E      4.2                  // Ausgang rücksetzen
 R     A      4.0
 CALL  "MID"                       // Daten aus String extrahieren
   IN     :="Daten".Empfang        // Eingangsdatensatz
   L      :=5                      // Länge der einzulesenden Daten
   P      :=2                      // Startposition der einzulesenden Daten
   RET_VAL:="Daten".X              // Speichern der extrahierten Daten

Die extrahierten Daten (hier die Koordinaten der X-Achse) befinden sich nun im Datenbaustein DB20 und können im weiteren Programmzyklus verarbeitet werden.

Programmierung

Wie eine Siemens SPS funktioniert wird in dem Artikel Automatisierungssystem SPS SIMATIC S7-300 genauer beschrieben. Näheres zum verwendeten Kommunikationsmodul, CP340, ist in dem Artikel Serielle Kommunikation mit dem CP340-Modul zu finden.

Im Folgenden wird der aktuelle Programmstatus näher erläutert. Das Step7-Programm ist unter diesem Link im SVN hinterlegt: SPS-Programm.

Zykluszeit

Die Zykluszeit ist die Zeit, die das Betriebssystem für die Bearbeitung eines Programmdurchlaufes - d. h. eines OB 1-Durchlaufes - sowie aller in diesem Durchlauf untergebrachten Programmteile und Systemtätigkeiten. Diese Zeit wird überwacht. Die Zykluszeit je Schritt im Programm ist mit 2ms angegeben. Für folgendes Beispielprogramm wurde eine tatsächliche Zykluszeit von etwa 5,4ms ermittelt.

Abbildung 2: Beispielprogramm für einen Schrittbaustein
Abbildung 3: am Oszilloskop gemessene tatsächliche Zykluszeit


Diese Verzögerung wird durch unterschiedliche Einflussfaktoren verursacht. Im Folgenden werden die Wichtigsten genannt:

  • Grundlast (K)
  • Anzahl Bytes im Baugruppenträger 0 (A)
  • Anzahl Bytes im Baugruppenträger 1 bis 3 (B)
  • Verlängerung der Anwenderprogramm - Bearbeitungszeit

Das Betriebssystem Ihrer CPU führt neben der eigentlichen Abarbeitung des Anwenderprogramms noch weitere zeitgleiche Prozesse durch (z. B. Timerverwaltung des Kernbetriebssystems). Diese Prozesse verlängern die Bearbeitungszeit des Anwenderprogramms. Daher muss bei der Berechnung der Zykluszeit mit dem Bearbeitungszeit-Faktor multipliziert werden. Für CPU313C beträgt dieser Faktor 1,10.


Im Folgenden sind die Einflussfaktoren, die für die Berechnung der Zykluszeit notwendig sind, aufgelistet:

Konstante Anteile CPU313C_Bearbeitungszeit
K Grundlast 100µS
A je Byte in Baugruppenträger 0 35µS
B je Byte in Baugruppenträger1 bis 3 43µs


Die berechnete Zykluszeit ergibt sich aus der Summe aller folgenden Einflussfaktoren: Zykluszeit_verzögert(Z_ver)=(Z+A+B+K) * 1,10.

In dieser Formel ist A=0, weil im Versuchsaufbau der Baugruppenträger 0 nicht gebraucht wird. Der Faktor B wird mit 4 multipliziert, da man im Baugruppenträger 32 Bit(digitale Input und Output)= 4 Byte hat.

Daher lautet die Formel:

Zykluszeit_verzögert :Z_ver =(Z+B+K) * 1,10.

Z_ver=(2ms+(4 * 0,0043 ms)+100ms) * 1,10 = 5,192 ms


Je nach Programmablauf kann die Zykluszeit variieren. Dies wird verursacht durch:

  • bedingte Befehle
  • bedingte Bausteinaufrufe
  • unterschiedliche Programmpfade
  • Schleifen usw.

Auswahl der Programmiersprache

Bei der Auswahl der Programmiersprache fiel die Wahl auf AWL. Diese ist zwar schwieriger zu Programmieren, bietet jedoch im Gegensatz zu KOP und FUP mehr Möglichkeiten in der Programmgestaltung. KOP und FUP stellen nur einen Bruchteil der in AWL verfügbaren Funktionen zur Verfügung. Im späteren Projektverlauf wurde zudem eine erste Achsansteuerung mit Graph-Schrittkettenprogrammierung erstellt.

Programmablaufplan

Abbildung 4: Programmablauf der SPS-Steuerung

Zur Planung der zu programmierenden Software wurde zunächst ein Programmablaufplan erstellt. Dieser stellt die Funktionsweise des SPS-Programmes dar und ist für die weitere Verwendung im SVN hinterlegt. SPS-Programm

Serielle Kommunikation mit CP340

Das Modul CP340 ermöglicht eine serielle Kommunikation über einen RS232-Bus. Über diesen Bus werden die Koordinaten vom Steuerungsalgorithmus an die SPS übertragen. Die Datenübertragung erfolgt als String im ASCII-Format. Bei der Konfiguration ist darauf zu achten, dass in den Einstellungen des CP340-Moduls die Datenübertragung auf das ASCII-Format eingestellt ist. Außerdem unterstützt die CP340 nur eine Baudrate bis 9600 Baud. Darauf ist bei der Verbindung zu Kommunikationsteilnehmern zu achten.

Der übertragene String ist wie folgt aufgebaut:

  • Referenzfahrt: U12345V12345W12345;
  • Koordinatenpunkt: X12345Y12345Z12345F12345;

Mittels der Referenzfahrt wird der Steuerung ein Referenzkoordinatenpunkt übermittelt, welcher die aktuellen Positionen der Achsen repräsentiert. Dieser muss zu Beginn jedes Fräsvorganges einmalig übermittelt werden um dem System seine Ursprungskoordinaten mitzuteilen. U repräsentiert hierbei die X-Achse, V die Y-Achse und W die Z-Achse. Die darauffolgenden Zahlen stehen für die Koordinaten der jeweiligen Achse in 1/100mm. Über den Koordinatenpunkt wird der Steuerung die nächste Zielkoordinate übermittelt. X, Y und Z repräsentieren die jeweilige Achse, F steht für den Vorschub. Auch hier beträgt die Maßeinheit 1/100mm.

 AUF   "Daten"
 CALL  "P_RCV" , "FB 2 zugehörig"    // serielle Daten epmfangen
   EN_R  :=TRUE
   R     :=M0.1
   LADDR :=256
   DB_NO :=20
   DBB_NO:=2
   NDR   :=M0.0
   ERROR :=M0.2
   LEN   :=MW28
   STATUS:=MW30
   // überprüfen, ob serieller Datentransfer fehlerfrei ist
   U     M      0.0                  // Auftrag fertig ohne Fehler (1 Zyklus lang)
   S     A      4.0
   U     E      4.2                  //Ausgang rücksetzen
   R     A      4.0

Verarbeitung der Koordinaten

  • Zu Beginn des Programmes wird überprüft, ob der empfangene String valide ist und es sich hierbei um eine Referenzfahrt oder einen anzusteuernden Koordinatenpunkt handelt.

 CALL  "MID"                       //1. Referenzwert extrahieren 
   IN     :="Daten".Empfang
   L      :=1
   P      :=1
   RET_VAL:="Daten".refWertX
 CALL  "EQ_STRNG"                  //prüfen ob 1. Referenzwert == "X"
   S1     :="Daten".refWertX
   S2     :="Daten".refVerglWertX
   RET_VAL:="istRefPosX"
 CALL  "MID"                       //2. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=7
   RET_VAL:="Daten".refWertY
 CALL  "EQ_STRNG"                  //prüfen ob 2. Referenzwert == "Y"
   S1     :="Daten".refWertY
   S2     :="Daten".refVerglWertY
   RET_VAL:="istRefPosY"
 CALL  "MID"                       //3. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=13
   RET_VAL:="Daten".refWertZ
 CALL  "EQ_STRNG"                  //prüfen ob 3. Referenzwert == "Z"
   S1     :="Daten".refWertZ
   S2     :="Daten".refVerglWertZ
   RET_VAL:="istRefPosZ"
 CALL  "MID"                       //4. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=19
   RET_VAL:="Daten".refWertF
 CALL  "EQ_STRNG"                  //prüfen ob 4. Referenzwert == "F"
   S1     :="Daten".refWertF
   S2     :="Daten".refVerglWertF
   RET_VAL:="istRefPosF"
 CALL  "MID"                       //1. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=1
   RET_VAL:="Daten".refWertU
 CALL  "EQ_STRNG"                  //prüfen ob 1. Referenzwert == "U"
   S1     :="Daten".refWertU
   S2     :="Daten".refVerglWertU
   RET_VAL:="istRefPosU"
 CALL  "MID"                       //2. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=7
   RET_VAL:="Daten".refWertV
 CALL  "EQ_STRNG"                  //prüfen ob 2. Referenzwert == "V"
   S1     :="Daten".refWertV
   S2     :="Daten".refVerglWertV
   RET_VAL:="istRefPosV"
 CALL  "MID"                       //3. Referenzwert extrahieren
   IN     :="Daten".Empfang
   L      :=1
   P      :=13
   RET_VAL:="Daten".refWertW
 CALL  "EQ_STRNG"                  //prüfen ob 3. Referenzwert == "W"
   S1     :="Daten".refWertW
   S2     :="Daten".refVerglWertW
   RET_VAL:="istRefPosW"
 U     "istRefPosU"                // Prüfe ob Datensatz Referenzfahrt ist
 U     "istRefPosV"
 U     "istRefPosW"
 CC    "Referenzfahrt"             // führe Referenzfahrt aus
 U     "istRefPosX"                // prüfe ob Datensatz Koordinatenfahrt ist
 U     "istRefPosY"
 U     "istRefPosZ"
 U     "istRefPosF"
 CC    "Koordinatenfahrt"          // führe Koordinatenfahrt aus
 U(                                // Prüfen, ob String nicht valide ist
 ON    "istRefPosX"
 ON    "istRefPosY"
 ON    "istRefPosZ"
 ON    "istRefPosF"
 )     
 U(    
 ON    "istRefPosU"
 ON    "istRefPosV"
 ON    "istRefPosW"
 )     
 CC    "Daten_fehlerhaft"          // Statusmeldung ausgeben

  • Referenzfahrt ausführen: Übertragene Koordinaten zur weiteren Verarbeitung in das Format Double-Integer umwandeln und als aktuelle Ist-Koordinaten für den nachfolgenden Zyklus speichern.

 R     A    124.1                  // Statusbit 1 rücksetzen
 R     A    124.2                  // Statusbit 3 rücksetzen
 S     A    124.0                  // Statusbit 0 setzen (Referenzfahrt)
 AUF   "Daten"                     // Datenbaustein öffnen
 AUF   "IST_Pos"
 CALL  "MID"                       //U-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=2
   RET_VAL:="Daten".X
 CALL  "STRNG_DI"                  //U-Koordinaten in Double-Integer parsen
   S      :="Daten".X
   RET_VAL:="IST_Pos".X            // U als Ist-Position X speichern
 CALL  "MID"                       //V-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=8
   RET_VAL:="Daten".Y
 CALL  "STRNG_DI"                  //V-Koordinaten in Double-Integer parsen
   S      :="Daten".Y
   RET_VAL:="IST_Pos".Y            // V als Ist-Position Y speichern
 CALL  "MID"                       //W-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=14
   RET_VAL:="Daten".Z
 CALL  "STRNG_DI"                  // W-Koordinaten in Double-Integer parsen
   S      :="Daten".Z
   RET_VAL:="IST_Pos".Z            // Z als Ist-Position Z speichern

  • Koordinatenfahrt: Koordinatendaten aus empfangenem String extrahieren und zur weiteren Verarbeitung in das Format Double-Integer umwandeln.

 R     A    124.0                  // Status-Bit 0 zurücksetzen
 R     A    124.2                  // Status-Bit 3 zurücksetzen
 S     A    124.1                  // Status-Bit 1 setzen (Koordinatenfahrt)
 AUF   "Daten"
 AUF   "IST_Pos"
 AUF   "SOLL_Pos"
 AUF   "DIFF_Strecke"
 CALL  "MID"                       // X-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=2
   RET_VAL:="Daten".X
 CALL  "STRNG_DI"                  // X-Koordinaten in Double-Integer parsen
   S      :="Daten".X
   RET_VAL:="SOLL_Pos".X           // Soll-Position speichern
 CALL  "MID"                       // Y-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=8
   RET_VAL:="Daten".Y
 CALL  "STRNG_DI"                  // Y-Koordinaten in Double-Integer parsen
   S      :="Daten".Y
   RET_VAL:="SOLL_Pos".Y           // Soll-Position speichern
 CALL  "MID"                       // Z-Koordinaten extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=14
   RET_VAL:="Daten".Z
 CALL  "STRNG_DI"                  // Z-Koordinaten in Double-Integer parsen
   S      :="Daten".Z
   RET_VAL:="SOLL_Pos".Z           // Soll-Position speichern   
 CALL  "MID"                       // Vorschub extrahieren
   IN     :="Daten".Empfang
   L      :=5
   P      :=20
   RET_VAL:="Daten".Vorschub
 CALL  "STRNG_DI"                  // Vorschub in Double-Integer parsen
   S      :="Daten".Vorschub
   RET_VAL:="SOLL_Pos".F           // Soll-Vorschub speichern

  • Aus der Differenz zwischen Soll- und Ist-Koordinate wird die Verfahrstrecke je Achse ermittelt. Das Vorzeichen der Verfahrstrecke stellt die Richtung der jeweiligen Achse dar.

 L     "SOLL_Pos".X                // Subtrahiere Soll-Position mit Ist-Position
 L     "IST_Pos".X
 -D    
 T     "DIFF_Strecke".X            // Differenz-Strecke speichern
 L     "SOLL_Pos".Y                // Subtrahiere Soll-Position mit Ist-Position
 L     "IST_Pos".Y
 -D    
 T     "DIFF_Strecke".Y            // Differenz-Strecke speichern
 L     "SOLL_Pos".Z                // Subtrahiere Soll-Position mit Ist-Position
 L     "IST_Pos".Z
 -D    
 T     "DIFF_Strecke".Z            // Differenz-Strecke speichern

  • Am Ende des Programmzyklus werden die Soll-Koordinaten als Ist-Koordinaten für den darauffolgenden Zyklus gespeichert.

 L     "SOLL_Pos".X                // Soll-Position laden in Datenbaustein für Ist-Position schreiben für nächsten Zyklus
 T     "IST_Pos".X
 L     "SOLL_Pos".Y                // Soll-Position laden in Datenbaustein für Ist-Position schreiben für nächsten Zyklus
 T     "IST_Pos".Y
 L     "SOLL_Pos".Z                // Soll-Position laden in Datenbaustein für Ist-Position schreiben für nächsten Zyklus
 T     "IST_Pos".Z

  • Schrittkette zur Regelung des Schritttaktes aufrufen

 CALL  "Schrittmotortakt" , "Taktzeiten"
   OFF_SQ  :=
   INIT_SQ :=M0.0
   ACK_EF  :=
   S_PREV  :=
   S_NEXT  :=
   SW_AUTO :=
   SW_TAP  :=
   SW_MAN  :=
   S_SEL   :=
   S_ON    :=
   S_OFF   :=
   T_PUSH  :=
   S_NO    :=
   S_MORE  :=
   S_ACTIVE:=
   ERR_FLT :=
   AUTO_ON :=
   TAP_ON  :=
   MAN_ON  :=

Ansteuerung der Achsen

Abbildung 5: Schrittkette des Positionieralgorithmus

Die CPU313C verfügt über einen Positionierbaustein (SFB 46) zur Ansteuerung von Schrittmotortreibern. Dieser ist jedoch nur bedingt für die Aufgabenstellung geeignet, weil er nur über 2 Vorschub-Modi verfügt. Die Realisierung eines dynamischen Programmgesteuerten Vorschubs ist damit also nicht möglich. Um diese softwaregesteuerte Vorschubregulierung zu realisieren muss ein eigener Positionieralgorithmus entwickelt werden. Hierfür ist die Schrittkettenprogrammierung in Graph sehr hilfreich. Der Positionieralgorithmus wurde in der Schlussphase des Projektes angefangen und muss noch vollendet werden. Im jetzigen Projektstatus ist er nur für eine Achse ausgelegt und verfügt noch nicht über eine dynamische Vorschub-Regelung.

Das Schrittkettenprogramm funktioniert momentan folgendermaßen:

  • Ausgang 124.3 auf High setzen
  • 100ms warten (hier dynamischen Vorschub ansetzen)
  • Ausgang 124.3 auf Low setzen
  • 100ms warten (hier dynamischen Vorschub ansetzen)
  • wenn Soll-Position erreicht, Schrittkette beenden
  • ansonsten Schrittzähler inkrementieren und Schrittkette erneut ausführen

Fazit, Zusammenfassung und Ausblick

Das Projekt Ansteuerung einer Schrittmotor-Achse mit Siemens SIMATIC S7-300 SPS stellte eine spannende Herausforderung dar und gewährte tiefen Einblick in die Entwicklung mechatronischer Systeme mit SPS-Steuerungen. Die Einarbeitung in die Siemens-Software und die Programmierung der SPS-Software erfordert gründliche Recherchen und intensive Einarbeitung in das Thema. Dabei sind nicht nur Programmierkenntnisse sondern auch Kenntnisse in der Elektrotechnik notwendig. Die Programmierumgebung Step 7 ist bietet vielfältige Möglichkeiten zur Programmierung von SPS-Steuerungen. Mit seinen 3, auf unterschiedliche Anwender zugeschnittenen Programmiersprachen, zielt Step 7 auf breites Feld von Entwicklern ab.


Die Aufgabenstellung des Praktikums konnte zu einem Großteil erfüllt werden. Für weitere Schritte muss der Positionieralgorithmus vollendet werden. Zur erfolgreichen Ansteuerung muss das Programm noch um einen Positionierbaustein (SFB 46) oder einen eigenen Ansteuerungsalgorithmus (siehe 6.11) erweitert werden. Der Quellcode ist für nachfolgende Projektteams kommentiert und die Projektdateien sind SVN hinterlegt.


Weblinks und Literatur

Selbstlern Unterlagen

SIMENS AG: „Ausbildungsunterlage für die durchgängige Automatisierungslösung Totally Integrated Automation (T I A) “, unter: http://w3.siemens.com/mcms/sce/de/fortbildungen/ausbildungsunterlagen/classic-module/tabcardseiten/documents/prozessvisualisierung/f01_protool_op7.pdf (abgerufen am 13.01.2017). Programmieren: Erste Schritte und Übungen mit STEP 7

SIMENS AG: „Erste Schritte und Übungen mit STEP 7 “, unter: http://www.steuerungstechnik-heller.de/Steuerungstechnik/Dokumentation/Dokumentation/S7gsv54_d.pdf (abgerufen am 13.01.2017).

Weitere Links im HSHL-Wiki

Bildquellen

  • Abbildung 1 : Siekmann, Pascal (2017): Labor: Mechatronik Prod. System, Bild mit 3-D Bearbeitungsmaschine "Fräse".
  • Abbildung 2 : Siekmann, Pascal (2017): SPS-Ansteuerungsschaltplan
  • Abbildung 3 : Abuelkhairam, Ziad(2015): Beispielprogramm für einen Schrittbaustein
  • Abbildung 4 : Abuelkhairam, Ziad(2015): Oszilloskop gemessene tatsächliche Zykluszeit
  • Abbildung 5 : Dick, Gerhard (2017):Programmablauf der SPS-Steuerung

Korrektur/Rückmeldungen