| 
				 
					28.09.2009, 07:57  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            TSC 
 
 
                            
                                LVF-Team 
                                
                                
 
  
                            
                            
	Beiträge: 1.882 
	Registriert seit: Sep 2008
	
 
 
LV 2018 SP1 
2008 
EN 
 
52379 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:Diese Art der Programmierung widerspricht allerdings dem LV Grundgedanken der datneflussorientierten Programmierung, da lokale Variablen Sprunkbefehle repräsentieren. Datenfluss bedeutet nunmal auch einige Drähte im BD. 
Unter einem Sprung-Befehl verstehe ich ein wenig was anderes. Eine Lokale Variable ist doch lediglich ein Konstrukt, um einen bestimmten Speicherbereich auszulesen. Der Datenfluss wird auch nicht "wirklich" gestört, da er ja durch die Case-Strukturen bestimmt ist. Das einzige Problem was im zweiten Screenshot von Lucki auftreten könnte, wären Race-Conditions. Da aber in den beiden Case-Strukturen nicht auf die selben Indizes im Array zugegriffen wird, ist das hier auch kein Problem.
 
Ein Sprung-Befehl ist in meiner Welt eher eine Art Schleife. Wenn du am Sprung-Befehl angekommen bist, gehe zurück zum Einstiegspunkt und fahre dort fort. Damit eine Terminierung des Codes sichergestellt ist, sollte der Sprung-Befehl in diesen Falle durch einen Case-Anweisung abgesichert sein. 
Eine andere Möglichkeit wäre, bestimmte Teile des Codes, zu überspringen. Auch hier bietet siche eine Case-Struktur an.
 
LG 
Torsten
				  
				
				
 
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)   
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.09.2009, 08:09  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            IchSelbst 
 
 
                            
                                LVF-Guru 
                                      
                                
  
                            
                            
	Beiträge: 3.708 
	Registriert seit: Feb 2005
	
 
 
11, 14, 15, 17, 18 
- 
DE 
 
97437 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:Da aber in den beiden Case-Strukturen nicht auf die selben Indizes im Array zugegriffen wird, ist das hier auch kein Problem. 
Das sehe ich anders.
 
Das Problem tritt nicht auf, weil auf "Indices zugeriffen" wird, sondern weil das Array in zwei Datenflüssen vorhanden ist. Das Problem hierbei ist, dass beide parallel ausgeführt werden (können). Bedenke folgenden Fall: Das Array der einen Schleife wird ausgelesen - und genau in dem Moment, in dem dieser Datenfluß in das Array-Bearbeitungs-Element eintritt, wird die parallele Case-Sequenz ausgeführt. Dort wird jetzt auch das Array ausgelesen und ein Datenfluß erzeugt. Jetzt liegen zwei identische Datenflüsse vor. Jeder der beiden ändern jetzt seine spezifischen Indices. So: Wer von den beiden ist jetzt berechtigt, seine manipulierten Daten in dem Array-Element abzuspeichern? Typischer Fall von Race-Condition - also keine Abhängigkeit von Indix-Manipulieren, sondern nur alleine von zwei Datenflüssen. 
 
Lösung: Cases seqeunzieren mit dem Array.
				  
				
				
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).  
 
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.09.2009, 08:17  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            IchSelbst 
 
 
                            
                                LVF-Guru 
                                      
                                
  
                            
                            
	Beiträge: 3.708 
	Registriert seit: Feb 2005
	
 
 
11, 14, 15, 17, 18 
- 
DE 
 
97437 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:da lokale Variablen Sprunkbefehle repräsentieren. 
Von einem bestimmten Standpunkt aus, kann man das so sagen: Irgendwann ist ein Datenfluß abgearbeitet, dann "springt" die Abarbeitung zum nächsten Datenfluß. Und der beginnt hier nunmal mit einer Lokalen Variablen. Das impliziert aber, dass es keine parallele Verarbeitung gibt!
 
Besser ist es aber, es so zu sehen: Alle Datenflüsse, egal mit was sie beginnen - ob mit Lokalen Variablen, Schieberegistern, VI-Ausgängen etc. , beginnen gleichzeitig. Das impliziert, es gibt keine Sprungbefehle!
				  
				
				
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).  
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.09.2009, 08:29  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            abrissbirne 
 
 
                            
                                LVF-Stammgast 
                                    
                                
  
                            
                            
	Beiträge: 480 
	Registriert seit: Aug 2007
	
 
 
LV2009, LV2010 
2007 
EN 
 
66123 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:Von einem bestimmten Standpunkt aus, kann man das so sagen: Irgendwann ist ein Datenfluß abgearbeitet, dann "springt" die Abarbeitung zum nächsten Datenfluß. Und der beginnt hier nunmal mit einer Lokalen Variablen. Das impliziert aber, dass es keine parallele Verarbeitung gibt! 
 
Besser ist es aber, es so zu sehen: Alle Datenflüsse, egal mit was sie beginnen - ob mit Lokalen Variablen, Schieberegistern, VI-Ausgängen etc. , beginnen gleichzeitig. Das impliziert, es gibt keine Sprungbefehle! 
Auf jeden Fall sagte das NI zu mir  . Aber die sagten eher Sprungbefehl, als Sprunkbefehl.
				  
				
				
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.09.2009, 09:12  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            Lucki 
 
 
                            
                                Tech.Exp.2.Klasse 
                                
                                
 
  
                            
                            
	Beiträge: 7.699 
	Registriert seit: Mar 2006
	
 
 
LV 2016-18 prof. 
1995 
DE 
 
01108 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:Das sehe ich anders. 
Jetzt liegen zwei identische Datenflüsse vor. Jeder der beiden ändern jetzt seine spezifischen Indices. So: Wer von den beiden ist jetzt berechtigt, seine manipulierten Daten in dem Array-Element abzuspeichern? Typischer Fall von Race-Condition - also keine Abhängigkeit von Indix-Manipulieren, sondern nur alleine von zwei Datenflüssen. 
Über die Race-Condition der parallelen Schleifen hatte ich auch nachgedacht, als ich das Beispiel erstellte, denn die parallele Verwendung von lokalen Variabelen ohne Datenabhängigkeit in einer Schleife ist ja geradezu das Musterbeispiel, wie man es nicht machen soll. Dann habe ich mir aber gesagt: Die Bedenken sind in diesem Beispiel rein akkademisch. Denn kein Mensch würde es schaffen, die beiden Bedienköpfe, die der jeweiligen true-Case auslösen, so schnell hintereinader zu drücken, das es mit dieser diese race-condition ernst wird. 
Und wer ganz genau hinschaut, der wird feststellen, das es selbst bei gleichzeitiger Ausfühung nicht kritisch werden kann. Zwar wird in beiden Cases die gleiche lokale Variable verwendet, aber: In der ersten Casestruktur werden nur die ersten beiden Element des Array beschrieben, in der zweiten Strukture nur die letzten beiden. Der optische erste Eindruck, daß es da bei gleichzeitiger Auführung Wettlaufprobleme gibt, erweist sich also bei geauerem Hinsehen als falsch. 
Das zweite Argument ist mir erst jetzt eingefallen und macht das erste, schwächere Argument überflüssig. Ich lasse es aber so stehen.
				  
				
				
				
				
				 
			 | 
                              
                 
				
 
 
				 
 | 
		 
		
			| 
				
			 | 
		 
	
 
	
		
			| 
				 
					28.09.2009, 09:50  
				 
				
			 | 
		 
		
		
			
                                 
					
                                                 
				
                    
                     
                            
 
 
                       
                            IchSelbst 
 
 
                            
                                LVF-Guru 
                                      
                                
  
                            
                            
	Beiträge: 3.708 
	Registriert seit: Feb 2005
	
 
 
11, 14, 15, 17, 18 
- 
DE 
 
97437 
Deutschland 
			 | 
                              
Was tun im Case False? 
				
					' schrieb:Die Bedenken sind in diesem Beispiel rein akkademisch. 
 
Zitat:In der ersten Casestruktur werden nur die ersten beiden Element des Array beschrieben, in der zweiten Strukture nur die letzten beiden. Der optische erste Eindruck, daß es da bei gleichzeitiger Auführung Wettlaufprobleme gibt, erweist sich also bei geauerem Hinsehen als falsch. 
Bist du dir da sicher? 
Das mit dem Index würde stimmen, wenn das Array-Bearbeitungselement direkt in den Speicher des Array-Elementes schreibt. Meinst du das ist so? Ich bin der Meinung, es wird in den Datenfluß geschrieben und der wird dann in das Array-Element  und in alle (<=!) Lokalen Variablen geschrieben respektive kopiert!
				  
				
				
 
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).  
 
				
				
				 
			 | 
                              
                 
				
 | 
		 
		
			| 
				
			 | 
		 
	
 
 |  |