Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 49899

TIA Vorlage für BITSUM für beliebige (nicht optimierte)DB als SCL Quelle

$
0
0
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.

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

Viewing all articles
Browse latest Browse all 49899


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>