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

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(211 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:Sps steuerung cpu313c.jpg|mini|400px|right|CPU313C auf Hutschiene<ref name="CPU313C">CPU313C auf Hutschiene: ''Pascal Siekmann (2017)'': Eigene Darstellung</ref>]]
[[Kategorie:Automatisierungstechnik]]
[[Kategorie:2019/ 2020_WS_MTR7_Praktikum_GPE]]
[[Kategorie:SPS]]


[[Kategorie: Automatisierungstechnik]][[Kategorie:2013_WS_MTR7_Praktikum_GPE]][[Kategorie:SPS]]
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
'''Autoren:''' [[Benutzer:Pia_Dommen| Pia Dommen]]; [[Benutzer:Luca_Riering| Luca Riering]]<br/>
 
→ zurück zur Übersicht: [[3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)]]
 
Projektdateien: [[Datei:CNCS7300 Siemens SPS CNC.zip]]
 
Abschlusspräsentation: [[Datei:CNCS7300 Abschlusspräsentation SPS Siemens.pptx]]
 
[[Datei:Sps steuerung cpu313c.jpg|mini|800px|right|CPU313C auf Hutschiene]]


= Einleitung =
= 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".  
Im Rahmen des Studiengangs Mechatronik der Hochschule Hamm-Lippstadt wird im 7. Fachsemester das Praktikum Produktionstechnik angeboten. Dieses Praktikum ist Teil des Moduls Global Production Engineering. In diesem Praktikum geht es um die Verwirklichung eines mechatronischen Produktionssystems (MPS) mittels Speicher Programmierbarer Steuerung (SPS), sowie der Ansteuerung von drei Schrittmotor-Achsen im Rahmen des Hauptprojektes "Aufbau einer 3-D-Bearbeitungsmaschine".  
 
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)]].
 
Die Bearbeitungsreihenfolge in diesem Projekt lautet wie folgt:
 
1. [[Benutzer:Stefanschweins| Stefan Schweins]] und [[Benutzer:Jonasrueschenschmidt| Jonas Rüschenschmidt]] (Step 7)
 
2. [[Benutzer:Hendrik Pabst| Hendrik Pabst]] und [[Benutzer:Ziad_Abuelkhair| Ziad Abuelkhair]] (Step 7)
 
3. [[Benutzer:Pascal_Siekmann| Pascal Siekmann]] und [[Benutzer:Gerhard_Dick| Gerhard Dick]] (Step 7)


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 [[Benutzer:Stefanschweins| Stefan Schweins]], [[Benutzer:Jonasrueschenschmidt| Jonas Rüschenschmidt]], sowie im darauffolgenden Jahr von [[Benutzer:Hendrik Pabst| Hendrik Pabst]] und [[Benutzer:Ziad_Abuelkhair| Ziad Abuelkhair]]  bearbeitet. Im Anschluss haben [[Benutzer:Pascal_Siekmann| Pascal Siekmann]] und [[Benutzer:Gerhard_Dick| Gerhard Dick]] das Projekt fortgeführt.
4. [[Benutzer:Pia Dommen| Pia Dommen]] und [[Benutzer:Luca Riering| Luca Riering]] (TIA Portal)


= Aufgabenstellung =
= Aufgabenstellung =
Zeile 13: Zeile 34:
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 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.
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.


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


Zeile 29: Zeile 49:
** Programmierung
** Programmierung
** Test mit abgeschraubter Verfahreinheit
** Test mit abgeschraubter Verfahreinheit
** Test und Inbetriebnahme der Endschalter
** Dateneingabe über Arduino-Monitor
** Achsenansteuerung für mehrere Achsen duplizieren und einlesen einer definierten Stringfolge
** Achsenansteuerung für mehrere Achsen duplizieren und einlesen einer definierten Stringfolge


Zeile 37: Zeile 55:
** Programmier-Review
** Programmier-Review


=Vewendete Hardware=
* Dokumentation in SVN und Wiki nach dem V-Modell:
 
{| class="wikitable"
| [[Datei:CNCS7300 V-Modell.png|400px|thumb|left| V-Modell]]
[[Datei:CNCS7300 Abschlusspräsentation SPS Siemens.pptx]]
|}
 
=Anforderungsdefinition=
 
Bei der Anforderungsdefinition wurde sich zunächst einmal in das Thema und in die Aufgabenstellung hereingearbeitet. Hierzu sind erste Informationen zu den einzelnen Komponenten gesammelt worden und erste Gedanken zu der Umsetzung wurden im Team besprochen. Auch sind in dieser Phase Absprachen mit dem Auftraggeber erfolgt und es wurde ein Budget festgelegt, über das in diesem Projekt verfügt werden kann.
 
Zusätzlich sind in dieser ersten Projektphase die Anforderungsliste und eine Einkaufsliste erstellt worden. Die Anforderungsliste wurde hier in Excel verschriftlicht und mit Terminen versehen, damit am Ende des Projektes überprüft werden kann, ob alle Punkte der Anforderungen eingehalten worden sind.
 
SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/01_Anforderungsdefintion/Anforderungsliste_SPS_Siemens.xlsx Anforderungsliste]
 
=Funktionaler Systementwurf=
 
Bei der Erstellung des funktionalen Systementwurfes ist eine grobe Funktion des Projektes festgelegt worden und diese wurde mittels eines [[:Datei:CNCS7300 Funktionaler-Systementwurf.PNG|Schaubildes]] veranschaulicht. Dieser Systementwurf ist zunächst lösungsneutral und stellt zunächst nur eine grobe Richtung dar.
 
{| class="wikitable"
| [[Datei:CNCS7300 Funktionaler-Systementwurf.PNG|800px|thumb|left|Funktionaler Systementwurf]]
[[Datei:S7300 Funktionaler-Systementwurf.pptx]]
|}
 
SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/02_Funktionaler_Systementwurf/Funktionaler-Systementwurf.pptx Funtionaler-Systementwurf.pptx]
 
=Technischer Systementwurf=
 
In dem nächsten Schritt, bei der Erstellung des technischen Systementwurfes ist der funktionale Systementwurf dann überarbeitet worden und spezifiziert worden. Dieses [[:Datei:CNCS7300 Technischer-Systementwurf.PNG|Schaubild]] zeigt die Zerlegung des Systems in einzelne Funktionsbausteine und auch das Zusammenwirken der einzelnen Schnittstellen.
 
{| class="wikitable"
| [[Datei:CNCS7300 Technischer-Systementwurf.PNG|800px|thumb|left|Technischer Systementwurf]]
[[Datei:S7300 Technischer-Systementwurf.pptx]]
|}
 
SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/03_Technischer_Systementwurf/Technischer-Systementwurf.pptx Technischer-Systementwurf.pptx]
 
=Komponentenspezifikation=
 
Nachdem die beiden Systementwürfe festgelegt worden sind, wird sich genauer mit den einzelnen Komponenten beschäftigt. Hierzu wird in Datenblättern der Hard-/Softwarekomponenten nachgeschlagen. Es wird sich auch in das Programm TIA-Portal eingearbeitet
 
Die verschiedenen Komponenten lauten:
 
* SIEMENS Hutschiene
* SIEMENS Hutschiene
* SIMATIC PS307
* SPS-Netzteil SIMATIC PS307 [https://asset.conrad.com/media10/add/160267/c1/-/de/000513201DS01/datenblatt-513201-siemens-simatic-ps307-24-v5-a-hutschienen-netzteil-din-rail-24-vdc-5-a-120-w-1-x.pdf Datenblatt]
* SIMATIC S7-300-CPU313C
* Speicherprogrammierbare Steuerung SIMATIC S7-300-CPU313C SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Allgemein/Literatur/Siemens%20SIMATIC/s7300_cpu_31xc_and_cpu_31x_operating_instructions_de-DE_de-DE.pdf Datenblatt]
* SIMATIC CP340
* Kommunikationsmodul SIMATIC CP340 SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Allgemein/Literatur/Siemens%20SIMATIC/s7300_cp340_manual_de_de-DE.pdf Datenblatt]
* GeckoDrive G201x
* Schrittmotortreiber GeckoDrive G201x SVN: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Allgemein/Literatur/Gecko%20Drive/ Datenblätter]
* Schrittmotor Igus NEMA 23 [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Allgemein/Literatur/Igus%20Antriebe/ Datenblätter]
* Leitung 25-polig
* Leitung 25-polig
* Stecker Sub-D 25-polig
* Stecker Sub-D 25-polig
* Endschalter
* Widerstände 1 kOhm
* Widerstände 7,2 kOhm – 8,4 kOhm
* Widerstände 10 kOhm
* Pulldown-Widerstände
* Vishay Optokoppler Phototransistor CNY17-3 DIP-6 Transistor mit Basis DC [https://www.vishay.com/docs/83606/cny17.pdf Datenblatt]
* Mean Well DR-15-5 Hutschienen-Netzteil (DIN-Rail) 5 V/DC 2.4 A 12 W 1 x [https://asset.conrad.com/media10/add/160267/c1/-/en/001297353DS01/datenblatt-1297353-mean-well-dr-15-5-hutschienen-netzteil-din-rail-5-vdc-24-a-12-w-1-x.pdf Datenblatt]
 
SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/04_Komponentenspezifikation/Komponentenspezifikation.xlsx Komponentenspezifikation.xlsx]
 
=Entwicklung=


Wie eine Siemens SPS funktioniert wird in dem Artikel [[Automatisierungssystem SPS SIMATIC S7-300|Automatisierungssystem SPS SIMATIC S7-300]] genauer beschrieben.
Im Folgenden wird der aktuelle Programmstatus näher erläutert. Das Programm ist unter diesem Link im SVN hinterlegt:


=Verwendete Software=
SVN-Ordner: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/05_Entwicklung/Steuerungsprogramm/ SPS-Programm]
 
== Programmablaufplan ==
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.
 
{| class="wikitable"
| [[Datei:CNCS7300 Programmablaufplan.PNG|800px|thumb|left|Programmablaufplan]]
[[Datei:S7300 Programmablaufplan.pptx]]
|}
SVN-Download: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/05_Entwicklung/Steuerungsprogramm/Programmablaufplan.pptx Programmablaufplan.pptx]


== Projektierung im TIA V15.1 ==


== Siemens Simatic Step7 Manager ==
===Erstellung des Projektes im TIA-Portal V15.1===
Eine Entwicklungsumgebung von Siemens zur Programmierung von Siemens SPS-Steuerungen.


Nach dem unter „Neues Projekt erstellen“ ein Projekt angelegt wurde, öffnet sich das Fenster „Erste Schritte“. In diesem Fenster werden diverse Auswahlmöglichkeiten für den Beginn des Projektes angeboten. In den meisten Fällen ist es am sinnvollsten damit anzufangen die Hardware anzulegen und zu parametrieren. Mit „Ein Gerät konfigurieren“ öffnet sich die passende Oberfläche, „Geräte & Netze“. In diesem Fenster kann über die Beschreibung und die Artikel-Nummer die vorhandene Hardware ausgewählt und in der passenden Version dem Projekt hinzugefügt werden.


== Siemens Lizenzmanager ==
Die folgenden Bilder veranschaulichen das Vorgehen:
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.


{| class="wikitable"
| [[Datei:CNCS7300 ErstellungProjektTIAPortal 1.PNG|800px|thumb|left|Neues Projekt erstellen]]
|-
| [[Datei:CNCS7300 ErstellungProjektTIAPortal 2.PNG|800px|thumb|left|Erste Schritte]]
|-
| [[Datei:CNCS7300 ErstellungProjektTIAPortal 3.PNG|800px|thumb|left|Neues Gerät hinzufügen]]
|}


== HTerm ==
===Anlegen und Parametrieren von Hardware===
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.


Im Projekt wird in der „Projektnavigation“ unter „Gerätekonfiguration“ die Hardware angezeigt ([[:Datei:CNCS7300 HardwareParametrierenundAnlegen.PNG|Abbildung CP340 Parameter]]). Mit der Anwahl einer Baugruppe, erscheint ein Eigenschaftsfenster. In diesem Projekt besteht die Hardwarekonfiguration aus der S7-300 PLC und dem CP340-Modul zur Kommunikation über RS-232. Im Reiter "Allgemein" ist das Kommunikationsprotokoll des Moduls zu parametrieren. Zu diesen Parametern gehören auch die E/A-Adressen. Diese können über "Eigenschaften" -> "Allgemein" -> "E/A-Adressen", sowohl bei der SPS als auch beim Kommunikationsmodul, eingestellt werden. Folgende Abbildung verdeutlichen den Vorgang:


=Versuchsaufbau=
{| class="wikitable"
| [[Datei:S7300 E A Adressen CPU.PNG|800px|thumb|E/Adressen CPU]]
| [[Datei:S7300 E A Adressen CM.PNG|800px|thumb|E/Adressen CM]]
|}


Hier wird der zu verwendende Speicherbereich der PLC ausgewählt. Die Empfangenen oder zu sendenden Daten werden in diesem Bereich gespeichert und/oder ausgelesen. Zu beachten ist, dass bei diesem Modul die Baudrate auf 9600 festgelegt ist und nicht verändert werden kann. Bei der Parametrierung der PLC ist zu erwähnen, dass die PLC zwei integrierte IO-Karten verbaut hat. Der PLC muss eine IP-Adresse gegeben werden und den IO-Karten muss genau wie dem CP 340 Modul ein Speicherbereich zugeordnet werden.


==Verschaltung der Bauelemente==
{| class="wikitable"
[[Datei:Schaltplan_SIEKMANN_DICK.png|mini|Abbildung 2: SPS-Ansteuerungsschaltplan]]
| [[Datei:CNCS7300 HardwareParametrierenundAnlegen.PNG|800px|thumb|left|CP340 Parameter]]
[[Datei:platine_sps.jpg|thumb|mini|Platine zur Verbindung der SPS mit Schaltschrank]]
|}
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
[https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/Automatisierung_SPS/Projektdateien/Schaltplan/Schaltplan.vsdx Schaltplan-Originaldatei]


Im letzten Praktikumstermin wurde eine Platine gefertigt, die eine einfache Verbindung über ein D-SUB 25-poliges Kabel ermöglicht.
===Aufbau der Kommunikation mit dem CP 340 Kommunikationsmodul===


==Dimensionierung der Ausgangssignale==
Nachdem das Modul der Kommunikation entsprechend parametriert worden ist, muss die Kommunikation in der PLC angelegt werden.
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:
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.


*Spannung der digitalen Ausgänge der SPS = 24V
Der übertragene String ist wie folgt aufgebaut:
*Benötigte Spannung des GeckoDrive Direction-Pins = 3,3V bis 5,5V
* Referenzfahrt: U12345V12345W12345;
*Benötigte Spannung des GeckoDrive Step-Pins = 3,3V bis 5,5V
* Koordinatenpunkt: X12345Y12345Z12345F12345;
*Stromstärke der GeckoDrive-Pins = 2,5mA ([https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Literatur/Gecko%20Drive/G201X%20REV-6%20Manual.pdf Datenblatt GeckoDrive])


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. Hier ist die Maßeinheit mm/min.


R= U/I Ohmsches Gesetzt
Um die Kommunikation in der PLC einzurichten, muss die Funktion „P_RCV“ ([[:Datei:CNCS7300 CP340Kommunikation.PNG|Abbildung CP340 P_RCV-Funktion]]) im zyklischen Programm der PLC aufgerufen werden. Die Funktion benötigt zusätzlich einen Speicherbaustein „P_RCV_DB“ und einen Instanzfunktionsbaustein „P_RCV“. Die Beschaltung der Ein- und Ausgänge der Funktionsblöcke ist der Funktionsbeschreibung der Blöcke in der TIA-Portal Hilfe zu entnehmen:


R = (24V - 3,3V)/2,5mA = 8,2k&Omega;
{| class="wikitable"
!Kürzel !! Begriff !! Erklärung
|-
|EN_R || Freigabe für Daten lesen ||/
|-
|R || Auftragsabbruch || Laufender Auftrag wird abgebrochen. Empfang gesperrt.
|-
|LADDR || Basisadresse des CP 340 || Die Basisadresse wird aus STEP 7 entnommen.
|-
|DB_NO || Datenbausteinnummer || Empfangs-DB-Nr.: CPU-spezifisch, Null ist nicht erlaubt.
|-
|DBB_NO || Datenbytenummer || 0 ≤ DBB_NO ≤ 8190 Empfangsdaten ab Datenbyte.
|-
|NDR 1 || Auftrag fertig ohne Fehler, Daten übernommen || Parameter STATUS == 16#00.
|-
|ERROR 1 || Auftrag abgebrochen mit Fehler || Parameter STATUS enthält die Fehlerinformation.
|-  
|LEN 1 || Länge des empfangenen Telegramms || 1 ≤ LEN ≤ 1024, Angabe in Anzahl Byte (Muss auch am Modul parametriert werden!).
|-
|STATUS 1 || Spezifikation des Fehlers || Bei ERROR == 1 steht im Parameter STATUS die Fehlerinformation.
|}


R = (24V - 5,5V)/2,5mA = 7,4k&Omega;
{| class="wikitable"
| [[Datei:CNCS7300 CP340Kommunikation.PNG|800px|thumb|left|CP340 P_RCV-Funktion]]
|}


Somit müssen die zwischengeschalteten Widerstände zwischen 7,4k&Omega; und 8,2k&Omega; liegen.
===Test der Kommunikation mit HTerm===
Das Programm HTerm ist ein Programm zur seriellen Kommunikation. In diesem Fall zwischen dem RS232-Port eines PC und der Siemens SPS. Für eine funktionierende Kommunikation der beiden Teilnehmer müssen zunächst einige Parameter eingestellt werden:
Baudrate = 9600;  


= Versuchsdurchführung =
Parität = Keine (None);
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 ==
Port = COM Port an dem das Kommunikationsmodul angeschlossen ist;
[[Datei:Einrichtungsassistent.png|thumb|Abbildung 4: Einrichtungsassistent in Step 7]]
[[Datei:Hardware_config_oeffnen.png|thumb|Abbildung 4: Öffnen der Hardware-Konfiguration]]
[[Datei:Hardware_update_auswählen.png|thumb|Abbildung 4: Hardware-Update installieren]]
[[Datei:Hardware_konfiguration.png|thumb|Abbildung 4: Einbinden der erforderlichen Hardware]]
[[Datei:Cp340_parametrieren.png|thumb|Abbildung 4: Parametrieren der seriellen Schnittstelle]]
[[Datei:Db20_erstellen.png|thumb|Abbildung 4: Erstellen einer Datenbank zur Speicherung von Daten]]
[[Datei:DB20 füllen.png|thumb|Abbildung 4: Anlegen von Datensätzen innerhalb einer Datenbank]]
[[Datei:Db1_erstellen.png|thumb|Abbildung 4: Erstellen der Instanz-Datenbank für den Empfang der seriellen Daten]]
[[Datei:Symboltabelle_erstellen.png|thumb|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.
Databits = 8;
*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 ===
Stopbit = 1.
Beispielprogramm zum Empfang über serielle Schnittstelle und Extraktion eines Datensatzes
<code>
  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
Bei der Eingabe aber auch bei der Ausgabe der Daten wird sich aus der Auswahl von ASCII, hexadezimal, binär und dezimalem Code entschieden.
  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
Die nächste Abbildung zeigt die Oberfläche des Programmes.
    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
</code>


Die extrahierten Daten (hier die Koordinaten der X-Achse) befinden sich nun im Datenbaustein DB20 und können im weiteren Programmzyklus verarbeitet werden.
{| class="wikitable"
Das Senden der Daten kann mit dem Freeware-Tool HTerm oder über den Arduino-Monitor getestet werden.
| [[Datei:CNCS7300 Hterm.png|600px|thumb|left|HTerm 0.8.1 GUI]]
|}


==Programmierung==
===Steuerung der Ausgänge===
Wie eine Siemens SPS funktioniert wird in dem Artikel [[Automatisierungssystem SPS SIMATIC S7-300|Automatisierungssystem SPS SIMATIC S7-300]] genauer beschrieben. Näheres zum verwendeten Kommunikationsmodul, CP340, ist in dem Artikel [[RS232-Kommunikation mit SIMATIC 300|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:  
Zur Steuerung der Ausgänge müssen diese in den PLC-Variablen angelegt werden und der entsprechenden Adresse an den IO-Karten zugewiesen werden ([[:Datei:CNCS7300 Ausgaenge.PNG|siehe nächste Abbildung]]).
[https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/Automatisierung_SPS/Projektdateien/SPS-Programm.zip SPS-Programm].
Die Ausgänge können dann die wie Variablen in der Programmierung verwendet werden.


== Zykluszeit ==
{| class="wikitable"
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.
| [[Datei:CNCS7300 Ausgaenge.PNG|800px|thumb|left|Digitale Ausgänge in PLC-Variablen anlegen]]
Für folgendes Beispielprogramm wurde eine tatsächliche Zykluszeit von etwa 5,4ms ermittelt.
|}
[[Datei:Step_prog.jpg|mini|Abbildung 2: Beispielprogramm für einen Schrittbaustein]]
[[Datei:Zykluszeit.jpg|mini|x350px|Abbildung 3: am Oszilloskop gemessene tatsächliche Zykluszeit]]


===Programmierung===
Die PLC arbeitet zyklisch einen Operationsbaustein ab, den OB1 („Main“-OB). In diesem OB müssen alle Funktionen aufgerufen werden, welche von der PLC abgearbeitet werden sollen. Funktionen die nicht im OB aufgerufen werden, haben keinerlei Auswirkung auf den Ablauf des Programms.
Um die CNC-Fräse zu programmieren, ist sich für die Programmiersprachen FUP (Funktionsplan) und SCL (Structured Control Language) entschieden worden.
Die Berechnung und Konvertierung der Werte zur Ansteuerung der Achsen ist in einer SCL-Funktion erfolgt. Das Pulsen und die Übertragung der Signale ist in einem Funktionsbaustein in FUP realisiert worden.
SCL-Funktion Calculate:
<code>
#Wenn das erste Zeichen der übergebenen Zeichenkette (Zeichen) den Char 'X' enthält, beginnt die Berechnung der Schritte und Delay-Zeiten.
IF #Zeichen = 'X' THEN
  #Das Schrittverhältnis wird mit der Formel Schrittverhätnis = Distanz / (360 / Schrittwinkel) * Treiberverhältnis errechnet und im globalen DB gespeichert.
  "Global".Schrittverhaeltnis := #Distanz / (360 / #Schrittwinkel) * #Treiberverhaeltnis; //0.033
  #Die übergebene Zeichenketten für X-Richtung ("Global".Received_Data_Splitted[0]), Y-Richtung ("Global".Received_Data_Splitted[1]), Z-Richtung ("Global".Received_Data_Splitted[2]) und Vorschub
  ("Global".Received_Data_Splitted[3]) werden von string zu integer konverteiert.
  "Global".approach[0] := STRING_TO_INT("Global".Received_Data_Splitted[0]);
  "Global".approach[1] := STRING_TO_INT("Global".Received_Data_Splitted[1]);
  "Global".approach[2] := STRING_TO_INT("Global".Received_Data_Splitted[2]);
  "Global".approach[3] := STRING_TO_INT("Global".Received_Data_Splitted[3]);
  #Die Anzahl der Schritte in die jeweilige Richtung wird mit Schritte = Referenzposition - anzufahrende Position / Schrittverhältnis errechnet
  "Global".X_steps := ("Global".refrences[0] - DINT_TO_REAL("Global".approach[0])) / "Global".Schrittverhaeltnis;
  "Global".Y_steps := ("Global".refrences[1] - DINT_TO_REAL("Global".approach[1])) / "Global".Schrittverhaeltnis;
  "Global".Z_steps := ("Global".refrences[2] - DINT_TO_REAL("Global".approach[2])) / "Global".Schrittverhaeltnis;
  #Die errechnete Anzahl der Schritte wird mit der Funktion ABS in einen absoluten Wert konvertiert.
  "Global".X_steps_abs := ABS("Global".X_steps);
  "Global".Y_steps_abs := ABS("Global".Y_steps);
  "Global".Z_steps_abs := ABS("Global".Z_steps);
  #Die Vorschubgeschwindigkeit wird mit Vorschubgeschwindigkeit = Vorschub / (Schrittverhältnis * 60) errechnet
  "Global".F_velocity := DINT_TO_REAL("Global".approach[3]) / ("Global".Schrittverhaeltnis * 60);
  #Die Zeichenketten für X-Richtung, Y-Richtung, Z-Richtung und Vorschub werden von integer zu real konverteiert.
  "Global".refrences[0] := DINT_TO_REAL("Global".approach[0]);
  "Global".refrences[1] := DINT_TO_REAL("Global".approach[1]);
  "Global".refrences[2] := DINT_TO_REAL("Global".approach[2]);
  #Errechnen der Länge des zu fahrenden Weges (Hypothenuse im dreidimensionalen Raum)
  "Global".hypothenuse := SQRT("Global".X_steps * "Global".X_steps
        + "Global".Y_steps * "Global".Y_steps
        + "Global".Z_steps * "Global".Z_steps);
  #Errechnen der Delay-Zeiten für die einzelnen Achsen mit Delay-Zeit = ((Schritte / Hypothenuse) * Vorschubgeschwindigkeit) * 2 * 0.1
  "Global".Delay_X_Real := (("Global".X_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;
  "Global".Delay_Y_Real := (("Global".Y_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;
  "Global".Delay_Z_Real := (("Global".Z_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;
  #Delay-Zeit für Konvertierung in Zeit vorher in absoluten Wert konvertieren
  "Global".Delay_X_Real := ABS("Global".Delay_X_Real);
  "Global".Delay_Y_Real := ABS("Global".Delay_Y_Real);
  "Global".Delay_Z_Real := ABS("Global".Delay_Z_Real);
  #Delay-Zeit von Real zu double und von double in Time konvertieren
  "Global".Delay_X_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_X_Real * 100) / 100); // * 100 / 100 to prevent dataloss!!!
  "Global".Delay_Y_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_Y_Real * 100) / 100);
  "Global".Delay_Z_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_Z_Real * 100) / 100);
#Wenn das erste Zeichen der Zeichenkette der Char 'U' ist, schreibe die Zeichenketten in das Array für die Referenzwerte
ELSIF #Zeichen = 'U' THEN
  "Global".refrences[0] := STRING_TO_INT("Global".Received_Data_Splitted[0]);
  "Global".refrences[1] := STRING_TO_INT("Global".Received_Data_Splitted[1]);
  "Global".refrences[2] := STRING_TO_INT("Global".Received_Data_Splitted[2]);
END_IF;
</code>
FUP-Funktionsbaustein MotorControl:
{| class="wikitable"
|-
! MotorControl
|-
| [[Datei:CNCS7300 MotorControl 1.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 2.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 3.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 4.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 5.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 6.PNG|800px|left]]
|-
| [[Datei:CNCS7300 MotorControl 7.PNG|800px|left]]
|}
=== 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.


Diese Verzögerung wird durch unterschiedliche Einflussfaktoren verursacht. Im Folgenden werden die Wichtigsten genannt:
Diese Verzögerung wird durch unterschiedliche Einflussfaktoren verursacht. Im Folgenden werden die Wichtigsten genannt:
Zeile 179: Zeile 326:
* Verlängerung der Anwenderprogramm - Bearbeitungszeit
* 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.
Das Betriebssystem der 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.




Zeile 204: Zeile 351:


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


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.
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.
Zeile 210: Zeile 357:
Daher lautet die Formel:
Daher lautet die Formel:


Zykluszeit_verzögert :Z_ver =(Z+B+K) * 1,10.
Zykluszeit_verzögert :<math>Z_v =(Z+B+K) \cdot 1,10</math>


Z_ver=(2ms+(4 * 0,0043 ms)+100ms) * 1,10 = 5,192 ms
<math>Z_v=(2ms+(4 \cdot 0,0043 ms)+100ms) \cdot 1,10 = 5,192 ms</math>




Zeile 221: Zeile 368:
* Schleifen usw.
* Schleifen usw.


== Auswahl der Programmiersprache ==
== Entwicklung der Optokoppler-Schaltung ==
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 ==
Für die Eingangssignale der Schrittmotortreiber liegt ein LOW-Signal bei 0V Eingangsspannung und ein HIGH bei einer Eingangsspannung von 3,3 bis 5,5V vor. Die Ausgangssignale der SPS haben einen Ausgangsspannung von 24V.
[[Datei:Programmablaufplan_SPS_Achsensteuerung.png|200px|thumb|right|Abbildung 4: Programmablauf der SPS-Steuerung]]
Um die 24V Ausgangsspannung auf 5V zu skalieren und die Treiber ansteuern zu können, wurde eine Optokopplerschaltung entwickelt.
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. [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/Automatisierung_SPS/Projektdateien/SPS-Programm.zip SPS-Programm]


== Serielle Kommunikation mit CP340 ==
===Gehäuse===
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:  
Eine der Anforderungen aus der [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/01_Anforderungsdefintion/ Anforderungsliste] stellt die Entwicklung eines Gehäuses für die Platine mit der Optokoppler-Schaltung dar. Hierzu wurde vor dem Konstruieren in dem  [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/05_Entwicklung/Geh%c3%a4use/ CAD-Programm Siemens NX] eine händische Skizze angefertigt. Dort wurden die Maße eingetragen und es wurden zunächst die Überlegungen gemacht, wie diese Bauteile aussehen könnten.
* Referenzfahrt: U12345V12345W12345;
Das Gehäuse besteht aus zwei Bauteilen: dem [[:Datei:CNCS7300 Unterteil.png|Unterteil]] und dem [[:Datei:CNCS7300 Deckel.png|Deckel]]
* 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.
{| class="wikitable"
Ü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.
| [[Datei:CNCS7300 Unterteil.png|thumb|400px|left| Unterteil]] || [[Datei:CNCS7300 Deckel.png|thumb|400px|left| Deckel]]
<code>
|}
  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
Konstruktionsdateien: [[Datei:S7300 Gehäuse.zip]]
    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
</code>


== Verarbeitung der Koordinaten ==
In das Unterteil des Gehäuses wird die Platine mit der Optokoppler-Schaltung eingelegt. Vorne an dem Unterteil ist eine Aussparung für den 25-poligen D-Sub-Stecker gelassen worden. An der Seite des Unterteils finden sich drei weitere Aussparungen, durch diese führen die Kabel von und zur SPS. Der Deckel wird später mit vier Schrauben auf dem Unterteil befestigt.
* 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.
<code>
  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"
Der erste Schritt bei der Konstruktion des mechanischen Teils war es, sich für ein Fertigungsverfahren zur Erstellung des Gehäuses zu entscheiden.
    S1    :="Daten".refWertX
    S2    :="Daten".refVerglWertX
    RET_VAL:="istRefPosX"


  CALL  "MID"                      //2. Referenzwert extrahieren
Es wurde sich für den [https://de.wikipedia.org/wiki/3D-Druck 3D-Druck] entschieden, dieser hat den Vorteil das Bauteile kostengünstig, schnell und einfach erstellt werden können, was sich für die Erstellung dieses Gehäuses bestens eignet. Durch den Aspekt der Schnelligkeit konnte innerhalb von einer Woche das Gehäuse konstruiert und gefertigt werden.
    IN    :="Daten".Empfang
    L      :=1
    P      :=7
    RET_VAL:="Daten".refWertY


  CALL  "EQ_STRNG"                  //prüfen ob 2. Referenzwert == "Y"
Der verwendete 3D-Druck ist ein additives Fertigungsverfahren. Ein festes Material, Filament wird durch den Extruder aufgewärmt und auf das Druckbett aufgetragen. Dies geschieht Schicht für Schicht, durch diese schichtweise Herstellung können dreidimensionale Gegenstände gedruckt werden.  
    S1    :="Daten".refWertY
    S2    :="Daten".refVerglWertY
    RET_VAL:="istRefPosY"


  CALL  "MID"                      //3. Referenzwert extrahieren
Nach Absprache mit der Firma Trilux dürfen die Bauteile auf dem 3D-Drucker der Firma gedruckt werden. Es musste sich im nächsten Schritt über das Filament informiert werden. Für das Gehäuse wird sich für das häufig verwendete ABS (Acrylnitril-Butadien-Styrol) entschieden, dieses hat die folgenden Eigenschaften (aus dem [https://ultimaker.com/download/67617/TDS%20ABS%20v3.011-ger-DE.pdf Datenblatt] entnommen).  
    IN    :="Daten".Empfang
    L      :=1
    P      :=13
    RET_VAL:="Daten".refWertZ


  CALL  "EQ_STRNG"                  //prüfen ob 3. Referenzwert == "Z"
Die folgende Tabelle veranschaulicht einmal die wichtigsten Eigenschaften dieses Werkstoffes:
    S1    :="Daten".refWertZ
    S2    :="Daten".refVerglWertZ
    RET_VAL:="istRefPosZ"


  CALL  "MID"                       //4. Referenzwert extrahieren
{| class="wikitable"
    IN    :="Daten".Empfang
|-
    L      :=1
! Acrylnitril-Butadien-Styrol (ABS)               
    P      :=19
|-
    RET_VAL:="Daten".refWertF
| hohe Zugfestigkeit von 1681,5 MPa
|-
| hohe Oberflächenqualität
|-
| hohe Druckgeschwindigkeit sind möglich
|-
| geringe Biegefestigkeit 70,5 MPa
|-
| gute Haftung am Druckbett
|-
| geringes spezifisches Gewicht 1,10 g/cm³
|-
| niedrige Schmelztemperatur 225 - 245˚C
|}


  CALL  "EQ_STRNG"                  //prüfen ob 4. Referenzwert == "F"
Um nach dem 3D-Druck ein ansprechendes Ergebnis und maßhaltige Bauteile zu bekommen, ist die Schmelztemperatur wichtig, diese sollte unter 280°C liegen, da der 3D-Drucker nur bis zu dieser Temperatur das Material erhitzen kann. Für eine hohe Oberflächenqualität sollte ein Material ausgewählt werden, dass eine hohe Haftung am Druckbett hat. Denn ohne diese hohe Haftung würden die Teile zum einen nicht maßhaltig werden, da das Material „verrutscht“ und zum anderen würde die Oberfläche nicht ansprechend sein.  
    S1    :="Daten".refWertF
Diese Eigenschaften beinhaltet das ABS, wodurch sich daher entschieden wurde. Ein weiteres Betrachtetes Filament war das PLA. Dieses Filament eignet sich jedoch nur eingeschränkt für das Gehäuse, da es elastischer ist und sich schlechter drucken lässt, durch eine schlechte Haftung auf dem Druckbett.
    S2    :="Daten".refVerglWertF
    RET_VAL:="istRefPosF"


  CALL  "MID"                      //1. Referenzwert extrahieren
===Schaltung===
    IN    :="Daten".Empfang
    L      :=1
    P      :=1
    RET_VAL:="Daten".refWertU


  CALL  "EQ_STRNG"                  //prüfen ob 1. Referenzwert == "U"
Diese Schaltung wurde entwickelt, um die Ausgangsspannung der SPS-Ausgänge von 24V auf 5V zu bringen. Dies geschieht aus dem Grund, das die Motortreiber ein HIGH-Signal von 3,3 bis 5,5V erfordern.
    S1    :="Daten".refWertU
Beim Entwickeln der Schaltung wurden Widerstände als Pullup-Widerstände eingesetzt. Beim Test mit einem Optokoppler funktionierte dies. Als die Schaltung mit 6 Optokopplern getestet wurde, lagen an den Ausgängen 3,07V an. Es wurde nicht bedacht, dass die Schaltung nun eine Parallelschaltung der Komponenten war und die Widerstände ihren "Pullup-Effekt" verloren haben. Mithilfe von Prof. Göbel ist es gelungen die Widerstände ihrer Funktion entsprechend neu zu platzieren. Folgende Abbildungen zeigen den Schaltplan, sowie die Aufgebaute Schaltung selbst:
    S2    :="Daten".refVerglWertU
    RET_VAL:="istRefPosU"


  CALL  "MID"                       //2. Referenzwert extrahieren
{| class="wikitable"
    IN    :="Daten".Empfang
| [[Datei:CNCS7300 Optokoppler-Schaltplan.PNG|thumb|400px|left| Optokoppler Schaltplan]] || [[Datei:CNCS7300 OptokopllerSchaltung.jpg|thumb|400px|left| Bild der Verdrahtung]]
    L      :=1
|}
    P      :=7
    RET_VAL:="Daten".refWertV


  CALL  "EQ_STRNG"                  //prüfen ob 2. Referenzwert == "V"
[[Datei:S7300 Schaltplan Optokoppler.pptx]]
    S1    :="Daten".refWertV
    S2    :="Daten".refVerglWertV
    RET_VAL:="istRefPosV"


  CALL  "MID"                      //3. Referenzwert extrahieren
=Komponententest=
    IN    :="Daten".Empfang
    L      :=1
    P      :=13
    RET_VAL:="Daten".refWertW


  CALL  "EQ_STRNG"                  //prüfen ob 3. Referenzwert == "W"
Mit HTerm ist die Kommunikation zur SPS getestet worden. Die Werte sind fehlerfrei in der SPS angekommen. Die Werte wurden mit der Überwachungsfunktion des TIA-Portals beobachtet.
    S1    :="Daten".refWertW
Die Übertragung der Ausgangssignale wurde mit einem Oszilloskop getestet. Bei einer Impulslänge von einer Millisekunde ist das Signal nicht immer 1 Millisekunde lang gewesen, sondern hat zwischen einer halben Millisekunde und zwei Millisekunden geschwankt. Dieser Effekt hat allerdings keinen Einfluss auf die Genauigkeit bei der Ansteuerung des Motors, da die Schrittmototreiber die Anzahl der Impulse verwertet und nicht die Länge der Impulse. Die Drehgeschwindigkeit des Motors ist dadurch allerdings beschränkt.  
    S2    :="Daten".refVerglWertW
    RET_VAL:="istRefPosW"


  U    "istRefPosU"               // Prüfe ob Datensatz Referenzfahrt ist
{| class="wikitable"
  U    "istRefPosV"
| [[Datei:S7300 Oszilloskop.jpg|800px|thumb|left|Signaltest mit Oszilloskop]]
  U    "istRefPosW"
|}
  CC    "Referenzfahrt"            // führe Referenzfahrt aus


  U    "istRefPosX"                // prüfe ob Datensatz Koordinatenfahrt ist
[[Datei:S7300 06 Komponententest.zip]]
  U    "istRefPosY"
  U    "istRefPosZ"
  U    "istRefPosF"
  CC    "Koordinatenfahrt"          // führe Koordinatenfahrt aus


  U(                                // Prüfen, ob String nicht valide ist
SVN-Ordner: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/06_Komponententest/ Komponententest]
  ON    "istRefPosX"
  ON    "istRefPosY"
  ON    "istRefPosZ"
  ON    "istRefPosF"
  )   
  U(   
  ON    "istRefPosU"
  ON    "istRefPosV"
  ON    "istRefPosW"
  )   
  CC    "Daten_fehlerhaft"          // Statusmeldung ausgeben
</code>
* 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.
<code>
  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
=Integrationstest=
  AUF  "IST_Pos"


  CALL  "MID"                      //U-Koordinaten extrahieren
Bei diesem Test sind über HTerm Strings an die SPS übertragen worden. Alle Daten sind erfolgreich übertragen worden.
    IN    :="Daten".Empfang
    L      :=5
    P      :=2
    RET_VAL:="Daten".X


  CALL  "STRNG_DI"                 //U-Koordinaten in Double-Integer parsen
{| class="wikitable"
    S      :="Daten".X
| [[Datei:S7300 Test mit Hterm.jpg|800px|thumb|left|Verbindungstest über RS232 mit HTerm]]
    RET_VAL:="IST_Pos".X            // U als Ist-Position X speichern
|}


  CALL  "MID"                      //V-Koordinaten extrahieren
Im zweiten Schritt sind Werte für den zu fahrenden Weg eingetragen worden und damit eine Achse verfahren. Der Aufbau ist in der unteren Abbildung zu sehen.
    IN    :="Daten".Empfang
Ergebnis: Es ist der tatsächlich gefahrene Weg mit den eingegeben Daten verglichen worden. Die Berechnung wurde auf Basis dieser Daten angepasst, sodass der eingegebene Weg mit dem tatsächlich gefahrenem übereinstimmt. Videos und Bilder zu diesem Test sind hier zu finden: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/08_Abnahmetest/videos/ Bildmaterial] oder in den Projektdateien: [[Datei:CNCS7300 Siemens SPS CNC.zip]].
    L      :=5
    P      :=8
    RET_VAL:="Daten".Y


  CALL  "STRNG_DI"                  //V-Koordinaten in Double-Integer parsen
{| class="wikitable"
    S      :="Daten".Y
| [[Datei:S7300 Verfahrtest.JPG|800px|thumb|left|Test der Fahrtweg-Berechnung und Ansteuerung des Schrittmotors über die SPS mit zwischengeschalteter Optokopllerschaltung]]
    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
SVN-Ordner: [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_SPS_siemens/07_Integrationstest/ Integrationstest]
    S      :="Daten".Z
    RET_VAL:="IST_Pos".Z            // Z als Ist-Position Z speichern
</code>
* Koordinatenfahrt: Koordinatendaten aus empfangenem String extrahieren und zur weiteren Verarbeitung in das Format Double-Integer umwandeln.
<code>
  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"
=Lessons Learned=
  AUF  "IST_Pos"
  AUF  "SOLL_Pos"
  AUF  "DIFF_Strecke"


  CALL  "MID"                      // X-Koordinaten extrahieren
* Programmierung einer SPS
    IN    :="Daten".Empfang
* Dokumentation
    L      :=5
* Projektplanung
    P      :=2
* CAD-Konstruktion
    RET_VAL:="Daten".X
* 3D-Druck
 
* Optokoppler (Elektrische Bauelemente)
  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
</code>
* 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.
<code>
  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
</code>
* Am Ende des Programmzyklus werden die Soll-Koordinaten als Ist-Koordinaten für den darauffolgenden Zyklus gespeichert.
<code>
  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
</code>
*Schrittkette zur Regelung des Schritttaktes aufrufen
<code>
  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  :=
</code>
 
== Ansteuerung der Achsen ==
[[Datei:Schrittkette_motortreiber_ansteuern.png|200px|thumb|right|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 =
= 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.
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 TIA ist bietet vielfältige Möglichkeiten zur Programmierung von SPS-Steuerungen. Mit seinen vier, auf unterschiedliche Anwender zugeschnittenen Programmiersprachen, zielt TIA auf breites Feld von Entwicklern ab.


Projektdateien: [[Datei:CNCS7300 Siemens SPS CNC.zip]]


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.
===Im Rahmen des Praktikums erledigte Aufgaben:===
*Realisierung und Test der seriellen Schnittstelle
*Programmablaufplan erstellen
*Einlesen und einregeln der Soll-Position
*einfacher Positionier-Algorithmus für eine Achse
*Positionier-Algorithmus für drei Achsen
*Erstellung des neuen Optokoppler-Schaltplans
*Fertigung der neuen Platine für Verbindung mit den weiteren Hardware-Komponenten über D-SUB 25-poliges Kabel


===Was ist noch nicht fertig:===
*Test der Funktionalität an der CNC


= Weblinks und Literatur =
= Weblinks und Literatur =
====Selbstlern Unterlagen====
==== Weblinks ====
*[http://w3.siemens.com/mcms/sce/de/fortbildungen/ausbildungsunterlagen/classic-module/tabcardseiten/documents/prozessvisualisierung/f01_protool_op7.pdf Industry Automation and Drive Technologies - SCE T I A  Ausbildungsunterlage]
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'''
*[http://www.steuerungstechnik-heller.de/Steuerungstechnik/Dokumentation/Dokumentation/S7gsv54_d.pdf 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).
*[https://new.siemens.com/global/de/unternehmen/nachhaltigkeit/ausbildung/sce/lern-lehr-unterlagen.html Offizielle Selbstlernunterlagen für das TIA-Portal und SIMATIC Hardware]
 
==== Weitere Links im HSHL-Wiki ====


*[[Automatisierungssystem SPS SIMATIC S7-300|Automatisierungssystem SPS SIMATIC S7-300]]


*[[RS232-Kommunikation mit SIMATIC 300|Serielle Kommunikation mit dem CP340-Modul]]
*[[Automatisierungssystem SPS SIMATIC S7-300|Automatisierungssystem SPS SIMATIC S7-300]]
*[[SIMATIC S7|SIMATIC S7]]
*[[SIMATIC S7|SIMATIC S7]]


==== Bildquellen ====
==== Literatur ====
<references />


*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 =
→ zurück zur Übersicht: [[3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)]]

Aktuelle Version vom 7. Februar 2020, 15:26 Uhr


Autoren: Pia Dommen; Luca Riering

→ zurück zur Übersicht: 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)

Projektdateien: Datei:CNCS7300 Siemens SPS CNC.zip

Abschlusspräsentation: Datei:CNCS7300 Abschlusspräsentation SPS Siemens.pptx

CPU313C auf Hutschiene

Einleitung

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

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

Die Bearbeitungsreihenfolge in diesem Projekt lautet wie folgt:

1. Stefan Schweins und Jonas Rüschenschmidt (Step 7)

2. Hendrik Pabst und Ziad Abuelkhair (Step 7)

3. Pascal Siekmann und Gerhard Dick (Step 7)

4. Pia Dommen und Luca Riering (TIA Portal)

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
    • Achsenansteuerung für mehrere Achsen duplizieren und einlesen einer definierten Stringfolge
  • Test mit Steuerungsalgorithmus
    • Kommunikation mit Matlab-Steuerungsalgorithmus testen
    • Programmier-Review
  • Dokumentation in SVN und Wiki nach dem V-Modell:
V-Modell

Datei:CNCS7300 Abschlusspräsentation SPS Siemens.pptx

Anforderungsdefinition

Bei der Anforderungsdefinition wurde sich zunächst einmal in das Thema und in die Aufgabenstellung hereingearbeitet. Hierzu sind erste Informationen zu den einzelnen Komponenten gesammelt worden und erste Gedanken zu der Umsetzung wurden im Team besprochen. Auch sind in dieser Phase Absprachen mit dem Auftraggeber erfolgt und es wurde ein Budget festgelegt, über das in diesem Projekt verfügt werden kann.

Zusätzlich sind in dieser ersten Projektphase die Anforderungsliste und eine Einkaufsliste erstellt worden. Die Anforderungsliste wurde hier in Excel verschriftlicht und mit Terminen versehen, damit am Ende des Projektes überprüft werden kann, ob alle Punkte der Anforderungen eingehalten worden sind.

SVN-Download: Anforderungsliste

Funktionaler Systementwurf

Bei der Erstellung des funktionalen Systementwurfes ist eine grobe Funktion des Projektes festgelegt worden und diese wurde mittels eines Schaubildes veranschaulicht. Dieser Systementwurf ist zunächst lösungsneutral und stellt zunächst nur eine grobe Richtung dar.

Funktionaler Systementwurf

Datei:S7300 Funktionaler-Systementwurf.pptx

SVN-Download: Funtionaler-Systementwurf.pptx

Technischer Systementwurf

In dem nächsten Schritt, bei der Erstellung des technischen Systementwurfes ist der funktionale Systementwurf dann überarbeitet worden und spezifiziert worden. Dieses Schaubild zeigt die Zerlegung des Systems in einzelne Funktionsbausteine und auch das Zusammenwirken der einzelnen Schnittstellen.

Technischer Systementwurf

Datei:S7300 Technischer-Systementwurf.pptx

SVN-Download: Technischer-Systementwurf.pptx

Komponentenspezifikation

Nachdem die beiden Systementwürfe festgelegt worden sind, wird sich genauer mit den einzelnen Komponenten beschäftigt. Hierzu wird in Datenblättern der Hard-/Softwarekomponenten nachgeschlagen. Es wird sich auch in das Programm TIA-Portal eingearbeitet

Die verschiedenen Komponenten lauten:

  • SIEMENS Hutschiene
  • SPS-Netzteil SIMATIC PS307 Datenblatt
  • Speicherprogrammierbare Steuerung SIMATIC S7-300-CPU313C SVN-Download: Datenblatt
  • Kommunikationsmodul SIMATIC CP340 SVN-Download: Datenblatt
  • Schrittmotortreiber GeckoDrive G201x SVN: Datenblätter
  • Schrittmotor Igus NEMA 23 Datenblätter
  • Leitung 25-polig
  • Stecker Sub-D 25-polig
  • Widerstände 1 kOhm
  • Widerstände 10 kOhm
  • Vishay Optokoppler Phototransistor CNY17-3 DIP-6 Transistor mit Basis DC Datenblatt
  • Mean Well DR-15-5 Hutschienen-Netzteil (DIN-Rail) 5 V/DC 2.4 A 12 W 1 x Datenblatt

SVN-Download: Komponentenspezifikation.xlsx

Entwicklung

Wie eine Siemens SPS funktioniert wird in dem Artikel Automatisierungssystem SPS SIMATIC S7-300 genauer beschrieben. Im Folgenden wird der aktuelle Programmstatus näher erläutert. Das Programm ist unter diesem Link im SVN hinterlegt:

SVN-Ordner: SPS-Programm

Programmablaufplan

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.

Programmablaufplan

Datei:S7300 Programmablaufplan.pptx

SVN-Download: Programmablaufplan.pptx

Projektierung im TIA V15.1

Erstellung des Projektes im TIA-Portal V15.1

Nach dem unter „Neues Projekt erstellen“ ein Projekt angelegt wurde, öffnet sich das Fenster „Erste Schritte“. In diesem Fenster werden diverse Auswahlmöglichkeiten für den Beginn des Projektes angeboten. In den meisten Fällen ist es am sinnvollsten damit anzufangen die Hardware anzulegen und zu parametrieren. Mit „Ein Gerät konfigurieren“ öffnet sich die passende Oberfläche, „Geräte & Netze“. In diesem Fenster kann über die Beschreibung und die Artikel-Nummer die vorhandene Hardware ausgewählt und in der passenden Version dem Projekt hinzugefügt werden.

Die folgenden Bilder veranschaulichen das Vorgehen:

Neues Projekt erstellen
Erste Schritte
Neues Gerät hinzufügen

Anlegen und Parametrieren von Hardware

Im Projekt wird in der „Projektnavigation“ unter „Gerätekonfiguration“ die Hardware angezeigt (Abbildung CP340 Parameter). Mit der Anwahl einer Baugruppe, erscheint ein Eigenschaftsfenster. In diesem Projekt besteht die Hardwarekonfiguration aus der S7-300 PLC und dem CP340-Modul zur Kommunikation über RS-232. Im Reiter "Allgemein" ist das Kommunikationsprotokoll des Moduls zu parametrieren. Zu diesen Parametern gehören auch die E/A-Adressen. Diese können über "Eigenschaften" -> "Allgemein" -> "E/A-Adressen", sowohl bei der SPS als auch beim Kommunikationsmodul, eingestellt werden. Folgende Abbildung verdeutlichen den Vorgang:

E/Adressen CPU
E/Adressen CM

Hier wird der zu verwendende Speicherbereich der PLC ausgewählt. Die Empfangenen oder zu sendenden Daten werden in diesem Bereich gespeichert und/oder ausgelesen. Zu beachten ist, dass bei diesem Modul die Baudrate auf 9600 festgelegt ist und nicht verändert werden kann. Bei der Parametrierung der PLC ist zu erwähnen, dass die PLC zwei integrierte IO-Karten verbaut hat. Der PLC muss eine IP-Adresse gegeben werden und den IO-Karten muss genau wie dem CP 340 Modul ein Speicherbereich zugeordnet werden.

CP340 Parameter

Aufbau der Kommunikation mit dem CP 340 Kommunikationsmodul

Nachdem das Modul der Kommunikation entsprechend parametriert worden ist, muss die Kommunikation in der PLC angelegt werden. 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. Hier ist die Maßeinheit mm/min.

Um die Kommunikation in der PLC einzurichten, muss die Funktion „P_RCV“ (Abbildung CP340 P_RCV-Funktion) im zyklischen Programm der PLC aufgerufen werden. Die Funktion benötigt zusätzlich einen Speicherbaustein „P_RCV_DB“ und einen Instanzfunktionsbaustein „P_RCV“. Die Beschaltung der Ein- und Ausgänge der Funktionsblöcke ist der Funktionsbeschreibung der Blöcke in der TIA-Portal Hilfe zu entnehmen:

Kürzel Begriff Erklärung
EN_R Freigabe für Daten lesen /
R Auftragsabbruch Laufender Auftrag wird abgebrochen. Empfang gesperrt.
LADDR Basisadresse des CP 340 Die Basisadresse wird aus STEP 7 entnommen.
DB_NO Datenbausteinnummer Empfangs-DB-Nr.: CPU-spezifisch, Null ist nicht erlaubt.
DBB_NO Datenbytenummer 0 ≤ DBB_NO ≤ 8190 Empfangsdaten ab Datenbyte.
NDR 1 Auftrag fertig ohne Fehler, Daten übernommen Parameter STATUS == 16#00.
ERROR 1 Auftrag abgebrochen mit Fehler Parameter STATUS enthält die Fehlerinformation.
LEN 1 Länge des empfangenen Telegramms 1 ≤ LEN ≤ 1024, Angabe in Anzahl Byte (Muss auch am Modul parametriert werden!).
STATUS 1 Spezifikation des Fehlers Bei ERROR == 1 steht im Parameter STATUS die Fehlerinformation.
CP340 P_RCV-Funktion

Test der Kommunikation mit HTerm

Das Programm HTerm ist ein Programm zur seriellen Kommunikation. In diesem Fall zwischen dem RS232-Port eines PC und der Siemens SPS. Für eine funktionierende Kommunikation der beiden Teilnehmer müssen zunächst einige Parameter eingestellt werden:

Baudrate = 9600;

Parität = Keine (None);

Port = COM Port an dem das Kommunikationsmodul angeschlossen ist;

Databits = 8;

Stopbit = 1.

Bei der Eingabe aber auch bei der Ausgabe der Daten wird sich aus der Auswahl von ASCII, hexadezimal, binär und dezimalem Code entschieden.

Die nächste Abbildung zeigt die Oberfläche des Programmes.

HTerm 0.8.1 GUI

Steuerung der Ausgänge

Zur Steuerung der Ausgänge müssen diese in den PLC-Variablen angelegt werden und der entsprechenden Adresse an den IO-Karten zugewiesen werden (siehe nächste Abbildung). Die Ausgänge können dann die wie Variablen in der Programmierung verwendet werden.

Digitale Ausgänge in PLC-Variablen anlegen

Programmierung

Die PLC arbeitet zyklisch einen Operationsbaustein ab, den OB1 („Main“-OB). In diesem OB müssen alle Funktionen aufgerufen werden, welche von der PLC abgearbeitet werden sollen. Funktionen die nicht im OB aufgerufen werden, haben keinerlei Auswirkung auf den Ablauf des Programms.

Um die CNC-Fräse zu programmieren, ist sich für die Programmiersprachen FUP (Funktionsplan) und SCL (Structured Control Language) entschieden worden.

Die Berechnung und Konvertierung der Werte zur Ansteuerung der Achsen ist in einer SCL-Funktion erfolgt. Das Pulsen und die Übertragung der Signale ist in einem Funktionsbaustein in FUP realisiert worden.

SCL-Funktion Calculate:


#Wenn das erste Zeichen der übergebenen Zeichenkette (Zeichen) den Char 'X' enthält, beginnt die Berechnung der Schritte und Delay-Zeiten.
IF #Zeichen = 'X' THEN
 #Das Schrittverhältnis wird mit der Formel Schrittverhätnis = Distanz / (360 / Schrittwinkel) * Treiberverhältnis errechnet und im globalen DB gespeichert.
 "Global".Schrittverhaeltnis := #Distanz / (360 / #Schrittwinkel) * #Treiberverhaeltnis; //0.033
 #Die übergebene Zeichenketten für X-Richtung ("Global".Received_Data_Splitted[0]), Y-Richtung ("Global".Received_Data_Splitted[1]), Z-Richtung ("Global".Received_Data_Splitted[2]) und Vorschub 
 ("Global".Received_Data_Splitted[3]) werden von string zu integer konverteiert.
 "Global".approach[0] := STRING_TO_INT("Global".Received_Data_Splitted[0]);
 "Global".approach[1] := STRING_TO_INT("Global".Received_Data_Splitted[1]);
 "Global".approach[2] := STRING_TO_INT("Global".Received_Data_Splitted[2]);
 "Global".approach[3] := STRING_TO_INT("Global".Received_Data_Splitted[3]);

 #Die Anzahl der Schritte in die jeweilige Richtung wird mit Schritte = Referenzposition - anzufahrende Position / Schrittverhältnis errechnet
 "Global".X_steps := ("Global".refrences[0] - DINT_TO_REAL("Global".approach[0])) / "Global".Schrittverhaeltnis;
 "Global".Y_steps := ("Global".refrences[1] - DINT_TO_REAL("Global".approach[1])) / "Global".Schrittverhaeltnis;
 "Global".Z_steps := ("Global".refrences[2] - DINT_TO_REAL("Global".approach[2])) / "Global".Schrittverhaeltnis;

 #Die errechnete Anzahl der Schritte wird mit der Funktion ABS in einen absoluten Wert konvertiert.
 "Global".X_steps_abs := ABS("Global".X_steps);
 "Global".Y_steps_abs := ABS("Global".Y_steps);
 "Global".Z_steps_abs := ABS("Global".Z_steps);

 #Die Vorschubgeschwindigkeit wird mit Vorschubgeschwindigkeit = Vorschub / (Schrittverhältnis * 60) errechnet
 "Global".F_velocity := DINT_TO_REAL("Global".approach[3]) / ("Global".Schrittverhaeltnis * 60);
 #Die Zeichenketten für X-Richtung, Y-Richtung, Z-Richtung und Vorschub werden von integer zu real konverteiert.
 "Global".refrences[0] := DINT_TO_REAL("Global".approach[0]);
 "Global".refrences[1] := DINT_TO_REAL("Global".approach[1]);
 "Global".refrences[2] := DINT_TO_REAL("Global".approach[2]);
 #Errechnen der Länge des zu fahrenden Weges (Hypothenuse im dreidimensionalen Raum)
 "Global".hypothenuse := SQRT("Global".X_steps * "Global".X_steps
        + "Global".Y_steps * "Global".Y_steps
        + "Global".Z_steps * "Global".Z_steps);
 #Errechnen der Delay-Zeiten für die einzelnen Achsen mit Delay-Zeit = ((Schritte / Hypothenuse) * Vorschubgeschwindigkeit) * 2 * 0.1
 "Global".Delay_X_Real := (("Global".X_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;
 "Global".Delay_Y_Real := (("Global".Y_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;
 "Global".Delay_Z_Real := (("Global".Z_steps / "Global".hypothenuse) * "Global".F_velocity) * 2 * 0.1;

 #Delay-Zeit für Konvertierung in Zeit vorher in absoluten Wert konvertieren
 "Global".Delay_X_Real := ABS("Global".Delay_X_Real);
 "Global".Delay_Y_Real := ABS("Global".Delay_Y_Real);
 "Global".Delay_Z_Real := ABS("Global".Delay_Z_Real);

 #Delay-Zeit von Real zu double und von double in Time konvertieren
 "Global".Delay_X_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_X_Real * 100) / 100); // * 100 / 100 to prevent dataloss!!!
 "Global".Delay_Y_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_Y_Real * 100) / 100);
 "Global".Delay_Z_Time := DINT_TO_TIME(REAL_TO_DINT("Global".Delay_Z_Real * 100) / 100);

#Wenn das erste Zeichen der Zeichenkette der Char 'U' ist, schreibe die Zeichenketten in das Array für die Referenzwerte
ELSIF #Zeichen = 'U' THEN
 "Global".refrences[0] := STRING_TO_INT("Global".Received_Data_Splitted[0]);
 "Global".refrences[1] := STRING_TO_INT("Global".Received_Data_Splitted[1]);
 "Global".refrences[2] := STRING_TO_INT("Global".Received_Data_Splitted[2]);
END_IF;

FUP-Funktionsbaustein MotorControl:

MotorControl

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.

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 der 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

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 :


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

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

Entwicklung der Optokoppler-Schaltung

Für die Eingangssignale der Schrittmotortreiber liegt ein LOW-Signal bei 0V Eingangsspannung und ein HIGH bei einer Eingangsspannung von 3,3 bis 5,5V vor. Die Ausgangssignale der SPS haben einen Ausgangsspannung von 24V. Um die 24V Ausgangsspannung auf 5V zu skalieren und die Treiber ansteuern zu können, wurde eine Optokopplerschaltung entwickelt.

Gehäuse

Eine der Anforderungen aus der Anforderungsliste stellt die Entwicklung eines Gehäuses für die Platine mit der Optokoppler-Schaltung dar. Hierzu wurde vor dem Konstruieren in dem CAD-Programm Siemens NX eine händische Skizze angefertigt. Dort wurden die Maße eingetragen und es wurden zunächst die Überlegungen gemacht, wie diese Bauteile aussehen könnten. Das Gehäuse besteht aus zwei Bauteilen: dem Unterteil und dem Deckel

Unterteil
Deckel

Konstruktionsdateien: Datei:S7300 Gehäuse.zip

In das Unterteil des Gehäuses wird die Platine mit der Optokoppler-Schaltung eingelegt. Vorne an dem Unterteil ist eine Aussparung für den 25-poligen D-Sub-Stecker gelassen worden. An der Seite des Unterteils finden sich drei weitere Aussparungen, durch diese führen die Kabel von und zur SPS. Der Deckel wird später mit vier Schrauben auf dem Unterteil befestigt.

Der erste Schritt bei der Konstruktion des mechanischen Teils war es, sich für ein Fertigungsverfahren zur Erstellung des Gehäuses zu entscheiden.

Es wurde sich für den 3D-Druck entschieden, dieser hat den Vorteil das Bauteile kostengünstig, schnell und einfach erstellt werden können, was sich für die Erstellung dieses Gehäuses bestens eignet. Durch den Aspekt der Schnelligkeit konnte innerhalb von einer Woche das Gehäuse konstruiert und gefertigt werden.

Der verwendete 3D-Druck ist ein additives Fertigungsverfahren. Ein festes Material, Filament wird durch den Extruder aufgewärmt und auf das Druckbett aufgetragen. Dies geschieht Schicht für Schicht, durch diese schichtweise Herstellung können dreidimensionale Gegenstände gedruckt werden.

Nach Absprache mit der Firma Trilux dürfen die Bauteile auf dem 3D-Drucker der Firma gedruckt werden. Es musste sich im nächsten Schritt über das Filament informiert werden. Für das Gehäuse wird sich für das häufig verwendete ABS (Acrylnitril-Butadien-Styrol) entschieden, dieses hat die folgenden Eigenschaften (aus dem Datenblatt entnommen).

Die folgende Tabelle veranschaulicht einmal die wichtigsten Eigenschaften dieses Werkstoffes:

Acrylnitril-Butadien-Styrol (ABS)
hohe Zugfestigkeit von 1681,5 MPa
hohe Oberflächenqualität
hohe Druckgeschwindigkeit sind möglich
geringe Biegefestigkeit 70,5 MPa
gute Haftung am Druckbett
geringes spezifisches Gewicht 1,10 g/cm³
niedrige Schmelztemperatur 225 - 245˚C

Um nach dem 3D-Druck ein ansprechendes Ergebnis und maßhaltige Bauteile zu bekommen, ist die Schmelztemperatur wichtig, diese sollte unter 280°C liegen, da der 3D-Drucker nur bis zu dieser Temperatur das Material erhitzen kann. Für eine hohe Oberflächenqualität sollte ein Material ausgewählt werden, dass eine hohe Haftung am Druckbett hat. Denn ohne diese hohe Haftung würden die Teile zum einen nicht maßhaltig werden, da das Material „verrutscht“ und zum anderen würde die Oberfläche nicht ansprechend sein. Diese Eigenschaften beinhaltet das ABS, wodurch sich daher entschieden wurde. Ein weiteres Betrachtetes Filament war das PLA. Dieses Filament eignet sich jedoch nur eingeschränkt für das Gehäuse, da es elastischer ist und sich schlechter drucken lässt, durch eine schlechte Haftung auf dem Druckbett.

Schaltung

Diese Schaltung wurde entwickelt, um die Ausgangsspannung der SPS-Ausgänge von 24V auf 5V zu bringen. Dies geschieht aus dem Grund, das die Motortreiber ein HIGH-Signal von 3,3 bis 5,5V erfordern. Beim Entwickeln der Schaltung wurden Widerstände als Pullup-Widerstände eingesetzt. Beim Test mit einem Optokoppler funktionierte dies. Als die Schaltung mit 6 Optokopplern getestet wurde, lagen an den Ausgängen 3,07V an. Es wurde nicht bedacht, dass die Schaltung nun eine Parallelschaltung der Komponenten war und die Widerstände ihren "Pullup-Effekt" verloren haben. Mithilfe von Prof. Göbel ist es gelungen die Widerstände ihrer Funktion entsprechend neu zu platzieren. Folgende Abbildungen zeigen den Schaltplan, sowie die Aufgebaute Schaltung selbst:

Optokoppler Schaltplan
Bild der Verdrahtung

Datei:S7300 Schaltplan Optokoppler.pptx

Komponententest

Mit HTerm ist die Kommunikation zur SPS getestet worden. Die Werte sind fehlerfrei in der SPS angekommen. Die Werte wurden mit der Überwachungsfunktion des TIA-Portals beobachtet. Die Übertragung der Ausgangssignale wurde mit einem Oszilloskop getestet. Bei einer Impulslänge von einer Millisekunde ist das Signal nicht immer 1 Millisekunde lang gewesen, sondern hat zwischen einer halben Millisekunde und zwei Millisekunden geschwankt. Dieser Effekt hat allerdings keinen Einfluss auf die Genauigkeit bei der Ansteuerung des Motors, da die Schrittmototreiber die Anzahl der Impulse verwertet und nicht die Länge der Impulse. Die Drehgeschwindigkeit des Motors ist dadurch allerdings beschränkt.

Signaltest mit Oszilloskop

Datei:S7300 06 Komponententest.zip

SVN-Ordner: Komponententest

Integrationstest

Bei diesem Test sind über HTerm Strings an die SPS übertragen worden. Alle Daten sind erfolgreich übertragen worden.

Verbindungstest über RS232 mit HTerm

Im zweiten Schritt sind Werte für den zu fahrenden Weg eingetragen worden und damit eine Achse verfahren. Der Aufbau ist in der unteren Abbildung zu sehen. Ergebnis: Es ist der tatsächlich gefahrene Weg mit den eingegeben Daten verglichen worden. Die Berechnung wurde auf Basis dieser Daten angepasst, sodass der eingegebene Weg mit dem tatsächlich gefahrenem übereinstimmt. Videos und Bilder zu diesem Test sind hier zu finden: Bildmaterial oder in den Projektdateien: Datei:CNCS7300 Siemens SPS CNC.zip.

Test der Fahrtweg-Berechnung und Ansteuerung des Schrittmotors über die SPS mit zwischengeschalteter Optokopllerschaltung

SVN-Ordner: Integrationstest

Lessons Learned

  • Programmierung einer SPS
  • Dokumentation
  • Projektplanung
  • CAD-Konstruktion
  • 3D-Druck
  • Optokoppler (Elektrische Bauelemente)

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 TIA ist bietet vielfältige Möglichkeiten zur Programmierung von SPS-Steuerungen. Mit seinen vier, auf unterschiedliche Anwender zugeschnittenen Programmiersprachen, zielt TIA auf breites Feld von Entwicklern ab.

Projektdateien: Datei:CNCS7300 Siemens SPS CNC.zip

Im Rahmen des Praktikums erledigte Aufgaben:

  • Realisierung und Test der seriellen Schnittstelle
  • Programmablaufplan erstellen
  • Einlesen und einregeln der Soll-Position
  • einfacher Positionier-Algorithmus für eine Achse
  • Positionier-Algorithmus für drei Achsen
  • Erstellung des neuen Optokoppler-Schaltplans
  • Fertigung der neuen Platine für Verbindung mit den weiteren Hardware-Komponenten über D-SUB 25-poliges Kabel

Was ist noch nicht fertig:

  • Test der Funktionalität an der CNC

Weblinks und Literatur

Weblinks

Literatur

→ zurück zur Übersicht: 3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)