24.11.2006, 21:03
Beitrag #2
|
|
|
27.11.2006, 10:19
Beitrag #3
|
Herbert
LVF-Gelegenheitsschreiber
Beiträge: 53
Registriert seit: Oct 2006
8.2
2006
kA
59494
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
Hi, danke!
Sorry erstmal, das ich mich so spät erst wieder melde, aber ich hatte übers WE ne "schöne" Grippe! *ärger*
Das ist genau so, wie ich das haben wollte, allerdings verstehe ich das noch nicht ganz! Könntest du mir wenn möglich noch nen paar Tips und Erklärungen zu dem Programm geben?? Das wäre echt super!
Danke nochmals, Gruss Herbert
|
|
|
27.11.2006, 12:06
Beitrag #4
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
' schrieb:Allerdings verstehe ich das noch nicht ganz!
Da würde ich es aber vorziehen, dass du eine entsprechende Frage stellst und dass die dann beantwortet wird. Allgemeine Sachen sind für "Fragen" in einem Forum weniger geeignet.
Zitat:Könntest du mir wenn möglich noch nen paar Tips und Erklärungen zu dem Programm geben??
1. Initialisierung
Die beiden Sequenzen links der While-Schleife sind für die Programm-Initialisierung. Hier wird der "Datensatz" festgelegt. Es gibt eine "Typdefinition" für die Eingabe des Portnamen und eine für die Verkettung. (Dass die hier gleich heißen, ist ein Mangel in LV. Wenn die sowas zulassen, ich komme damit zurecht). In der oberen Sequenz werden alle "SPS-Daten-Listen" - Module 1..4, Merker, Zähler Hüllkurven etc. - definiert. Alleine durch die Festlegung der Länge der einen Dimension - Länge=4 - kann die Anzahl der Listen, hier nur vier Module, festgelegt werden. Länge=2 bedeutet: Eine Liste (die erste) für Eingänge, eine für Ausgänge. Länge=24 bedeutet: Das ist eine Liste. Am Ende der Sequenz werden noch die beiden Eingabefelder erstellt.
In der unteren Sequenz wird das Listenfeld erstellt. Eine Zeile im Listenfeld ist eine Verkettung => Array aus verkettungs-Cluster ergibt Listenfeld (die Zahl 24 ist in erster Linie nicht mit der Zahl 24 im oberen Array identisch). Beachte hier besonders die Einhaltung des (notwendigen) Datenflussprinzips mittels des ErrorClusters zwischen der unteren Sequenz und der While-Schleife.
2. "Statemachine" "Event in While-Schleife"
Das bedeutet, nur wenn der Anwender eine Aktion durchführt, wird auch programmatisch etwas gemacht. Beschte die Schieberegister. Damit stehen alles Event-Cases die aktuellen Daten zur Verfügung. (Beachte, dass bei der Erstellung eines neuen Cases nicht die Option "Standard verwenden" eintretten darf. Die "Sequenz-Anschlüsse" müssen immer (durch-)verbunden sein.) Mittels der Event-Struktur ist es möglich, so zu programmieren, wie man sich den Ablauf vorstellt. z.B.: "Wenn der Anwender in das Listenfeld klickt, möchte er diese Zeile editieren". Folge: Wertänderung im Listenfeld => Wert übernehmen nach Eingabecluster.
2.1 Event STOPP
Beachte, dass LV solange "an der Event-Struktur" hängt, bis ein Event eintritt. D.h. es ist (im vorliegenden Falle) nicht möglich, die Endebedingung der While-Schleife außerhalb der Event-Struktur mit dem Stopp-Button zu verbinden. Würde das so sein und jemand betätige den Stopp-Button, würde das Programm trotzdem solange mit Beenden warten, bis irgendein Event eintritt. Daher: Stopp-Button in Event und gut. (Eine andere Möglichkeit wäre ein zusätzlicher Timeout-Event.)
2.2 Event Cluster: "Wenn der Anwender eine verknüpfung geändert hat, soll die Änderung (natürlich) in das Listenfeld aufgenommen werden"
Erste Sequenz. Sinn und Zweck: Der Anwender hat z.B. das Modul gewechselt. Jetzt muss in das nächte Cluster-Feld die richtige Liste mit den Port-Namen geschrieben werden. Die richtige Liste wird mittels der Indizierung links ermittelt. (Das der Typ des Moduls nicht als Zahl, sondern als String vorliegt, das VI "Suchen Index" erforderlich). Die neue Liste wird dann in das entsprechende Feld geschrieben. Beachte hier den fehlenden Datenfluss zwischen den beiden STRING[]-Eigenschaftsknoten. Da nicht gesagt werden kann, welcher zuerst ausgeführt wird, muss hier mittels Error-Cluster Klarheit geschaffen werden. Bitte berichtigen. Sollte sich der Inhalt der Liste ändern, wird auch der angezeigte Text angepasst (Case). In der zweiten Sequenz werden die aktuellen Daten in das Listenfeld geschrieben.
2.3 Event TabControl: Was soll wohl passieren, wenn der Anwender das TabCOntrol wechselt?
Die angezeigten Daten in Eingänge und Ausgänge, diese entsprechen "Alter Wert" werden im Schieberegister gespeichert. Die gewünschten Daten (Neuer Wert) werden angezeigt.
Der Rest geht im Prinzip wie bereits beschrieben.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
27.11.2006, 13:03
Beitrag #5
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
Zitat:Warum kann ich nur das erste Modul benutzen und nicht das 2. Modul?? Wie kann ich das Programm erweitern, damit ich auch das 2. Modul benutzen kann??
Wenn du dich mit "2. Modul" auf das zweite Modul im TabControl beziehst, weis ich nicht was du meinst. Hier müsstest du deine Frage präzisieren.
Wenn du das "2. Modul" im Eingabecluster meinst, das rechte also, dann ist das klar: Hierfür gibt es noch nichts im Programm. Überall, wo im Programm bisher auf "Modul" bzw. das entsprechende "Ein/Ausgang" zugegriffen wird, muss natürlich auch "Modul 2" bzw "Ein/Ausgang 2" entsprechend manipuliert werden. Hierfür kannst du die entsprechenden Sequenzen (in den Events Cluster und Mehrspaltiges Listenfeld) kopieren und anpassen - oder als SubVI ausführen. (Kopieren im Prinzip analog zu den Events Eingäne und Ausgänge)
Zitat:Kann ich die Ein / Ausgänge auch speichern, so dass ich die Namen der Eingänge nicht ständig neu schreiben muss!?
Bestimmt kannst du. z.B. in Ini-Files. Namen des Abschnittes: "Port_%2d_%2d_%2d" (die %d sind die Indizes im Array). Namen der Schlüssel innerhalb eines jeden Abschnittes: "Name", "Wert" etc. (Die Anzahl der Schlüssel entspricht der Anzahl der Elemente im Cluster).
Das Abspeichern der Verknüpfungen geht im Prinzip analog.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
27.11.2006, 13:35
Beitrag #6
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
Zitat:Ich möchte gerne die Ein / Ausgänge miteinander Verknüpfen. Das ganze soll so eine Art kleine SPS werden. Also möchte ich den Ausgang 1 von Modul 1 z.B. zeitverzögert setzen, wenn z.B. Eingang 1 von Modul 1 und Ausgang 3 von Modul 2 aktiv sind?!Wie kann ich das Programm am geschicktesten erweitern?
Ich würde die Datensatzeingabe - also das Erstellen der Verknüpfungsliste - von der Abarbeitung dieser Liste.
Zwei Punkte müssten meiner Meinung nach ergänzt werden.
Der "Eingabecluster" muss um ein "Ergebnisfeld" erweitert werden. Eine Operation kann z.B. heißen (wie du schon gesagt hast) "Modul 1" verknüpft mit "Modul 2" gibt als Ergebnis "Modul 3". In der nächsten Zeile könnte dann "Modul 3" ein Eingangsparameter für eine weiteren Verknüpfung sein. Dadurch ist eine auch kompliziertere Abfolge von Verknüpfungen möglich. (Dass hier pro Eingangsmodul ein INT32-Feld vorhanden sein sollte, um z.B. einen Startwert setzen zu können, stellen wir mal ganz hinten an.)
Die zweite Erweiterung wäre eine "Online-Abarbeitung" des erstellten Listenfeldes. Ich würde hier zuerst einen Timeout-Event einführen und dort z.B. das Array "ObjektNamen" in ein SubVi übergeben. Das SubVI enthält ein Frontpanel, das den aktuellen Zustand der SPS darstellt - und das nicht geschlossen wird, sobald das VI verlassen wird. Außerdem befindet sich in diesem SubVI eine Statemachine, die die Liste abarbeitet. (Da das SubVI zyklisch alle (ungefähr) 250ms aufgerufen wird, kann es auch Zeiten verarbeiten). In einem zweiten Schritt könnte man das SubVI in eine eigene While-Schleife legen, dann muss man aber die Daten von der Eingabe-While-Schleife in die zweite übertragen - z.B. mit einem Melder (oder einer globalen Variablen).
Was ich nicht schön finde, ist, dass hier alles über Strings geht und nicht über (Index-)Zahlen. Beispiel: Als Ergebnis kommt heraus: Setze M4/P22. Da die Werte aller Ports in einem dreidimensionalen Array stehen, bedarf es eines Indexes um den Wert zu speichern. Den Index kann man sich natürlich auch mittels des VI "Index Suchen" holen - nur: eine Zahl, die von vorne herein ist, geht halt schneller. Indices erfordern halt beim Speichern der Eingabedaten in dem "Listenfeld" mehr Aufwand.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
28.11.2006, 15:18
Beitrag #7
|
Herbert
LVF-Gelegenheitsschreiber
Beiträge: 53
Registriert seit: Oct 2006
8.2
2006
kA
59494
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
Danke für die schnelle Antwort!
|
|
|
28.11.2006, 16:47
Beitrag #8
|
|
|
28.11.2006, 17:56
Beitrag #9
|
|
|
28.11.2006, 18:11
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Properties von einer Combo Box in einem Array of Clusters
' schrieb:Wie kann ich es realisieren, das ich insgesamt z.B. 5 Listenfelder habe?? Also pro Modul eine eigene Liste??
Pro Modul eine Liste für die Verknüpfungen? :blink:Auf Anhieb fällt mir kein Grund ein, warum das für eine SPS (-Simulation) notwendig wäre. Die modul-spezifischen Ergebnisdaten der einzigen Verknüpfungsliste kann man über einen Index, der ja indirekt im Listenfeld steht, in eine modul-spzifische Liste schreiben. Dazu braucht man aber kein modul-spezifisches Listenfeld. Die modul-spzifische Liste gibt es schon: Die Eingabefelder "Eingänge" bzw. "Ausgänge". Ich hoffe mal, wir reden nicht gar zu sehr von verschiedenen Sachen.
Zitat:Ich habe schon etwas probiert, allerdings war ich noch nicht sehr erfolgreich! Ich kann z.B. für das erste und zweite Modul jeweils die Ein bzw. Ausgänge schalten, allerdings wenn ich das dritte verändern will, geht das nicht!
Leider kann ich dir da nicht weiterhelfen. Ich hab nur LV7.1.1, da kann ich LV8 nicht öffnen. Beschwerden? Naja, ich sag' dazu nix mehr. :angry2:
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |