Hallo,
ich möchte in meiner VI ein Rechtecksignal erzeugen, dass an die vorgegebenen Grenzen gebunden und dessen Pegel einstellbar ist (siehe VI im Anhang). Ich habe es mal versucht mit einem Formelknoten und den entsprechenden Bedingungen zu realisieren, aber leider ohne Erfolg. Desweiteren möchte ich eine Tabelle über eine Boolsche Funktion sichtbar/unsichtbar schalten. Allerdings wird im Frontpanel der Button dafür nicht angezeigt. Mit "Find control" schon, aber sobald die VI gestartet wird, verschwindet der Button. Nach einigem Versuchen wird mir jetzt nicht mal die Tabelle angezeigt
Bin für jeden Ratschlag dankbar
Hallo Carl,
Zitat:Desweiteren möchte ich eine Tabelle über eine Boolsche Funktion sichtbar/unsichtbar schalten.
Das Prinzip dahinter hast du schon verstanden: man nutzt eine PropertyNode…
Zitat:Allerdings wird im Frontpanel der Button dafür nicht angezeigt.
Kein Wunder, wenn du den Button unsichtbar machst…
Zitat:Mit "Find control" schon, aber sobald die VI gestartet wird, verschwindet der Button.
Weil
du den Button unsichtbar setzt. Kann man sehr schön im Debugging beobachten…
Zitat:Nach einigem Versuchen wird mir jetzt nicht mal die Tabelle angezeigt
Weil du sie unsichtbar gesetzt hast…
Grundproblem dabei: du hast einen Button namens "Tabelle" und ein 2D-Array namens "Tabelle" - in einem VI!
Welcher vernünftige Programmierer verwendet schon identische Variablennamen für unterschiedliche Controls?
Tipp/Styleguide-Empfehlung:
Eineindeutige Labels für alle FP-Elemente verwenden!
Zitat:Ich habe es mal versucht mit einem Formelknoten und den entsprechenden Bedingungen zu realisieren, aber leider ohne Erfolg.
Warum ein Formelknoten?
Um einen Wert auf Einhaltung zweier Limits zu prüfen gibt es InRangeAndCoerce. Und dein Y-Wert ergibt sich über eine Select-Funktion:
[
attachment=55833]
Deine "Tabelle" sah bei mir sehr komisch aus, ich habe sie gelöscht und durch ein stinknormales 2D-Array ersetzt…
Was an diesem VI funktioniert nicht so, wie du es haben willst? Die "AUF"/"AB"-Bedingungen schalten doch wunderbar hin und her!?
Hallo Gerd,
Zitat:Das Prinzip dahinter hast du schon verstanden: man nutzt eine PropertyNode…
Und die verknüpfe ich mit dem entsprechenden Button?
Zitat:Kein Wunder, wenn du den Button unsichtbar machst…
Achso
Habe es geändert.
Zitat:Grundproblem dabei: du hast einen Button namens "Tabelle" und ein 2D-Array namens "Tabelle" - in einem VI!
Welcher vernünftige Programmierer verwendet schon identische Variablennamen für unterschiedliche Controls?
Das war blauäugig von mir. Dachte LabVIEW verknüpft das dann quasi automatisch. Mein Fehler.
Zitat:Tipp/Styleguide-Empfehlung: Eineindeutige Labels für alle FP-Elemente verwenden!
Werde den Tipp beherzigen.
Zitat:Warum ein Formelknoten?
Um einen Wert auf Einhaltung zweier Limits zu prüfen gibt es InRangeAndCoerce. Und dein Y-Wert ergibt sich über eine Select-Funktion:
Habe es mal "nachgebaut". Ein Rechtecksignal entsteht daraus aber nicht. Von der Obergrenze wird der Pegel abgezogen und läuft als Gerade durch.
Zitat:Deine "Tabelle" sah bei mir sehr komisch aus, ich habe sie gelöscht und durch ein stinknormales 2D-Array ersetzt…
Was an diesem VI funktioniert nicht so, wie du es haben willst? Die "AUF"/"AB"-Bedingungen schalten doch wunderbar hin und her!?
Die Tabelle und das Rechtecksignal. Ansonsten bin ich mit der VI zufrieden ^^.
Bei der Tabelle werden bei mir nur die Durchläufe angezeigt und zwar horizontal anstatt vertikal. Obwohl ich es so verdrahtet habe wie in deiner VI.
Vielleicht sollte ich das nochmal neu machen...
@Gerd
Zitat:Deine "Tabelle" sah bei mir sehr komisch aus, ich habe sie gelöscht und durch ein stinknormales 2D-Array ersetzt…
Das ist wahr. Und wenn man die "Tabelle" sichtbar macht, dann ist sie leer, obwohl aus dem BS und dem fehlerfreien Run eindeutig hervorgeht, dass sie DBL-Elemente enthalten muss.
Ersetzen ist natürlich die richtige Reparatur. Aber aus rein schöngeistigem Interesse würde mich doch interessieren, wie Carl diesen Nonsens zusammengezaubert hat. Ich habe es nicht herausgefunden..
(Hinweis für alle: Ich habe hier auch den Ausdruck "Tabelle" benutzt, obwohl es ein normales 2D-Array ist. "Tabelle" ist in LV so etwas wie ein eigenes Format, und zwar ein 2D-String-Array mit zusätzlichen editierbaren Eigenschaften für die Elemente)
(07.05.2016 12:44 )Lucki schrieb: [ -> ]@Gerd
Zitat:Deine "Tabelle" sah bei mir sehr komisch aus, ich habe sie gelöscht und durch ein stinknormales 2D-Array ersetzt…
Das ist wahr. Und wenn man die "Tabelle" sichtbar macht, dann ist sie leer, obwohl aus dem BS und dem fehlerfreien Run eindeutig hervorgeht, dass sie DBL-Elemente enthalten muss.
Ersetzen ist natürlich die richtige Reparatur. Aber aus rein schöngeistigem Interesse würde mich doch interessieren, wie Carl diesen Nonsens zusammengezaubert hat. Ich habe es nicht herausgefunden..
Diese Frage würde ich dir gerne beantworten; kann es aber leider nicht
So, die Tabelle habe ich jetzt wie gewünscht hinbekommen
Nur das Rechtecksignal will noch nicht so richtig.
Es müsste doch so zu generieren sein:
Code:
if(x>=a || x<=b)
{
y=a;
z=1;
}
else
{
y=b;
z=0;
}
(08.05.2016 07:49 )Carl schrieb: [ -> ]Nur das Rechtecksignal will noch nicht so richtig.
Das Element, das du verwendet hast, macht einen Bereichsvergleich. Damit kann man so ohne weiteres kein Rechteck erzeugen ...
Da ich aus deinem Sourcecode nicht genau ersehen konnte, an welches Kriterium die Umschaltflanken des Rechtecks gebunden sind, hab ich mal das Dreieckssignal als Referenz genommen.
Außerdem hab ich mal, da ich sowieso gerade im Garten drüber war, das BD aufgeräumt.
(08.05.2016 09:45 )IchSelbst schrieb: [ -> ] (08.05.2016 07:49 )Carl schrieb: [ -> ]Nur das Rechtecksignal will noch nicht so richtig.
Das Element, das du verwendet hast, macht einen Bereichsvergleich. Damit kann man so ohne weiteres kein Rechteck erzeugen ...
Da ich aus deinem Sourcecode nicht genau ersehen konnte, an welches Kriterium die Umschaltflanken des Rechtecks gebunden sind, hab ich mal das Dreieckssignal als Referenz genommen.
Außerdem hab ich mal, da ich sowieso gerade im Garten drüber war, das BD aufgeräumt.
Ok, die Übersichtlichkeit mag nicht die aller beste sein
Das Rechtecksignal soll innerhalb der Grenzen verlaufen, abhängig vom bei "Pegel" eingstellten Wert.
Wenn zum Beispiel die Obergrenze 70 und die Untergrenze 30 und der Pegel 5 betragen, dann soll das Rechtecksignal zwischen 65 und 35 verlaufen, also mittig.
(08.05.2016 10:21 )Carl schrieb: [ -> ]Wenn zum Beispiel die Obergrenze 70 und die Untergrenze 30 und der Pegel 5 betragen, dann soll das Rechtecksignal zwischen 65 und 35 verlaufen, also mittig.
Wenn du das doch hier so schön beschrieben hast, warum hast du das dann auch nicht genau so programmiert ?
Außerdem war meine Frage nach dem Umschaltzeitpunkt von einem Pegel zum anderen, nicht nach dem Pegel selbst. Jetzt liegt der Umschaltzeitpunkt an den Spitzen des Dreiecksignals. Er könnte aber auch genau in der Mitte zwischen den Spitzen liegen.
(08.05.2016 12:16 )IchSelbst schrieb: [ -> ] (08.05.2016 10:21 )Carl schrieb: [ -> ]Wenn zum Beispiel die Obergrenze 70 und die Untergrenze 30 und der Pegel 5 betragen, dann soll das Rechtecksignal zwischen 65 und 35 verlaufen, also mittig.
Wenn du das doch hier so schön beschrieben hast, warum hast du das dann auch nicht genau so programmiert ?
Nunja, ich dachte ja, das hätte ich. Es stimmt halt die Hysterese nicht. Aber wieso?
Der Vergleich wird benötigt, um den Wert des Schaltpegels in der Tabelle auszugeben.
Zitat:Außerdem war meine Frage nach dem Umschaltzeitpunkt von einem Pegel zum anderen, nicht nach dem Pegel selbst. Jetzt liegt der Umschaltzeitpunkt an den Spitzen des Dreiecksignals. Er könnte aber auch genau in der Mitte zwischen den Spitzen liegen.
Der Umschaltzeitpunkt an den Spitzen des Dreiecksignals ist richtig, so soll es sein.
So ganz schlau werde ich aus deinem BD leider nicht. Prinzipiell hast du zum Erzeugen des Rechtecksignals das gleiche gemacht wie ich.
Ich habe gerade auch mal die Grenzen "aufgesplittet" und es so versucht, allerdings war dann gar keine Grenze mehr einstellbar (einstellbar schon, wurde aber nicht übernommen und das Signal verlief zwischen 0 und 2
)