Firmen-Norm

Zuviel Werbung?
-> Hier kostenlos registrieren
Da hast du bestimmt Recht - auf der anderen Seite erzeugt genau das eben keine wiederverwertbaren Bausteine...

Nicht jeder Baustein muss einen grünen Punkt haben. ;-)
Mir ist noch keine Anlage untergekommen, die 1:1 kopiert werden konnte / wurde.

Ein Chef von mir hat einmal gesagt:
Programmierer sind Künstler und welcher Künstler lässt sich alles für sein Kunstwerk diktieren?


bike
 
@Zotos
Ich ziehe den Hut vor deinem Versuch zu helfen.
Was das betrifft bin ich inzwischen sehr abgestumpft und habe nicht mehr die Kraft und die Nerven für solche Diskussionen.
Es freut mich das es in diesem Thread z.B. Leute wie dich gibt die einen sauberen strukturierten Stil folgen.
Andere können das geschriebene aufnehmen oder nicht, was nützt es anderen etwas aufzuzwängen das ein Großteil der Bitschubser vermutlich niemals begreifen wird?

Wenn sie so glücklich mit ihren Merkern und S5-Timern sind, dann sollen sie halt.
Und Leute wie wir sind glücklich - weil wir zumindest in dem Glauben sind - es besser zu können. :)
 
Um nochmal die Diskussion über die Strukktur anzukurbeln!!!

Ist es z.B. besser möglichst alles aus einer Hauptschrittkettezu starten oder die einzelen Schrittketten aus Zuständen zu starten?

Welche Diagnosemöglcihkeiten außer Profibus/Profinet abfrage /Systemfehler / Schrittkettenanzeige gibt es noch?
 
Welche Diagnosemöglcihkeiten außer Profibus/Profinet abfrage /Systemfehler / Schrittkettenanzeige gibt es noch?

Grundsätzlich das normale Meldeverfahren die auf der HMI angezeigt wird.
Da mir Meldungen nicht geizen, schauen was ist eine Störmeldung die Quittiert
werden muss und was ist eine Betriebsmeldung die einen Zustand anzeigt.

Beispiel:
Störung Luft, ist eine Meldung die Quittiert werden sollte, weil die grundlegend ist
weil es ohne der Luft nicht weiter geht.

Endlage erreicht, ist eine Betriebsmeldung die einen Bediener zeigt, die Achse kann
in die Richtung nicht weitergefahren werden, fahr Sie gefälligst in die andere Richtung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man sollte sich auch die Mühe machen und die Fehlercodes die z.B. Antriebe liefern auch in der Visu anzuzeigen. Hierfür kann man in eine Meldung eine Textliste integrieren welche den Fehlercode in Klartext verwandelt.

Auch ein sehr interessantes Konzept finde ich die Umrechnung von E/A Adressen in Fehlermeldungen. Wenn man z.B. einen Bewegungsbausteinschreibt kann dieser direkt mitteilen auf welchen Eingang er wartet und wechen Zustand dieser denn nun haben soll.
 
Ist es z.B. besser möglichst alles aus einer Hauptschrittkettezu starten oder die einzelen Schrittketten aus Zuständen zu starten?
Das lässt sich nicht pauschal beantworten.
Wenn es die Anlage ermöglicht, dann bevorzuge ich den Start aus den Zuständen heraus.
Damit ist der Wiederanlauf nach Störungsbeseitigung in der Regel wesentlich einfacher.
Ich arbeite damit sogar in den einzelnen Schrittketten und gliedere die Abläufe in Teilablaüfe und starte diese über Alternativverzweigung aus dem Initschritt heraus.
Da wir generell Schrittketten in Graph programmieren ist der Mehraufwand minimal.
Wenn du clever die Abläufe gliederst, dann bekomst die Vorteile von Schrittkette und Verknüpfungssteuerung ohne deren jeweiligen Nachteile.
Aber wie gesagt muss die Anlage auch dazu passen.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was meint er damit? Hört sich sehr interessant an. Kann mir das jemand näher erklären oder einen Beitrag nennen wo das gezeigt wird.

Danke.

Naja alle FB nutzen den selben Temp Bereich, wenn der zuvor aufgerufene da was ablegt, dann hat es der nächste direkt verfügbar.
Ist gemein wenn es nicht sauber dokumentiert und ersichtlich ist, ist aber sehr schnell 7 laufzeitoptimiert.


2 Möglichkeiten nutze ich selber.

  1. Seine Bausteine so anlegen das Sie einen InOut als STRUCT haben wo alle relevanten Daten für Schnittstellen übergeben werden. Funktioniert gut erzeugt aber unnötigen Code und erschwert die Lesbarkeit des Programms.

Nachteil bei INOUT UDT sind die ganzen Pointer die bei jedem Zugriff dafür gerechnet werden muss.
Das haut Extrem auf die Zykluszeit!
Optimaler ist ein IN ANY, das was an dem Pointer steht am Anfang vom Baustein mit SFC20 in den Temp/Stat Bereich. Damit zur Laufzeit arbeiten und im letzten Netzwerk den Inhalt von Temp/Stat wieder auf den Pointer mit SFC20.
Das ist WESENTLICH schneller als INOUT UDT! Dafür wird im MC7 Code für JEDEN!!! zugriff ein Pointer mit AR1 und AR2 eingefügt.
Wenn du die Deklaration von INOUT UDT genau anschaust, dann ist das intern nämlich auch nix anderes als ein ANY...
 
Man sollte sich auch die Mühe machen und die Fehlercodes die z.B. Antriebe liefern auch in der Visu anzuzeigen. Hierfür kann man in eine Meldung eine Textliste integrieren welche den Fehlercode in Klartext verwandelt.

Diese Idee hatte ich auch schon. Leider gibt es bei vielen Herstellern derart viele Fehlercodes, dass dieser Programmteil mehr als der Rest der Maschine ausmachen würde. Wenn dann nach jeweils einem halben Jahr neue Fehlerauswertungen hinzukommen, gibt das eine Dauerbaustelle.

Schöner fände ich, wenn die Komponenten einen "Fehlersting" ausspucken würden!

Der Wutbürger
 
Diese Idee hatte ich auch schon. Leider gibt es bei vielen Herstellern derart viele Fehlercodes, dass dieser Programmteil mehr als der Rest der Maschine ausmachen würde. Wenn dann nach jeweils einem halben Jahr neue Fehlerauswertungen hinzukommen, gibt das eine Dauerbaustelle.

Schöner fände ich, wenn die Komponenten einen "Fehlersting" ausspucken würden!

Der Wutbürger

String ist böse - Erde ist ein Kugel...

Wir haben für Antriebe in den SW Standard eine Motion-Control Bibliothek integriert.
An dem Motion Controller kann ich verschieden Ausgangstreiber verwenden (SEW FU, S120, Analogausgang,...)

Die Treiber übergeben die Fehlernummer von ihrem Gerät über den Achs-UDT an den Motion-Controller zurück.
Dieser generiert eine Sammelstörung für die Achse und gibt eine aufbereitete Störnummer an die Visu.

Aufbereitet bedeutet das einfach nur ein Offset addiert wird.

Störung-1 vom SEW MC07 ist dann halt 100001
Störung-1 vom S120 ist dann halt 200001
...

Das gleiche gibt's für die Eingangstreiber (PN, SSI, 1COUNT,...)
Die liegen halt dann von 501-1000, von 1001-1500,...

Oben in der Visu gibt es dann für jede Achse noch eine Störung, und eine Textliste in der alles drin ist.
Der MC-Baustein hat noch eine Art FIFO drin falls mehrere Störungen gleichzeitig auftreten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
String ist böse - Erde ist ein Kugel...

Wir haben für Antriebe in den SW Standard eine Motion-Control Bibliothek integriert.
An dem Motion Controller kann ich verschieden Ausgangstreiber verwenden (SEW FU, S120, Analogausgang,...)

Die Treiber übergeben die Fehlernummer von ihrem Gerät über den Achs-UDT an den Motion-Controller zurück.
Dieser generiert eine Sammelstörung für die Achse und gibt eine aufbereitete Störnummer an die Visu.

Aufbereitet bedeutet das einfach nur ein Offset addiert wird.

Störung-1 vom SEW MC07 ist dann halt 100001
Störung-1 vom S120 ist dann halt 200001
...

Das gleiche gibt's für die Eingangstreiber (PN, SSI, 1COUNT,...)
Die liegen halt dann von 501-1000, von 1001-1500,...

Oben in der Visu gibt es dann für jede Achse noch eine Störung, und eine Textliste in der alles drin ist.
Der MC-Baustein hat noch eine Art FIFO drin falls mehrere Störungen gleichzeitig auftreten.

Und genau das ist eine wirklich sinnvolle Standardisierung, sich alleine über die Fehler Nr. Gedanken
zu machen kann von großen Nutzen sein. Gibt am Telefon die Fehler Nr durch, weiß ein Projekt unbeteiligter
sofort wovon gesprochen wird. Auch Service am Telefon kostet Zeit und Geld.
 
String ist böse - Erde ist ein Kugel...
Es gibt Steuerungen, bei denen die Standard- IEC- Funktionen keine Probleme machen. Dort kann man mühelos mit Strings arbeiten. ;)

Oben in der Visu gibt es dann für jede Achse noch eine Störung, und eine Textliste in der alles drin ist.
Wenn diese Textliste vollständig sein soll, umfasst sie mehrere Seiten! :-?
Beispiel: Beckhoff AX5000 (links scrollen...)
Und gleich noch die Änderungen dazu: ax5000_diagmessages_version (leider ohne Datum!)
 
Es gibt Steuerungen, bei denen die Standard- IEC- Funktionen keine Probleme machen. Dort kann man mühelos mit Strings arbeiten. ;)

Ja, aber das Handling vom mehren Sprachen in der Steuerung wird schon komplizierter, oder?


Wenn diese Textliste vollständig sein soll, umfasst sie mehrere Seiten! :-?
Beispiel: Beckhoff AX5000 (links scrollen...)
Und gleich noch die Änderungen dazu: ax5000_diagmessages_version (leider ohne Datum!)

Ja, sieht beim S120 auch nicht besser aus, macht doch nichts.
Das geht in die meisten Visus mit einer Importfunktion, ggf. etwas Copy&paste oder im schlimmsten Fall ein Excelmakro...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Leider gibt es bei vielen Herstellern derart viele Fehlercodes, dass dieser Programmteil mehr als der Rest der Maschine ausmachen würde. Wenn dann nach jeweils einem halben Jahr neue Fehlerauswertungen hinzukommen, gibt das eine Dauerbaustelle.
...
Das stimmt alles.

Für einen Standard muss man in Vorleistung treten. Die ersten Maschinen und Anlagen werden aufwendiger dafür kann man die folgenden Maschinen um so leichter realisieren. Das ganze wächst und entwickelt sich von Maschine zu Maschine und Anlage zu Anlage weiter.

Die Fehlermeldungen werden wenn möglich, automatisch generiert und aus bereits vorhandenen Textlisten zusammen kopiert. Im Fall einer E-Achse wird der Name aus einer Textliste mit der Fehlermeldung aus einer anderen, in Abhängigkeit vom Typ der Achse, Text liste zusammen kopiert und angezeigt. Das ganze ist für Standard Bewegungen (Pneumatik Zylinder und Co.) ähnlich umgesetzt auch wenn da die Fehlerliste deutlich geringer ausfällt.

Um dies so umsetzen zu können besteht bei uns ein Eintrag in der Fehlerliste nicht nur aus einer Fehlernummer sondern aus mehreren Nummern und Zusatzfeldern: Typ (Störung/Warnung/Info), Quelle (E/A Adresse, Achsnummer, Bewegungsnummer, usw), Ereignis (der Fehlercode), Info (Zusatzinformationen), Zeit/Datum, Zähler.


Auch wenn ich von der Stringlösung nicht begeistert bin, lässt sich der Wunsch das anstelle von Nummern Strings geliefert werden relativ leicht mit ST/SCL und einer Case umsetzen. Ein Baustein gibt Dir eine Fehlernummer mit dem man einen Baustein ansteuert der mittels einer Case Verzeigung einen entsprechenden String als Rückgabewert liefert. Mit etwas Übung kann man dies mit Strg+C und Str+V und einem halbwegs guten Editor (z.B. Notepad++) relativ schnell aus dem Handbuch rauskopieren und in Quellcode verwandeln.
 
Eine weitere Möglichkeit wäre aus den ganzen Bibliotheksbausteinen einen UDT rauszugeben der alle Fehlermeldungen enthält. Dazu eine Excelliste mit Makro erstellen in der man passend zu dem DB die Fehler einträgt.

Also 2 Spalten:
BMK/Name ......... | Fehlermeldung ...................... | Ergibt
23S1 .................... NotHalt BMK gedrücket.............. Nothalt -23S1 gdrückt

Name Zylinder ........UDT Zylinder............................ Name Zylinder Fehler 1
.............................................................................Fehler Name Zylinder 2
.............................................................................Fehler Name Zylinder 3

Name Motor............ UDT Motor ..............................Name Motor Fehler 1
.............................................................................Fehler Name Motor 2
.............................................................................Fehler Name Motor 3
.............................................................................Fehler Name Motor 32

Als Ergebnis bekommt man die Liste die man in winCCFlexible, Movicon, ... importiert. Der Vorteil: Sprache und Hilfstexte können einfach editiert werden, Fehlermeldungen sind in allen Anlagen (fast) gleich, Je mehr Bausteine um so schneller sind die Fehlermeldungen erstellt, die größe der UDT (Anzahl der Fehlermeldungen) spielt keine Rolle.


Die UDT Zylinder, ... sind eigne Worksheets. Das Ergebnis auch.
 
Zuletzt bearbeitet:
In S7 sollen weder S5-Timer noch Merker Verwendung finden. Auch Instanz-Datenbausteine sollen rationiert werden. Der Übersicht wegen, soll alles in „Multi-Instanzen“ verpackt werden.
Auch verlangt der „neue Geist“, dass Bausteine zur Wiederverwertung entwickelt werden, an denen später keine Änderungen mehr vorgenommen werden dürfen.

Standards sind schlecht, wenn sie guten Programmierstil verhindern, oder schlechten erzwingen. Beispiel: Merker verbessern die Wiederverwendbarkeit der Programme, weil sie syntaktisch kompatibel zu (manchmal nicht vorhandenen) Ein- und Ausgängen sind.

In der "richtigen" Programmierung ist es gang und gäbe, dass Datenstrukturen auch verschachtelt werden und Funktionen sich gegenseitig aufrufen, auch ohne eigens entwickelte Buzzwords. Jetzt muss man vielleicht fast jeden FB in einen Dummy-FB wrappen, damit jemand beim Vortrag das Buzzword auf den Flipchart schreiben kann.

Wiederverwertung ist ja schön, aber das "keine späteren Änderungen" muss wohl aus dem "Waterfall-Modell" stammen. Soweit ich weiß, war das ursprünglich eine Parodie, um zu zeigen, wie es nicht gemacht werden soll. Aber das ist in Vergessenheit geraten.

S5-Timer sind durch IEC-Timer ersetzbar. Aber der muss erst in einen eigenen FB gewrappt werden, damit es eine Multiinstanz gibt. Habe ich sogar tatsächlich gemacht, aber aus anderen Gründen.

Nun ja, ich betreibe meinen eigenen Spuk, und verwende auch eigene implizite "Programmierrichtlinien". Beispielsweise sollten bei mir Variablennamen keine Leerstellen, Punkte und dergleichen enthalten.
 
Zurück
Oben