Step 7 S7 SCL Array gezielt initialisieren

sinumerik.user

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Liebe SPS / SCL Experten,

ich möchte schon bei der Initialisierung bestimmte Zellen eines Arrays ansprechne und mit Werten füllen.
Leider gelingt mir das nicht.
Das Array soll zum Beispiel so aussehen:

// +------+------+------+
// | 01 | 05 | 09 |
// +------+------+------+
// | 02 | 06 | 10 |
// +------+------+------+
// | 03 | 07 | 11 |
// +------+------+------+
// | 04 | 08 | 12 |
// +------+------+------+

Der folgende Code lässt sich zwar übersetzen und funktioniert, aber erfüllt nicht meine Anforderung.

Code:
FUNCTION_BLOCK FB60

VAR_TEMP
    // temporäre Variablen

END_VAR
VAR
    // statische Variablen

test :  STRUCT
        
            test0 : ARRAY[1..4,1..3] OF INT := 01,02,03,04,05,06,07,08,09,10,11,12;

        END_STRUCT;

END_VAR

    // Anweisungsteil
    BEGIN 
;        
END_FUNCTION_BLOCK

DATA_BLOCK DB60  FB60
//
// Baustein-Kommentar ...
//
BEGIN

END_DATA_BLOCK

Damit das Array so wie im Beispiel initialisiert wird, müsste es wie folgt mit Werten gefüllt werden.
Das ist mir aber zu kompliziert, ich würde gerne schon bei der Initialisiertung die Indexe/Indizes ansprechen.

Code:
test0 : ARRAY[1..4,1..3] OF INT := 01,05,09,02,06,10,03,07,11,04,08,12;

Wie kann ich bei der Initialisierung eines Arrays auf einfache Weise bestimmte Zellen vorbesetzen?
So würde ich es gerne machen, doch der Code lässt sich nicht übersetzen.

Code:
test.test0[1,1] := 01;

Der folgende Code ist keine Initialisiertung, die Felder des Arrays werden zur Laufzeit gefüllt.

Code:
FUNCTION_BLOCK FB60

VAR_TEMP
    // temporäre Variablen

END_VAR
VAR
    // statische Variablen

test :  STRUCT
        
            test0 : ARRAY[1..4,1..3] OF INT;

        END_STRUCT;

END_VAR

    // Anweisungsteil
    BEGIN 

       test.test0[1,1] := 01;
       test.test0[2,1] := 02;
       test.test0[3,1] := 03;
       test.test0[4,1] := 04;
                      
       test.test0[1,2] := 05;
       test.test0[2,2] := 06;
       test.test0[3,2] := 07;
       test.test0[4,2] := 08;
                      
       test.test0[1,3] := 09;
       test.test0[2,3] := 10;
       test.test0[3,3] := 11;
       test.test0[4,3] := 12;
    
END_FUNCTION_BLOCK

DATA_BLOCK DB60  FB60
//
// Baustein-Kommentar ...
//
BEGIN

END_DATA_BLOCK

Ich bitte um Rat und Vorschläge, wie ich bei der Initialisierung von Arrays, bestimmt Zellen dirket füllen kann.
Vielen Dank

MFG

sinumerik.user
 
Wenn immer das gleiche Drinsteht das ganze als Startwert eintragen. Sonst eine Schleife und ein Bit was sagt das initialisiert wurde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum FB gehört ja auch der DB, warum erstellst dann nicht eine Quelle für den DB und initialisierst dort die Werte?

Code:
Data_block "DB"
VERSION : 0.1

"FB60"
Begin
   //Hier Werte vorbesetzen ...

End_data_block
 
Manchmal hilft es, einfach in der Hilfe zu SCL nachzulesen.
Hier ein Beispiel aus der Hilfe:
Code:
//Feldinitialisierung:
      REGLER1 : ARRAY [1..2, 1..2] OF INT := -54, 736,  -83, 77;
      REGLER2 : ARRAY[1..10] OF REAL := 10(2.5);
      REGLER1 :  ARRAY [1..2, 1..2] OF INT := [-54, 736, -83, 77];
      REGLER2 :  ARRAY[1..10] OF REAL := [10(2.5)];
Gruß
Erich
 
Zurück
Oben