Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Blockmove im TIA-Portal

  1. #1
    Registriert seit
    01.10.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin, moin.

    Bin z.Z. am Umsteigen von Step7 (5.5) auf TIA und quäle mich mit den vielen BUGs und nicht vorhanden Dingen von "früher" - so wie viele andere ja leider auch!!

    grad eben hab ich mal wieder ein migrationsproblem gefunden:


    so war es bisher möglich in SCL per Blockmove unterschiedliche datentypen aufeinander zu schieben, z.B. eine Struct auf ein Array (immer vorrausgesetzt das die längen und Datentypen selbstverständlich gleich sind)

    hier ein Bsp:

    VAR_IN_OUT
    Akt : STRUCT
    Auto : STRUCT
    Out_1: BOOL;Out_2: BOOL;Out_3: BOOL;Out_4: BOOL;Out_5: Bool;Out_6: Bool;Out_7: Bool;Out_8: Bool;
    Out_9: BOOL;Out_10: BOOL;Out_11: Bool;Out_12: Bool;Out_13: Bool;Out_14: Bool;Out_15: BOOL;Out_16: BOOL;
    END_STRUCT ;
    Hand : STRUCT
    Out_1: BOOL;Out_2: BOOL;Out_3: BOOL;Out_4: BOOL;Out_5: Bool;Out_6: Bool;Out_7: Bool;Out_8: Bool;
    Out_9: BOOL;Out_10: BOOL;Out_11: Bool;Out_12: Bool;Out_13: Bool;Out_14: Bool;Out_15: BOOL;Out_16: BOOL;
    END_STRUCT ;
    END_STRUCT ;
    END_VAR

    VAR_TEMP
    n :INT; //Laufvariable
    m :INT; //Laufvariable
    Akt_tmp : STRUCT //Übertrage AktorikStatus auf tmp-Var für manipulation in FC
    Auto :ARRAY [1..16] OF BOOL;
    Hand :ARRAY [1..16] OF BOOL;
    END_STRUCT ;

    Temp_INT :INT;
    Off_All :ARRAY [1..64] OF BOOL;
    ret :BOOL; // FC Übergabewert
    END_VAR


    n := 64; WHILE n > 0 DO Off_All[n] := false; n := n-1; END_WHILE; //erzeuge 'Leerschablone' für Resetzwecke

    // die folgende Anweisungen wurden nun ohne Probleme ausgeführt.


    Temp_INT := BLKMOV(SRCBLK := Akt.Auto ,DSTBLK := Akt_tmp.Hand ); //übertrage gegenwärtigen Auto-Aktorikstatus auf Hand
    Temp_INT := BLKMOV(SRCBLK := Off_All ,DSTBLK := Akt.Auto ); // setzt dann AutoAktorik auf 0 (XOR hand<->auto)
    Temp_INT := BLKMOV(SRCBLK := Akt_tmp.Hand ,DSTBLK := Akt.Hand );
    Temp_INT := BLKMOV(SRCBLK := Akt.Hand ,DSTBLK := Stat_Data.Akt_at_Start );





    im TIA-Portal wird das so nicht mehr akzeptiert. (wahrscheinlich weil eine Struct eben kein Array ist, selbst wenn länge und Datentyp identisch sind) (AdR: nur die 'Götter' von Siemens wissen welchen Sinn ein Blockmove noch macht, wenn so einfache und logische Dinge nicht mehr möglich sind)


    Hat vielleicht jemand eine alternative Idee?
    Zitieren Zitieren Blockmove im TIA-Portal  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich weiß nicht, ob das bei Struct of Bool und Array of Bool geht, aber du könntest für eine der Variablen eine AT-Ansicht anlegen, sozusagen einen Typecast vornehmen. Dann kannst du vielleicht sogar auf den Blockmove verzichten und Variable 1 = AT-Ansicht von Variable 2 setzen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Das Problem das TIA damit hat ist dass die Struktur im In-Out Bereich angelegt wurde. D.h. die Übergabe erfolgt über einen Zeiger. Und da ist das TIA eben zu blöd das umzusetzen, während das bei Step 7 noch funktionierte.
    Wenn du die Variablen im In oder im Out Bereich anlegst funktioniert der Blockmove auch wieder so wie gehabt. Nur ist das eben nicht das gleiche.

    Ich würde eh davon abraten TIA produktiv einzusetzen, der SCL Compiler enthält noch mehr lustige Fehler.

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Du kannst mal probieren ob du das Problem umschiffen kannst, indem du eine Hilfs-Variable vom Datentyp ANY anlegst und diese dann dem Blockmove übergibst.

    Ich meine so:
    Code:
    VAR_TEMP
      addr : ANY;
    END_VAR
    
    addr := Akt.Auto;
    Temp_INT := BLKMOV(SRCBLK := Off_All, DSTBLK := addr );

  5. #5
    Losossos ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.10.2009
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin, moin

    zunächst danke für die schnellen Antworen .

    approps AT

    @ Ralle:
    das mit der anderen Sicht auf die Struct ist leider nur ne Einbahnstraße; zwar klappt das in leserichtung, aber wie Thomas.. ja schon richtig bemerkt hat handelt es sich um eine INOUT.
    d.h. ich lese in der FC ein, manipuliere und schreibe wieder zurück. (Die manipulationsschritte habe ich hier jetzt weggelassen)

    @Thomas_v2.1
    in der Tat is TIA voller Bugs. (ich bin selbst schon über mindestens 5 gestolpert) Auch bin ich auch ständig am telefonieren mit der Fachberatung. Allerdings gewinnt man mit der Zeit nur das Gefühl, das man den Jungs und Mädels dort lästig wird.
    Leider muß ich auf TIA. hab ne größere Anlage an der intelligente Slaves in Form von 1200er -CPUs beteiligt sind....
    Am liebsten würde ich ja Codesys... Aber leider muß ich Siemens einsetzen.


    gruß
    losossos

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 06.04.2012, 08:37
  2. Antworten: 0
    Letzter Beitrag: 22.01.2012, 18:59
  3. TIA Portal
    Von BadTaste im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 09.12.2011, 07:38
  4. Tia Portal
    Von redscorpion im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.06.2011, 22:02
  5. TIA Portal
    Von Bohl im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 30.12.2010, 10:29

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •