ARRAY in SCL

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
wer kann mir hier helfen :cry:

ich möchte ein 2dimensionales Array in SCL programmieren aber es funktioniert nicht. Laut Hilfe sieht es so aus

VAR
DaysYear :
ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,
-1289, 100, 385, 2,
1, 2, 3, 4 ;

END_VAR

aber es kommt folgende Fehlermeldung


> Eine Initialisierung ist in diesem Kontex nicht erlaubt

wer kann mir bei diesem Problem helfen? :cry:
 
Code:
DATA_BLOCK DB_10
TITLE =
VERSION : 0.1


  STRUCT     
   DB_VAR : ARRAY  [1 .. 3, 10 .. 13 ] OF //vorläufige Platzhaltervariable
   INT ;    
  END_STRUCT ;    
BEGIN
   DB_VAR[1, 10] := 0; 
   DB_VAR[1, 11] := 0; 
   DB_VAR[1, 12] := 0; 
   DB_VAR[1, 13] := 0; 
   DB_VAR[2, 10] := 0; 
   DB_VAR[2, 11] := 0; 
   DB_VAR[2, 12] := 0; 
   DB_VAR[2, 13] := 0; 
   DB_VAR[3, 10] := 0; 
   DB_VAR[3, 11] := 0; 
   DB_VAR[3, 12] := 0; 
   DB_VAR[3, 13] := 0; 
END_DATA_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
geht nur im FUNCTION_BLOCK

Hallo Udo,

in einem FB geht es unter "VAR", jedoch nicht unter "VAR_TEMP". In einer FC geht es überhaupt nicht, da gibt es keine "VAR". Die Fehlermeldungen sind die selben.


Gruß, Onkel
 
also ich kenn mich mit scl nicht so richtig gut aus.

ich kann aber sagen, dass ich in einem fc (awl) ohne weiteres arrays im temp-bereich benutzen kann.

Code:
FUNCTION FC 3 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  varin : ARRAY  [1 .. 3 ] OF INT ;	
END_VAR
VAR_TEMP
  vartemp : ARRAY  [1 .. 3, 10 .. 13 ] OF INT ;	
END_VAR
BEGIN
NETWORK
TITLE =

      L     #varin[1]; 
      T     #vartemp[2, 11]; 

END_FUNCTION

hab das ganze mal in scl probiert. folgendes wird ohne fehler übersetzt.
Code:
FUNCTION_Block FB_4
VERSION : '0.1'

VAR
  var1 : ARRAY  [1 .. 3 ] OF INT :=1,2,3;
  var2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT :=1,2,3,10,11,12,13;
END_VAR
VAR_Input
  varin1 : ARRAY  [1 .. 3 ] OF INT :=1,2,3;
  varin2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT :=1,2,3,10,11,12,13;
END_VAR
VAR_Output
  varout1 : ARRAY  [1 .. 3 ] OF INT :=1,2,3;
  varout2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT :=1,2,3,10,11,12,13;
END_VAR
VAR_In_Out
  varinout1 : ARRAY  [1 .. 3 ] OF INT;
  varinout2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT;
END_VAR
VAR_TEMP
  vartemp1 : ARRAY  [1 .. 3 ] OF INT;
  vartemp2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT;
END_VAR

      var1[1] := var2[2,13]; 
      varin1[1] := varin2[2,13]; 
      varout1[1] := varout2[2,13]; 
      varinout1[1] := varinout2[2,13]; 
      vartemp1[1] := vartemp2[2,13]; 

END_FUNCTION_Block



FUNCTION FC_4 : Void
VERSION : '0.1'

VAR
  var1 : ARRAY  [1 .. 3 ] OF INT;
  var2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT;
END_VAR
VAR_INPUT
  varin1 : ARRAY  [1 .. 3 ] OF INT :=1,2,3;
  varin2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT :=1,2,3,10,11,12,13;
END_VAR
VAR_OUTPUT
  varout1 : ARRAY  [1 .. 3 ] OF INT :=1,2,3;
  varout2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT :=1,2,3,10,11,12,13;
END_VAR
VAR_IN_OUT
  varinout1 : ARRAY  [1 .. 3 ] OF INT;
  varinout2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT;
END_VAR
VAR_TEMP
  vartemp1 : ARRAY  [1 .. 3 ] OF INT ;    
  vartemp2 : ARRAY  [1 .. 3, 10 .. 13 ] OF INT;
END_VAR

      var1[1] := var2[2,13]; 
      varout1[1] := varout2[2,13]; 
      varinout1[1] := varinout2[2,13]; 
      vartemp1[1] := vartemp2[2,13]; 

END_FUNCTION
 
Hallo.

Anonymous schrieb:
...ich kann aber sagen, dass ich in einem fc (awl) ohne weiteres arrays im temp-bereich benutzen kann...
Ja natürlich kann man Arrays im temporären Bereich verwenden, nur initialisieren kann man sie nicht, jedenfalls nicht in der Deklaration. Vermutlich verwendet Udo eine FUNCTION und versucht, statische Variablen an zu legen.

@Udo
Versuch's doch einfach mal mit einem FUNCTION_BLOCK, dann geht es.


Gruss, Onkel
 
Zurück
Oben