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 

kontinuierliche Datenübergabe von mehreren SubVis in ein Array



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!

25.02.2013, 16:18 (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2013 16:25 von Kiesch.)
Beitrag #11

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Äh... mal ein kurzer Einwurf:

Warum reicht nicht eine Referenz aufs Array und Reinschreiben über Teilarray ersetzen? (mit jeweils eben einem Element)

Da sich jedes Netzteil nur für "sein" Arrayelement (Netzteil 1 nur für Index 0, zwei nur für Index 1 ....) interessiert sollte das doch auch noch keine Racing Conditions hervorrufen oder? (sinnvollerweise würde man ja annehmen, dass Labview das auf unterster Ebene über ein Schreiben in die Referenz des entsprechenden Array Elements erledigt und nicht das ganze restliche Array mit anpackt)

Oder macht das Labview anders? Ich meine - ist sicher nicht die eleganteste Lösung, aber in dem Fall wohl mit relativ wenig Aufwand umzusetzen. Probleme gäbe es doch nur wenn man es mit einer Lese und einer Schreiboperation zu tun hätte die voneinander abhängen UND noch dazu mehrere Prozesse auf den gleichen Bereich Schreiben dürfen. Das ist hier ja meinem empfinden nach nicht der Fall.

Soweit ich das verstehe soll das ja "nur" ne Anzeige sein, die im schlimmsten Fall mal mitgeschrieben wird...

Was sauber durchdacht sein muss ist die Spannungsverstellung der Netzteile. Wenn man dafür den Netzteilen einfach einmal einen Wert schickt und die den dann selbst anfahren ist das relativ unkritisch, dann muss man anschließend nur überwachen wann der Wert erreicht ist (geht ja meist sehr fix). Wenn man dagegen manuell durch Spannung nachprüfen und modifizieren fahren muss, dann sollte man entsprechende Reaktionszeiten einplanen (sprich: Nicht zu schnell regeln, da man sonst überregelt).


Sauberer sind natürlich die Lösungen mit Queue / FGV. Der Trick ist jeweils, dass nur ein Schreib- / Leseprozess zur gleichen Zeit durchgeführt wird - entweder weil nur eine Stelle im Program schreiben kann (Queue Konsument im Main VI der alle Daten geschickt kriegt), oder die FGV verhindert, dass zwei Prozesse sie gleichzeitig ausführen (entsprechend darf das VI dafür natürlich auch NICHT als Ablaufinvariant markiert werden).

P.S: Beide Varianten können allerdings immer noch nicht sicher sicherstellen, dass auch wirklich auf Lesevorgänge mit verarbeiten der gelesenen Daten und daraus resultierendem Schreiben auch wirklich keine Racing Conditions entstehen können (dafür muss man noch zusätzlich Sperrmechanismen implementieren) - aber auch solche Probleme sehe ich bei deinem Aufbau jetzt auf Anhieb nicht.

P.P.S: Zu deiner Frage wie du die Daten aus der FGV in die Main kriegst:
Die Daten aus der FGV liest du einfach mit einem (von dir programmierten) "ganzes Array" lesen in der Main ein und schreibst die in die Anzeige. (dazu brauchen dann noch die Netzteile eine Funktion mit der sie jeweils nur ihren Datensatz setzen).

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.02.2013, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2013 16:31 von GerdW.)
Beitrag #12

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Hallo Kiesch,

Zitat:Referenz aufs Array und Reinschreiben über Teilarray ersetzen?
ReplaceArraySubset ist eine Read-Modify-Write-Operation - und leider keine atomare!

Du musst also in jedem subVI das komplette Array lesen, ein Element ersetzen und das komplette Array zurückschreiben.
Siehst du hier die RaceCondition, wenn dies mehrfach parallel ausgeführt wird?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2013, 13:36
Beitrag #13

simbi Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2011

11.0
2011
DE


Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Hallo,

wollte mich noch einmal melden und bedanken, habe es jetzt vorerst mit einer Queue gelöst.


Muss jetzt noch einstellen, dass je nachdem welche Registerkarte aktiv ist, der richtige Wert in der Registerkarte angezeigt wird.
Dazu hätte ich noch eine Frage kann man nun das Array, mit dem richtigen Wert, in jeder Registerkarte angezeigt bekommen, außer in der ersten Registerkarte dort soll das Array nicht zu sehen sein.
Quasi den gleichen Indicator in verschiedenen Registerkarten darstellen.

Im Anhang sind noch einmal die beiden veränderten VIs.

MfG

Henning


Angehängte Datei(en)
11.0 .vi  Netzteil SUB VI.vi (Größe: 37,65 KB / Downloads: 150)

11.0 .vi  Main queue state machine.vi (Größe: 61,91 KB / Downloads: 147)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2013, 13:42 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2013 13:47 von GerdW.)
Beitrag #14

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Hallo Henning,

zur Namensgenerierung der Netzteil-Queue: nimm doch "NT-%03d" als Formatstring, dann brauchst du keine Fallunterscheidung bzgl. der Nummer (>9 oder <10) machen...

Zitat:kann man nun das Array, mit dem richtigen Wert, in jeder Registerkarte angezeigt bekommen, außer in der ersten Registerkarte dort soll das Array nicht zu sehen sein.
- Einfache Lösung: auf jeder Registerkarte, auf der das Array zu sehen sein soll, eine Kopie anlegen. (Bei 15 Tabs sehr umständlich...)
- Auch einfache Lösung: ein Array vor den Tab-Container legen (!) und das Array unsichtbar machen, wenn Tab0 aufgerufen wird, sonst sichtbar...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2013, 14:00
Beitrag #15

simbi Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2011

11.0
2011
DE


Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Hallo Gerd,

vielen Dank für den Tipp mit dem Formatstring.

Mit vor den Container legen meinst du eine Ebene höher oder?

Das mit der Kopie wollte ich eigentlich nicht, dann hätte ich eigentlich auch nicht das Array gebraucht, könnte dann gleich jedem Wert eine eigene Anzeige geben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2013, 14:07
Beitrag #16

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
(26.02.2013 14:00 )simbi schrieb:  Mit vor den Container legen meinst du eine Ebene höher oder?
Sowas in der Art. Nur mit den Ebenen (oben im FP) kommst du aber nicht weiter.
Du musst das Control erst außerhalb vom Tab-Control platzieren, dann markieren, und dann mit den Cursor-Tasten "vor" das Tab-Control verschieben.

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
Anzeige
26.02.2013, 14:11
Beitrag #17

simbi Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2011

11.0
2011
DE


Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
Hallo Jens,

ja genau so meinte ich das auch.

Vielen Dank

MfG, Henning
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2013, 14:20
Beitrag #18

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: kontinuierliche Datenübergabe von mehreren SubVis in ein Array
(25.02.2013 16:29 )GerdW schrieb:  Hallo Kiesch,

Zitat:Referenz aufs Array und Reinschreiben über Teilarray ersetzen?
ReplaceArraySubset ist eine Read-Modify-Write-Operation - und leider keine atomare!

Du musst also in jedem subVI das komplette Array lesen, ein Element ersetzen und das komplette Array zurückschreiben.
Siehst du hier die RaceCondition, wenn dies mehrfach parallel ausgeführt wird?

Hallo Gerd,

nachdem ich einen langen Post darüber geschrieben habe warum man das atomar programmieren können sollte (und das deswegen geschehen sein sollte), ist mir grade der Denkfehler aufgefallen: Die Fehlerbehandlung macht die Probleme, da man erst die Arraygröße überprüfen muss bevor man replaced. Zwischen diesen zwei Schritten kann sich aber die Arraygröße ändern (theoretisch). Es ist also genau genommen vermutlich nur ein Read - Write (bzw. Read - Modify).

Gruß Kiesch

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Kontinuierliche Temperaturerfassung mehrerer Kanäle mez15 5 4.589 29.09.2015 09:41
Letzter Beitrag: GerdW
  Kontinuierliche Statistikberechung Bernhart55 4 4.216 26.08.2013 21:35
Letzter Beitrag: Bernhart55
  kontinuierliche Spannungswerte ausgeben Löffje 14 9.047 03.04.2013 13:45
Letzter Beitrag: Löffje
  Beispielprojekt "Kontinuierliche messung und Protokollierung" füllt Arbeitsspeicher JulianS. 4 7.287 11.02.2013 19:25
Letzter Beitrag: jg
  kontinuierliche Messwertabfrage und gleichzeitige x-sekündliche Wertänderung Sick 7 6.120 04.05.2012 13:45
Letzter Beitrag: Sick
  Datenübergabe am Bedienelement chap 4 4.420 31.05.2011 16:00
Letzter Beitrag: jg

Gehe zu: