Step 7 SCL DB aufruf mit Daten Struktur

maik.hollmann

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

Ich möchte nun im SCL Code auf eine Structur von daten zugreifen.
Ein DB Symbolischer Name "ST_TYP"



ST_Station :STRUCT
Wkz_Code :Byte;
Zylinder1_V :Byte;
Zylinder1_R :Byte;
Zylinder1_Maske :Byte;
Zylinder1_Cfg :Word;
END_STRUCT;

ST_Bauteil : STRUCT
Vorwahl : Bool;
ProgNrSstL : Int;
ProgNrSstR : Int;
101x :ST_Station;(wäre cool wenn ich da die Struktur von ST_Station hätte)


END_STRUCT;

ST_ProgNr : STRUCT
P101 :ST_Bauteil; (wäre cool wenn ich da die Struktur von ST_Bauteil hätte)
P102 :ST_Bauteil;
P103 :ST_Bauteil;
P104 :ST_Bauteil;
P105 :ST_Bauteil;

END_STRUCT;


Ich würde gerne in SCL dann Symbolisch zugreifen

zB.: ST_Typ.P101.101x.Zylinder1_V.X0, denn wenn ich alle variablen einzeln deklariere, wäre ich bei ca 7000 variablen :shock::shock:
 
So hab ich es derzeit, aber es geht so wohl nicht:

db5.jpg

Code:
FUNCTION_BLOCK TypVerwaltung
NAME    : TypVerwaltung
FAMILY  : SCL
AUTHOR  : Hollmann
VERSION : '1.0'


VAR_INPUT
    STST101x_WkzCode:       BYTE;
    STST101x_MZ1xBE1:       BOOL;    
    STST101x_MZ1xBE2:       BOOL;    
    STST101x_MZ1xBE3:       BOOL;    
    STST101x_MZ1xBE4:       BOOL;    
    STST101x_MZ1xBE5:       BOOL;    
    STST101x_MZ1xBE6:       BOOL;    
    STST101x_MZ1xBE7:       BOOL;    
    STST101x_MZ1xBE8:       BOOL;    
    STST102x_WkzCode:       BYTE;    
    STST102x_MZ1xBE1:       BOOL;    
    STST102x_MZ1xBE2:       BOOL;    
    STST102x_MZ1xBE3:       BOOL;    
    STST102x_MZ1xBE4:       BOOL;    
    STST102x_MZ1xBE5:       BOOL;    
    STST102x_MZ1xBE6:       BOOL;    
    STST102x_MZ1xBE7:       BOOL;    
    STST102x_MZ1xBE8:       BOOL;
    ST_Typ:                 ARRAY[0..986] OF BOOL;    
END_VAR


VAR_OUTPUT
    AktProgNrSstL:      INT;    
    AktProgNrSstR:      INT;    
    STST101xMZ11BE_R:       BYTE;    
    STST101xMZ11BE_V:       BYTE;   
    STST101xMZ12BE_R:       BYTE;    
    STST101xMZ12BE_V:       BYTE;    
    STST101xMZ11_Maske:     BYTE;    
    STST101xMZ12_Maske:     BYTE;    
    STST101xMZ11_Cfg:       WORD;    
    STST101xMZ12_Cfg:       WORD;    
    STST102xMZ11BE_R:       BYTE;    
    STST102xMZ11BE_V:       BYTE;    
    STST102xMZ12BE_R:       BYTE;    
    STST102xMZ12BE_V:       BYTE;    
    STST102xMZ11_Maske:     BYTE;    
    STST102xMZ12_Maske:     BYTE;    
    STST102xMZ11_Cfg:       WORD;    
    STST102xMZ12_Cfg:       WORD;    
END_VAR


VAR_IN_OUT
    
END_VAR


VAR
        ST_Station:     STRUCT
        Wkz_Code:           BYTE;
        MZ11BE_R:           BYTE;
        MZ11BE_V:           BYTE;
        MZ11_Maske:         BYTE;
        MZ11_Cfg:           WORD;
        MZ12BE_R:           BYTE;
        MZ12BE_V:           BYTE;
        MZ12_Maske:         BYTE;
        MZ12_Cfg:           WORD;
        TKBel:              BOOL;
        TKfrei:             BOOL;
    END_STRUCT;
        
        
        
        
        ST_Bauteil:     STRUCT
        Vorwahl:            BOOL;             (*Programm Vorwahl*)
        ProgNrSstL:         INT;                 (*SchweissprogNr für Zyl Links *)
        ProgNrSstR:         INT;                 (*SchweissprogNr für Zyl Rechts *)
        STST101x:             ST_Station;
        STST102x:             ST_Station;
    END_STRUCT;
    
    

    ST_ProgNr AT ST_Typ: STRUCT
        P101:               ST_Bauteil;            
        P102:               ST_Bauteil;            
        P103:               ST_Bauteil;            
        P104:               ST_Bauteil;            
        P105:               ST_Bauteil;            
        P106:               ST_Bauteil;            
        P107:               ST_Bauteil;            
        P108:               ST_Bauteil;            
        P109:               ST_Bauteil;            
        P110:               ST_Bauteil;            
        P111:               ST_Bauteil;            
        P112:               ST_Bauteil;            
        P113:               ST_Bauteil;            
        P114:               ST_Bauteil;            
        P115:               ST_Bauteil;            
        P116:               ST_Bauteil;            
        P23:                ST_Bauteil;            
        P24:                ST_Bauteil;            
        P34:                ST_Bauteil;            
        P35:                ST_Bauteil;            
        P13:                ST_Bauteil;            
        P15:                ST_Bauteil;            
        P16:                ST_Bauteil;            
        P18:                ST_Bauteil;            
        P20:                ST_Bauteil;            
        P25:                ST_Bauteil;            
        P28:                ST_Bauteil;            
        P29:                ST_Bauteil;            
        P40:                ST_Bauteil;
    END_STRUCT;            

    
    
END_VAR

Ich hoffe jemand kann mir helfen:cool:
 
Ich würde gerne in SCL dann Symbolisch zugreifen

zB.: ST_Typ.P101.101x.Zylinder1_V.X0
Wenn Du Deine Strukturen und den DB so deklarierst:
Code:
TYPE "ST_Station"
  STRUCT
    Wkz_Code : BYTE ;
    Zylinder1_V : BYTE ;
    Zylinder1_R : BYTE ;
    Zylinder1_Maske : BYTE ;
    Zylinder1_Cfg : WORD ;
  END_STRUCT
END_TYPE

TYPE "ST_Bauteil"
  STRUCT
    Vorwahl : BOOL ;
    ProgNrSstL : INT ;
    ProgNrSstR : INT ;
    p101x : "ST_Station";
  END_STRUCT
END_TYPE

DATA_BLOCK "ST_TYP"
  STRUCT
    P101 : "ST_Bauteil";
    P102 : "ST_Bauteil";
    P103 : "ST_Bauteil";
    P104 : "ST_Bauteil";
    P105 : "ST_Bauteil";
  END_STRUCT
BEGIN

END_DATA_BLOCK
... dann kannst Du im SCL-Programm auf ST_Typ.P101.p101x.Zylinder1_V zugreifen.
Was soll das ".X0" am Ende sein? Ein Slice-Zugriff auf ein Bit? Das kann die im Bild in #2 angegebene CPU 314 IFM nicht (bzw. SCL kann das nicht) --> Du müsstest das Bit klassisch ausmaskieren:
Code:
  tempBool := (ST_Typ.P101.p101x.Zylinder1_V AND 2#1) <> 0;

Harald
 
Zurück
Oben