Step 7 Rechner mit Grundrechenarten + - * / AWL

Felo

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
//Division von Zahl1 und Zahl2 beginn
SET;
IN_DIV==TRUE;
L Wert7;
L Wert8;
/I;
T OUT_Ergebnis4;
//Division von Zahl1 und Zahl2 Ende
 
Zuletzt bearbeitet:
Ohne jetzt die Funktion des Codes zu beurteile. Erstens ist das kein AWL, zumindest keines das eine S7 CPU versteht. Zweitens sind L und T Operationen VKE unabhängig, soll heissen die müssen gezielt übersprungen werden. Drittens sollten Ausgänge Pro baustein nur einmal geschrieben werden, vor allem in einen FC. Viertens, was für einen Sinn hat das ? Reine Übung oder wie ?
Lg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Felo,

bitte benutz' für Deinen Programm-Code zukünftig die Tags [CODE][/CODE], die auch mit dem letzten Button (#) der 2. Icon-Reihe erzeugt werden können.
Zum Einen wird der Code besser lesbar und zum Anderen funktionieren damit bei Bedarf auch Einrückungen.

Wäre gut, wenn Du das auch bei Deinem Code im Eröffnungspost noch nachholst.
 
@Felo
Vermutumg:
Deine AusgangsVariablen sind
OUT_Fehler (Bit)
OUT_Null (Bit)
OUT_Int
OUT_Ergebnis1, OUT_Ergebnis2, OUT_Ergebnis3, OUT_Ergebnis4
und Deine EingangsVariablen sind anscheinend
IN_AAD, IN_SUB, IN_MUL und IN_DIV (Bit)
IN_Int
IN__Int
wenn das kein Schreibfehler ist, sind die beiden Namen zumindest schlecht zu unterscheiden.
IN_Int_1 und IN_Int_2 wäre klarer.
16-Bit-INT-Variablen können keine Werte > 32.767 oder < -32.768 annehmen bzw. darstellen.
Vergleiche >I bzw. <I sind so gesehen witzlos.
Wenn Du EingangsWerte vom Typ DINT hast, aber die GrundrechenArten auf INT beschränken willst, na ja ... aber dann mit <D bzw. >D.
Dann könntest Du aber gleich beide EingangsWerte auf MIN bzw. MAX prüfen.
Wo werden Wert1, Wert2, ... Wert7 und Wert8 befruchtet?
Hast Du vor, mit OUT_Ergebnis1, OUT_Ergebnis2, OUT_Ergebnis3 und OUT_Ergebnis4 noch etwas zu tun? Sind das AusgangsVariablen des FC? Für welchen Zweck ist dann OUT_Int vorgesehen?

L IN__Int
L 0
<> I
BEB
SET
= OUT_Null
Wenn der Divisor nicht 0 ist, wird der FC verlassen(beendet) - was soll das? Aber ist es wirklich der Divisor? Oder der Summand? Oder der ... ?

L IN_Int
L32767
1
BEB
soll was bewirken? VergleichsOperator 1 ?!

Im folgenden wird -32.768 mit -32.768 verglichen - da kann eigentlich immer nur "gleich" rauskommen, nie "kleiner"!?
L -32768
T OUT_Int
L -32768
< I
BEB

u.s.w. etc.p.p. ...
Ansonsten, siehe #2
Gruss, Heinileini
 
Zurück
Oben