Eine Frage zu Variablen in SCL

petzi

Level-1
Beiträge
255
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe ein Testprogramm in SCL mit einem Timer geschrieben und verstehe nicht, warum ich bezüglich "VAR_OUTPUT" einen Fehler bekomme; wenn ich das Ganze mit "VAR_IN_OUT" mache, dann klappt es. Kann mir das bitte Jemand näher erläutern - vielen Dank!

Code:
FUNCTION_BLOCK FB1
 
VAR_INPUT
    Eingang: BOOL;
END_VAR
 
VAR_[B][COLOR=red]OUTPUT[/COLOR][/B]
    Ausgang: BOOL;
END_VAR
 
VAR
    currTime: S5TIME;
    biVal: WORD;
    actFlag: BOOL;
END_VAR
 
BEGIN
 
    // Einschaltverzögerung
 
     currTime := S_ODT (T_NO:=T1, S:=Eingang, TV:=T#1s, R:=FALSE, BI:=biVal, Q:=Ausgang);                     
 
END_FUNCTION_BLOCK
 
 
DATA_BLOCK DB1 FB1
 
BEGIN
 
END_DATA_BLOCK
 
ORGANIZATION_BLOCK OB1
 
VAR_TEMP
 
    info : ARRAY[0..19] OF BYTE;
 
END_VAR
 
    FB1.DB1(Eingang:=E1.0, Ausgang:=A1.0);
 
END_ORGANIZATION_BLOCK


Als Fehlermeldung bekomme ich "Ungültige Zuweisung" und der Curser springt auf A1.0 im OB1!
 
Hallo,
ich kann weder deinen Fehler noch deine Fehlermeldung nachvollziehen - dein komplettes Script kann ich allerdings auch nicht durchcompilieren. Bei mir sagt er : "Fehler beim Zugriff auf den Baustein (offline)" und meint damit den FB1.
Wenn ich den FB1 einzeln compiliere und ihn dann genau wie du (allerdings in AWL) aufrufe gibt es keine Probleme.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachtrag :
der OB1 muß bei einem OUT-Parameter so erstellt werden - dann gehts :
Code:
ORGANIZATION_BLOCK OB1
 
VAR_TEMP
    info : ARRAY[0..19] OF BYTE;
END_VAR
FB1.DB1(Eingang:=E1.0);
    A1.0 := DB1.Ausgang ;
END_ORGANIZATION_BLOCK
Gruß
Larry
 
Aja, vielen Dank LL!

Verstehe ich zwar nicht ganz, denn die Schreibweise

FB1.DB1(Eingang:=E1.0, Ausgang:=A1.0);

bezieht doch ebenfalls den DB1 ein...

Anders gefragt, was genau ist denn der Unterschied zwischen den beiden Schreibweisen?

FB1.DB1(Eingang:=E1.0, Ausgang:=A1.0);

und

FB1.DB1(Eingang:=E1.0);
A1.0 := DB1.Ausgang ;
 
Aja, vielen Dank LL!

Verstehe ich zwar nicht ganz, denn die Schreibweise

FB1.DB1(Eingang:=E1.0, Ausgang:=A1.0);

bezieht doch ebenfalls den DB1 ein...

Anders gefragt, was genau ist denn der Unterschied zwischen den beiden Schreibweisen?

FB1.DB1(Eingang:=E1.0, Ausgang:=A1.0);

und

FB1.DB1(Eingang:=E1.0);
A1.0 := DB1.Ausgang ;

Ich würde sagen, die eine funktioniert und die andere nicht. :ROFLMAO:
Aber Spaß beiseite, das sind ja Dinge, die nicht wir, die Programmierer festgelegt haben, sondern die SCL-Entwickler.
Ich würde das als Bug betrachten, daß es so nicht geht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als Bug würde ich das nicht betrachten.
Denn irgendwie sollte man beim Bausteinaufruf auch erkennen was die Eingangsparameter und was die Ausgangsparameter sind.
Naja und da es bei Hochsprachen üblich ist das die zu übergebenden Aktualparameter an den Baustein bzw Methode in Klammern steht wird es deshalb auch so von den SCL-Entwicklern gewählt worden sein. Meine Vermutung...

godi
 
Naja und da es bei Hochsprachen üblich ist das die zu übergebenden Aktualparameter an den Baustein bzw Methode in Klammern steht wird es deshalb auch so von den SCL-Entwicklern gewählt worden sein. Meine Vermutung...

godi

nun, in vielen hochsprachen gibt es für die deklaration dann den "out"-parameter ... und eine vernünftige entwicklungsumgebung zeigt dann auch im tooltip an, was an übergaben erwartet und was zurückgegeben wird.
 
nun, in vielen hochsprachen gibt es für die deklaration dann den "out"-parameter ... und eine vernünftige entwicklungsumgebung zeigt dann auch im tooltip an, was an übergaben erwartet und was zurückgegeben wird.

nun, da der SCL Editor beides nicht unterstützt wird es eben so gelöst worden sein...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nun, da der SCL Editor beides nicht unterstützt wird es eben so gelöst worden sein...

eine vernünftige SCL-entwicklungsumgebung wäre mir lieber gewesen!
selbst für intelliSens brauch man dalbi... das ist einfach nur fahrlässig! notepad++ kann mehr als dieser sogenannte "Editor"
 
eine vernünftige SCL-entwicklungsumgebung wäre mir lieber gewesen!
selbst für intelliSens brauch man dalbi... das ist einfach nur fahrlässig! notepad++ kann mehr als dieser sogenannte "Editor"

Na dann sollten wir uns mal ein Plugin für Eclipse Programmieren damit Eclipse SCL unterstützt... ;)
 
Zurück
Oben