Array index 0 oder 1 beginnen

robiman

Level-1
Beiträge
67
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mal eine Frage an die Allgemeinheit
Wie geht ihr damit um?
Ach ja, mir geht's speziell um TIA

Ist es sinnvoller/praktischer ein Array von 0 an oder von 1 an zu benutzen

Also quasi wenn ich 10 Elemente benötige
Array[0..9]
oder
Array[1..10]
oder
Array[0..10]
wobei ich bei letzten ja 11 Elemente habe

Ich benötige die Array für die verschiedensten Zwecke bis hin natürlich für die HMI
Standard Daten, Strings oder auch UDT's

Ich find das immer etwas unschön index 0 auch zu benutzen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin robiman,

ich halte es für sinnvoller mit 0 zu beginnen, da es einige SIEMENS-Bausteine gibt, die sowieso immer bei 0 beginnen (ich meine Serialize und Deserialize gehören auch dazu).
Auch wenn Du mit der MOD-Funktion einen Ringpuffer bespaßt ist natürlich der beginn bei 0 sinnvoll.

Andererseits kann es helfen, wenn man 10 Messwerte hat, die den Sensoren 1-10 zugeordnet sind, auch ein Array bei 1 zu beginnen.

Das ist also immer Aufgabenspezifisch.

Ich verwende einen Index, der bei 0 beginnt eigentlich immer dann, wenn es um programminterne Berechnungen/Schleifen geht.
Andere "Indexstarts" verwende ich, wenn es sinnvoll ist (Zuordnung INDEX des Array <> andere Variable).

VG

MFreiberger
 
Immer bei 0 wenn ich 10 brauche wo sich aber 1-10 besser eignen bleibt 0 auch mal leer. Oder 0 wird zum initialisieren genutzt.
 
Grundsätzlich bei 0 angefangen. Wenn es um standardarrays geht wo der arrayplatz keine weitere bedeutung hat oder eher für die Wertigkeit steht. Wenn der Arrayplatz allerdings einen zusammenhang mit dem Objekt hat, dann nummeriere ich auch mal ganz unkonventionell.

Ich hab z.B. 100 Klappen die nummeriert sind. Auf 5 CPUs verteilt. dann haben die Klappen auf CPU eins den Arrayplatz 1..22 auf cpu 2 arrayplatz 23..54 etc. Auf diesen CPUs fangen die arrays dann entsprechend bei 23 an und enden bei 54.
Auf der Mastercpu kopiere ich diese Arrays dann in ein masterarray von 0..100

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
bin auf das Thema gekommen wie ich Daten zu Regalplätzen ablegen muss
Da gibt es halt den Platz 0 nicht

In diesen speziellen Fall habe ich jetzt auch von 1 begonnen
Hatte bis heute noch nie was an der vorgegeben Einstellung 0 bei Array[0..1] geändert, immer nur die "bis" Größe;)
 
Moin robiman,

bei den Regalen unterschiedlicher Hersteller, mit denen ich mich bisher im RetroFit befassen musste, hat die Regalmatrix tatsächlich immer mit 1 begonnen. Allerdings waren häufig die E/A-Plätze vorgelagert und für diese habe ich dann die Koordinate 0 verwendet.

VG

MFreiberger
 
Array, die auch mit HMI-VAriablen im TIA verbunden werden unbedingt mit 0 beginnen, da es sonsdt zu "Verschiebungen" bei der Anzeige der Daten im HMI kommt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist mir grad vor einer Stunde auf die Füße gefallen
Array geht jetzt bei 0 los dann ist auch bei Index Variable=1 auch im Array das Element 1 angesprochen

Bei Index =1 wird sonst bei Array Deklaration Array1..10 das Element 2 angesprochen :evil:, also quasi intern wird immer von 0 gezählt
 
Ist mir grad vor einer Stunde auf die Füße gefallen
Array geht jetzt bei 0 los dann ist auch bei Index Variable=1 auch im Array das Element 1 angesprochen
Bei Index =1 wird sonst bei Array Deklaration Array1..10 das Element 2 angesprochen :evil:, also quasi intern wird immer von 0 gezählt
Ich habe keine Ahnung, was Dir in Wirklichkeit wohin gefallen ist, aber gefallen hat mir Dein post #9 ganz und gar nicht.
Wie meinst Du das??? Waren die ganzen Antworten jetzt für die Katz? :ROFLMAO:

Gruss, Heinileini
 
Er meint vermutlich das spezielle Siemens-Feature, daß bei Arrays, die mit HMI-Variablen verbunden sind, das Array mit Index 0 beginnen MUSS, wie Ralle oben in #8 erwähnte.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei TIA beginne ich meistens mit Index 1.
Wenn z.b. die Länge eines Arrays über eine Konstante bestimmt wird,
finde ich es somit lesbarer bei der Verwendung von FOR Schleifen.


Code:
FUNCTION "Test" : Real
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_IN_OUT 
      Values : Array[1..#NUMBER_OF_VALUES] of Real;
   END_VAR


   VAR_TEMP 
      i : Int;
      Averrage : Real;
   END_VAR


   VAR CONSTANT 
      NUMBER_OF_VALUES : Int := 10;
   END_VAR




BEGIN
	
	#Averrage := 0.0;
	FOR #i := 1 TO #NUMBER_OF_VALUES DO
	    #Averrage := #Averrage + #Values[#i];
	END_FOR;
	
	#Test := #Averrage / #NUMBER_OF_VALUES;
END_FUNCTION


Natürlich kann ich der Konstante auch den Wert 9 zuweisen und das Array bei 0 beginnen lassen.
Dann müsste ich meine Konstante auch umbennen damit diese auch in anderen Programmteilen wieder Sinn macht.




Code:
	#Averrage := 0.0;
	FOR #i := 0 TO #NUMBER_OF_VALUES_MINUS_1 DO
	    #Averrage := #Averrage + #Values[#i];
	END_FOR;
	
	#Test := #Averrage / (#NUMBER_OF_VALUES_MINUS_1 + 1);
 
Zurück
Oben