ST:mehrere Arrays bei Deklaration initialisieren

zabex

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe vor in ST einen Baustein zur linearen Interpolation von Kennlinien zu bauen (EntwicklungsumgebungTwinCAT 2.11).
Die Deklaration sieht so aus:

Code:
[FONT=courier new]FUNCTION_BLOCK FB_Kennlinie
VAR_INPUT
       IN               : REAL;
       y                : ARRAY[1..10] OF REAL; (*:= 0, 1000, 8(1000);*)
       x                : ARRAY[1..10] OF REAL; (*:= 0, 1000, 8(1000);*)
       Stuetzstellen    : INT:=2; 
END_VAR[/FONT]

Im Hauptprogramm sollen nun diverse Instanzen von Kennlinien deklariert werden und dabei auch gleich die Kennlinie angegeben werden.
Das Problem: ich bekomme nur eines der beiden Arrays initialisiert.
Folgendes klappt:

Code:
[FONT=courier new]PROGRAM MAIN
VAR
    kennlinie1 : FB_Kennlinie:=(
        Stuetzstellen:=5,
        y:=1000,2000,3000,4000,5000,6,7,8,9,10
    );
[/FONT]
Die Werte sind im Baustein im Array y auch wirklich enthalten und ersetzen die Defaultwerte im Baustein.
Aber wenn ich X auch noch initialisieren will, meckert der Compiler "Fehler 3760: Fehlerhafter Initialwert".
Folgendes führt zu dem Fehler:

Code:
[FONT=courier new]PROGRAM MAIN
VAR
  kennlinie2 : FB_Kennlinie:=(
     Stuetzstellen:=5,
     [/FONT][FONT=courier new]y:=1,2,3,4,5,6,7,8,9,10,
     [/FONT][FONT=courier new]x:=1,2,3,4,5,6,7,8,9,10
 [/FONT][FONT=courier new] );
[/FONT]
Der Compiler kapiert wohl das Ende der Array-Initialisierung in der y:= Zeile nicht.
Ich habe schon probiert die Werte in der y:=... Zeile irgendwie zu klammern, bekomme aber immer die gleiche Fehlermeldung.
Auch Einzelwertzuweisung in das Array (also y[1]:=1 ) klappte nicht.

Weiß jemand wie man dem Compiler da auf die Sprünge helfen kann?
 
Zuletzt bearbeitet:
Problem umschiffen:
Code:
kennlinie2 : FB_Kennlinie:=(
     y:=1,2,3,4,5,6,7,8,9,10,
     Stuetzstellen:=5,
     x:=1,2,3,4,5,6,7,8,9,10
  );

Der Parser kommt wohl mit den Kommas nicht ganz klar.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm, seltsam.
Ich habe es mit TwinCat 2 probiert. Beim ersten Mal als ich den Code von dir eingefügt habe gab es auch einen Fehler.
Dann habe ich die Reihenfolge wie ich das geschrieben habe geändert. Dann konnte ich übersetzen.
Und jetzt kann ich sogar in deiner Reihenfolge die Initialisierung übersetzen, ohne Fehler.
 
Sehr merkwürdig: Habe ein neues Projekt nur mit dem Code aufgesetzt - klappt!
Und nun kann ich plötzlich auch das ursprüngliche Projekt übersetzen. Keine Ahnung was jetzt anders ist (und ich hatte das wirklich in allen Variationen probiert). Jetzt geht sogar folgendes:
Code:
kennlinie3 : FB_Kennlinie:=(
      Stuetzstellen:=4,
      y:=1,2,3,4,  6(0),
      x:=1,2,3,4,  6(0)
   );
 
Zurück
Oben