| 
	
		
			| 
					25.02.2013, 16:18  (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2013 16:25  von Kiesch.) |  
			| 
					
                                                 | Kiesch
   LVF-Stammgast
 
    
 
 Beiträge: 427
 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* 
				
				 |  
    |  
			|  |  
	
		
			| 
					25.02.2013, 16:29  (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2013 16:31  von GerdW.) |  
			| 
					
                                                 |   GerdW
   ______________
 
   
 Beiträge: 17.529
 Registriert seit: May 2009
 
 LV2019 (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?
				
 
				
				 |  |  
			|  |  
	
		
			| 
					26.02.2013, 13:42  (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2013 13:47  von GerdW.) |  
			| 
					
                                                 |   GerdW
   ______________
 
   
 Beiträge: 17.529
 Registriert seit: May 2009
 
 LV2019 (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...
				
 
				
				 |  |  
			|  |  
	
		
			| 
					26.02.2013, 14:00  
				 |  
			| 
					
                                                 | simbi
   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.
 
				
				 |  |  
			|  |  
	
		
			| 
					26.02.2013, 14:07  
				 |  
			| 
					
                                                 |   jg
   CLA & CLED
 
   
 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 . 
				
				 |  |  
			|  |  
	
		
			| 
					26.02.2013, 14:11  
				 |  
			| 
					
                                                 | simbi
   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
 
				
				 |  |  
			|  |  
	
		
			| 
					27.02.2013, 14:20  
				 |  
			| 
					
                                                 | Kiesch
   LVF-Stammgast
 
    
 
 Beiträge: 427
 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* 
				
				 |  
    |  
			|  |  |  |