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!
Ich würde mir gerne mit LV eine Art SPS programmieren, bin dabei aber schnell auf etliche Probleme gestossen. Und zwar habe ich mir folgendes Überlegt:
Ich möchte gerne digitale Eingänge mit einer USB Karte mit LV einlesen (was soweit kein Problem ist) und dann gerne die verschiedenen Eingänge irgendwie miteinander Verknüpfen (so wie bei einer SPS (UND, ODER, SETZEN - RÜCKSETZEN, negiert, MERKER...)) und dann diese auf meine Ausgänge von der Karte geben. Die Schwierigkeit sehe ich darin, dass eine SPS ja sequentiell läuft und ich dieses Verhalten ja nachstellen möchte. Es müssten z.B. erst die Eingänge für die Merker ausgewertet werden und dann die Ausgänge gesetzt werden. Es gibt zwar in LV die Sequenz Schleifen, allerdings weiss ich ja nicht vorher, wie ich meine Logik schreibe! Hier mal ein kleines Beispiel:
Ich möchte Eingang 1 und Eingang 2 "UND" verknüpfen. Diese setzen einen Merker 1. Ausserdem habe ich noch Eingang 3 "ODER" Eingang 4 miteinander verknüpft und diese setzen Merker 2. Nun möchte ich gerne den Merker 1 zum SETZEN und Merker 2 zum RÜCKSETZEN (also ein "SETZEN - RÜCKSETZEN" - Glied) verwenden.
Ich habe schon einiges ausprobiert, aber so wirklich weit gekommen bin ich da noch nicht.
Habe ich das jetzt richtig verstanden? Du möchtest die Logik der Schaltung mit LV progammieren, aber nicht direkt im Blockdiagramm, sondern das Frontpanel soll als z.B. OB1 dienen?!
Also Du möchtest in Deinem FP rechts die logik einstellen und dann links zu der Tabelle hinzufügen - richtig? Und am Ende soll diese Einstellung dann die Ausgänge schreiben - oder?
Da würde ich Dir schonmal Prinzipiell openg.org ans Herz legen (fertige SPS-Funktionen).
Ansonsten würde ich ein Paar Knöppe' spendieren, an denen verknüpfungen zu einem Cluster oder Array hinzugefügt werden (sammeln aller Verknüpfungen).
Oder ich habs noch net gerafft..
Gruß
Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
' schrieb:Die Schwierigkeit sehe ich darin, dass eine SPS ja sequentiell läuft und ich dieses Verhalten ja nachstellen möchte.
Sequenziell ist ja für eine Datenflußsteuerung ideal.
Zitat:Es müssten z.B. erst die Eingänge für die Merker ausgewertet werden und dann die Ausgänge gesetzt werden.
Zuerst werden sie Eingänge gesampelt, dann die Verknüpfungen - welcher Art auch immer - erstellt, zuletzt die Ausgänge ausgegeben.
Zitat:allerdings weiss ich ja nicht vorher, wie ich meine Logik schreibe!
Die Logik, respektive die Verknüpfungsliste, gibt ja den sequenziellen Ablauf vor. Du musst diese Liste nur so erstellen, dass sie von oben nach unten abarbeitbar ist. Genauso würde auch das SPS-Programm aussehen: Von oben (also dem Anfang) nach unten (also dem Ende) abarbeitbar. Im übrigen läuft auch ein LV-Programm sequenziell ab - wegen des Datenflusses.
Zitat:Ich habe schon einiges ausprobiert, aber so wirklich weit gekommen bin ich da noch nicht.
Ich kann da bisher kein Problem sehen: Zuerst liest du alle (also 4*24) Eingänge in die Modullisten, Teil Eingänge, ein. Danach arbeitest du deine Verknüpfungslisten ab. Die Vorschrift der Abarbeitung kommt aus der Verknüpfungsliste. Die Daten für die Abarbeitung kommen aus den Modullisten und werden auch dort abgelegt. Sie sollen also nicht in der Verknüpfungsliste liegen. Am Schluss schreibst du alle (also 4*24) Ausgänge von den Modullisten an USB.
Das muss so funktionieren.
Ein Problem kann natürlich die programmatische Umsetzung sein. Ich hätte ja in der Verknüpfungsliste keine Strings hinterlegt, die haben nämlich keine direkte Verbindung zum Modul. Um einen Wert (Merker! die werden nämlich oft gebraucht) aus der Modulliste zu holen, musst du jetzt mittels des Strings in der Verknüpfungsliste den Index innerhalb der Modulliste holen, damit du über diesen Index auf den Wert kommst, der dem String entspricht.
Ich bin ja noch immer dafür, in der Verknüpfungsliste nicht die Pseudonamen abzulegen, sondern den Index des Ports innerhalb eines Modules. Auch das Modul wird als Index angelegt. Dass dann die Eingabe für den Programmierer etwas aufwändiger wird, ist nebensächlich. Auch muss meines Erachtens eine Verknüpfungsliste ausreichend sein, da es ja auch nur ein Programm innerhalb der nachzubildenden SPS gibt. Ein SPS-Programm - eine Verknüpfungsliste.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Habe ich das jetzt richtig verstanden? Du möchtest die Logik der Schaltung mit LV progammieren, aber nicht direkt im Blockdiagramm, sondern das Frontpanel soll als z.B. OB1 dienen?!
Also Du möchtest in Deinem FP rechts die logik einstellen und dann links zu der Tabelle hinzufügen - richtig? Und am Ende soll diese Einstellung dann die Ausgänge schreiben - oder?
Da würde ich Dir schonmal Prinzipiell openg.org ans Herz legen (fertige SPS-Funktionen).
Ansonsten würde ich ein Paar Knöppe' spendieren, an denen verknüpfungen zu einem Cluster oder Array hinzugefügt werden (sammeln aller Verknüpfungen).
Oder ich habs noch net gerafft..
Gruß
Nein, das ist genau, was ich machen möchte! Im Frontpannel möchte ich meine Verknüpfungen erstellen. Allerdings habe ich Probleme, das auch in einem LV Program umzusetzen! Kannst du mir wohl genau sagen, wo ich SPS - Funktionen in dem openg.org Forum finde??
Danke Herbert
' schrieb:Sequenziell ist ja für eine Datenflußsteuerung ideal.
Zuerst werden sie Eingänge gesampelt, dann die Verknüpfungen - welcher Art auch immer - erstellt, zuletzt die Ausgänge ausgegeben.
Die Logik, respektive die Verknüpfungsliste, gibt ja den sequenziellen Ablauf vor. Du musst diese Liste nur so erstellen, dass sie von oben nach unten abarbeitbar ist. Genauso würde auch das SPS-Programm aussehen: Von oben (also dem Anfang) nach unten (also dem Ende) abarbeitbar. Im übrigen läuft auch ein LV-Programm sequenziell ab - wegen des Datenflusses.
Ich kann da bisher kein Problem sehen: Zuerst liest du alle (also 4*24) Eingänge in die Modullisten, Teil Eingänge, ein. Danach arbeitest du deine Verknüpfungslisten ab. Die Vorschrift der Abarbeitung kommt aus der Verknüpfungsliste. Die Daten für die Abarbeitung kommen aus den Modullisten und werden auch dort abgelegt. Sie sollen also nicht in der Verknüpfungsliste liegen. Am Schluss schreibst du alle (also 4*24) Ausgänge von den Modullisten an USB.
Das muss so funktionieren.
Ein Problem kann natürlich die programmatische Umsetzung sein. Ich hätte ja in der Verknüpfungsliste keine Strings hinterlegt, die haben nämlich keine direkte Verbindung zum Modul. Um einen Wert (Merker! die werden nämlich oft gebraucht) aus der Modulliste zu holen, musst du jetzt mittels des Strings in der Verknüpfungsliste den Index innerhalb der Modulliste holen, damit du über diesen Index auf den Wert kommst, der dem String entspricht.
Ich bin ja noch immer dafür, in der Verknüpfungsliste nicht die Pseudonamen abzulegen, sondern den Index des Ports innerhalb eines Modules. Auch das Modul wird als Index angelegt. Dass dann die Eingabe für den Programmierer etwas aufwändiger wird, ist nebensächlich. Auch muss meines Erachtens eine Verknüpfungsliste ausreichend sein, da es ja auch nur ein Programm innerhalb der nachzubildenden SPS gibt. Ein SPS-Programm - eine Verknüpfungsliste.
Ich habe doch nun die einzelnen Eingänge mit nem bestimmten Index versehen! z.B. Modul 1 Eingang 1 hat den Index 1 und Modul 2 Eingang 1 hat den Index 101 und soweiter!
Oder habe ich das immer noch nicht richtig verstanden??
Es wäre schön, wenn du mir zum besseren Verständnis mal ein kleines Beispiel Programm machen könntest!
' schrieb:Ich habe doch nun die einzelnen Eingänge mit nem bestimmten Index versehen! z.B. Modul 1 Eingang 1 hat den Index 1 und Modul 2 Eingang 1 hat den Index 101 und soweiter!
Auch so müsste es gehen.
Zitat:Oder habe ich das immer noch nicht richtig verstanden??
Doch, es scheint so.
Zitat:Es wäre schön, wenn du mir zum besseren Verständnis mal ein kleines Beispiel Programm machen könntest!
Das geht erst heute abend.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Wie bist du denn mit meiner Hilfe zum Abspeichern der Modullisten zurechtgekommen?
Das war ne gute Hilfe! Das hat dann auch hingehauen!
Nur kommt man immer von einem zum anderen Problem und ich hab immer wieder neue Ideen. Und deswegen ist halt jetzt ne SPS mit LabVIEW zu programmieren meine neue "Herausforderung" *grins*
Wie gesagt, nen kleinen Ansatz habe ich ja schon, aber ich sehe da grosse Probleme mit den Merkern auf mich zukommen!
Tach auch, ich habe mir überlegt, dass es ja ab LV 8 möglich ist, in einen Tree zu schreiben. Kann man in den Tree auch z.B. Combo boxen setzen?? Das ganze wäre dann wesentlich übersichtlicher und ich könnte mit einem Text Parser arbeiten!
Das ist noch mal so ne Idee von mir, ich weiss aber nicht, ob das geht!
' schrieb:einen Tree zu schreiben. Kann man in den Tree auch z.B. Combo boxen setzen?? Das ganze wäre dann wesentlich übersichtlicher
Ich mag Trees nicht. Trees sind zwar einfach zu programmieren, aber ich als Anwender möchte lieber keine Trees haben. ComboBox im Tree: Ist eigentlich kompliziert. Wenn LV das nicht gleich kann, gibt es da aber bestimmt Komponenten für. Kompliziert wird es, wenn du in alle ComboBoxen innerhalb des Trees (und das können sehr viele werden) die Pseudonamen eintragen willst - und zwar dann, wenn der Name im Modul geändert wird.
Hier mal eine Ausführung der SPS-Steuerung (= Main-VI)
Die Eingabe der Moduldaten geht noch wie bisher. Es gibt nur noch eine Verknüpfungsliste, deren Daten, die jetzt lediglich Indices sind, in einem Array abgelegt sind. Zur Anzeige dieser Daten gibt es ein "Konvertierungs-VI", das "Array nach Listenfeld" macht. Online (also im Timeout-Event alle 100 ms) wird die Verknüpfungsliste abgearbeitet. Die Eingangs- wie auch die Ausgangsdaten entsprechen der Led "Wert" in den Modullisten.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).