TIA S7-1500 Objektorientierte programmierung

Zuviel Werbung?
-> Hier kostenlos registrieren
Das Buch steht bei mir daheim, hatte es für meine Bachelorarbeit benötigt.
Da sind zwar viele nette Ideen für die Umsetzung von OOP in TIA drin, aber kaum was davon ist praxistauglich.
Ich würde so ein Programm also keinem Kunden in die Hand drücken wollen.

Gruß Käse
 
Naja ... ist ja eigentlich relativ einfach :
Funktionsbaustein = Klasse
Schnittstelle (IN, IN_OUT, OUT) = Properties

aber dann (gilt für bei Siemens) :
- möchte man Methoden machen so geht das nur über den Umweg einer (z.B.) Binär-Anwahl auf der Schnittstelle.
- die Geschichte mit Public (also für Alle) und Private (nur innerhalb des Bausteins) läuft auch wieder nicht
- Vererbung hatten wir ja schon

Gruß
Larry
 
Hallo alle!

Binärauswahl auf der Schnittstelle, nur eine Methode pro Aufruf erlaubt und dann eine "Methode" pro Netzwerk im FB oder so was? Man kann in TIA vielleicht auch alle unbenutzte IN der FB im Aufruf weggelassen? Sieht dann fast wie eine Methode aus :D

Gibt es mehr Information über Programgestaltung mit Auftragsfächer? Wie mache ich das?


Danke, es ist wirklich hilfreich!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte Erreignisse in Subsystem A das Subsystem B mitteilen ohne starke koppelung. Oder auch Information von Subsystem zum "Supersystem". Jede Subsystem soll für eine Aufgabe verantwortlich sein.

Ist es auch möglich Ereignisse das HMI zuzuführen ohne starke koppelung (kann HMI wechseln ohne grosse umprogrammieren?). Ich denke klare, einfache Schnittstellen, aber es ist im Praxis nicht so einfach (für mich).

Bitte mehr über Auftragsfächern schreiben! :D

Gruss

Das ist nichts besonders, alle Bausteine haben einen InOut für einen Integer als Auftrag und einen InOut für ein Bool als Trigger.
Im Baustein kannst dann Cases in SCL Programmieren die deine Aufträge ausführen. Das ganze setzt aber voraus, dass man vorher sehr genau definiert welcher Zahlenwert welchem Auftrag entspricht.
Weiterhin muss bedacht werden wie man Aufträge für definierte Programmteile filtern kann.

Lade dir mal ein Applikationsbeispiel für eine SIMATIC SIWAREX Waage runter die Arbeiten auch so.

Alternative: In der V14 kann man jetzt Instanzen als Parameter nutzen. Damit könnte man sich eine "Art" Methode programmieren. Ich gehe sogar fest davon aus, dass Siemens die Funktionalität hierfür vorgesehen hat.
Aber auch hier brauchst Du wieder ein Konzept.


instanzAlsParameter.jpg
 
Zuletzt bearbeitet:
Binärauswahl auf der Schnittstelle, nur eine Methode pro Aufruf erlaubt und dann eine "Methode" pro Netzwerk im FB oder so was? Man kann in TIA vielleicht auch alle unbenutzte IN der FB im Aufruf weggelassen? Sieht dann fast wie eine Methode aus :D

Gibt es mehr Information über Programgestaltung mit Auftragsfächer? Wie mache ich das?

Naja ...
Ich hatte das für verschiedene Aufgaben so gelösst :
Der Klassen-FB hatte mehrere IN's vom Typ BOOL, die wie eine Art Selector funktionierten. Der jeweils aktivierte IN startete den Ablauf dahinter. Alle anderen IN's mußten =0 sein es sei denn ich wollte, das ihre Funktion auch mit ausgeführt werden sollte (so etwas wäre ja auch denkbar). Hat man sie in der Zuordnung frei gelassen, so behielten sie natürlich den Zustand, den sie zuletzt zugewiesen bekommen haben. An der Stellen muss man aufpassen - IN's eines FB's landen mit in der Instanz und werden somit gespeichert.

Ich kann dir dazu auch mehr Info's geben - vielleicht an einem von dir gewählten Beispiel ...?

Gruß
Larry
 
Alternative: In der V14 kann man jetzt Instanzen als Parameter nutzen. Damit könnte man sich eine "Art" Methode programmieren. Ich gehe sogar fest davon aus, dass Siemens die Funktionalität hierfür vorgesehen hat.
Aber auch hier brauchst Du wieder ein Konzept.

Damit wird der Zugriff auf Instanzen salonfähig gemacht.
Ich weiß nicht, ob ich das in der Form gut finden soll :sad:

Ohne Private und Public finde ich sowas eigentlich ziemlichen Murks.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Damit wird der Zugriff auf Instanzen salonfähig gemacht.
Ich weiß nicht, ob ich das in der Form gut finden soll :sad:

Ohne Private und Public finde ich sowas eigentlich ziemlichen Murks.

Das ist Ansichtssache.
Wenn ich in meinem FB genau hierfür eine Struktur definiere und das Ganze gut dokumentiert habe, sehe ich keine Probleme.
Ich glaube es kommt wie immer auf die Umsetzung bzw. auf das Konzept an.

Das ist auch nicht schlimmer, als ein Global DB mit einem Array mit mehreren hundert Feldern und dazu ein FB in AWL wo Registerindirekt (natürlich werden beide ARs benutzt) die Eierlegendewollmilchsau programmiert ist. Das ganze ist natürlich historisch gewachsen und deshalb sind die Sprungmarken chronologisch und nicht funktionell angeordnet.
 
Damit wird der Zugriff auf Instanzen salonfähig gemacht.
Ich weiß nicht, ob ich das in der Form gut finden soll :sad:

Ohne Private und Public finde ich sowas eigentlich ziemlichen Murks.

Ich denke mal, Siemens hat das eher als "Ersatz" für die Übergabe von Zeiten und Zählern an Bausteine eingebaut. Das ging ja mit den Hardwaretimern und -zählern, aber nun eben auch mit Instanzen. (Miasma hat ja das korrekte Beispiel gleich gebracht. Dafür ist das noch ok, eine Timer-IDB für alle im Programm genutzten "unabhängigen" Timer und diese dann an FB übergeben.
Über alle anderen Fälle, für die das nun von findigen Programmieren mißbraucht wird, haben die sich garantiert keinen Kopf gemacht, wäre ja das erste Mal, das irgendwas bei Siemens wirklich Hand und Fuß hat. ;-)
 
Jetzt überlege ich ob ich vielleicht eine Reihe sehr kleine Funktionen machen soll, dass am UDT per INOUT Schnittstelle arbeiten. Jede übersichtliche Funktion hat nur eine begrenzte Aufgabe (soll ich auch Getters und Setters machen, keine "public" Zugriff erlaubt?:confused:) .

Macht das Sinn oder soll ich lieber eine Schnittstelle haben und Binärauswahl. In TIA könnte ich Folder machen, zum Beispiel "UDT-X Funktionen" oder sowas wo alle Funktionen (/"Methoden") für ein UDT gesammelt sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Not-Aus:
Die von mir "skizzierte" Klasse (FB) macht nur Sinn, wenn die eingelagerten "Methoden" mit weiteren Werten des FB's sinnvoll arbeiten können.

Beispiel 1 :
Ein Handling (Ablauf : vor-senken-greifen-heben-usw.)
Hier hatte ich jetzt z.B. die Einzel-Methoden in dem FB "Hole ein Teil", "Lege ein Teil ab", "Fahre in Grundstellung" mit den entsprechend zugehörigen Feedback's.
Alle Methoden arbeiten mit den Positions-Ini's und den zu schaltenden Ausgängen - es werden halt nur unterschiedliche Abläufe angestossen.

Beispiel 2 :
Profilkurve aufzeichnen etc.
Es soll eine Profilkurve (z.B. Kraft-Weg-Kurve einer Feder-Betätigung) aufgezeichnet und anschließend ausgewertet werden.
Hier hatte ich dann z.B. die Einzel-Methoden "Aufzeichnen", "Kurve glätten" , "Auswerten und Eckdaten bilden".
Hier wird mit den Werten gearbeitet, die sich der FB selber ermittelt - nur Grenz- und Vorgabewerte komme über die IN's rein - ermittelte Werte der Auswertung gehen über die Out's wieder raus.

Vielleicht hilft dir das bei deinen Überlegungen etwas weiter ...

Gruß
Larry
 
Wenn ich OOP ähnlich arbeite, dann definiere ich für die "Objektarten" UDTs.
Diese UDTs sind dann Bestandteil von größeren UDTs und daraus gibt es dann einen Global-DB.
FBs bilden dann Methoden und Eigenschaften. Die Übergabe erfolgt dann mit Hilfe der UDTs als InOut-Parameter.
Ist nicht Fisch und nicht Fleisch, hat aber bei Aufgaben rund um Datenverarbeitung ein paar Vorteile.

Wo sich was bewegt und vielleicht mal ein Instandhalter ran muß,verwende ich sowas meist nicht.

Gruß
Blockmove
 
Hallo zusammen,
ich arbeit bereits seit mehreren Jahren mit einer Art OOP im TIA Portal. Ich bin weiterhin überzeugt, dass die Struktur und die Denkweise so viele Vorteile mit sich bringt, dass man eine bessere Qualität schneller abliefern kann. Die Instandhaltung muss meiner Meinung nur ins Programm rein gucken, wenn die Maschine keinen passenden Fehler bringt.
Dass wir im Maschienenbau unseren Code verschenken ist eh ein unding. Ich kaufe ja auch keine PC für 1000€ und verlange den Sourcecode von Windows und hier sind wirlich viele Fehler drin!
Aber egal.

Ich würde gerne mit euch zusammen arbeiten. Ich suche Kollegen die die gleiche Denkweise mitbringen.
Meldet euch gerne bei mir.

Grüße
Hans
 
Ja das habe ich mir gedacht.
Die klassische Programmierung in der SPS Welt geht halt leider immer davon aus, dass man Fehler im Code hat und der Kunde diese bitte selber beheben soll.
Wenn man immer wieder auf Programmodule (Objekte) zurückgreift, kann man nach einer gewissen Zeit davon ausgehen, dass nahezu alle Fehler behoben sind. Das ist die Idee, wo man hin will.
Den Source Code kann der Kunde von mir aus auch haben, jedoch glaube ich nicht, dass er es im Detail verstehen kann. Wenn am den Code jedoch so einfach schreiben muss, dass jeder Instandhalter es versteht, wird man nie zum OOP hinkommen.
Der ewige Kreis, den ich schon seit Jahren versuche zu durchbrechen.

Der Fachkräftemangel, wird mich hierbei jedoch unterstützen.

Grüße
Hans
 
Ja das habe ich mir gedacht.
Die klassische Programmierung in der SPS Welt geht halt leider immer davon aus, dass man Fehler im Code hat und der Kunde diese bitte selber beheben soll.
Wenn man immer wieder auf Programmodule (Objekte) zurückgreift, kann man nach einer gewissen Zeit davon ausgehen, dass nahezu alle Fehler behoben sind. Das ist die Idee, wo man hin will.
Den Source Code kann der Kunde von mir aus auch haben, jedoch glaube ich nicht, dass er es im Detail verstehen kann. Wenn am den Code jedoch so einfach schreiben muss, dass jeder Instandhalter es versteht, wird man nie zum OOP hinkommen.
Der ewige Kreis, den ich schon seit Jahren versuche zu durchbrechen.

Der Fachkräftemangel, wird mich hierbei jedoch unterstützen.

Grüße
Hans
So einfach ist das nicht, manchmal muß Mann in den
Code schauen um, „Nicht Programmierfehler“ zu finden,
weil einfacher Verknüpfungen nicht erfüllt werden.
Mehrere Sensoren sind verknüpft um eine Freigabe an
einer Achse zu geben, da muss der Instandhalter halt
in den Code schauen. Er kann ja keine Gedanken lesen
was der OOP Programmierer in „Vererbung“ so verknüpft
hat. Und von bloßen drauf schauen auf das Stück Metall
wird er es auch nicht immer erahnen.

Warum lebt ihr euch nicht einfach in irgend welchen
Computerspielen aus, da geht nicht so viel kaputt oder
Zeit verloren, wenn die Anlage steht, warum muß es
gerade im Maschinen.- und Anlagenbau sein?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die klassische Programmierung in der SPS Welt geht halt leider immer davon aus, dass man Fehler im Code hat und der Kunde diese bitte selber beheben soll.
Wenn man immer wieder auf Programmodule (Objekte) zurückgreift, kann man nach einer gewissen Zeit davon ausgehen, dass nahezu alle Fehler behoben sind. Das ist die Idee, wo man hin will.
Die klassische SPS - Welt ist auch sehr vielschichtig und keiner baut wohl absichtlich Fehler in seinen Code der dann von anderen behoben werden soll. Wenn ich von mir ausgehen, dann sind wir im Sondermaschinenbau unterwegs, keine Maschine gleicht der anderen und dann kommen noch die diversen Sondervorschriften der Kunden dazu. Da kann selten auf fertige Programmmodule zurückgegriffen werden.

Der Code sollte von jedem Instandhalter verstanden werden, denn was macht eine Firma mir einer Anlage wenn es den Hersteller nicht mehr gibt? Oder wenn der Programmierer nicht mehr da ist und seine Kollegen nicht verstehen was derjenige damals mal gemacht hat? Diesen Fall hatte ich schon oft genug bei Retrofit-Maßnahmen. Wenn die Maschinenbetreiber dann auch noch einen IT-Profi für jeden Instandhalter einstellen müssen, dann möchte ich nicht wissen wie zukünftig sie Produktpreise und Lieferzeiten aussehen werden.
 
Hallo zusammen,
ich arbeit bereits seit mehreren Jahren mit einer Art OOP im TIA Portal. Ich bin weiterhin überzeugt, dass die Struktur und die Denkweise so viele Vorteile mit sich bringt, dass man eine bessere Qualität schneller abliefern kann. Die Instandhaltung muss meiner Meinung nur ins Programm rein gucken, wenn die Maschine keinen passenden Fehler bringt.
Dass wir im Maschienenbau unseren Code verschenken ist eh ein unding. Ich kaufe ja auch keine PC für 1000€ und verlange den Sourcecode von Windows und hier sind wirlich viele Fehler drin!
Aber egal.

Ich würde gerne mit euch zusammen arbeiten. Ich suche Kollegen die die gleiche Denkweise mitbringen.
Meldet euch gerne bei mir.

Grüße
Hans
Das deine Herangehensweise sich bisher nicht durchgesetzt hat, hat ja einen Grund. Es ist nicht die Innovationsfeindlichkeit der Programmierer, denn die müssen ständig neue Hardware in den Code integrieren, neue Funktionen integrieren. Aber es hat sich in vielen Jahren eben herausgestellt, dass viele Anforderungen mit OOP nicht ohne weiteres zu erfüllen sind oder sagen wir mal, nicht besser als ohne OOP. Ich finde dein Anliegen aber durchaus berechtigt, mach das nur, vielleicht kommt etwas vernünftiges dabei heraus. Bibliotheken für Devices, bei denen man nur den Baustein in die SPS "wirft" und das Gerät tut was es soll, bringt bei Störungen vernünftige Fehlermeldungen, wären doch schon ein Fortschritt. Aber wir bekommen ständig neue Geräte, geänderte Firmware, neue Funktionen, da wirst du gut zu tun haben, um hinterherzukommen. Ob sich das lohnt? Keine Ahnung, du wirst es herausfinden.
 
Ja das habe ich mir gedacht.
Die klassische Programmierung in der SPS Welt geht halt leider immer davon aus, dass man Fehler im Code hat und der Kunde diese bitte selber beheben soll.
Wenn man immer wieder auf Programmodule (Objekte) zurückgreift, kann man nach einer gewissen Zeit davon ausgehen, dass nahezu alle Fehler behoben sind. Das ist die Idee, wo man hin will.
Den Source Code kann der Kunde von mir aus auch haben, jedoch glaube ich nicht, dass er es im Detail verstehen kann. Wenn am den Code jedoch so einfach schreiben muss, dass jeder Instandhalter es versteht, wird man nie zum OOP hinkommen.
Der ewige Kreis, den ich schon seit Jahren versuche zu durchbrechen.

Der Fachkräftemangel, wird mich hierbei jedoch unterstützen.

Grüße
Hans
Das Problem sind nicht die Fehler im Code, sondern ganz so wie auch rostiger Nagel schrieb, fehlende Verknüpfungen.
Ich hab hier aktuell eine NC-Achse bei der rund 80 - 100 Bedingungen für den Start erforderlich sind. Ein Teil davon hängt an Sensoren, ein Teil an Typdaten, ein Teil Bearbeitungsergebnissen. Einen Großteil habe ich sicher durch die Visualisierung dargestellt, einen weiteren Teil durch den PLC-Code-Viewer von ProDiag, aber ich bin mir sicher, dass der Fall eintreten wird, wo ein Instandhalter einen Blick in den Code werfen muss. Und sei es nur um festzustellen, dass der Schlosser bei der Wartung am Wochenende die Lichtschranke auf den falschen Reflektor eingestellt hat.
In so einem Fall macht instandhaltungsfreundlicher Code den Unterschied, ob ich am Montag um 5Uhr morgens schlafen kann oder ob das Telefon klingelt.

Was mich ärgert, ist die geringe Wertschätzung von Instandhaltern.
Die Kollegen müssen Fehler an Anlagen finden, an die wir als Programmierer überhaupt nicht gedacht haben.
Hätten wir daran gedacht, dann hätten wir ja eine Fehlerroutine / Fehlermeldung programmiert.
Also kann man die Frage stellen, wer den nun das bessere Verständniss für Anlagen und Prozesse hat.

Ein weiteres Thema im Umfeld von OOP sind Anpassungen und Änderungen.
Klassisches Beispiel für OOP ist ja immer Fördertechnik. Einmal einen Template für einen Riemenförderer erstellt, kann man ja sogar Codegeneratoren erstellen und aus dem 3D-CAD automatisch SPS-Programme erzeugen. Zustimmt in der Theorie.
Blöd nur wenn man während der Inbetriebnahme feststellt, dass man eine neue Variante braucht und alles an Biblotheken hängt.
Will man es ordentlich machen, dann ist ein Tag damit verbraten. Muss es schnell gehen, dann entstehen Murkslösungen, die einem beim Update der Bibliothek um die Ohren fliegen und der nächste Kollege überhaupt nicht versteht.

Mein Fazit:
OOP ist in der SPS absolut sinnvoll ... wenn man sie mit Sinn und Verstand nutzt.
 
Zurück
Oben