TIA SCL indirekte Adressierung

Dataworld-EDV

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

ich bin dabei einen Umrichterbaustein im TIA in SCL zu schreiben.
Diesen Baustein gibt es schon im Step7 und lässt sich aus der SCL-Quelle fehlerlos übersetzen.
Nur TIA mault da rum beim Einlesen und Übersetzen der externen Quelle.
Hat mir jemand eine Idee, was daran falsch sein könnte?
Danke.
Gruss
 

Anhänge

  • SCL-EW.png
    SCL-EW.png
    97,8 KB · Aufrufe: 245
Direkter Zugriff auf AW/EW u.ä. geht nicht mehr.
Wenn es denn unbedingt so unsymbolisch bleiben soll, muss man auf PEEK/POKE (bzw. PEEK-/POKE_BOOL) umstellen.


Mittlerweile kann man aber auch komplexe udt auf die Ein-/Ausgangsbereiche legen und so alles in einem Rutsch kopieren.
Ist IMHO die schönere Lösung.
 
Die Alternative hat dir hucki genannt.

Du erstellst eine Udt für den Eingangsbereich eine eine für den Ausgangsbereich. Diese nutzt du dann als Ein/Ausgang deines Bausteins. Beachte aber das Udt die für E/As oder bei nicht optimierten DBs genutzt werden immer auf ganzes Words zählen. Sprich du hast 7 Bit die auf Byte 0 beginnen und dann folgt ein Int dann startet das Int bei Byte 2
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
danke erstmal für die Tips.
Ich hab leider mit UDT wenig Erfahrung.
Anbei aber erstmal die Info, was der Baustein macht.
Es ist ein Umrichterbaustein für Profinet Kommunikation.
Anbei der Quellcode aus der SCL-Quelle.
Wer mir da helfen kann beim Umschreiben, sehr gerne.
 

Anhänge

Und noch diese ganzen unseligen:
Code:
if x = true then
   y := true;
else
   y := false;
end_if;
durch ein einfaches:
Code:
y := x;
ersetzen.

Dann dürfte der Baustein nur noch halb so lang sein.
 
Hallo,
vielen Dank erstmal für die Lösung.
Ich habe das mal programmiert und es sieht gut aus.
Eines suche ich aber verbeblich, die Variable mit den Umrichteradressen?
Wie geht das?
Links neu, rechts alt.
 

Anhänge

  • S7-TIA.png
    S7-TIA.png
    45,2 KB · Aufrufe: 126
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich stehe echt auf dem Schlauch.
Im Step7 hatte ich das PEW276 direkt am Baustein eingetragen.
Im TIA ist das nun durch den UDT ersetzt.
So weit so gut.
Im "PROFId_ZSW2" muss ja nun wieder die Peripherieadresse stehen.
Die haben wir ja nun in der Variablentabelle auf EW1000 festgesetzt, oder?

Oder anstatt in der VAT vor jedem FB Aufruf "umspeichern"?
 

Anhänge

  • S7-FB202.png
    S7-FB202.png
    23 KB · Aufrufe: 42
  • VAT.png
    VAT.png
    33,5 KB · Aufrufe: 40
  • umspeichern.png
    umspeichern.png
    5,5 KB · Aufrufe: 36
Dein "PROFId-ZSW" war doch nur ein indirekter Zugriff auf das Eingangswort. Wenn du jetzt den Move so ausführen würdest, würde dort die 276 geschrieben werden und nicht die Eingangssignale. Das wurde dann wiederrum auf die einzelen Bits abgefragt. Anstatt dort weiterhin die einzelnen Bits zu Adressieren (PROFId_ZSW2_BIT[8] = TRUE AND PROFId_ZSW2_BIT[9] usw.) Kannst du das ganze als Bit Struktur anlegen und dann direkt darauf zugreifen. Hier am Beispiel einer Ausgangsstruktur eines Power Focus Schraubers.
1630489123072.png
 
Zuletzt bearbeitet:
Hallo,
das habe ich verstanden.
Die Struktur existiert ja schon in dem FB. Ich muss ja nun nur noch die Adresse 276 irgendwie in den FB reinbekommen.
Kannst Du mir bitte den Code verraten, der dies machen würde? Danke.
Ich kann ja nun nicht mehr aussen am Baustein die Adresse eintragen.
Gruss
 

Anhänge

  • FB202 TIA neu.png
    FB202 TIA neu.png
    16,2 KB · Aufrufe: 46
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein du hast nicht verstanden… die Adresse gibts du an indem du den UDT in der Variablentabelle auf 256 anlegst… Der Baustein muss keine Adressen mehr kennen, da dass ja über den UDT definiert ist.
Du schreibst bei einem Digitaleingang auch nirgends die Adresse an dem Baustein, sondern hängst ein Symbol daran (Hoffe ich halt)
 
Anbei mal ein Bild, was den Workflow verdeutlicht. In der Tag Table (rechte Seite) wird auf der Adressbereich der (fiktiven) Antrieb Telegramme jeweils ein Tag mit einem aussagekräftigen Namen erstellt vom Typ deines UDTs (siehe Typ Spalte und PLC Datentypen). Dieser UDT beschreibt, wie der Speicherbereich des Tags zu interpretieren ist. Im Programm wird dann an der Verwendungsstelle des FBs jeweils der Tag/Variable des zu verwendenden Motors angegeben. Der Input des FBs für "FromVfd" muss auch den UDT als Type haben. Man beachte, dass bei jedem FB "Drive" Aufruf ein anderer Instanz DB genutzt wird ("Drive_DB_1" , "Drive_DB_2" usw.). Dadurch, dass in der Tag Table die Tags vom Type "UdtFromVfd" angelegt wurden, weiß der Compiler, auf welchen Adressbereich zugegriffen wird.
WiederverwendungFB.PNG

Wenn du jetzt den FB mehrmals verwendest, musst du nicht mehrere UDTs anlegen sondern mehrere Variablen bzw. Tags von dem Typ, an den richtigen Adressen.
 
Zurück
Oben