' 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.