- Beiträge
- 3.045
- Reaktionspunkte
- 1.024
-> Hier kostenlos registrieren
Hallo liebes Forum,
Die letzte Zeit war ich nur stille Mit-Leser.
Arbeit ohne Ende gehabt.
Jetzt hab ich was Zeit um Rest-AWL programmteilen um zu schreiben nach SCL.
Wir hatten in AWL eine Bitsumme für DB's. Nach online Suche hab ich gesehen das solche Funktionen es nicht Standard in de Bibliothek und SCL gibt und Mann sich selbst etwas ausdenken (oder zusammenreimen) muss.
Für derjenigen die es mal braucht:
Bei diese meine Quelle zum BITSUM auf Basis von ATTR_DB und FOR Schleife.
Bram
Die letzte Zeit war ich nur stille Mit-Leser.
Arbeit ohne Ende gehabt.
Jetzt hab ich was Zeit um Rest-AWL programmteilen um zu schreiben nach SCL.
Wir hatten in AWL eine Bitsumme für DB's. Nach online Suche hab ich gesehen das solche Funktionen es nicht Standard in de Bibliothek und SCL gibt und Mann sich selbst etwas ausdenken (oder zusammenreimen) muss.
Für derjenigen die es mal braucht:
Bei diese meine Quelle zum BITSUM auf Basis von ATTR_DB und FOR Schleife.
Code:
FUNCTION_BLOCK "BITSUM"
TITLE = BITSUM
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : 'v.Berkel'
VERSION : 0.1
VAR_INPUT
DB_IN { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DB_ANY;
END_VAR
VAR_OUTPUT
"Bits > 0" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
Anzahl_Bits { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
END_VAR
VAR
Attrib { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Byte;
DB_Länge { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UDInt;
Retval { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
Zählwert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
Zählwert_start { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
Zählwert_ende { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;
END_VAR
BEGIN
#Retval := ATTR_DB(REQ := true, DB_NUMBER := #DB_IN, DB_LENGTH => #DB_Länge, ATTRIB => #Attrib);
#Anzahl_Bits := 0;
#Zählwert_start := 0;
#Zählwert_ende := (UDINT_TO_INT(#DB_Länge) - 1);
FOR #Zählwert := #Zählwert_start TO #Zählwert_ende DO
#Anzahl_Bits := #Anzahl_Bits + BITSUM(BYTE_TO_DWORD(PEEK(area := 16#84, dbNumber := #DB_IN, byteOffset := #Zählwert)));
END_FOR;
#"Bits > 0" := #Anzahl_Bits > 0;
END_FUNCTION_BLOCK
Bram