Guten Morgen liebe LabVIEW Gemeinde,
ich habe ein kleines Problem bei dem ich euch um Hilfe bitte.
Ich würde gerne aus einer Tabelle ein 2D Array erstellen, welches allerdings gewisse Werte in definierten Zeitabschnitten auflistet.
Ein kleines Beispiel. In meiner Tabelle steht:
1s 5V
2s 3V
3s 1V...........
Nun möchte ich, sofern möglich, dass mein Array in z.B 100ms Abschnitten die Werte auflistet, also:
0; 0,1; 0,2; 0,3; 0,4;.......; 1; 1,1; 1,2; usw <--- Zeitabschnitte
5; 5; 5; 5; 5;......; 5; 3; 3; usw <--- dazugehörige Were
Ich habe schon viel herum experimentiert, aber leider ohne Erfolg.
Ich hoffe dass ich euch mein Problem einigermaßen erklären konnte. Habe noch ein Screenshot hochgelade um es eventuell nochmal zu verdeutlichen
Für Ansätze oder Hilfestellungen wäre ich euch sehr dankbar
Liebe Grüße
Gegenfrage: Wozu werden die Arrays in der Form später gebraucht?
Prinzipiell: Du kennst die Stufen, du kennst somit auch die Anzahl Werte (Zeitschritte dt) (bzw. kannst beides errechnen) und du kennst den jeweiligen Wert.
Du kannst jetzt bspw. mit Forschleifen x-Mal den fixen Wert 5 und den fortlaufenden Zeitwert (t + dt) (0,0; 0,1; 0,2;...) in ein Array schreiben.
Danach nochmal die Schleife für die weiteren Stufen durchlaufen (Man könnte die Forschleife wiederum in eine Forschleife stecken.). Achte darauf, dass dein Zeitwert bei den weiteren Durchläufen dann immer mit dem letzten Zeitwert des letzten Schleifendurchlaufs plus dt beginnt. Die so entstandenen Arrays kann man nach jeder "inneren" Forschleife wieder an das bestehende Array anhängen und so bekommst du dann dein Gesamtarray am Ende der "äusseren" Forschleife.
Wenn du dir die Schritte einmal als Programmablaufdiagram visualisierst (klassisch mit Papier und Stift) wird vermutlich einiges klarer....
Gruß,
//Tobias
Edit:
Ludwig zeigt ein schönes Beispiel.
Was passiert denn da, wenn die Stufen 1;1,5;2,5;3;3,7; usw sind? Kann es grad nicht nachbauen, weil ich bei der Arbeit bin....
Zunächst einmal vielen Dank für eure Antworten und die fantstische Hilfe
@Tobias: ich brauche das Array in der Form weil ich es später direkt in ein Arbiträres Signal einlesen möchte.
Im Rahmen eines Projekts was ich mache, soll später (über verschiedene Registerkarten) ein Verlauf zunächst simuliert und dann an ein CAN-Bus gesendet werden. Da es eben einfach schöner ist nicht jedesmal im Blockdiagramm auf dem Arbitären-Signal-Vi meine Tabelle zu definieren, habe ich diese extern gemacht und würde daraus das Array erstellen und direkt weitergeben.
(06.11.2013 13:41 )BsaiboT schrieb: [ -> ]Was passiert denn da, wenn die Stufen 1;1,5;2,5;3;3,7; usw sind? Kann es grad nicht nachbauen, weil ich bei der Arbeit bin....
Wie Du wohl richtig vermutest, ist das Beispiel nicht perfekt, z.B dann dann nicht, wenn es in der Tabelle Zeitsprünge gibt, die kleiner sind als das gewünschte dt. Beispiel:
[
attachment=47156]
Aber Du weißt ja, eine Anwendung gegen alle Eventualitäten richtig wasserdicht zu machen ist ein Vielfaches mehr Arbeit als ein erster funktionierenden Entwurf. Und für dieses Beispiel so wie es ist habe ich mich eigentlich schon weit genug aus dem Fenster gelehnt
Wenn Du es weiterentwickeln willst:
[
attachment=47158]
Gruß Ludwig
So Leute, ich wende mich erneut an euch weil das nächste Problem prompt kommt.
Gibt es eine Möglichkeit das Programm so zu erweitern dass der Zeitwert in der tabelle für die Dauer des jeweiligen Werts gilt?
Sprich, 1Sekunde 5Volt, 2Sekunden 3Volt usw..
Gleiches Beispiel. In der Tabelle steht:
1s 5V _______ 1s lang 5V
2s 3V _______ 2s lang 3V
3s 1V _______ 3s lang 1V
Nun soll das Array wie gehabt in 0,1s Abschnitten die Werte auflisten, mit dem kleinen Unterschied dass diese über den jeweiligen Zeitwert andauern.
Array:
0;0,1;0,2;.............1;1,1;1,2;1,3.............2;2,1;2,2;...........3;3,1;3,2;................5,9;6;
5;5;5;..................5;3;3;3;....................3;3;3;................3;1;1;......................1;1;
Ich steh gerade echt total aufm Schlauch und entschuldige mich am besten schon mal jetzt für die Frage.
Für Hilfe wäre ich euch sehr sehr dankbar.
Liebe Grüße
Hallo Hamoudi,
Zitat:Gleiches Beispiel. In der Tabelle steht:
1s 5V _______ 1s lang 5V
2s 3V _______ 2s lang 3V
3s 1V _______ 3s lang 1V
Nun soll das Array wie gehabt in 0,1s Abschnitten die Werte auflisten
Pseudocode:
Code:
time = 0
FOR each row in table
FOR (timeinterval/0.1s)
add row to output array(time, voltage)
time := time + 0.1
NEXT
NEXT
Statt einer festen Anzahl Zeilen wird eine variable Anzahl Zeilen zum Array hinzugefügt...
Danke GerdW, habs soeben hinbekommen
Jetzt hab ich allerdings doch nochmal eine Frage.
Ich hab gerade eben nochmal das Programm getestet und mir ist aufgefallen dass teilweise die Zeitzuteilung falsch ist.
Es wird nicht der gewünschte Zeitintervall genommen, sonden mal sind es 0,2 zu viel, mal 0,4 zu wenig, oder aber auch mal ne 1,1 oder 2,0 doppelt........ Mir gehen langsam echt die Ideen aus.
Ich hab das Programm jetzt mal hochgeladen. Würde mich freuen wenn sich das jemand anschauen könnte und mir vielleicht sagen könnte was ich genau falsch gemacht hab.
Liebe Grüße
Das kommt davon, wenn man sich durch parallele Verwendung von lokalen Variablen (oder noch schlimmer PropertyNode Value) Race Conditions programmiert.
Gruß, Jens
EDIT: Hier eine Korrektur deines Ansatzes:
[
attachment=47236]