INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Datenübertragung zw. Schleifen / Array leeren



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!

20.05.2018, 11:45
Beitrag #1

Tobias2 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Feb 2018

17.0f2
-
kA



Datenübertragung zw. Schleifen / Array leeren
hallo zusammen,

meine VI für meine Prüfanlage enthält zwei parallele Schleifen, eine schnelle Schleife (100 Hz) zur Regelung und Datenerfassung; eine langsame Schleife (5 Hz) zum Anzeige der Daten auf Graphen und zum loggen in einer Datei. Das Programm wurde von einer ähnlichen Anlage übernommen, auf der es auch funktioniert, ich habe jedoch folgendes Problem:

Die Daten werden in der schnellen Schleife erzeugt, pro Schleifendurchlauf entstehen 9 Messdaten     . Diese werden gesammelt und in ein Array geschrieben, welches von der langsamen Schleife ausgelesen und gelöscht werden sollen     . In dem Array sollten somit immer 9*20=180 Datensätze liegen (pro langsamen Schleifendurchlauf ist die schnelle Schleife 20 mal ausgeführt worden). Das Löschen funktioniert jedoch nicht, das Array läuft in die Begrenzung von 486 Daten und bleibt permanent gefüllt. Wenn die Daten mit Hilfe eines Cases und eines Schalters manuell gelöscht werden, enthält das Array 0 Elemente nur solange, bis der Schalter gelöst wird, danach ist es direkt wieder voll (im Gegensatz zum Programmstart, wo es langsam vollläuft). Die dargestellten lokalen Variablen sind die einzigen Zugriffspunkte auf das Array, einen Feedback Knoten o.ä. gibt es auch nicht, in dem die Daten zwischengespeichert werden könnten.

Hat jemand eine Idee, wo die Daten zwischengespeichert werden bzw. wieso das Löschen nicht funktioniert?
Gibt es alternative Möglichkeiten die Daten zu übertragen? Bei Queues hatte ich gelesen, dass die empfangenen Daten schneller ausgelesen werden müssen als die gesendeten Daten erzeugt werden, was bei dieser Schleifenkonstellation nicht gegeben ist.

Ich bin für jede Idee dankbar!

Schöne Pfingsten!
Tobias
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.05.2018, 13:49 (Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2018 13:50 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Datenübertragung zw. Schleifen / Array leeren
Hallo Tobias,

"Lokale Variablen"-Overkill!
Race conditions!

Einfache Lösung:
Wenn du Daten von einer Schleife in die ander schicken willst, solltest du eine Queue verwenden.
Simpel, sicher, performant…
(Das nennt sich dann sehr schnell Producer-Consumer-Schema!)

Zitat:Bei Queues hatte ich gelesen, dass die empfangenen Daten schneller ausgelesen werden müssen als die gesendeten Daten erzeugt werden, was bei dieser Schleifenkonstellation nicht gegeben ist.
Was hindert dich daran, im Consumer (deine langsame Schleife) die Queue jedesmal komplett auszulesen? Du musst ja nicht nur ein Element aus der Queue holen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.05.2018, 10:31
Beitrag #3

Tobias2 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Feb 2018

17.0f2
-
kA



RE: Datenübertragung zw. Schleifen / Array leeren
Hallo Gerd,

danke für deine schnelle Antwort. Ich werde das mit den Queues diese Woche mal ausprobieren.
Der ursprüngliche Entwickler des Programmes meinte es gab mit den Queues Probleme, ich werde bestimmt dann mit weiteren Fragen kommen Wink
Es wundert mich nur, dass die selbe Lösung auf dem anderen PC funktioniert und auf meinen PC nicht. Ist das Performanceabhängig oder weißt du woran das liegen könnte?

Viele Grüße
Tobias
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.05.2018, 10:33
Beitrag #4

Tobias2 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Feb 2018

17.0f2
-
kA



RE: Datenübertragung zw. Schleifen / Array leeren
Hallo,

ich habe die Datenübertragung mit den Queues probiert, es funktioniert auch einigermaßen, aber es läuft noch nicht ganz.

Ich möchte ja 9 einzelne Werte übertragen, diese wurden vorher in der Sendeschleife in ein Array geschrieben und dann in der Empfängerschleife ausgelesen. Jetzt erstelle ich in jedem Durchlauf der Senderschleife ein Array, schreibe da die Werte rein und übergebe dieses an die Queue.

Das Auslesen in der Empfängerschleife würde ich gerne mit "Flush Array" machen, damit alle Werte gleichzeitig gelöscht werden, jedoch kommt dann als Ausgabeformat "1D Array of Cluster of 1 Element 1D Array of double". Dies kann ich nicht verwenden, da ich die Werte als Array benötige, damit das vorhandene Programm diese weiterverarbeiten kann.

Als Zwischenlösung habe ich die Werte einzeln mit einer For-Schleife ausgelesen und in ein Array geschrieben, das kommt mir nur sehr langsam vor.

Gibt es eine elegantere Lösung, die 9 Messwerte aus der Sendeschleife hinterher sequentiell als Array in der Empfängerschleife zu haben? Idealerweise sollten die neuen Werte vorne stehen (wie bei dem vorher verwendeten Array) damit der Rest des Programmes kompatibel bleibt.

Viele Grüße
Tobias


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.05.2018, 10:59
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Datenübertragung zw. Schleifen / Array leeren

Akzeptierte Lösung

Wo ist das Problem, Array of Cluster in einer For-Schleife bearbeiten, und in der Schleife das Array-Element auf dem Cluster holen:
   
Alternative ist eine Queue, bei der du die Numeric-Elemente einzeln reinschiebst, aber dann hast du nur das Problem der Synchronisation. Welches Queue-Element stellt welchen Messwert dar?
Weitere Alternative: Du verwendest eine Cluster als Datentyp für deine Queue.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.05.2018, 12:42
Beitrag #6

Tobias2 Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: Feb 2018

17.0f2
-
kA



RE: Datenübertragung zw. Schleifen / Array leeren
Hallo Jens,

mit deiner ersten Lösung klappt die Datenübertragung wie gewünscht. Danke!

Viele Grüße
Tobias
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  SFTP Datenübertragung langsam Benni78 5 196 Gestern 10:03
Letzter Beitrag: Benni78
  CAN Datenübertragung Ben16 1 4.402 19.10.2016 10:18
Letzter Beitrag: jg
  Datenübertragung cRIO PC Mietzekatze 1 3.839 28.08.2013 12:51
Letzter Beitrag: jg
  Datenübertragung über unzuverlässige Wireless Verbindung Lupin 4 5.910 13.12.2012 14:50
Letzter Beitrag: Lupin
Question Datenübertragung von Labview mit RS232 Scherni 5 7.537 03.08.2012 12:57
Letzter Beitrag: GerdW
  Datenübertragung zur Visu Ninja2602 0 3.371 12.12.2011 08:39
Letzter Beitrag: Ninja2602

Gehe zu: