TIA SCL-File in TIA Portal umwandeln

wbach

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

ich beschäftige mich gerade mit TIA Portal V13 und möchte eine aus S/ Classic fertiges SCL-File in TIA Portal importieren und generieren. Aber TIA Portal gibt mir hierbei eine Fehlermeldung bei der folgenden Funktion:

Code:
FUNCTION FC_COPY_DATA_ANY: VOID

VAR_INPUT
    Data_Length :    BYTE;
    Src_Type    :    BYTE; 
    Src_DbNr    :    BYTE;  
    Src_Adr     :    INT;  
    Dst_Type    :    BYTE; 
    Dst_DbNr    :    BYTE;  
    Dst_Adr     :    INT;         
END_VAR 
VAR_TEMP
    src: STRUCT //ANY struct
        ANY_id:         BYTE;
        DataType:       BYTE;
        Length:         WORD;
        DB_Nummer:      WORD;
        MemoryArea:     BYTE;
        ByteAddressMSB: BYTE;
        ByteAddressLSB: WORD;
    END_STRUCT;
    dst: STRUCT //ANY struct
        ANY_id: BYTE;
        DataType: BYTE;
        Length: WORD;
        DB_Nummer: WORD;
        MemoryArea:     BYTE;
        ByteAddressMSB: BYTE;
        ByteAddressLSB: WORD;
    END_STRUCT;
    srcAdr     :    WORD;   
    dstAdr     :    WORD;  
    
    p_src   AT src  :ANY;
    p_dst   AT dst  :ANY;
        
    ret_val_blk :INT;
END_VAR
       
BEGIN

srcAdr := SHL (IN:=INT_TO_WORD(Src_Adr), N:=3);
dstAdr := SHL (IN:=INT_TO_WORD(Dst_Adr), N:=3);

//Pointer for input data P#I 592.0 BYTE 28
src.ANY_id := B#16#10; //for S7 always 10h
src.DataType:= B#16#02; //Type Byte
src.Length:= Data_Length; //28 Byte
src.DB_Nummer:= Src_DbNr; //no DB than 0
src.MemoryArea:= Src_Type; //81 = Input, 82 = output, 84 = Datablock 
src.ByteAddressMSB:= B#16#0;
src.ByteAddressLSB:= srcAdr; //90h = and 3 to right, result 10010000 => 12d Bitadresse = 000

//Pointer for output data P#Q 576.0 BYTE 9
dst.ANY_id := B#16#10; //for S7 always 10h
dst.DataType:= B#16#02; //Type Byte
dst.Length:= Data_Length; //28 Byte
dst.DB_Nummer:= Dst_DbNr; //28 Byte //no DB than 0
dst.MemoryArea:= Dst_Type; //81 = Input, 82 = output, 84 = Datablock 
dst.ByteAddressMSB:= B#16#0;
dst.ByteAddressLSB:= dstAdr; //80h = and 3 to right, result 100000 => 10d Bitadresse = 000


ret_val_blk := BLKMOV(srcblk:= p_src, dstblk:= p_dst);
               
END_FUNCTION

Leider sehe ich auf anhieb nicht den Fehler den TIA Portal mir ausgibt:

Generiere Baustein "FC_COPY_DATA_ANY"
Interface: Der Datentyp "AT construct" ist an dieser Stelle nicht erlaubt.
Interface: Der Datentyp "AT construct" ist an dieser Stelle nicht erlaubt.
Ze 000084: Baustein "FC_COPY_DATA_ANY" wird mit dem Attribut "Optimierter Bausteinzugriff" angelegt.
24: Ungültiger Datentyp.
24: Ungültiger Datentyp.

Kann mir jemand hierbei helfen was ich bei der Funktion übersehe?

LG
 
Schalte mal den Baustein von "optimiert" auf "nicht optimiert", das macht man in den Eigenschaften des Bausteins.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ralle,

der Baustein existiert ja nocht nicht. Der ist ja noch in einer externen SCL file verpackt. Und der würde ja sowieso nicht optimiert generiert werden.

LG
 
Du kannst auch direkt in den Quelltext einfügen, daß der Baustein als nicht-optimiert erzeugt wird:
Code:
FUNCTION FC_COPY_DATA_ANY: VOID
[COLOR="#0000FF"]{ S7_Optimized_Access := 'FALSE' }[/COLOR]
VAR_INPUT
...

Harald
 
Hallo Zusammen,

vielen Dank für die Antworten. Sry, das ich mich so spät wieder melde.

1.
FUNCTION FC_COPY_DATA_ANY: VOID
{ S7_Optimized_Access := 'FALSE' }
VAR_INPUT
...

Hat leider nicht Funktioniert.

2. Ich werde es erstmal weiter nach dem Fehler suchen. Vermute das es ein Bediener Problem ist. :D

LG
 
So groß ist dieser Baustein ja nicht, da würde ich erstmal den Baustein per Hand ins TIA einbauen den von da nochmal exportieren. Und dann deine beiden Quellen vergleichen. Die Unterschiede sollten dir oder anderen für weitere Bausteine helfen.
 
Was in der Regel immer gut funktioniert ist wenn du das s7-classich projekt migrierst.
und nicht die scl-quelle direkt ins tia einfügst.
der unterschied liegt hier (siehe bild)


hier der Baustein in tia für s7-300
Code:
FUNCTION "FC100" : Void
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.0
   VAR_INPUT 
      Data_Length : Byte;
      Src_Type : Byte;
      Src_DbNr : Byte;
      Src_Adr : Int;
      Dst_Type : Byte;
      Dst_DbNr : Byte;
      Dst_Adr : Int;
   END_VAR
   VAR_TEMP 
      src : Struct
         ANY_id : Byte;
         DataType : Byte;
         Length : Word;
         DB_Nummer : Word;
         MemoryArea : Byte;
         ByteAddressMSB : Byte;
         ByteAddressLSB : Word;
      END_STRUCT;
      p_src AT src : Any;
      dst : Struct
         ANY_id : Byte;
         DataType : Byte;
         Length : Word;
         DB_Nummer : Word;
         MemoryArea : Byte;
         ByteAddressMSB : Byte;
         ByteAddressLSB : Word;
      END_STRUCT;
      p_dst AT dst : Any;
      srcAdr : Word;
      dstAdr : Word;
      ret_val_blk : Int;
   END_VAR

BEGIN
 
 
 #srcAdr := SHL (IN:=INT_TO_WORD(#Src_Adr), N:=3);
 #dstAdr := SHL (IN:=INT_TO_WORD(#Dst_Adr), N:=3);
 
 //Pointer for input data P#I 592.0 BYTE 28
 #src.ANY_id := B#16#10; //for S7 always 10h
 #src.DataType:= B#16#02; //Type Byte
 #src.Length:= #Data_Length; //28 Byte
 #src.DB_Nummer:= #Src_DbNr; //no DB than 0
 #src.MemoryArea:= #Src_Type; //81 = Input, 82 = output, 84 = Datablock 
 #src.ByteAddressMSB:= B#16#0;
 #src.ByteAddressLSB:= #srcAdr; //90h = and 3 to right, result 10010000 => 12d Bitadresse = 000
 
 //Pointer for output data P#Q 576.0 BYTE 9
 #dst.ANY_id := B#16#10; //for S7 always 10h
 #dst.DataType:= B#16#02; //Type Byte
 #dst.Length:= #Data_Length; //28 Byte
 #dst.DB_Nummer:= #Dst_DbNr; //28 Byte //no DB than 0
 #dst.MemoryArea:= #Dst_Type; //81 = Input, 82 = output, 84 = Datablock 
 #dst.ByteAddressMSB:= B#16#0;
 #dst.ByteAddressLSB:= #dstAdr; //80h = and 3 to right, result 100000 => 10d Bitadresse = 000
 
 #ret_val_blk := BLKMOV(SRCBLK:= #p_src, DSTBLK=> #p_dst);
                
 
END_FUNCTION
für eine 1500er
Code:
FUNCTION "FC100" : Void
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.0
   VAR_INPUT 
      Data_Length : Byte;
      Src_Type : Byte;
      Src_DbNr : Byte;
      Src_Adr : Int;
      Dst_Type : Byte;
      Dst_DbNr : Byte;
      Dst_Adr : Int;
   END_VAR
   VAR_TEMP 
      src : Struct
         ANY_id : Byte;
         DataType : Byte;
         Length : Word;
         DB_Nummer : Word;
         MemoryArea : Byte;
         ByteAddressMSB : Byte;
         ByteAddressLSB : Word;
      END_STRUCT;
      p_src AT src : Any;
      dst : Struct
         ANY_id : Byte;
         DataType : Byte;
         Length : Word;
         DB_Nummer : Word;
         MemoryArea : Byte;
         ByteAddressMSB : Byte;
         ByteAddressLSB : Word;
      END_STRUCT;
      p_dst AT dst : Any;
      srcAdr : Word;
      dstAdr : Word;
      ret_val_blk : Int;
   END_VAR

BEGIN
 
 
 #srcAdr := SHL (IN:=INT_TO_WORD(#Src_Adr), N:=3);
 #dstAdr := SHL (IN:=INT_TO_WORD(#Dst_Adr), N:=3);
 
 //Pointer for input data P#I 592.0 BYTE 28
 #src.ANY_id := B#16#10; //for S7 always 10h
 #src.DataType:= B#16#02; //Type Byte
 #src.Length:= #Data_Length; //28 Byte
 #src.DB_Nummer:= #Src_DbNr; //no DB than 0
 #src.MemoryArea:= #Src_Type; //81 = Input, 82 = output, 84 = Datablock 
 #src.ByteAddressMSB:= B#16#0;
 #src.ByteAddressLSB:= #srcAdr; //90h = and 3 to right, result 10010000 => 12d Bitadresse = 000
 
 //Pointer for output data P#Q 576.0 BYTE 9
 #dst.ANY_id := B#16#10; //for S7 always 10h
 #dst.DataType:= B#16#02; //Type Byte
 #dst.Length:= #Data_Length; //28 Byte
 #dst.DB_Nummer:= #Dst_DbNr; //28 Byte //no DB than 0
 #dst.MemoryArea:= #Dst_Type; //81 = Input, 82 = output, 84 = Datablock 
 #dst.ByteAddressMSB:= B#16#0;
 #dst.ByteAddressLSB:= #dstAdr; //80h = and 3 to right, result 100000 => 10d Bitadresse = 000
 
 #ret_val_blk := BLKMOV(SRCBLK:= #p_src, DSTBLK=> #p_dst);
                
 
END_FUNCTION
 

Anhänge

  • Zwischenablage02.jpg
    Zwischenablage02.jpg
    9,3 KB · Aufrufe: 25
Zuletzt bearbeitet:
Leider sehe ich auf anhieb nicht den Fehler den TIA Portal mir ausgibt:
Generiere Baustein "FC_COPY_DATA_ANY"
Interface: Der Datentyp "AT construct" ist an dieser Stelle nicht erlaubt.
Interface: Der Datentyp "AT construct" ist an dieser Stelle nicht erlaubt.
Ze 000084: Baustein "FC_COPY_DATA_ANY" wird mit dem Attribut "Optimierter Bausteinzugriff" angelegt.
24: Ungültiger Datentyp.
24: Ungültiger Datentyp.
Die überlagernde AT-Variable muß direkt nach der zu überlagernden Variable deklariert werden. So geht es:
Code:
FUNCTION FC_COPY_DATA_ANY: VOID
{ S7_Optimized_Access := 'FALSE' }
VAR_INPUT
    Data_Length :    BYTE;
    Src_Type    :    BYTE; 
    Src_DbNr    :    BYTE;  
    Src_Adr     :    INT;  
    Dst_Type    :    BYTE; 
    Dst_DbNr    :    BYTE;  
    Dst_Adr     :    INT;         
END_VAR 
VAR_TEMP
    src: STRUCT //ANY struct
        ANY_id:         BYTE;
        DataType:       BYTE;
        Length:         WORD;
        DB_Nummer:      WORD;
        MemoryArea:     BYTE;
        ByteAddressMSB: BYTE;
        ByteAddressLSB: WORD;
    END_STRUCT;
    [COLOR="#0000FF"]p_src AT src : ANY;[/COLOR]

    dst: STRUCT //ANY struct
        ANY_id: BYTE;
        DataType: BYTE;
        Length: WORD;
        DB_Nummer: WORD;
        MemoryArea:     BYTE;
        ByteAddressMSB: BYTE;
        ByteAddressLSB: WORD;
    END_STRUCT;
    [COLOR="#0000FF"]p_dst AT dst : ANY;[/COLOR]

    srcAdr     :    WORD;   
    dstAdr     :    WORD;  
        
    ret_val_blk :INT;
END_VAR

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Volker,
Danke für das Migrieren.
Das Problem hierbei ist:

p_src AT src :ANY;
p_dst AT dst :ANY;

Welche TIA Portal Version nutzt Du?
Bei mir schafe ich das nicht den p_src als Datentyp Any anzulegen.
 
Zuletzt bearbeitet:
Harald,
Ich hatte einen Fehler in der Kopie.
Es hat jetzt funktioniert. Der ANY muss direkt nach der Struct folgen.

Danke und LG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es Funzt bei mir immer noch nicht.
Habe TIA V13 SP1
Bei mir funzt es. Habe es mit TIA V13 SP1 Upd8 ausprobiert.

Eventuell hilft es, wenn Du zunächst im Projekt die externe Quelle löschst und auch den erzeugten Baustein FC_COPY_DATA_ANY löschst. Dann Projekt einmal speichern. Dann externe Quelle erneut einfügen und Baustein aus Quelle erzeugen. Mein TIA hatte sich da auch länger zickig angestellt, nach dem löschen und neu einlesen ging es dann aber auf einmal fehlerfrei.

Harald
 
also ich habe v13 sp1 upd9

die quelle die ich nach dem migrieren erzeugt habe sollte eigentlich funktionieren.

um den at anzulegen wähle als Datentyp nicht any sondern at.
dann macht tia einen any daraus mit den entsprechedem eintrag. also das p_src AT"src "
 
Hallo Zusammen,

Volkers Antwort hat funktioniert und ich habe es auch als "Hilfreiche Antwort" markiert. Somit ist es dann in die erste Seite gesprungen :D

Ich hatte in meinen Script einen weiteren Fehler eingebaut. Somit habe ich gedacht das es nicht Funktioniert :D

Sry und LG
 
Zurück
Oben