Initialisierung bestimmter Indexe eines Array

Zero1

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich würd gern bestimmte Indexe eines Arrays Initialisieren.

Code:
      Schnittstellendaten                 := ( wVorgaengerStation           := 0,
                                              wNachfolgerStation            := 0,
                                              Eintransporte                 := [101,Rueckwaertig],
                                              Austransporte                 := [101,Vorwaertig]
                                             ),

Damit würde ich gern bei Eintransporte[101] Rueckwaertig initialisieren.
Allerdings initialisiere ich so natürlich in Eintransporte[0] die 101 und in Eintransporte[1] das ENUM Rueckwaertig.
Eintransporte ist ein Array[1..499] von dem ENUM.
Kriege ich das überhaupt realisiert, ohne die ersten 100 Stellen mit-initialisieren zu müssen?

Grüße
 
Zuletzt bearbeitet:
Hallo,
mit Initialisieren meinst du mit einem bestimmten Wert vorbelegen ?
Wenn ja ... das geht selbstverständlich - nur nicht automatisch vom System aus. Du musst hierfür einen Baustein erstellen der das für dich tut.
Ich verstehe dein Beispiel so, dass du die Indexe 0..100 mit etwas anderen (mit was ?) vorbelegen möchtest als die Indexe 101..149 - ist dem so ?
Mein Vorschlag wäre, dass du dein Vorhaben nochmal etwas ausführlicher beschreibst ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja du hast es erfasst. :) Genau, mit initialisieren meine ich vorbelegen.

In dem Beispiel sind mir die Indexe 0-100 egal, benötige sie dort nicht. Mich interessiert nur Index 101. Es ist aber durchaus auch möglich, dass mich später ganz andere Indexe interessieren und auch vorbelegt werden sollen.

Tatsächlich habe ich es aktuell über einen Baustein gelöst, da ich keine Möglichkeit so gesehen habe.
 
Array-Initialisierung kann man in CoDeSys auch kurz fassen. Aber du musst natürlich dich schon durch die vorderen Elemente durcharbeiten indem du sie z.B. mit 0 initialisierst.
test: ARRAY[0..7] OF REAL:= [ 3 (2),6, 4(1) ]; // entspricht [2,2,2,6,1,1,1,1]
 
Irgendwie habe ich Probleme mit den Informationen vom Fragesteller Zero1.
- Welches Programmiersystem wird verwendet? (Wegen der Erwähnung von ENUM kann man Siemens wohl ausschließen)
- "Eintransporte ist ein Array[1..499]", "Allerdings initialisiere ich so natürlich in Eintransporte[0]" - das Element [0] gibt es da gar nicht
- Was ist "Schnittstellendaten"? Ist der gezeigte Code eine echte Syntax oder irgendwas (unglücklich) gekürztes?
- Ist mit "Initialisieren" tatsächlich das Vorbelegen durch den Compiler zur Übersetzungszeit gemeint? Der belegt sowieso alle nicht besonders angegebenen Werte mit einem Standardwert, dem tut das nichts wenn man ihn auch die ersten 100 Elemente explizit initialisieren läßt.

Ansonsten würde ich etwa folgendes probieren:
Code:
Schnittstellendaten := ( wVorgaengerStation := 0,
                         wNachfolgerStation := 0,
                         Eintransporte      := [101 (0),Rueckwaertig],
                         Austransporte      := [101 (0),Vorwaertig]
                       ),
(die 101 könnte auch 100 heißen müssen, je nachdem wie die Arrays wirklich deklariert sind)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte eben auch schon mal den Gedanken wie Harald - soll es zur Laufzeit passieren oder beim Compilieren.
Mein Ansatz mit dem Baustein würde bestätigt durch Zitat : "später mal ganz anders"
 
Entschuldigt die Unklarheiten.
- Selbstverständlich war Eintransporte[0] falsch, da, wie bereits angemerkt, das Array bei 1 anfängt.
- Das Programmiersystem ist eine Bosch Rexroth XM22 via IndraWorks 15V16 P1
- Schnittstellendaten ist eine Struktur, gefüllt mit ENUMs. Tatsächlich nichts gekürzt, ist Teil vom original Code. Im insgesamten ist das eine relativ große Struktur mit weiteren Strukturen ineinander verschachtelt.
- Ist mit "Initialisieren" tatsächlich das Vorbelegen durch den Compiler zur Übersetzungszeit gemeint? Der belegt sowieso alle nicht besonders angegebenen Werte mit einem Standardwert, dem tut das nichts wenn man ihn auch die ersten 100 Elemente explizit initialisieren läßt.

Tatsächlich ja, das Vorbelegen war gemeint.
Natürlich tut es nicht weh, wenn die Werte davor auch initialisiert werden. Den Aufwand wollten wir aber möglichst vermeiden, da alles (siehe unten) stark variieren kann.

@Guga:
Genau das ist der springende Punkt. Die davorliegenden Elemente wollte ich möglichst nicht immer vor durcharbeiten. Der Gedanke war, nur gezielte Indexe zum Compilieren mit einem Wert vorzubelegen.
Der Aufwand, bei jedem neuen Projekt wäre zu viel. Jedes mal, je nach dem welche Indexe benötigt werden, das hin und her rechnen, wie viele Werte zwischen den benötigten dann wieder Default belegt werden müssen, wäre zu groß.
Wenn auf Index 1, 51, 101, 102, 151, 201 etc zugegriffen werden muss, wäre das recht aufwendig.
Daher fällt der Gedanke beim Compilieren das ganze zu machen leider raus.
Aktuell haben wir es in einem Baustein definiert und so werden wir es so auch belassen. Ist die einfachere Methode, denke ich. :)
 
Zurück
Oben