# Ich suche einen Frequenzbaustein



## Tmbiz (4 September 2019)

Hallo, ich meine es gibt in der Bibliothek einen Frequenzbaustein. Diesen möchte ich in SCL SPS 1500 nutzen. Kann mir jemand sagen was es da gibt und wie der hiesst?

Nachtrag:
Sorry, er soll am Ausgang eine bestimmte Frequenz ausgeben. Ich meine es gibt einen Baustein, welcher mehrere Frequenzen ausgeben kann


----------



## Heinileini (4 September 2019)

Was soll denn der "FrequenzBaustein" können? Ein AusgangsSignal mit einer bestimmten Frequenz erzeugen? Die Frequenz eines EingangsSignals "messen" bzw. Frequenzen erkennen, die in einem bestimmten Bereich liegen? Oder geht es um digitale Filter?


----------



## Tmbiz (4 September 2019)

Nachtrag:
Sorry, er soll am Ausgang eine bestimmte Frequenz ausgeben. Ich meine es  gibt einen Baustein, welcher mehrere Frequenzen ausgeben kann


----------



## vollmi (4 September 2019)

Meinst du sowas?

```
FUNCTION "Frequenz" : Bool
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      Period : Real;   // Periodendauer in Hz
   END_VAR


   VAR_TEMP 
      Periodendauer : Real;
      Halbwelle : Real;
      wechselProMin : UDInt;
      Systime {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
      status : Int;
      MilisecOfMin : UDInt;
      Per : UDInt;
      Takt_2 : UDInt;
   END_VAR


   VAR CONSTANT 
      MaxMsPerMin : UDInt := 60000;
   END_VAR




BEGIN
	
	#Periodendauer := 1000.0 * (1.0 / #Period); // Periodendauer in Milisekunden errechnen
	#Halbwelle := #Periodendauer / 2.0; // halbe Periode errechnen in Milisekunden
	
	#status := RD_SYS_T(#Systime); // aktuelle Systemzeit auslesen
	#MilisecOfMin := (#Systime.NANOSECOND / 1000000) + (USINT_TO_UDINT(#Systime.SECOND) * 1000); // die aktuelle Milisekunde der aktuellen Minute errechnen
	
	#wechselProMin := #MaxMsPerMin / REAL_TO_UDINT(#Halbwelle); // Wieviele Nulldurchgänge pro minute?
	#Per := #MilisecOfMin / REAL_TO_UDINT(#Halbwelle);
	
	(* wenn eine ungerade anzahl durchgänge pro minute passieren muss bei
	jedem Minutenwechsel die Taktrichtung invertiert werden 
	um keine doppelte Zeit anstehend zu haben beim Minutenwechsel *)
	IF #wechselProMin.%X0 = True THEN
	    IF #Systime.MINUTE.%X0 = true THEN
	        #Frequenz := #Per.%X0;
	    ELSE
	        #Frequenz := NOT #Per.%X0;
	    END_IF;
	ELSE
	    #Frequenz := #Per.%X0;
	END_IF;
	
	
END_FUNCTION
```

Das hab ich mir mal gebastelt um auf mehreren CPUs einen Synchronen Takt zu haben.


----------



## Tmbiz (4 September 2019)

Es muss da was fertiges geben. Ich habe es schon gesehen aber kann mich nicht an den Namen erinnern.


----------



## Onkel Dagobert (4 September 2019)

Tmbiz schrieb:


> .. Ich habe es schon gesehen aber kann mich nicht an den Namen erinnern.


Erinnerst du dich vielleicht noch an die Steuerung?


----------



## DeltaMikeAir (4 September 2019)

Sowas evtl:

https://support.industry.siemens.co...nus)-mit-hilfe-der-weckalarme-?dti=0&lc=de-WW


----------



## DeltaMikeAir (4 September 2019)

Aber im Prinzip wäre die verwendete CPU / Software interessant.

Für TIA gibt es den LGF_SinusCI
https://support.industry.siemens.co...l)-und-simatic-s7-1200-s7-1500?dti=0&lc=de-WW


----------



## Tmbiz (4 September 2019)

Es war eine 1500 SPS


----------



## Tmbiz (4 September 2019)

Ich habe es gefunden. Es ist der LGF Frequency

https://support.industry.siemens.co...l)-und-simatic-s7-1200-s7-1500?dti=0&lc=de-CH


----------

