godi
Level-1
- Beiträge
- 1.460
- Reaktionspunkte
- 185
-> Hier kostenlos registrieren
Hallo!
Habe das ganze mal als Übung in SCL mit 3 Summanden Programmiert.
Jetzt würde mich mal interessieren ob man das besser auch noch machen kann oder ob meine Lösung schon in Ordnung ist! :-D
godi
Habe das ganze mal als Übung in SCL mit 3 Summanden Programmiert.
Jetzt würde mich mal interessieren ob man das besser auch noch machen kann oder ob meine Lösung schon in Ordnung ist! :-D
Code:
FUNCTION_BLOCK FB4
VAR_INPUT
Start : BOOL;
Summand_1 : DINT;
Summand_1_Byte AT Summand_1 : ARRAY [0..3] OF BYTE;
Summand_2 : DINT;
Summand_2_Byte AT Summand_2 : ARRAY [0..3] OF BYTE;
Summand_3 : DINT;
Summand_3_Byte AT Summand_3 : ARRAY [0..3] OF BYTE;
END_VAR
VAR_OUTPUT
Summe : DINT;
Summe_Byte AT Summe : ARRAY [0..3] OF BYTE;
END_VAR
VAR_TEMP
END_VAR
VAR
Bit_Nr : INT;
Bit_Ueberlauf_1 : BOOL;
Bit_Ueberlauf_2 : BOOL;
Zwischenergebnis_1 : DINT;
Zwischenergebnis_1_Bit AT Zwischenergebnis_1 : ARRAY [0..31] OF BOOL;
Summand_1_TAD : DINT;
Summand_1_TAD_Byte AT Summand_1_TAD : ARRAY [0..3] OF BYTE;
Summand_1_TAD_Bit AT Summand_1_TAD : ARRAY [0..31] OF BOOL;
Summand_2_TAD : DINT;
Summand_2_TAD_Byte AT Summand_2_TAD : ARRAY [0..3] OF BYTE;
Summand_2_TAD_Bit AT Summand_2_TAD : ARRAY [0..31] OF BOOL;
Summand_3_TAD : DINT;
Summand_3_TAD_Byte AT Summand_3_TAD : ARRAY [0..3] OF BYTE;
Summand_3_TAD_Bit AT Summand_3_TAD : ARRAY [0..31] OF BOOL;
Summe_TAD : DINT;
Summe_TAD_Bit AT Summe_TAD : ARRAY [0..31] OF BOOL;
Summe_TAD_Byte AT Summe_TAD : ARRAY [0..3] OF BYTE;
END_VAR
BEGIN
//Tausche Bytes in Summand 1
Summand_1_TAD_Byte[0] := Summand_1_Byte[3];
Summand_1_TAD_Byte[1] := Summand_1_Byte[2];
Summand_1_TAD_Byte[2] := Summand_1_Byte[1];
Summand_1_TAD_Byte[3] := Summand_1_Byte[0];
//Tausche Bytes in Summand 2
Summand_2_TAD_Byte[0] := Summand_2_Byte[3];
Summand_2_TAD_Byte[1] := Summand_2_Byte[2];
Summand_2_TAD_Byte[2] := Summand_2_Byte[1];
Summand_2_TAD_Byte[3] := Summand_2_Byte[0];
//Tausche Bytes in Summand 3
Summand_3_TAD_Byte[0] := Summand_3_Byte[3];
Summand_3_TAD_Byte[1] := Summand_3_Byte[2];
Summand_3_TAD_Byte[2] := Summand_3_Byte[1];
Summand_3_TAD_Byte[3] := Summand_3_Byte[0];
//Beginne mit Addierer
IF Start THEN //Startbedienung
Summe_TAD := 0;
Zwischenergebnis_1 := 0;
Bit_Ueberlauf_1 := false;
FOR Bit_Nr := 0 TO 31 DO //Addiere ersten zwei Summanden
IF Summand_1_TAD_Bit[Bit_Nr] XOR Summand_2_TAD_Bit[Bit_Nr] XOR Bit_Ueberlauf_1 THEN
Zwischenergebnis_1_Bit[Bit_Nr] := true;
END_IF;
Bit_Ueberlauf_1 := Summand_1_TAD_Bit[Bit_Nr] AND Summand_2_TAD_Bit[Bit_Nr] OR Bit_Ueberlauf_1 AND (Summand_1_TAD_Bit[Bit_Nr] OR Summand_2_TAD_Bit[Bit_Nr]);
END_FOR;
Bit_Ueberlauf_2 := false;
FOR Bit_Nr := 0 TO 31 DO //Addiere dritten Summand zum Zwischenergebnis
IF Zwischenergebnis_1_Bit[Bit_Nr] XOR Summand_3_TAD_Bit[Bit_Nr] XOR Bit_Ueberlauf_2 THEN
Summe_TAD_Bit[Bit_Nr] := true;
END_IF;
Bit_Ueberlauf_2 := Zwischenergebnis_1_Bit[Bit_Nr] AND Summand_3_TAD_Bit[Bit_Nr] OR Bit_Ueberlauf_2 AND (Zwischenergebnis_1_Bit[Bit_Nr] OR Summand_3_TAD_Bit[Bit_Nr]);
END_FOR;
END_IF;
//Tausche Bytes in Summe
Summe_Byte[0] := Summe_TAD_Byte[3];
Summe_Byte[1] := Summe_TAD_Byte[2];
Summe_Byte[2] := Summe_TAD_Byte[1];
Summe_Byte[3] := Summe_TAD_Byte[0];
END_FUNCTION_BLOCK
godi