Dytentyp an FB übergeben

HaraldT

Level-1
Beiträge
53
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich hab irgendwie ein Fehler in meiner Denkweise wie man eine IN, eine OUT oder eine IN_OUT Variable als Datenstruktur übergibt.

Im Reiter Datentypen sind z.b. 10 Datentypen mit unterschiedlichem Namen die aber alle die gleiche Struktur haben.

Code:
TYPE Name_x
        STRUCT
        IN_1: BOOL;
        IN_2: REAL;
        IN_3: BYTE;


        OUT_1: BOOL;
        OUT_2: BOOL;
        OUT_3: BOOL;
    END_STRUCT
END_TYPE

Jetzt Bastel ich meine Bausteinvariablen:

Code:
FUNCTION_BLOCK FB_Daten


VAR_INPUT
END_VAR


VAR_OUTPUT
END_VAR


VAR_IN_OUT
Struktur: STRUCT;
END_VAR


VAR PERSISTENT
END_VAR


VAR
END_VAR

Und so stelle ich mir den Code vor:

Code:
IF Struktur.IN_1 = TRUE THEN Struktur.OUT_1 := TRUE
END_IF;

Wenn ich den Baustein nun in CFC aufrufe dann hat dieser keine "Beinchen" die ich mit dem Datentypen beschalten kann.

Wie macht man dies richtig?

Wenn ich im Baustein eine Struktur anlege, dann habe ich für IN_1, OUT_1 usw. jeweils ein Beinchen aber das möchte ich nicht.

Die Frage ist also:
Wie übergebe ich einen Struktur an einen Baustein weiter?

Vielen Dank für die Hilfe :)


PS google und die Forensuche haben mir leider nicht wirklich geholfen aber wahrscheinlich habe ich nicht das richtige gesucht.
 
100%ig habe ich nicht verstanden was du willst.
In CFC gibt es aber (Toolbox) die Objekte "Composer" und "Selector". Damit kannst du auf Komponenten der Struktur in CFC zugreifen.

Vielleicht hilft dir das ja schon weiter.

Guga
 
Änder mal deine IN_OUT vom Typ 'STRUCT' auf den Typ 'Name_x' ... denn das ist ja wohl die Struktur, die du an der Stelle verwenden willst ...

Gruß
Larry
 
Wenn ich im Baustein eine Struktur anlege, dann habe ich für IN_1, OUT_1 usw. jeweils ein Beinchen aber das möchte ich nicht.
Wie hattest Du da die Struktur deklariert?

Daß Dein Eingangs-"Beinchen" fehlt liegt wohl daran, daß Du Deine Struktur in VAR_IN_OUT als leere Struktur deklariert hast, der man eh' nichts zuweisen kann. (Erstaunlich daß sowas überhaupt geht - bekommst Du vom Compiler keine Fehlermeldungen oder Warnungen?)
Verwende bei der Deklaration anstatt "STRUCT" den Name Deines Datentyps oder deklariere die Struktur:
Code:
VAR_IN_OUT
  Struktur : STRUCT
    IN_1 : BOOL;
    OUT_1 : BOOL;
  END_STRUCT
END_VAR


ich hab irgendwie ein Fehler in meiner Denkweise
[...]
Und so stelle ich mir den Code vor:

Code:
IF Struktur.IN_1 = TRUE THEN Struktur.OUT_1 := TRUE
END_IF;
Das sieht sehr danach aus, als ob Du außerdem einen Fehler in der Denkweise hast bezüglich wie eine SPS funktioniert und wie man das Programm normalerweise schreibt, damit die Logik vollständig ist. Kopieren eines Eingangs auf einen Ausgang schreibt man so:
Code:
Struktur.OUT_1 := Struktur.IN_1;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie hattest Du da die Struktur deklariert?

Daß Dein Eingangs-"Beinchen" fehlt liegt wohl daran, daß Du Deine Struktur in VAR_IN_OUT als leere Struktur deklariert hast, der man eh' nichts zuweisen kann. (Erstaunlich daß sowas überhaupt geht - bekommst Du vom Compiler keine Fehlermeldungen oder Warnungen?)
Verwende bei der Deklaration anstatt "STRUCT" den Name Deines Datentyps oder deklariere die Struktur:
Code:
VAR_IN_OUT
  Struktur : STRUCT
    IN_1 : BOOL;
    OUT_1 : BOOL;
  END_STRUCT
END_VAR


Warum soll er sich nochmal die Struktur neu zusammen basteln? Die gibt es doch schon als Datentyp. Larrys Beitrag macht da doch etwas mehr Sinn, oder täusche ich mich?
 
Zuletzt bearbeitet:
Warum soll er sich nochmal die Struktur neu zusammen basteln? Die gibt es doch schon als Datentyp.
Zum Test warum sein FB keine sichtbaren Eingangsparameter-"Beinchen" hat und anscheinend hat der Kollege auch noch Probleme wie man einen STRUCT korrekt deklariert - etwas Übung schadet da wohl nicht. ;)
Außerdem habe ich 2 Varianten vorgeschlagen, zuerst die empfehlenswerte/korrekte und dann wie es auch noch geht:
Verwende bei der Deklaration anstatt "STRUCT" den Name Deines Datentyps oder deklariere die Struktur

Harald
 
Hallo HaraldT
Im Reiter Datentypen sind z.b. 10 Datentypen mit unterschiedlichem Namen die aber alle die gleiche Struktur haben.
Das ist erstmal Blödsinn. Der Sinn von Struct Elementen ist ja die Wiederverwendung sonnst könnte man die Variablen auch einzeln definieren.

Definieren eines Struct:
Code:
TYPE Struct_Konfiguration :
STRUCT
  IN_1: BOOL;
        IN_2: REAL;
        IN_3: BYTE;

        OUT_1: BOOL;
        OUT_2: BOOL;
        OUT_3: BOOL;
END_STRUCT
END_TYPE
Definieren der In_Out Variable im FB:
Code:
VAR_IN_OUT
 uebergebene_Structur:Struct_Konfiguration;
END_VAR

Das ganze sollte dann so aussehen:
Struct.jpg

Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Hilfe. JETZT! hab auch ich es verstanden.
Mein Fehler war einfach, dass ich Datentypen mit DBs von S7 gleichgesetzt hab :oops: und deswegen wollte ich auch so viele die gleich sind aber andere Namen bekommen. Ich wollte die Instanzen anlagen ^^


Kann geschlossen werden.
 
Zurück
Oben