Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Hallo,
ich bastel an einem Programm welches über 2 Profibusschnittstellen einer SIEMENS S7-400 einen kompletten Profibusstrang simuliert.
Dies dient zum test der Anlage vor der IBN. Das Programm steht soweit und funktioniert tadellos.
Ich suche aber nach einer Möglichkeit bei künftigen Einsätzen etwas Zeit zu sparen bis die Simulation einer Anlage steht.
Folgendes Problem.
Ich habe eine globale Variable in der alle Adressen und aktuellen Werte aller simulierten Komponenten (Pumpen, Ventile, Heizungen, ...) stehen.
Alle Adressen und Variablen von jeder Komponente stehen in dieser globVar in einem Cluster.
Jedes Cluster besitzt ein ENUM-Bedienfeld namens 'Fehler'. Hiermit kann während der Simulation vom Normalbetrieb abgewichen werden.
Damit ich Einfluss auf das ENUM in der globalen Variablen nehmen kann, habe ich es bisher so gemacht, dass ich mir ein gleiches ENUM in einem VI hinterlegt habe und jede Wertänderung des ENUMs mittels Eventstrukturen in die GlobaleVariable eingetragen habe. Nun kann man sich denken, dass wenn man 300 Komponenten hat die alle ein Fehler-ENUM haben das anlegen der Events recht mühselig, um nicht zu sagen Sklavenarbeit, ist.
Kann man das nicht irgendwie einfacher machen?
Angehangen hab ich mal die globale Variable. (Version 8.51)
Ziel ist es also aus einem VI die Fehler-ENUMs zuverändern ohne in dem VI jedes ENUM mit einem Event bei Wertändeurng in die globale Variable schreiben zu lassen...
' schrieb:Ich habe eine globale Variable in der alle Adressen und aktuellen Werte aller simulierten Komponenten (Pumpen, Ventile, Heizungen, ...) stehen.
Naja, ist halt so.
Zitat:Alle Adressen und Variablen von jeder Komponente stehen in dieser globVar in einem Cluster.
Sind wenigsten alle Cluster vom selben Typ? bzw. würden alle Datensätze pro Komponente so umbaubar sein, dass der selbe Typ rauskommt?
Zitat:Nun kann man sich denken, dass wenn man 300 Komponenten hat die alle ein Fehler-ENUM haben das anlegen der Events recht mühselig, um nicht zu sagen Sklavenarbeit, ist.
Um die Sklaven wäre es mir nicht Schade, die sind dafür da, das zu tun.
Aber: 300mal eine Sache machen ist enorm Fehleranfällig (auch, wenns Sklaven machen).
Zitat:Kann man das nicht irgendwie einfacher machen?
Alle Cluster in ein Array legen und den Komponentenname als Indes in das Array verwenden. In der Eingabe dann Komponente auswählen, die manipuliert werden soll, und die manipulierten Daten dann über den Index dem entsprechenden Cluster zuweisen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:...dass wenn man 300 Komponenten hat die alle ein Fehler-ENUM haben das anlegen der Events recht mühselig, um nicht zu sagen Sklavenarbeit, ist....
das schreit nach LV - Scripting
1Postingempfehlungen, 2Motivation Fragen und Anpassungswünsche per PM werden, gegen Rechnungsstellung gerne beantwortet und realisiert ....wenn's dann doch kostenlos sein soll... bitte hier im LVF unter Berücksichtigung der voranstehenden Links posten.
' schrieb:Sind wenigsten alle Cluster vom selben Typ? bzw. würden alle Datensätze pro Komponente so umbaubar sein, dass der selbe Typ rauskommt?
Ne, das ist unmöglich. Zum Beispiel einen Temperatursensor so aufzublähen, dass zwischen ihm und einer Turbomolekularpumpe kein Unterschied mehr besteht wäre vielleicht irgendwie möglich aber das würde die Variable um den Faktor 10 erweitern und die Lesbarkeit um den gleichen Faktor vermindern.
' schrieb:Um die Sklaven wäre es mir nicht Schade, die sind dafür da, das zu tun.
Aber: 300mal eine Sache machen ist enorm Fehleranfällig (auch, wenns Sklaven machen).
Genau darum gehts. Es ist ne scheiß Arbeit, welche man mit Sicherheit nicht auf Anhieb fehlerfrei macht.
' schrieb:Alle Cluster in ein Array legen und den Komponentenname als Indes in das Array verwenden. In der Eingabe dann Komponente auswählen, die manipuliert werden soll, und die manipulierten Daten dann über den Index dem entsprechenden Cluster zuweisen.
Dies setzt voraus, dass alle Cluster gleich sind.
Ich habe etwa 15 verschiedene Cluster. Fast alle haben das benötigte ENUM mit dem Namen 'Fehler'. Ich wäre ja schon zufrieden, wenn ich mir für jeden unterschiedlichen Typ irgendwas basteln könnte....
' schrieb:das schreit nach LV - Scripting
hört sich schon mal gut an... sagt mir nur nix
Kann mir jmd nen Tipp geben wie das geht, ob ich dafür was verändern muss, etc
Alle Referenzen auf die Cluster in meiner globalen Variaben in ein Array (Referenzen gehen aber sicherlich nur auf ganze VIs und nicht auf Cluster innerhalb einer GlobVar, oder?)
Günstig könnte der Umstand sein, dass alle Cluster strict-Typ-Def sind...
Mit meinem Gedanken könnte ich dann dieses Array durchlaufen und jeweils prüfen ob das Cluster von Typ xy ist...
wenn ja dann 'kopiere' ich das Fehler ENUM heraus. Dann muss ich es immer noch irgendwie schaffen die Verbindung zwischen dem Oberflächen-VI und der globVar hinzubekommen...
Vielleicht ist mein Gedanke auch nicht in LV umsetzbar... ist halt nur so eine Idee...