TIA TIA:SCL Bausteine verstehen, Teilweise in FUB umwandeln

Zuviel Werbung?
-> Hier kostenlos registrieren
Niemand kann von Anfang an alles wissen. Man kann auch mal jemanden fragen, der etwas weiss. Nur wer nicht fragt bleibt dumm.
Aber ab und zu sollte man selbstständig auch mal was lesen, besonders wenn man mit einer neuen Materie anfängt. Was dann was unklar ist, kann man immer noch fragen.

In der Online-Hilfe steht z.B. auch was zum Rechnen:

1625667769395.png

Schau da mal rein, ansonsten läuft das hier darauf hinaus, dass Du doch jede einzelne Zeile Deines Codes hier abnicken lassen möchtest. Kann aber sein, dass Du plötzlich auf Widerwillen stösst und dann alleine auf Deiner Aufgabe hängen bleibst.

Ist ein Tipp für Dein weiteres Berufsleben.
 
Noch eine blöde Frage. SCL rechnet Punkt vor Strich, oder?
Ja. So wie in der Mathematik üblich.

#AnimLoop := #AnimLoop + #HMI.Frequenz / REAL#50.0 * #Sekunden * REAL#64.0 / REAL#2.0;
Dann sieht das in Fup so aus:
Anhang anzeigen 55337
oder täusche ich mich?
Die Umsetzung der Formel ist falsch.

Wenn der Kunde nicht generell jegliche Verwendung von SCL verbietet, dann würde ich mathematische Berechnungen nicht in umständliches FUP umwandeln, sondern als SCL-Netzwerk in dem FUP-Baustein lassen. Das ist wesentlich verständlicher und man erfasst die Formel auf einen Blick. Außerdem kann der SCL-Compiler die Verwendung der Konstanten "/ REAL#50.0 * REAL#64.0 / REAL#2.0" zu "* REAL#0.64" zusammenfassen/optimieren. Den FUP-Code kann er nicht zusammenfassen, der bleibt für immer so uneffizient.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist im Bild diesmal schlecht zu lesen.
Die 2 Multiplikationen könntest Du mit 1 MUL-Block erschlagen ("gelbes Sternchen", damit IN3 Eingang bereitstellen).

Oder:
Erst alle Multiplikationen des Zählers (#HMI.Frequenz * #Sekunden * REAL#64.0) berechnen,
dann alle Multiplikationen des Nenners (REAL#50.0 * REAL#2.0) berechnen,
dann das erste ZwischenErgebnis durch das zweite dividieren,
schliesslich noch die Addition:
(#HMI.Frequenz * #Sekunden * REAL#64.0) / (REAL#50.0 * REAL#2.0) + #AnimLoop.
 
Zuletzt bearbeitet:
Hallo,

jetzt muss ich euch schon wieder um Hilfe bitten.

IF W#16#0001 = (#STATUS1 AND W#16#0001) THEN
#BIT1_0 := 1;
ELSE
#BIT1_0 := 0;
END_IF;

ich versuch es in FUP:
kann man Klammerausdruck (#STATUS1 AND W#16#0001) in den Vergleicher setzen?
1625839757630.png
Oder mach ich da was falsch?
Ich stehe total auf den Schlauch. o_O:eek:

Gruß
wt15309
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es muss schon eine "real existierende" UndVerküpfung programmiert werden:
Code:
            +-----+
            | AND |
#STATUS1  --|     |
            |     |
W#16#0001 --|     |-- -> (zum Eingang IN2 von Vergleicher)
            +-----+
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

jetzt muss ich euch schon wieder um Hilfe bitten.

IF W#16#0001 = (#STATUS1 AND W#16#0001) THEN
#BIT1_0 := 1;
ELSE
#BIT1_0 := 0;
END_IF;

ich versuch es in FUP:
kann man Klammerausdruck (#STATUS1 AND W#16#0001) in den Vergleicher setzen?
Anhang anzeigen 55391
Oder mach ich da was falsch?
Ich stehe total auf den Schlauch. o_O:eek:

Gruß
wt15309

Allerdings wäre hier ein "S" nicht nötig. Du könntest auch stattdessen einfach ein "=" nehmen. Sonst musst du es auch wieder Rücksetzen.

-chris
 
Guten Morgen,
vielen Dank für euere Hilfe. Hab die WORD-Verknüpfung nicht gekannt. Sorry.
Die Lösung müsste so aussehen.
1626070371172.png
Es ärgert mich jetzt selbst 🤪
Gruss
wt15309
 
Guten Morgen,

weiter oben hieß die zu setzende Variable allerdings noch BIT1_0, jetzte BIT1_1.
Nur um sicher zu gehen, dass du dich nicht vertippt hast ;-)
 
Zurück
Oben