Kann mir jemand folgenden AWL Code erläutern?

Stahlhart

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab da ein Problem mit folgendem AWL Anweisungen:

U(
U(
L "DB_Daten_Farbraum".GESCHW_SW_ST3
L W#16#4000
*D
T #t_freq
UN OV
SAVE
CLR
U BIE
)
SPBNB _001
L #t_freq
L 194
/D
T #FREQ_SET
UN OV
SAVE
CLR
_001: U BIE
)
U(
L #FREQ_SET
L W#16#4000
>=I
)
SPBNB _002
L W#16#4000
T #FREQ_SET
_002: NOP 0

Es soll sich dabei um eine Vorgabe von einer Geschwindigkeit handeln:
FREQ in %: 4000H = 100% = 50 Hz; 1000H = 25%
50 Hz = 194 r/min
maximal 100%

Nur irgendwie steige ich als Anfänger in den ersten Zeilen aus. Könnte mir das jemand Schritt für Schritt erklären?

MfG
 
Im Simatic-Manager die entsprechende Zeile (Operation) markieren und F1 betätigen.
Es öffnet sich die S7-Hilfe zu diesem Befehl.
Sollte weiterhelfen.

Gruß Roland
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das sieht für mich so aus, als wenn sich da einer in FUP so richtig schön einen "ausgegurkt" hat ... :rolleyes:
Aber wenn du weißt, was es macht dann mach es doch mit einem "sauberen" AWL-Code noch einmal neu ...

Gruß
LL
 
ANSICHT -> KOP (von mir aus auch FUP) und schon sieht es ungefähr so aus:
 

Anhänge

  • awl_kop.JPG
    awl_kop.JPG
    33,6 KB · Aufrufe: 198
Hab dir mal den code in awl noch ma grob kommentiert falls dichs noch intressiert. Bild von vierlagig beschreibt ja funktion besser.
Darfst dich bei awl eben nicht durch die "komische" schreibweise iritieren lassen, einfach ne tabelle mit befehlen hernehmen und damit arbeiten, wenn es mal kannst kannst da schneller schreiben als du das zeug zusammenklicken kannst ;)



L "DB_Daten_Farbraum".GESCHW_SW_ST3
L W#16#4000
*D
T #t_freq
U BIE
die beiden werte aus dem DB und w#16#4000 werden multipliziert und das ergebnis in var t_freq geschrieben.

hier wird das Störungsbit bei Überlauf abgefragt auf nicht und gespeichert (im BIE-BIT) Danach das VKE auf 0 gesetzt. Dann wird das BIE bit als VKE hergenommen.

SPBNB _001
L #t_freq
L 194
/D
T #FREQ_SET
UN OV
SAVE
CLR
_001: U BIE
hier springt wen vke=0 von SPBNB zu _001:, als wenn BIE=0 ist ist es eins wird der code dazwischen ausgeführt:
der läd die vorhin erechnete #t_freq und teilt sie durch 194, das ergebnis wird in #Frequ_set geschoben. Dann wird wie vorhin das invertierte Fehlerbit des überlaufs in vke geladen und in BIE gesichert, danach das vke wieder auf 0
nach der Sprungmarke wird wieder das bie bit in vke geladen

U(
L #FREQ_SET
L W#16#4000
>=I
)
SPBNB _002
L W#16#4000
T #FREQ_SET
_002: NOP 0
Hier wird Freq_set und w#16#4000 verglichen, ist freq_set größer wird freqset auf w#16#4000 gesetzt ansonsten wird das übersrungen (nop 0 ist nur platzhalter)
Sprich hier wird nur geprüft ob der wert Freq_set kleiner/gleich dem maximum ist, ist es größer wird es auf den maximalwert gesetzt
 
Zuletzt bearbeitet:
L "DB_Daten_Farbraum".GESCHW_SW_ST3
L W#16#4000
*D
T #t_freq
U BIE

die beiden werte aus dem DB und w#16#4000 werden multipliziert und das ergebnis in var t_freq geschrieben.


hier wird das Störungsbit bei Überlauf abgefragt auf nicht und gespeichert (im BIE-BIT) Danach das VKE auf 0 gesetzt. Dann wird das BIE bit als VKE hergenommen.

SPBNB _001
L #t_freq
L 194
/D
T #FREQ_SET
UN OV
SAVE
CLR
_001: U BIE

hier springt wen vke=0 von SPBNB zu _001:, als wenn BIE=0 ist ist es eins wird der code dazwischen ausgeführt:
der läd die vorhin erechnete #t_freq und teilt sie durch 194, das ergebnis wird in #Frequ_set geschoben. Dann wird wie vorhin das invertierte Fehlerbit des überlaufs in vke geladen und in BIE gesichert, danach das vke wieder auf 0
nach der Sprungmarke wird wieder das bie bit in vke geladen

U(
L #FREQ_SET
L W#16#4000
>=I
)
SPBNB _002
L W#16#4000
T #FREQ_SET
_002: NOP 0

Hier wird Freq_set und w#16#4000 verglichen, ist freq_set größer wird freqset auf w#16#4000 gesetzt ansonsten wird das übersrungen (nop 0 ist nur platzhalter)
Sprich hier wird nur geprüft ob der wert Freq_set kleiner/gleich dem maximum ist, ist es größer wird es auf den maximalwert gesetzt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Ihr seid super!

Die einzelnen Anweisungen sind nicht das Problem, aber aus dem gesamten werde ich nicht so schlau.

@vierlagig & Sera: Danke nochmal an euch. Der DB ist ja die Variable die aus der Visu kommt, aber was macht w#16#4000? Und dann versteh ich auch nicht warum dann die Division durch 194 folgt?!
Die Ganze Geschichte soll die Sollwertvorgabe an einen FU werden. Wenn ich jetzt eine Feste Drehzahl an den FU geben will, wie mach ich dass dann? Hab mir mittels Dreisatz den Wert ausgerechnet den ich übergeben möchte um auf eine bestimmte Drehzahl zu kommen. 4000H = 100% = 50Hz, ich brauche 2105H was 26,31Hz entspricht.

MfG
 
Hallo,
Hex4000 ist der maximalwert der Ansteuerung für den FU (100 %). Diese 100% beziehen sich allerdings nicht unbedingt auf 50Hz sondern auf die im Umrichter eingestellte Maximal-Frequenz - die kann natürlich 50Hz sein.
Den entsprechenden Ansteuerwert kannst du dann natürlich selbstverständlich über den Dreisatz ermitteln - das ist korrekt ...

Gruß
LL
 
Ah Ok danke Larry Laffer.

Ja in meinem Fall sind die 4000H = 50Hz.

Dann könnte ich einfach schreiben

L w#16#2105
T #FREQ_SET

Aber wieso wird dort durch die 194 dividiert? 194 ist ja die Nenndrehzahl bei 50Hz so wie ich das aus dem Kommentar lesen konnte.

Da ich leider nicht als Programmierer geboren wurde, gibt es in meinem jetzigen Projekt viele unbekannte Dinge für mich :confused:

Aber das wird hoffentlich noch.

Danke

MfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie larry sagte die 4000hex sind dein Maximalwert, der dient dazu wenn du nen größeren wert als den einstellts wird das auf max wert gedrosselt.

edit :

194 sind nenndrehzal wie ich eben nochmal nachgeschaut habe.

teile also die 100% (4000hex)durch nenndrehzahl, somit erechnet man hier den wert was einer r/pm entspricht.
wurde dieser wert mit der Vorgabe multipliziert: sprich du kannst hier direkt die gewünschte drehzal angeben und musst nicht selbst per dreisatz rechnen.
wobei die Drehzahl, wenn du eine größere als Nenndrehzahl vorgibst auf die Nenndrehzahl begrenzt wird.

Ich schätze mal das ganze hat folgenden Sinn:

Der FU wir vermutlich über einen analogausgang angesteuert.
der code rechnet bietet dir die möglichkeit die drehzal direkt vorzugeben und man als ergebnis kommt der entsprechende wert für den Analogausgang raus, mit dem kleinen zusatz das auf nenndrehzal begrenzt wird.
 
Zuletzt bearbeitet:
Der FU wir vermutlich über einen analogausgang angesteuert.
der code rechnet bietet dir die möglichkeit die drehzal direkt vorzugeben und man als ergebnis kommt der entsprechende wert für den Analogausgang raus, mit dem kleinen zusatz das auf nenndrehzal begrenzt wird.

Tippe eher, dass der FU per Profibus an der CPU hängt. Die 4000h sehen mir nach einem Bestandteil des Steuerwort aus...

Bei Analogausgängen wäre eher etwas im Bereich von 27648 anzutreffen.

Gruß Approx
 
@Sera: Du hast recht, die Variable #FREQ_SET wird an einen PAW übergeben und gibt somit dem FU die Drehzahl vor. Der FU ist ein Siemens ICU24 (ET200S FC).

Jetzt verstehe ich das ganze auch, vielen Dank.

Was wäre denn eine gute Lösung dafür, wenn ich diesem FU eine feste Drehzahl vorgeben möchte?

L w#16#2105 <- für z.B. ~1480UPM
T #FREQ_SET

Oder gibt es da eine elegantere Lösung?

MfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn das in nem fertigen fc/fb drin ist und die schnittstelle gut angelegt ist, kannst den wert auch beim aufrub des fub dem eingang zuweisen, dann musst am baustein ansich nicht ne absulute zahl reinschreiben, und kanst ihn auch für andere drehzahlen verwenden

zudem könntest dezimalzahl nehmen wegen besserer lesebarkeit, dann aber aufpassen das de die richtig übergibst
 
Ok, jetzt hätte ich aber noch ne Frage, wenn ich jetzt anstatt einer festen Drehzahl regeln möchte, z.B. dass der Ventilator über eine Differenzdruckmessung geregelt wird,
nehm ich dann den FB42 CONT_S? Dann kann ich doch die Stellgröße auf die 4000H begrenzen? Vorher müsste ich halt HEX auf REAL wandeln oder?

Würde das auch funktionieren?


MfG
 
Zuletzt bearbeitet:
Zurück
Oben