Programmstruktur Step7

Zuviel Werbung?
-> Hier kostenlos registrieren
Du differenzierst nichtmal danach, ob der Zugriff quer oder per Visu verachtenswert ist. Stelle bitte dar, warum nicht nur der Querzugriff Scheisse ist, sondern auch der Visu-Zugriff.
Das habe ich doch schon getan:
Lesen aus der Instanz, klar warum nicht.
Schreiben absolutes "no go", da die Daten nicht richtig gesichert werden können.
Sprich wird der Instanzdatenbaustein frisch generiert, da der FB erweitert wurde, müssen am Panel die Daten neu eingegeben werden.
Das geht ja wohl überhaupt nicht.
Hallo Perfektionist, das was du hier schreibst macht deinem Namen nicht alle Ehre.
Mit so einem Namen erwartet jeder absolut perfekte unantastbare Programmierung. ;)
Sind eigentlich immer an jeder Anlage zig Programmierer mit allen erdenk-
lichen Schnittstellen nach außen oder gibt es den Fall auch das nur einer
daran Arbeitet, ohne Schnittstellen. Ich denke da so an überschauliche
Maschinen, nicht immer Atomkraftwerke.
Sollte an dieser Stelle nicht kommen: "Auch die Instandhalter müssen mit der Anlage klar kommen." ;)
OK, als nicht genanntes Argument lasse ich gelten das nicht gleich jeder Instandhalter FB's erweitert.
Aber gut das wir mal darüber gesprochen haben. :ROFLMAO:
 
Sollte an dieser Stelle nicht kommen: "Auch die Instandhalter müssen mit der Anlage klar kommen." ;)
OK, als nicht genanntes Argument lasse ich gelten das nicht gleich jeder Instandhalter FB's erweitert.
Aber gut das wir mal darüber gesprochen haben. :ROFLMAO:

aber instandhalter können doch erweitern bzw
warten. Irgendwann kommst du auch dahin,
ich habe auf jeden Fall Geduld mit dir :ROFLMAO:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ich greife zu. Ich greife in einer Instanz mit der HMI so ungeniert zu, wie in einer SPS im Merkerbereich.
Das überrascht mich dann doch gehörig, wo Du doch so oft von Kapselung schreibst und Querzugriffe auch ablehnst.
Fast möchte ich Dir vorschlagen, unsere Nicknames zu tauschen. Mir deucht, Deiner passt besser zu mir ;)

Schließt man das Kabel vom Start/Stop-Taster samt Leuchtmelder direkt am Hauptschütz des Antriebs an oder benutzt
man Hilfskontakte und setzt im Schaltschrank eine extra Klemmleiste?
Warum soll man nicht in der Elektrik bewährte Prinzipien auch für die Programmierung anwenden, auch wenn man nicht
weiß, warum etwas heute so-und-so gemacht wird?

Ich war jetzt auf der Suche nach der Fraktion, die den Zugriff der HMI auf Instanzen verachtenswert findet.
Ich finde Zugriffe der HMI auf Instanz-DB als absolutes No-Go, und zwar aus praktischen Erfahrungen.
Ich hatte in meinem Programmiererleben auch mal die Phase, wo ich HMI-Zugriffe auf IDB in Ordnung fand (ist doch
so quick und easy), doch spätestens bei nachträglichen Änderungen an diesen Programmen wurde ich dafür mit teils
erheblicher Mehrarbeit bestraft.

Gründe für meine Meinung:
* die Problematik der Initialisierung von IDB bei deren Neu-Generierung wurde schon von Paule genannt
* manchmal kann das HMI-Projekt nicht geändert werden oder die Änderung ist sehr aufwendig
* ich möchte bei Programmänderungen nur eine (zusammenhängende) Schnittstelle zur HMI beachten müssen
* mein Steuerungsprogramm soll Vorrang vor Eingriffen der HMI haben
* keine Eingaben/Bedienungen der HMI werden ungeprüft oder unverknüpft im Steurungsprogramm verarbeitet
* die HMI und die HMI-Animationen sind leichter testbar, wenn sie nicht auf die original-Variablen zugreifen

Es kommt öfter vor als gedacht, daß Hersteller einer Anlage wegen schlechtem Projektmanagement nicht mehr wissen,
welche HMI-Projektversion aktuell in der Anlage ist oder das aktuelle HMI-Projekt garnicht mehr besitzen. Und noch
öfter, daß sie für ein paar simple Adress-Anpassungen exorbitante Preise verlangen.
In diesen Fällen dürfen also Programmänderungen auf keinen Fall Einflüsse auf die HMI haben.
Wenn ich dann IDB nicht ändern darf, weil die HMI wahrscheinlich direkt darauf zugreift, dann möchte ich regelmäßig
jemanden würgen ...

Doch auch wenn das HMI-Projekt vorhanden ist, kann eine notwendige Änderung an IDB (besonders bei Multi-Instanzen)
erhebliche Arbeit am HMI-Projekt nach sich ziehen. Oft ist das HMI-Projekt nicht im Steuerungsprojekt integriert.
Dann müssen alle nötigen Adressänderungen per Hand ausgeführt werden. Und nicht jede HMI-Software ist so einfach
aufgebaut wie ProTool.
Immer ist aber zumindest eine Neu-Generierung des HMI-Projektes nötig und es muß (meist im laufenden Betrieb) auf
alle betroffenen Panele und Visualisierungen aufgespielt werden. Das können auch mal 10 OP7 sein, wo man mit dem
Notebook zu jedem einzelnen OP hinlaufen muß, um das Projekt aufzuspielen. Dazu kommt der Organisationsaufwand,
weil die noch nicht upgedateten Panele auf keinen Fall benutzt werden dürfen oder die Panele müssen gar vorab alle
ausgeschaltet werden.

Diese viele Arbeit ist nicht nötig, wenn die HMI ausschließlich über wenige Schnittstellen-DB auf die Steuerung
zugreift und niemals über IDB. Ich betrachte die HMI-Schnittstellen-DB als Rangier-Klemmleiste zur HMI.

Bei mir erhält die HMI fast nie Zugriff auf die original-Steuerungsvariablen, sondern regelmäßig nur auf Kopien
oder Zwischenvariablen in den Schnittstellen-DB. So ist es unerheblich, wenn die HMI durch Projektierungsfehler
oder Compilierfehler auf diese Variablen schreibt. In den meisten HMI-ES die ich kenne, kann man Prozessvariablen
nicht als read-only deklarieren. Nur in Wonderware Intouch kann man ein entsprechendes Häkchen setzen, doch auch
da wird dieses Feature sogut wie nie von anderen Programmierern genutzt, weil das zusätzliche Arbeit macht.

(Hier muß ich allerdings erwähnen, daß man bei Simatic-CPU alle Variablen generell nicht vor Schreibzugriffen von
außen schützen kann. Einziger sicherer Schutz: nicht vernetzen!)

Eingabewerte von der HMI lasse ich nicht ungeprüft auf Steuerungsvariablen schreiben. Ich möchte nicht, daß meine
CPU in Stop geht oder das Steuerungsprogramm ins schleudern gerät, nur weil die HMI oder ein anderer vernetzter
Teilnehmer einen ungeeigneten Wert oder im ungünstigen Moment in eine Variable schreibt.

Auch Rezepturen lasse ich nicht direkt in die Zielvariablen schreiben, sondern immer nur in einen Datensatz-Puffer.
Bei mir bestimmt das Steuerungsprogramm, ob und wann es die neuen Rezepturwerte übernimmt.

Tastenbits von der HMI werden immer wie normale Hardware-Taster im Programm verknüpft und zusätzlich zu Beginn des
ersten OB1-Zyklus und am Ende des OB1 gelöscht, weil nicht sicher ist, daß auch der Tasten-Release-Code von der HMI
in der Steuerung ankommt.

Ausnahmen von diesen Prinzipien kommen vor, haben dann spezielle Gründe, bestätigen aber die Regel.

Weil ich nicht bei jedem Projekt von vornherein sagen kann, ob die Einhaltung meiner Prinzipien nun für dieses
spezielle Projekt essentiell ist und was später noch draus wird, halte ich es eben immer so.
Ich sehe diese Prinzipien als einen wesentlichen Baustein dafür, daß die von mir programmierten Anlagen in aller
Regel jahrelang ohne Steuerungsprobleme und immer berechenbar funktionieren.

Ach ja:
Die HMI und die HMI-Animationen sind viel leichter testbar, wenn sie nicht auf die original-Variablen zugreifen,
sondern auf Variablen-Kopien im Schnittstellen-DB, besonders im laufenden Betrieb.
Die Variablen-Kopie im Schnittstellen-DB läßt sich ohne Auswirkungen auf das Steuerungsprogramm gut manipulieren.

Gruß
Harald
 
Der Erklärung von Harald ist nichts mehr hinzu zufügen.
Es ist nicht hoch genug anzurechnen, dass sich jemand soviel Zeit nimmt, um dies so ausführlich zu erklären.




bike
 
Warum soll man nicht in der Elektrik bewährte Prinzipien auch für die Programmierung anwenden, auch wenn man nicht
weiß, warum etwas heute so-und-so gemacht wird?
Erstensmal sollte man jederzeit wissen was man tut. Und Prinzipien aus dem Bereich der Elektrik müssen nicht zwangsläufig auf den Bereich Programmierung übertragbar sein.

Nun steht die These im Raum, man müsse (bzw. solle besser) die Ein- und Ausgaben der HMI über definierte Schnittstellen abwickeln. D.h., die Visu-Daten eines IDB müssen an dessen Bausteinschnittstelle als IN- und OUT-Parameter gelegt werden (da Siemens dafür keinen eigenen Bereich dediziert). Im Schrank nennt sich dieses Vorgehen "Rangieren". In der SPS stehen für diesen Zweck Merker und/oder Global-DB zur Verfügung. Die HMI soll demnach mit diesen Global-Daten kommunizieren und diese Globaldaten werden an die Bausteinschnittstellen verschaltet. Man korrigiere mich, falls diese Darstellung unzutreffend sein sollte.

Vorteil: es ist absolute (was auch immer nun "absolut" heissen soll) - also, es ist absolute Kapselung gegeben.

Das bringt mit sich: man ist nicht festgelegt auf eine bestimmte Visu, die symbolische Verbindung zum IDB fällt weg, die Methode ist das, was sie sein soll: eine BlackBox, die von ihren inneren Abläufen/Strukturen nichts preis gibt (bzw. nichts preis zu geben braucht).

Probleme, die dieses Vorgehen nicht löst: die Datenrichtung ist festgelegt. Eine Eingabe ist eine Eingabe, eine Ausgabe eine Ausgabe. Die Änderung an einem IN/OUT-Parameter kann zu unerwarteten Ergebnissen führen, wenn der Visu-Zugriff nicht am Zykluskontrollpunkt stattfindet. Ich kann es zur Zeit nicht belegen,bin jedoch der Meinung, dass der Zugriff der Visu vollständig asynchron zum SPS-Zyklus abläuft (mal s7-300 und ein WinCE5-Panel mit DP-Kommunikation vorausgesetzt).

Ein weiterer Nachteil ist, dass nicht auf den ersten Blick erkennbar ist, welche Koppelvariable zu welcher Methode gehört. Das Symbol in der (Flex-)Visu lautet dann nicht "Anlage_Instanz".Klappe_Instanz.Umschaltparameter, sondern eben nur "MW200". Oder "A_Kl_UmschP". Oder "KoppelDB".Anlage_Instanz.Klappe_Instanz.Umschaltparameter. Inclusive Datenverlust, wenn ich den Koppel-DB umstrukturiere.

Ich möchte mal Haralds Text nun durchgehen:
...
* manchmal kann das HMI-Projekt nicht geändert werden oder die Änderung ist sehr aufwendig
...
Es kommt öfter vor als gedacht, daß Hersteller einer Anlage wegen schlechtem Projektmanagement nicht mehr wissen, welche HMI-Projektversion aktuell in der Anlage ist oder das aktuelle HMI-Projekt garnicht mehr besitzen. ... In diesen Fällen dürfen also Programmänderungen auf keinen Fall Einflüsse auf die HMI haben.
Wenn ich dann IDB nicht ändern darf, weil die HMI wahrscheinlich direkt darauf zugreift, dann möchte ich regelmäßig jemanden würgen ...
Mein lieber Harald, da ist ja die Ursache für Deinen Würgereiz ja nicht schlechter Programmierstil. Aber wer schlechtes Projektmanagement pflegt wird wohl auch eher zufällig seine Anlage zum Laufen gebracht haben. Oder mit voller Absicht dieses Zustand herbeigeführt haben, um dann bei einer Pipifax-Änderung reichlich zulangen zu könen.

* ich möchte bei Programmänderungen nur eine (zusammenhängende) Schnittstelle zur HMI beachten müssen
Meinst Du einen Programmbaustein oder ein Gesamtprogramm (also den gesamten Ablauf in einer SPS)?

* mein Steuerungsprogramm soll Vorrang vor Eingriffen der HMI haben
* keine Eingaben/Bedienungen der HMI werden ungeprüft oder unverknüpft im Steurungsprogramm verarbeitet
Dazu ist keine Schnittstelle nötig. bestenfalls hilfreich.

* die HMI und die HMI-Animationen sind leichter testbar, wenn sie nicht auf die original-Variablen zugreifen
ich behaupte jetzt ganz frech das Gegenteil: ich kann einen FB mitsamt seinem IDB und der für ihn erstellten Visu-Seite völlig losgelöst von irgendwelcher Rangiererei testen.

Oft ist das HMI-Projekt nicht im Steuerungsprojekt integriert.
Ich bin davon ausgegangen, dass keiner so arbeiten will. Wenn es so ist, dass jemand die Möglichkeiten, die seit Protool 6.0 zuverlässig funktionieren, nicht nutzen will, dann kann ich nachvollziehen, dass jemand nicht nur rangieren will, sondern sogar dazu weitgehend gezwungen ist.

Immer ist aber zumindest eine Neu-Generierung des HMI-Projektes nötig und es muß (meist im laufenden Betrieb) auf alle betroffenen Panele und Visualisierungen aufgespielt werden. Das können auch mal 10 OP7 sein, wo man mit dem Notebook zu jedem einzelnen OP hinlaufen muß, um das Projekt aufzuspielen. Dazu kommt der Organisationsaufwand, weil die noch nicht upgedateten Panele auf keinen Fall benutzt werden dürfen oder die Panele müssen gar vorab alle ausgeschaltet werden.
Auch das ist kein spezifisches Problem, das durch den direkten Zugriff auf Instanzdaten entsteht. Erstens ist mal nach Änderung einer Instanz grundsätzlich ein CPU-Stopp (oder mindestens mal ein Neuanlauf des betroffenen Prozesses) notwendig, da S7 nicht in der Lage ist, die aktuellen Werte einer Instanz in die geänderte Instanz zu übernehmen. Wäre S7 in der Lage, so wären auch entsprechende Mechanismen denkbar, die die Visu nutzen könnte, sich auf sich verändernde Adresslisten einzustellen. Die zehn OP7 sind wohl heute kein stichhaltiger Grund mehr. Ein einziges TP277, das temporär nicht korrekt arbeitet, jedoch schon.

Bei mir erhält die HMI fast nie Zugriff auf die original-Steuerungsvariablen, sondern regelmäßig nur auf Kopien oder Zwischenvariablen in den Schnittstellen-DB. So ist es unerheblich, wenn die HMI durch Projektierungsfehler oder Compilierfehler auf diese Variablen schreibt.
Sorry - also, wenn die HMI auf die falsche Variable zugreift, spielt es dann noch eine Rolle, ob rangiert oder nicht? Aber der Prozess flippt trotzdem aus, das falsche Ventil reagiert auf den Tastendruck oder gar auf eine Sollwertänderung. Da ist die Rangiererei nur eine zusätzliche Fehlerquelle. Projektierungsfehler kann ich mit Rangiererei nicht abfangen. Compilerfehler auch nicht.

Nur in Wonderware Intouch kann man ein entsprechendes Häkchen setzen,
Zugegeben: mein Erfahrungshorizont ist Protool V2 bis V6 und Flexible. Und bei Flex funktionierte die Symbolanbindung zugegebenermaßen auch nicht vom ersten Tag an so, wie es zuletzt in PT funktionierte.

Eingabewerte von der HMI lasse ich nicht ungeprüft auf Steuerungsvariablen schreiben. Ich möchte nicht, daß meine CPU in Stop geht oder das Steuerungsprogramm ins schleudern gerät, nur weil die HMI oder ein anderer vernetzter Teilnehmer einen ungeeigneten Wert oder im ungünstigen Moment in eine Variable schreibt.
Du schreibst hier zwar viele Wahrheiten - nur hat das mit der Rangiererei auch in diesem Fall hier überhaupt nichts zu tun. Der ungünstige Moment hat was mit Datenkonsistenz zu tun, Wertebereiche kann das Programm prüfen, rangiert oder auch nicht rangiert. Und Wertebereichsgrenzen kann man sogar bereits in der Visu parametrieren. Zumindest bei Flex.

Auch Rezepturen lasse ich nicht direkt in die Zielvariablen schreiben, sondern immer nur in einen Datensatz-Puffer. Bei mir bestimmt das Steuerungsprogramm, ob und wann es die neuen Rezepturwerte übernimmt.
Ich hatte bis jetzt noch nicht den Fall, dass ich sämtliche Parameter auf einmal in die Steuerung, sprich: "konsistent", laden musste. Das kann notwendig sein. Ist es jedoch (bei mir) in aller Regel nicht. Da meine Maschinen in der Rüstphase stehen, könnte genausogut jemand einen Zettel mit den neuen Parametern nehmen und diesen in die Steuerung (Visu) reinhacken.

Tastenbits von der HMI werden immer wie normale Hardware-Taster im Programm verknüpft und zusätzlich zu Beginn des ersten OB1-Zyklus und am Ende des OB1 gelöscht, weil nicht sicher ist, daß auch der Tasten-Release-Code von der HMI in der Steuerung ankommt.
Ich verwende hierzu vorzugsweise Merker, da diese die meiste Ähnlichkeit zum PAE besitzen. Da ich mir aber nicht sicher bin, ob die Daten wirklich am Zykluskontrollpunkt von der Visu in die SPS geschrieben werden, verwende ich gerne eine Flankenauswertung. Ganz sicher ist jedoch, dass der Release-Code nie ankommt, wenn man während des Tastendrucks einen Stecker vom Panel abzieht. Aber auch hierfür brauche ich nicht zu rangieren. Wenn ich den Befehlsmerker jedoch an den Eingang eines FB parametriere, so kann ich wenigstens für die Instanz sicher sein, dass sich der Befehl während der Abarbeitung des FB nicht ändert.
 
Fortsetzung

Ach ja:
Die HMI und die HMI-Animationen sind viel leichter testbar, wenn sie nicht auf die original-Variablen zugreifen, sondern auf Variablen-Kopien im Schnittstellen-DB, besonders im laufenden Betrieb. Die Variablen-Kopie im Schnittstellen-DB läßt sich ohne Auswirkungen auf das Steuerungsprogramm gut manipulieren.
Du wiederholst Dich. Das hatten wir weiter oben schonmal. Diesmal klingt es ein wenig so, als ob Du zunächst den FB entwickelst (oder was auch immer bei Dir das Programm ist) und dann danach die Visu machst. Bei mir geht das mehr Hand in Hand. Als Beispiel mag da mal ein Kartonierer dienen: der zerfällt z.B. in einen FB Einleger, der in drei Instanzen aufgerufen wird, in einen FB Produktabruf und -verfolgung, in einen FB Leimung, der auch zwei bis vier Instanzen hat. Jede der drei Instanzen der Einleger hat eine Gruppe von Bildern, die diese visualisieren. Die Produktverfolgung ebenso, und jede Leimdüse auch. Die Programmentwicklung erfolgt also: FB schreiben, Instanzen festlegen, Visubilder machen. Nächsten FB schreiben, IDB machen und Visu dazu. uswusf.

Noch ein weiterer Einleger gefällig?
geht so: Projekt kopieren. IDB auf freie Nummer schieben. Visu mit den/der verschobenen DB-Adressen/-Nr. generieren. Der Instanz einen weiteren (neuen) Namen geben. Jetzt die Visu nochmals neu generieren. Dann die geschobenen Objekte ins Ursprungsprojekt reinkopieren. Rangieren ist da nur lästig. Und wenn es unbedingt sein muss, dann kann man ja doch noch die Visu in den IN/OUT-Bereich legen.

Ich sehe diese Prinzipien als einen wesentlichen Baustein dafür, daß die von mir programmierten Anlagen in aller Regel jahrelang ohne Steuerungsprobleme und immer berechenbar funktionieren.
Dann geb ich halt meinem Erfolg auch noch recht: gerade erst habe ich eine zehn Jahre alte Steuerung (von mir) umgeändert. Mit so ekelhaften Dingern wie zwei OP7 drin. Ich musste doch tatsächlich zu jedem persönlich hinlaufen und hatte schon einen Riesenschreck bekommen, ob ich denn überhaupt diese RS232-Datenleitung dafür dabei hätte. Protool6 hat erstmal eine neue Firmware übertragen. Bei einem zwei Jahre alten Flex-Projekt hätte mir das Schweissperlen in die Stirn getrieben. Aber die Hochrüstung von PT5 auf PT6 war schon immer problemlos. Ich hab nichtmal zuvor Prosave angeworfen (Rückbau wäre eh nicht möglich gewesen). Damals vor zehn Jahren hab ich auch noch ein wenig anders programmiert. Da gab es tatsächlich noch einen Globaldatenbaustein für die Servicebedienung, die vom OP7 ausgeht. Das war damals gut ausgedacht - in Anlehnung an S5-Zeiten. Ist heute besser ausgedacht. Will sagen: auch ich kann auf Erfolge zurückblicken. Allerdings: wenn ich lese:
... auch wenn man nicht weiß, warum etwas heute so-und-so gemacht wird?
dann muss ich sagen: man sollte wissen, warum man gestern etwas so und heute anders macht. Und wer eine Sache schon immer soundso gemacht hat sollte dennoch andere Möglichkeiten gelten lassen. denn:
Ausnahmen von diesen Prinzipien kommen vor, haben dann spezielle Gründe, bestätigen aber die Regel.
Und
Weil ich nicht bei jedem Projekt von vornherein sagen kann, ob die Einhaltung meiner Prinzipien nun für dieses spezielle Projekt essentiell ist und was später noch draus wird, halte ich es eben immer so.
So, ich machs halt anders. Jeder kann es für seinen Teil rechtfertigen. Dem TE wird es nicht viel nutzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich der erste war der für die andere Fraktion eintrat, möchte ich mich kurz zur Sache melden
Ich war jetzt auf der Suche nach der Fraktion, die den Zugriff der HMI auf Instanzen verachtenswert findet.

Ein weiterer Nachteil ist, dass nicht auf den ersten Blick erkennbar ist, welche Koppelvariable zu welcher Methode gehört.
Warum denn das? Auch in einem Global DB kann man Strukturieren.
Das Symbol in der (Flex-)Visu lautet dann nicht "Anlage_Instanz".Klappe_Instanz.Umschaltparameter, sondern eben nur "MW200".
Das macht ja hoffentlich niemand, macht ja auch keinen Sinn.
Oder "A_Kl_UmschP". Oder "KoppelDB".Anlage_Instanz.Klappe_Instanz.Umschaltparameter. Inclusive Datenverlust, wenn ich den Koppel-DB umstrukturiere.
Datenverlust durch Umstrukturierung, in Zeiten der symbolischen Programmierung und der Verwendung von UDT's?
Wohl kaum!
Erstens ist mal nach Änderung einer Instanz grundsätzlich ein CPU-Stopp (oder mindestens mal ein Neuanlauf des betroffenen Prozesses) notwendig
Falsch, wenn du die Reihenfolge einhältst ist es im laufenden Prozess möglich.
Instanz-DB > FB > aufrufender Baustein.
In dieser Reihenfolge markieren und übertragen.
 
Datenverlust durch Umstrukturierung, in Zeiten der symbolischen Programmierung und der Verwendung von UDT's?
Wohl kaum!
Ändere Deinen UDT und schau mal, was mit den Aktualdaten in Deinem DB passiert.

Falsch, wenn du die Reihenfolge einhältst ist es im laufenden Prozess möglich.
Instanz-DB > FB > aufrufender Baustein.
In dieser Reihenfolge markieren und übertragen.
Ändere in Deinen Deklarationen einen Datentyp und es hat sich ausgereihenfolgt. Füge einen IN-Parameter hinzu und es hat sich ausgereihenfolgt. Ändre die Deklaration eines FB, den Du im FB als Multiinstanz aufrufst und es hat sich ausgereihenfolgt.

Tu bitte nicht so, als ob etwas, was gelegentlich funktioniert, immer funktionieren würde. Ich geb jetzt auch zu, dass ein Baustein, der einen FB als Multiinstanz verwendet, nicht gekapselt ist. Falls Du das überhaupt bemerkt hättest :?
 
Ich geb jetzt auch zu, dass ein Baustein, der einen FB als Multiinstanz verwendet, nicht gekapselt ist. Falls Du das überhaupt bemerkt hättest :?

ich glaube das ist das zauberwort, "FB nicht gekapselt".
Der FB wird nur mit Instanzdaten erzeugt um aus den Daten des Lokaldatenbereiches einen DB
zu erstellen. Das ist in diesen fall halt der Instanzdatenbaustein. Im Programm wird er quasi als
Globaldatenbaustein verwendet bzw. Missbraucht.

Ziel kann es z.b. sein das bei verwendung von IEC Timern nicht für jeden Timer ein eigener Daten-
baustein erzeugt werden muß, diese stehen dann als Multiinstanz im Lokalbereich des FB's, das
ganze hilft bei der Strukturrierung des Programmes.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Dokumentation HMI-Zugriffe

Hallo Perfektionist,

Danke für Deine ausführlichen Statements zu meinem Beitrag. Ich möchte aber nicht jedes Einzelne beantworten, dann würde diese Antwort auch für meine Begriffe viel zu lang werden. ;) Ich werde mir aber ein paar Deiner Aussagen herauspicken.

Nach mehrmaligem Durchlesen meine ich, daß Deine und meine Meinung zu dem Thema eigentlich gar nicht soweit auseinander liegen. Auch Du hast viele Wahrheiten geschrieben. Auch Dir sind die meisten möglichen Probleme beim Zusammenspiel Steuerungsprogramm und HMI bekannt und bewußt. Und doch sind Deine Schlußfolgerungen auf die Erkenntnisse andere als meine. Du willst durch besonders cleveres Vorgehen beweisen, daß Du die Probleme innerhalb der Siemens-Welt vollkommen im Griff hast. Ich will die Probleme lieber umgehen bzw. von vornherein vermeiden, und das auf eine Weise, die auch bei Steuerungen und HMI anderer Fabrikate funktioniert. (zugegeben: auch da, wo im speziellen Fall vielleicht gar kein Problem wäre - doch wie ich schon schrieb, ich halte mich immer an die angeführten Prinzipien, egal ob speziell nötig oder nicht. Ich will das nicht jedes Mal neu entscheiden.)

Oft ist das HMI-Projekt nicht im Steuerungsprojekt integriert.
Ich bin davon ausgegangen, dass keiner so arbeiten will. Wenn es so ist, dass jemand die Möglichkeiten, die seit Protool 6.0 zuverlässig funktionieren, nicht nutzen will, dann kann ich nachvollziehen, dass jemand nicht nur rangieren will, sondern sogar dazu weitgehend gezwungen ist.
Man muß mal über den Tellerrand schauen. Die Steuerungswelt besteht nicht nur aus total integrierten Siemens-Komponenten. Da gibt es auch andere HMI-Fabrikate, z.B. Exor/UniOp, Beijer, InTouch ... oder gar komplett selbstprogrammierte PC-Visu ohne jeglichen Quelltext. Die Generiersoftware dieser Fremd-Fabrikate kann garnicht in Step7 integriert werden. Ich kann mich auch nicht erinnern, jemals das richtige Siemens-WinCC komplett in ein Step7-Projekt integriert gesehen zu haben. Die Steuerung muß ebenfalls keine Siemens S7 sein.

Spätestens, wenn man keine Lizenz für die spezielle HMI-Generiersoftware hat oder das aktuelle HMI-Quellprojekt einfach nicht vorhanden ist, dann ist die HMI eine Blackbox und hat sich gefälligst an dokumentierte Schnittstellen zum Steuerungsprogramm zu halten.

Meine strikte Abneigung gegen Zugriffe der HMI direkt auf Objekte außerhalb der Schnittstellen-DB (z.B. Instanz-DB, globale Merker, Timer, ...) begründet sich daher, daß diese Zugriffe nur im HMI-Projekt dokumentiert sind und im Steuerungsprojekt nur in Form der Schnittstellen-DB sichtbar sind. Jegliche Zugriffe der HMI außerhalb der Schnittstellen-DB sind im Steuerungsprojekt ohne HMI-Projekt nur dann bekannt, wenn der Programmierer dies in einer extra erstellten Dokumentation erwähnt, die vorhanden und ohne das HMI-Projekt lesbar sein muß.

Alle mir bekannten Reengineering-Methoden können die HMI-Zugriffs-Dokumentation nur unvollständig rekonstruieren und nicht beweisen, daß die HMI nicht auf bestimmte Objekte zugreift. Zusätzlich ist eine solche Rekonstruktion arbeitsaufwändig, ist aber oft notwendig, nur weil der original-Programmierer das Rangieren und das Dokumentieren als lästige und unnötige Zusatz-Arbeit empfand.

Ohne die HMI-Zugriffs-Dokumentation ist jedes Ändern von Variablen-Adressen im Steuerungsprogramm und selbst die Nutzung vermeintlich ungenutzter Variablen ein Glücksspiel. Deshalb meine Meinung, HMI-Zugriffe generell nur über Schnittstellen-DB abzuwickeln.

Warum soll man nicht in der Elektrik bewährte Prinzipien auch für die Programmierung anwenden, auch wenn man nicht
weiß, warum etwas heute so-und-so gemacht wird?
Ich hoffe, Du fühltest Dich nicht persönlich angegriffen (Du hast es gleich zweimal zitiert). ;)

Das mit dem nicht-Wissen war nicht speziell auf Dich gemünzt. Ich meinte damit einfach nur Regeln, die man irgendwann gelernt hat und anwendet, ohne den genauen ursächlichen Grund dafür (noch) zu wissen. Solche Regeln gibt es mehr als man denkt.

Wer kann schon genau erklären, wie und warum sich die heute üblichen Taster- und Leuchtenfarben entwickelt haben, hält sich aber daran, weil es so üblich und teilweise sogar vorgeschrieben ist? Warum darf man auf der Autobahn nicht rechts überholen? Warum haben wir überhaupt Rechtsverkehr, wo doch der Linksverkehr viel früher üblich war, weil das die "natürliche" Variante ist?
Man muß also nicht immer wissen, warum etwas so-und-so gemacht wird. Hauptsache, man hält sich daran.

Gruß
Harald
 
asynchrone HMI-Zugriffe, Daten-Konsistenz im Zyklus

Im Schrank nennt sich dieses Vorgehen "Rangieren". […]
Probleme, die dieses Vorgehen nicht löst: die Datenrichtung ist festgelegt. Eine Eingabe ist eine Eingabe, eine Ausgabe eine Ausgabe.
Eine HMI-Variable im Schnittstellen-DB (als Kopie einer Prozeß-Variable) kann auch als IN/OUT-Variable von der HMI benutzt werden. Das muß man nur zusätzlich programmieren. Es kann sogar festgestellt werden, wann sich die HMI-Variable durch einen Zugriff von außen ändert und ggf. eine BeiÄnderung-Ereignisroutine aufgerufen werden.


Eingabewerte von der HMI lasse ich nicht ungeprüft auf Steuerungsvariablen schreiben. Ich möchte nicht, daß meine CPU in Stop geht oder das Steuerungsprogramm ins schleudern gerät, nur weil die HMI oder ein anderer vernetzter Teilnehmer einen ungeeigneten Wert oder im ungünstigen Moment in eine Variable schreibt.
Du schreibst hier zwar viele Wahrheiten - nur hat das mit der Rangiererei auch in diesem Fall hier überhaupt nichts zu tun. Der ungünstige Moment hat was mit Datenkonsistenz zu tun, Wertebereiche kann das Programm prüfen, rangiert oder auch nicht rangiert. Und Wertebereichsgrenzen kann man sogar bereits in der Visu parametrieren. Zumindest bei Flex.
Mit “ungünstiger Moment“ meine ich nicht Übertragungs-Konsistenz-Probleme, sondern wenn z.B. der Bediener ein Rezept in die Steuerung überträgt, die Bearbeitung des aktuellen Produkts aber noch nicht beendet ist oder wenn er Drehzahlen von Antrieben ändert, die nur gleichzeitig oder nur im Stillstand geändert werden sollen.
Gut, man kann das auch einfach als Bediener-Fehler abtun. Ich versuche solche Bediener-Fehler abzufangen.

Wertebereiche prüfen:
In Zeiten von Vernetzung, HMI, Visu, MES, ERP, LibNodave, Fernwartung ... verlasse ich mich nicht darauf, daß nur zulässige Werte in der Steuerung ankommen. Selbst dann nicht, wenn ich die Wertebereichsprüfung an allen Datenquellen durchführen könnte. Nur die Prüfung im Steuerungsprogramm vor der Verwendung garantiert mir zulässige Werte. Und nur, wenn die vernetzte Anwendung nicht auf die original-Zielvariable schreibt sondern auf eine Zwischenvariable. Nur dann kann das Steuerungsprogramm entscheiden, ob und wann es den Wert übernimmt.


Bei mir erhält die HMI fast nie Zugriff auf die original-Steuerungsvariablen, sondern regelmäßig nur auf Kopien oder Zwischenvariablen in den Schnittstellen-DB. So ist es unerheblich, wenn die HMI durch Projektierungsfehler oder Compilierfehler auf diese Variablen schreibt.
Sorry - also, wenn die HMI auf die falsche Variable zugreift, spielt es dann noch eine Rolle, ob rangiert oder nicht? Aber der Prozess flippt trotzdem aus, das falsche Ventil reagiert auf den Tastendruck oder gar auf eine Sollwertänderung. Da ist die Rangiererei nur eine zusätzliche Fehlerquelle. Projektierungsfehler kann ich mit Rangiererei nicht abfangen. Compilerfehler auch nicht.
Da muß ich Dir 100% Recht geben. Da war meine Begründung allerdings zu einseitig.

Die Benutzung von Variablen-Kopien hat bei mir noch weitere Gründe, was ich in meinem Beitrag wohl nicht ausführlich genug erwähnt habe:
* Überprüfung/Ablehnung der Eingabewerte durch das Steuerungsprogramm
* Übernahme der Eingabewerte zu einem der Steuerung angenehmen Zeitpunkt (z.B. bei Rezepturen)
* Daten-Konsistenz im OB1-Zyklus trotz asynchroner HMI-Zugriffe


Da ich mir aber nicht sicher bin, ob die Daten wirklich am Zykluskontrollpunkt von der Visu in die SPS geschrieben werden
Ich bin mir auch nicht ganz sicher, meine aber, daß die S7-400 schon immer B&B-Empfangsdaten nicht nur im Zykluskontrollpunkt in CPU-Variablen schreibt. Und ab der nächsten S7-300-Firmware-Generation V3.2 plant Siemens zur Erhöhung der Kommunikationsperformance (B&B) dies auch für S7-300 zu realisieren (projektierbares “Zeitscheibenverfahren“).
Siemens: Neues von der Hannover Messe 2010 (pdf) (Seite 7, Danke an IBFS für den Link)

Wenn man nun für den ganzen OB1-Zyklus gleichbleibende HMI-Variablen braucht und vor allem garantieren will, daß sich eine HMI-Variable zwischen der Prüfung und der Verwendung nicht ändert, dann muß man quasi ein eigenes Prozeßabbild der HMI-Eingabevariablen erstellen. Das geht nur, wenn die HMI nicht direkt auf die Prozeßvariable schreibt, sondern auf eine Zwischenvariable (und die hat sich in einem Schnittstellen-DB zu befinden ;) ).

Gruß
Harald
 
Visu manipuliert testen im laufenden Betrieb

Ach ja:
Die HMI und die HMI-Animationen sind viel leichter testbar, wenn sie nicht auf die original-Variablen zugreifen, sondern auf Variablen-Kopien im Schnittstellen-DB, besonders im laufenden Betrieb. Die Variablen-Kopie im Schnittstellen-DB läßt sich ohne Auswirkungen auf das Steuerungsprogramm gut manipulieren.
Du wiederholst Dich. Das hatten wir weiter oben schonmal. Diesmal klingt es ein wenig so, als ob Du zunächst den FB entwickelst (oder was auch immer bei Dir das Programm ist) und dann danach die Visu machst.
Am Anfang meines Beitrages hatte ich meine Prinzipien stichpunktartig aufgelistet und dann im Verlauf des Beitrags versucht, die einzelnen Punkte ausführlich zu erläutern. Die Erläuterung für den Punkt mit der Testbarkeit ist da wirklich zu kurz geraten. Hier also ein Beispiel:

Ich habe oft mit Siloanlagen und Verteilung von Produkten über verschiedene Wege zu tun. Die Rohrleitungs/Wege-Animation mache ich meistens erst zum Schluß, damit sie perfekt wird. Erst wenn die Aufteilung des Anlagenbildes fertig ist. Fast immer läuft die Anlage dann schon und ich kann dann nicht mehr alle Wege in echt einstellen, um die Animation zu testen. Nicht alle HMI kann man simulieren und außerdem will ich die Animation pixelgenau auf dem echten Panel oder Visu-PC sehen.

Dadurch, daß meine HMI-Variablen nur Kopien der Prozess-Variablen sind, kann ich sehr einfach die Verbindung der HMI-Variable zur Prozess-Variable im Schnittstellen-DB unterbrechen und statt dessen beliebige Werte in die HMI-Variable schreiben, ohne den laufenden Prozess zu beeinflussen und ohne das HMI-Projekt zu ändern.

ich behaupte jetzt ganz frech das Gegenteil: ich kann einen FB mitsamt seinem IDB und der für ihn erstellten Visu-Seite völlig losgelöst von irgendwelcher Rangiererei testen.
Kannst Du das auch im laufenden Betrieb, wenn Du das, was Du in der Visu testen willst, an der Anlage nicht schalten darfst?

Gruß
Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

meiner Meinung nach ist es selbstverständlich, dass die Siemens Visu auf die Siemens FB-Instanzen zugreift.

Das ist Siemens Philosophie!

WinCC und auch PCS7 sind auf der Visualisierung von Instanzen aufgebaut.
Siemens unterstützt das durch zahlreiche Funktionen innerhalb der S7 und WinCC.

Ich würde mal gerne so nen "von Hand angelegten Koppel-DB" sehen, der 30000 Variablen enthält und noch irgendwie übersichtlich ist...
Das geht doch gar nicht.

Ebenso die Animationen im Visualisierungssystem.
Wer verknüpft 30000 Variablen von Hand???
Das ist doch die Konsequenz von so nem Koppel-DB, oder habe ich das falsch verstanden?

Micha
 
meiner Meinung nach ist es selbstverständlich, dass die Siemens Visu auf die Siemens FB-Instanzen zugreift.

Das ist Siemens Philosophie!

WinCC und auch PCS7 sind auf der Visualisierung von Instanzen aufgebaut.
Siemens unterstützt das durch zahlreiche Funktionen innerhalb der S7 und WinCC.

Ich würde mal gerne so nen "von Hand angelegten Koppel-DB" sehen, der 30000 Variablen
enthält und noch irgendwie übersichtlich ist...
Das geht doch gar nicht.

Ebenso die Animationen im Visualisierungssystem.
Wer verknüpft 30000 Variablen von Hand???
Das ist doch die Konsequenz von so nem Koppel-DB, oder habe ich das falsch verstanden?

Leider wurde bisher zu wenig auf den Unterschied zwischen

händisch angelegten VISU-Kopplungen (STEP7-ProTool-Flex)

und

mittels wizzards angelegten VISU-Kopplungen (PCS7)

eingegangen.



Alles, was per Hand angelegt und modifiziert wird und es keine Synchronisation
in PCS7 Manier gibt sollten schon ordentlich dokumentiert sein.
Da gibt es im S7-Projekt in den FC/FBs oder im Quellordner genug Kommentarfelder.
Nur die muss man auch nutzen.

Sobald man mit WinCC arbeitet (noch nicht ganz PCS7) dann hat man zumindest,
wenn man AS-OS-Transfer nutzt, die schönen "grünen Wimpel" :ROFLMAO:.
Daran erkennt man, ob eine VISU-Anbindung einer Variablen vorhanden ist.

Beim "richtigen" PCS7 ist dann alles automatisert, und da ist der
Zugriff - z.B. auf Instanzen eines Motorbausteins ein normaler Weg.
Da sit man dann den PCS7-Mechanismen "ausgeliefert" :D

.

Das schöne an STEP7 ist, es gibt mind. 1000 verschiedene Programmierstile.

zwischen unnntöig aufwändig und genial einfach bis schwachsinnig ist alles dabei.

Dadurch wird es einfach nicht langweilig :ROFLMAO:

Frank
 
Öhm,
ich lese immer noch mit, obwohl nicht ganz einfach für mich, da ich die Siemens eigenen Visualisierungen nicht kenne. Ich hätte gern soetwas, stattdessen habe ich zum Beispiel hier eine Siclimat ZLT stehen, man stößt dort sehr schnell an unüberwindbare Grenzen, wo wahrscheinlich ein Wincc gerade erst mal warmläuft.
Wie schon beschrieben, werde ich ein Proface zur Visualisierung einsetzen, von daher ist es für mich übersichtlicher einen eigenen DB einzusetzen. Auch die Synchronisation im OB1 ist ein sehr wichtiger Aspekt, von daher gehöre ich momentan der Fraktion der GetrenntDBler an.
Für den Fall das ich irgendwas nicht mitgekriegt haben sollte, ob nun IDB mit seinen Besonderheiten oder einem DB, der diese nicht hat, es ist für mich eigentlich nur Speicherplatz. Aus dieser Sicht ist es doch zumindest erst einmal für die Symbolik der Variable im Programm gleichgültig wo diese steht. Ich muß doch nur wissen wie ich die Speicherstelle finde, wenn ich keine Symbolik zur Verfügung habe und dann halt auch noch richtig darauf zugreifen (z.B. mit dem Proface).
Von daher erstmal danke an alle diskutierenden, war bis hierher sehr lehrreich.

Gruß
Mario
 
Zuviel Werbung?
-> Hier kostenlos registrieren
....Aus dieser Sicht ist es doch zumindest erst einmal für die Symbolik der Variable im Programm gleichgültig wo diese steht.
Ich muß doch nur wissen wie ich die Speicherstelle finde, wenn ich keine Symbolik zur Verfügung habe und
dann halt auch noch richtig darauf zugreifen (z.B. mit dem Proface).
...

Das Problem speziell bei IDBs ist ja gerade foglendes:

Wenn es eine Adressenverbindung von der VISU zu einem IDB gibt und
irgend eine Schnachnase den zugehörigen FB des IDBs ändert, dann
verschieben sich innerhalb des IDB alle Adressen. Das wird u.U. bei
WinCC und PCS7 abgefangen aber nicht bei "handgemachten" VISU-
Anbindungen. Das ist der oben ofter zitierte Totalschaden.

Frank
 
Das Problem speziell bei IDBs ist ja gerade foglendes:

Wenn es eine Adressenverbindung von der VISU zu einem IDB gibt und
irgend eine Schnachnase den zugehörigen FB des IDBs ändert, dann
verschieben sich innerhalb des IDB alle Adressen. Das wird u.U. bei
WinCC und PCS7 abgefangen aber nicht bei "handgemachten" VISU-
Anbindungen. Das ist der oben ofter zitierte Totalschaden.

Frank

Das ist die eine Seite, doch die zweite ist, dass ich in der PLC prüfen will und muss, dass kein Mist von der VISU kommt.
Es werden die Werte von der VISU gelesen und geprüft, dann ggF skaliert und dann im Programm weiter verarbeitet.
Dann kann auch eine externe Datenbank oder Überwachungssystem oder das PLC Programm mit den Daten etwas sinnvolles anfangen.
Das ist etwas mehr Aufwand, aber der rechnet sich.


bike
 
... auch wenn man nicht
weiß, warum etwas heute so-und-so gemacht wird?
Ich hoffe, Du fühltest Dich nicht persönlich angegriffen (Du hast es gleich zweimal zitiert). ;)

Das mit dem nicht-Wissen war nicht speziell auf Dich gemünzt. Ich meinte damit einfach nur Regeln, die man irgendwann gelernt hat und anwendet, ohne den genauen ursächlichen Grund dafür (noch) zu wissen. Solche Regeln gibt es mehr als man denkt.

Wer kann schon genau erklären, wie und warum sich die heute üblichen Taster- und Leuchtenfarben entwickelt haben, hält sich aber daran, weil es so üblich und teilweise sogar vorgeschrieben ist? Warum darf man auf der Autobahn nicht rechts überholen? Warum haben wir überhaupt Rechtsverkehr, wo doch der Linksverkehr viel früher üblich war, weil das die "natürliche" Variante ist?
Man muß also nicht immer wissen, warum etwas so-und-so gemacht wird. Hauptsache, man hält sich daran.

Gruß
Harald
Da fühle ich mich nicht persönlich angegriffen, das empfinde ich als Angriff auf die gesamte Menschheit. Allerdings muss ich eingestehen, dass etwa 99% aller Menschen besser sich nach Deiner Leitlinie "tu es so, wie man es schon immer gemacht hat" richten sollten. Vielleicht sind es sogar 99,99%. Manchmal kommt es mir so vor.

Wie ich schonmal in diesem Forum erwähnte (das ist aber - glaube ich - in den Giftschrank gewandert), wie ich also schonmal erwähnte, gehöre ich zu den Menschen, die ziemlich alles kritisch unter die Lupe nehmen und hinterfragen. Und eben davon überzeugt sind, dass es nicht nur einen Weg nach Rom gibt. Sondern derer bewährte, aber auch neuere existieren. Oder sich sogar noch neuere finden lassen. Da tue ich mir naturgemäß mit
Man muß also nicht immer wissen, warum etwas so-und-so gemacht wird. Hauptsache, man hält sich daran.
sehr, sehr schwer.

Wenn jemand also sagt: auf der Autobahn überholt man nicht rechts, so ist das Eine Regel mit Ausnahmen. Geltungsbereich: z.B. Deutschland. Nicht generell in den USA gültig (wo? keine Ahnung - die Rechtsüberholbefürworter behaupten, dass es Länder gibt, in denen auf der Autobahn rechts überholt werden darf). Ausnahme in Deutschland? Ja, gibt es: auf Autobahnen in Deutschland darf auf einer separaten Fahrspur (abgetrennt durch die dicken Fahrbahnmarkierungen) rechts überholt werden. Wobei: ob das eine Ausnahme ist, empfindet jeder anders. Wer diese Ausnahmeregel kennt, wird es nicht als Ausnahme empfinden.

Auch den Rechtsverkehr kann oder sollte man sogar hinterfragen. Falls mal jemand auf die Idee kommt, die Verkehrsregeln weltweit zu harmonisieren. Da ist es vielleicht ganz hilfreich zu wissen, dass der Einbauort des Lenkrades (mein Großvater legte viel Wert darauf, dass das Ding nicht als Steuer bezeichnet wurde) mit einer sachlichen Begründung überhaupt nichts zu tun hat. Sondern damit, wo die Herrschaften sitzen. Wer also mit der Heuristik "der, der den Lenker links eingebaut hat, wird sich dabei schon was gedacht haben" zu Werke geht, begeht in meinen Augen ein Verbrechen.

Zur Sache: mein Horizont ist ganz klar auf Protool, Flexible und 300er beschränkt. In dieser kleinen, feinen Welt erlaube ich mir (kann ich mir erlauben?) ohne zu rangieren direkt mit der HMI in Instanzen zuzugreifen. Ausnahmen bestätigen auch hier die Regel: selbstverständlich muss auch ich mir Gedanken über Datenkonsistenz machen, also ggf. mal eine Visu-Variable zwischenparken, bevor ich sie im Programm weiterverwende. Allerdings muss die dann (bei mir) nicht extra in einem Global-DB stehen. Eine Welt, so wie Du sie schilderst, wo nichts festgelegt ist, nichtmal, dass mit S7 gearbeitet wird, verlangt wie selbstverständlich nach bestens dokumentierten Schnittstellen, nicht nur zwischen HMI und Steuerung.
 
Zurück
Oben