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 

Performance von Tabelle/Listenfeld schreiben



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!

28.05.2013, 22:20
Beitrag #1

derherrk Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: May 2013

2010
2008
DE



Performance von Tabelle/Listenfeld schreiben
Hallo,

bei meinem Projekt besteht die Aufgabenstellung darin zeitkritisch alle 50ms eine CAN Message an ein Gerät zu senden und in einer parallelen Schleife ankommende CAN Messages zu erfassen und zu interpretieren.

Nun ist es so, dass der gesamte CAN Bus Traffic angezeigt werden soll. Ich dachte dabei an eine Tabelle oder ein Listenfeld welche(s) kontinuierlich mit jedem Durchlauf anwächst. Das Schreiben mache ich wie üblich mit Property Nodes.

Dabei tritt folgendes Problem auf:

Durch den relativ hohen Takt von 50ms wächst diese Liste natürlich sehr schnell an. Die ersten 2000-3000 Messages sind problemlos. Danach stelle ich allerdings über meinen Sendezeitstempel fest, dass scheinbar das Beschreiben des Anzeigeelements mir mein Timing versaut und keine sauberen 50ms mehr sendet sondern mit irgendwelchem Delay.

Kann es sein, dass das Beschreiben größerer Datenmengen mit Property Nodes schlechten Einfluss auf mein Timing hat? Was ist denn die eleganteste Möglichkeit größere Datenmengen oder Arrays an Tabellen oder Listenfelder zu übergeben? Oder wie visualisiert man sowas am besten?

Vielen Dank im Voraus für praktische Hilfe!

Andy


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.05.2013, 07:28
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
Das beste ist, wenn Du es nicht anwachsen lässt.
Oder Du schaust Dir mal eine "Producer Consumer Loop" an.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 07:33 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013 08:04 von GerdW.)
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
Hallo Andy,

Zitat:welche(s) kontinuierlich mit jedem Durchlauf anwächst
Das ist der Kardinalfehler: alles, was ungehindert "anwächst", sprengt dir früher oder später dein Programm - entweder per "Out of Memory" oder durch die Schleifenzeiten...

Zitat:Durch den relativ hohen Takt von 50ms wächst diese Liste natürlich sehr schnell an.
So schnell kann niemand mitlesen! Außerdem ist man dauernd am Scrollen, wenn man eine bestimmte Message sehen will...

Zitat:Was ist denn die eleganteste Möglichkeit größere Datenmengen oder Arrays an Tabellen oder Listenfelder zu übergeben? Oder wie visualisiert man sowas am besten?
Es gelten die sonst auch üblichen Ratschläge:
- Trenne Datenerfassung und Datenaufbereitung/-darstellung voneinander.
- Verwende parallele Schleifen.
- Verwende Queues.
- Limitiere die UI-Updaterate auf ein vernünftiges Maß.
- Limitiere die Menge der Daten im Speicher...

Tabellen/Listen sind schon "schön anzusehen", aber ist es wirklich sinnvoll, alle 50ms erneut mehr als 2000 Einträge hineinzuschreiben?

Tipps: Es gibt einiges, was du optimieren könntest...
Das hier     funktioniert auch ohne String-Vergleiche und nachfolgendes Select!

Nachtrag:
- Wieviele verschiedene CAN-Botschaften erwartest du denn? Reicht es nicht aus, immer nur die aktuellsten Werte jeder Botschaft anzuzeigen? (Meine Anwendungen kommen mit ~20 Botschaften aus, die ich auch in einem Array/Tabelle darstellen lasse...)
- Guck dir an, wie das in anderen Programmen (CANalyzer und Konsorten) gelöst wird...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 07:56
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
Hier noch der Link:
http://www.ni.com/white-paper/3023/en

Gruß Markus

(29.05.2013 07:28 )Y-P schrieb:  Das beste ist, wenn Du es nicht anwachsen lässt.
Oder Du schaust Dir mal eine "Producer Consumer Loop" an.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 08:37
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
(28.05.2013 22:20 )derherrk schrieb:  Das Schreiben mache ich wie üblich mit Property Nodes.
Extrem tödlich, vor allem bei zeitkritischen Schleifen.
Das Setzen von PropertyNodes erzwingt ein Update des Frontpanel, und je mehr Daten du in deiner Tabelle hast, um so länger dauert so ein Update dann.

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
29.05.2013, 09:24 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013 09:24 von Y-P.)
Beitrag #6

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
Bei einer Listbox bleibt ihm nichts anderes übrig. Value ist in dem Fall ja "numerisch".
Gruß Markus

(29.05.2013 08:37 )jg schrieb:  
(28.05.2013 22:20 )derherrk schrieb:  Das Schreiben mache ich wie üblich mit Property Nodes.
Extrem tödlich, vor allem bei zeitkritischen Schleifen.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.05.2013, 12:39
Beitrag #7

derherrk Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: May 2013

2010
2008
DE



RE: Performance von Tabelle/Listenfeld schreiben
Hi Leute,

vielen Dank für die rege Anteilnahme.

Tatsächlich habe ich das Programm bereits mit einer Art Producer/Consumer Architektur ausgestattet. Dabe laufen drei Schleifen parallel:

1. Schleife: Timed Loop zum Schreiben der CAN Messages
2. Schleife: Timed Loop zum Lesen der CAN Messages
3. Schleife: While Loop mit Event Struktur zum Handhaben von Buttons und Programmsteuerung

Nun habe ich das Programm so verändert, dass ich sowohl die gesendeten als auch die empfangenen Nachrichten in eine Queue einfüge und diese Queue dann per Knopfdruck über die Eventstruktur auslese und darstelle. Das funktioniert soweit. Auch mit ms genauem Timing.

Ich würde jedoch gerne eine völlig autonome Protokollierung ohne Knopfdruck machen.

Ich dachte dabei vielleicht an eine vierte Schleife die ausschließlich diese Queue verwertet und darstellt.

Aber ein Problem bleibt: Spätestens nach ein paar tausend Messages wird auch hier ein Performanceproblem beim Beschreiben der Tabellen/Listenfelder auftreten... Gibt es denn bei Tabellen oder Listenfeldern nicht die Möglichkeit NUR neue Daten hinzuzufügen (so dass nur Eintrag 2001 hinzukommt, während die ersten 2000 eh schon da sind?)

Wie protokolliert man eigentlich sowas wie Bus Traffic denn professionell?

Viele Grüße

Andy


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.05.2013, 16:17 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013 16:22 von Frontpanel.)
Beitrag #8

Frontpanel Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Feb 2013

2012
2008
EN



RE: Performance von Tabelle/Listenfeld schreiben
lv10Hallo!
Kann dir bei deinem eigentlichen Problem nicht helfen, möchte aber auf etwas anders hinweisen, da du mit Table/Listbox arbeitest.
Sind die Schreibzyklen zu kurz, kann es beim Table zu einem Flickern kommen. Falls du die Listbox wegen der recourcenfressenden Listbox nicht nehmen kannst, geht als Workaround: Gestaltungselement über die Tools-Palette transparent machen und über den Table legen.
Habe Dir ein Beispiel angehängt (als LV 2010 Version).

Ansonsten: Musst du ständig alle Werte anzeigen? Auch in Excel-Tabellen wirst du in kaum bis zum 3000ten Wert scrollen, oder? Kannst ja alle Werte in einem Array speichern, aber anzeigen lässt du eben nur einige wenige.

MFG,
Frontpanel


Angehängte Datei(en)
10.0 .vi  table_vs_listbox_flicker2010.vi (Größe: 9,46 KB / Downloads: 201)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.06.2013, 08:28 (Dieser Beitrag wurde zuletzt bearbeitet: 03.06.2013 08:49 von Achim.)
Beitrag #9

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
RE: Performance von Tabelle/Listenfeld schreiben
(29.05.2013 12:39 )derherrk schrieb:  Gibt es denn bei Tabellen oder Listenfeldern nicht die Möglichkeit NUR neue Daten hinzuzufügen (so dass nur Eintrag 2001 hinzukommt, während die ersten 2000 eh schon da sind?)

Wie protokolliert man eigentlich sowas wie Bus Traffic denn professionell?

Alten Inhalt lesen...nach Message suchen...wenn schon da, Inhalt ersetzen...wenn noch nicht da, unten anfügen...Inhalte wieder schreiben

A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Koordinaten Listenfeld simcum 5 4.193 18.01.2022 16:43
Letzter Beitrag: jg
  Objektsymbole ändern/Listenfeld modes 3 3.472 14.11.2019 08:57
Letzter Beitrag: modes
  Spaltenanzahl ändern bei mehrspaltigem Listenfeld Odie 7 5.592 09.05.2019 16:31
Letzter Beitrag: Freddy
  Tabelle in Schleife schreiben steve_94 3 3.668 14.12.2018 08:48
Letzter Beitrag: Ralfk84
  Probleme mit Performance (Berechnungen und Grafik) catbull 5 4.688 21.07.2018 10:13
Letzter Beitrag: IchSelbst
  Schriftart für dynamisches mehrspaltiges Listenfeld ändern SPS-Fuzzi 2 4.363 18.12.2017 13:11
Letzter Beitrag: SPS-Fuzzi

Gehe zu: