# Array [index] gleichzeitig füllen



## good_mike (15 Januar 2012)

Hallo,

ich habe folgendes Problem:

In einem Array[1..12] sollen alle Variablen gleichzeitig mit einem gleichen Wert beschrieben werden.
Muss ich dafür einen Counter 1-12 erstellen und die Zieladresse indrekt über den Istwert des Counters angeben oder gibt es da einen einfacheren / besseren Weg. Durch den "Trick" mit dem Counter beschreibe ich das Array ja eigentlich nicht gleichzeitig sondern in jedem Zyklus die nächste Variable.

Genau genommen handelt es sich bei mir um das Array einer Structur... 

Meine jetzige Lösung - gefällt mir aber nicht:

```
IF CNTArrayFill<=12 THEN
 CNTArrayFill:=CNTArrayFill+1;
ELSE
 CNTArrayFill:=1;
END_IF;
StrucRolloParameter[CNTArrayFill].bSteuerbits.3:=TRUE;
```

Ich hoffe ich habe das ganze gut beschrieben und die Frage ist nicht zu "dämlich"!

Gruß
good_mike


----------



## Paule (15 Januar 2012)

good_mike schrieb:


> In einem Array[1..12] sollen alle Variablen gleichzeitig mit einem gleichen Wert beschrieben werden.


Hallo Mike,
was für ein Typ hat dein Array?
Wenn es nicht BOOL ist würde sich der SFC21 (FILL) Baustein anbieten.


----------



## Ghosty (15 Januar 2012)

Hi,
wiso verwendest du keine FOR-Schleife.
FOR Zaehler:=1 TO 12 BY 1 DO
       StrucRolloParameter[Zaehler].bSteuerbits.3:=TRUE;
end_for

Gruß


----------



## good_mike (15 Januar 2012)

Hallo,

zu Paule:
Es handelt sich um ein Bit welches ich in der ArrayStruktur auf TRUE bzw. False setzen möchte.

zu Ghosty:
ja, stimmt, du hast recht. Das wäre einfacher. Aber ich beschreibe mit Deiner Lösung immer noch die einzelnen ArrayVariablen nacheinander und nicht gleichzeitig.

Grüsse

good_mike


----------



## Paule (15 Januar 2012)

good_mike schrieb:


> Aber ich beschreibe mit Deiner Lösung immer noch die einzelnen ArrayVariablen nacheinander und nicht gleichzeitig


Von der Logik schon, und doch passiert alles im gleichen Zyklus.
Sprich wenn das Programm die FOR-Schleife verlässt und etwas anderes tun soll, haben alle Bits den gleichen Zustand.

PS: Es geht jetzt natürlich um Ghostys Lösung


----------



## Ghosty (15 Januar 2012)

Warum möchtest du denn unbedingt alle Werte gleichzeitig Schreiben? 
Mir ist momentan nicht klar was du da für Vorteile hättest (gegenüber der For-Schleife). Aber vielleicht kannst du micht darüber aufklären, bin ja auch immer bereit noch etwas zu lernen.

Gruß


----------



## Tigerente1974 (15 Januar 2012)

Bitte eines nicht vergessen:

Die FOR-Schleife wird nicht verlassen, bis die Schleife durchgelaufen ist. Es geschieht also alles in einem Zyklus und damit "gleichzeitig", wenn man dies auf den Rest des Programms bezieht.


----------



## Paule (15 Januar 2012)

Tigerente1974 schrieb:


> Die FOR-Schleife wird nicht verlassen, bis die Schleife durchgelaufen ist. Es geschieht also alles in einem Zyklus und damit "gleichzeitig", wenn man dies auf den Rest des Programms bezieht.


Sagte ich das nicht?


----------



## Ghosty (15 Januar 2012)

Eben, ist doch genau das was good_mike wollte  . Oder nicht?


----------



## Tigerente1974 (15 Januar 2012)

@Paule: JA 
@Ghosty: Deinen Beitrag fand ich mißverständlich, deswegen mein Beitrag. Du hast natürlich das Gleiche gemeint...


----------



## good_mike (16 Januar 2012)

Mir war im ersten Moment nicht bewust, dass bei der For-Schleife das ganze tatsächlich in einem Zyklus stattfindet.

Der Grund, warum ich die Bit's in einem Zyklus schreiben möchte, ist das die Bedingungen für die Weiterverarbeitung nur für einen Zyklus anstehen und ich damit das Problem hätte das bei dem setzten "Zyklus für Zyklus" ein Teil der Aktionen auf der Strecke bleiben würde.

Ich werd das heute abend mal mit der For-Schleife testen!!

Danke schon mal an alle die sich beteiligt haben!!!

Grüße

good_mike


----------



## Bitmanipulator (17 Januar 2012)

Auf was für einem System arbeitest Du denn? Vielleicht gibt es ja sowas wie ein memset(adr(Ziel), Wert, sizeof(Ziel))?


----------



## good_mike (17 Januar 2012)

Hallo, 
mir war im ersten Moment nicht bewust das ´bei der Lösung mit der FOR-Schleife das ganze in einem Zyklus psssiert. Ich werd das mal ausproblieren.
Der Grund warum ich alle Bit's gleichzeitig ansteuern möchte, ist, daß die Folgebedingung nur für einen Zyklus ansteht und die Funktion aller Bits gleichzeitig ausgelöst werden soll. 

Danke an alle die sich bis jetzt beteiligt haben und mir neue Ideen geliefert haben!

Gruß

good_mike


----------



## good_mike (17 Januar 2012)

Man sollte halt mal aktualisiern bevor man die gleich Antwort zwei mal schreibt.....

Ich arbeite unter TWINCAT 2.11

Gruß

good_mike


----------

