Blockmove im TIA-Portal

Losossos

Level-2
Beiträge
5
Reaktionspunkte
0
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:-x!!

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?
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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 );
 
Moin, moin

zunächst danke für die schnellen Antworen :wink:.

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
 
Zurück
Oben