TIA Wartungszähler

TinoToni

Level-1
Beiträge
39
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich steh irgendwie auf dem Schlauch - mir fällt keine Lösung für folgende einfache Aufgabe ein:

Ich habe einen DINT-Betriebsstundenzähler und möchte nun alle 120 Stunden eine Wartungsaufforderung herausgeben. Dazu dachte ich mir, teile ich einfach den Betriebsstundenzähler durch 120 und vergleiche das was rauskommt mit ???

L akt_Betriebsstunden //dint
L120
/D
???

weiß jemand Rat?

Danke
 
Der DivisionsRest (also das, was die mod-Funktion als Ergebnis liefert), ist so was von gannzahlig, ganzzahliger geht's nicht.
Wie blackpeat schon schrieb:
Mach es doch mit Modulo dann kannst du auf 0 Vergleichen.
Gruss, Heinileini
 
Ist es denn gewünscht, daß die Wartung starr alle 120 Betriebsstunden angefordert wird, egal wann die letzte Wartung war?
Manchmal ist eine Wartung einfach nicht so exakt terminiert durchführbar, sie kann vorgezogen oder auf später verschoben werden (Wochenende, Personal nicht verfügbar, ...). Angenommen, der Wartungstermin wird um 40 Betriebsstunden überzogen, dann würde Dein Vorgehen die nächste Wartung schon nach 80 Betriebsstunden anfordern. Ich kenne es so, daß bei erfolgter Wartung der Wartungsintervallzähler zurückgesetzt wird und das nächste Intervall dann erst beginnt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne es so, daß bei erfolgter Wartung der Wartungsintervallzähler zurückgesetzt wird und das nächste Intervall dann erst beginnt.

Das kenn ich auch nur so. Darum ist mein einfachster Wartungszähler dieser hier.
Code:
FUNCTION_BLOCK "Betriebsstunden_mit_Reset"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      Count : Bool;   // Eingang um zu zählen
      Wartung : DInt;   // Ab wann wird Wartung angefordert
      Alarm : DInt;   // Ab wann wird Wartungsalarm abgegeben
   END_VAR


   VAR_OUTPUT 
      Wartungsmeldung : Bool;
      Wartungsalarm : Bool;
   END_VAR


   VAR_IN_OUT 
      Betriebsstunden : DInt;
      Reset : Bool;
   END_VAR


   VAR 
      tTaktgeber {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
      takt : Bool;
      takt_1 : Bool;
   END_VAR




BEGIN
	
	
	#takt_1 := NOT #takt ;
	
	#tTaktgeber(IN:=#takt_1,
	            PT:=t#1s,
	            Q=>#takt);
	
	IF  #Count AND #takt THEN
	    #Betriebsstunden := #Betriebsstunden + 1;
	END_IF;
	
	IF #Reset THEN
	    #Betriebsstunden := 0;
	    #Reset := false;
	END_IF;
	
	// Wartungsmeldung
	#Wartungsmeldung := #Betriebsstunden > #Wartung;
	#Wartungsalarm := #Betriebsstunden > #Alarm;
END_FUNCTION_BLOCK

Den kann man dann ja entsprechend mit diversen weiteren Funktionen erweitern. Was man halt so braucht.
 
Hallo,
ich mach bei sowas immer 2 Zähler,
beide kann man resetten der 2. allerdings mit einem höheren Passwort ( bei austausch des Motors etc).
sobald der erste Zähler größer als das Serviceintervall ist wird die Service Meldung ausgegeben und erst nach resetten des ersten Zählers zurückgesetzt.

Als Taktgeber würde ich keinen Timer nutzen sondern die System Taktmerker clock auf Flanke abfragen. Für einen Betriebsstundenzähler sind die genau genug.

Grüße

Balu
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja danke, habe ich jetzt auch so gemacht. 1 Zähler Betriebsstundenzähler (nicht resetbar) und ein Wartungszähler (resetbar durch PW-geschützen Button, der aufblinkt, sobald die Wartung fällig wird.
 
Das geht auch mit nur einem einzigen Zähler (wie im RealLife ;) ) : dem one-and-only Betriebsstundenzähler "auf Lebenszeit".
Bei einer Wartung muß man sich nur merken/abspeichern, bei welchem Zählerstand das war. Die Differenz des Zählerstandes jetzt zu dem gemerkten Zählerstand ist die Anzahl Betriebsstunden seit der letzten Wartung :cool:

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wartungszähler anhand von Betriebsstunden und/oder Starts.
Ist zwar noch Step7 classic Programm, müsste aber so auf TIA 1500er auch laufen.

Brint Servicemeldung und vorher eine Warnmeldung "Service blad fällig", jeweils einstellbar nach Betriebsstunden und/oder Starts

Code:
TYPE "UDT_SERVICE_INF_DRV"
VERSION : 0.1


  STRUCT     
   STARTS : DINT ;    //Anzahl der Starts
   RUN_H : DINT ;    //Betriebsstundenzaehler Stunden
   RUN_SEC : INT ;    //Betriebsstundenzaehler Sekunden
   SERVICE_H : INT ;    //Betriebsstunden seit letztem Service
   SERVICE_SEC : INT ;    //Betriebsstunden (Sekuden) seit letztem Service
   SERVICE_STARTS : DINT ;    //Starts seit letztem Service
   LAST_SERVICE_DATE : DATE ;    //Datum des letzten Services
   USER_ID : INT ;    //User-Kennung des Serviceverantwortlichen
   USER_NAME : STRING  [8 ];    //User-Name
   DSP_SERVICE_H : INT ;    //Anzeige nächster Service in Stunden
   DSP_SERVICE_STARTS : DINT ;    //Anzeige nächster Service nach Starts
   FLAG_SERVICE : BOOL ;    //Flag: Service ist fällig
   FLAG_SERVICE_WARN : BOOL ;    //Flag: Warnung Service demnächst
   RESET : BYTE ;    //RESET: (Wartung druchgeführt)
  END_STRUCT ;    
END_TYPE

TYPE "UDT_SERVICE_CFG_DRV"
AUTHOR : 'S.Maag'
FAMILY : Maagic7
VERSION : 0.1


  STRUCT     
   STD : INT  := 1000;    //Wartungsintervall Betriebsstunden
   STARTS : DINT ;    //Wartungsintervall Starts
   STD_DSP_MSG : INT  := 50;    //Wartungsintervall Stunden vorher melden
   STARTS_DSP_MSG : INT  := 100;    //Wartungsintervall Starts vorher melden
   STD_AKTIV : BOOL  := TRUE;    //Wartungsintervall nach Betriebsstunden aktiv
   STARTS_AKTIV : BOOL ;    //Wartungsintervall nach Starts aktiv
   FLAG2 : BOOL ;    
   FLAG3 : BOOL ;    
  END_STRUCT ;    
END_TYPE

DATA_BLOCK "DB520_SERVICE_DATEN"
TITLE =
VERSION : 0.1


  STRUCT     
   SRVC01 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC02 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC03 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC04 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC05 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC06 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC07 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC08 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC09 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC10 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC11 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC12 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC13 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC14 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC15 : "UDT_SERVICE_INF_DRV";    //Servicedaten 
   SRVC16 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC17 : "UDT_SERVICE_INF_DRV";    
   SRVC18 : "UDT_SERVICE_INF_DRV";    //Servicedaten: 
   SRVC19 : "UDT_SERVICE_INF_DRV";    
   SRVC20 : "UDT_SERVICE_INF_DRV";    
   SRVC21 : "UDT_SERVICE_INF_DRV";    
   SRVC22 : "UDT_SERVICE_INF_DRV";    
   SRVC23 : "UDT_SERVICE_INF_DRV";    
   SRVC24 : "UDT_SERVICE_INF_DRV";    
  END_STRUCT ;    
BEGIN
   SRVC01.STARTS := L#0; 
   SRVC01.RUN_H := L#0; 
   SRVC01.RUN_SEC := 0; 
   SRVC01.SERVICE_H := 0; 
   SRVC01.SERVICE_SEC := 0; 
   SRVC01.SERVICE_STARTS := L#0; 
   SRVC01.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC01.USER_ID := 0; 
   SRVC01.USER_NAME := ''; 
   SRVC01.DSP_SERVICE_H := 0; 
   SRVC01.DSP_SERVICE_STARTS := L#0; 
   SRVC01.FLAG_SERVICE := FALSE; 
   SRVC01.FLAG_SERVICE_WARN := FALSE; 
   SRVC01.RESET := B#16#0; 
   SRVC02.STARTS := L#0; 
   SRVC02.RUN_H := L#0; 
   SRVC02.RUN_SEC := 0; 
   SRVC02.SERVICE_H := 0; 
   SRVC02.SERVICE_SEC := 0; 
   SRVC02.SERVICE_STARTS := L#0; 
   SRVC02.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC02.USER_ID := 0; 
   SRVC02.USER_NAME := ''; 
   SRVC02.DSP_SERVICE_H := 0; 
   SRVC02.DSP_SERVICE_STARTS := L#0; 
   SRVC02.FLAG_SERVICE := FALSE; 
   SRVC02.FLAG_SERVICE_WARN := FALSE; 
   SRVC02.RESET := B#16#0; 
   SRVC03.STARTS := L#0; 
   SRVC03.RUN_H := L#0; 
   SRVC03.RUN_SEC := 0; 
   SRVC03.SERVICE_H := 0; 
   SRVC03.SERVICE_SEC := 0; 
   SRVC03.SERVICE_STARTS := L#0; 
   SRVC03.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC03.USER_ID := 0; 
   SRVC03.USER_NAME := ''; 
   SRVC03.DSP_SERVICE_H := 0; 
   SRVC03.DSP_SERVICE_STARTS := L#0; 
   SRVC03.FLAG_SERVICE := FALSE; 
   SRVC03.FLAG_SERVICE_WARN := FALSE; 
   SRVC03.RESET := B#16#0; 
   SRVC04.STARTS := L#0; 
   SRVC04.RUN_H := L#0; 
   SRVC04.RUN_SEC := 0; 
   SRVC04.SERVICE_H := 0; 
   SRVC04.SERVICE_SEC := 0; 
   SRVC04.SERVICE_STARTS := L#0; 
   SRVC04.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC04.USER_ID := 0; 
   SRVC04.USER_NAME := ''; 
   SRVC04.DSP_SERVICE_H := 0; 
   SRVC04.DSP_SERVICE_STARTS := L#0; 
   SRVC04.FLAG_SERVICE := FALSE; 
   SRVC04.FLAG_SERVICE_WARN := FALSE; 
   SRVC04.RESET := B#16#0; 
   SRVC05.STARTS := L#69; 
   SRVC05.RUN_H := L#303; 
   SRVC05.RUN_SEC := 3311; 
   SRVC05.SERVICE_H := 302; 
   SRVC05.SERVICE_SEC := 946; 
   SRVC05.SERVICE_STARTS := L#58; 
   SRVC05.LAST_SERVICE_DATE := D#2017-11-8; 
   SRVC05.USER_ID := 0; 
   SRVC05.USER_NAME := ''; 
   SRVC05.DSP_SERVICE_H := 8298; 
   SRVC05.DSP_SERVICE_STARTS := L#0; 
   SRVC05.FLAG_SERVICE := TRUE; 
   SRVC05.FLAG_SERVICE_WARN := TRUE; 
   SRVC05.RESET := B#16#0; 
   SRVC06.STARTS := L#102; 
   SRVC06.RUN_H := L#291; 
   SRVC06.RUN_SEC := 2911; 
   SRVC06.SERVICE_H := 291; 
   SRVC06.SERVICE_SEC := 2911; 
   SRVC06.SERVICE_STARTS := L#102; 
   SRVC06.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC06.USER_ID := 0; 
   SRVC06.USER_NAME := ''; 
   SRVC06.DSP_SERVICE_H := 8309; 
   SRVC06.DSP_SERVICE_STARTS := L#0; 
   SRVC06.FLAG_SERVICE := TRUE; 
   SRVC06.FLAG_SERVICE_WARN := TRUE; 
   SRVC06.RESET := B#16#0; 
   SRVC07.STARTS := L#0; 
   SRVC07.RUN_H := L#0; 
   SRVC07.RUN_SEC := 0; 
   SRVC07.SERVICE_H := 0; 
   SRVC07.SERVICE_SEC := 0; 
   SRVC07.SERVICE_STARTS := L#0; 
   SRVC07.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC07.USER_ID := 0; 
   SRVC07.USER_NAME := ''; 
   SRVC07.DSP_SERVICE_H := 8600; 
   SRVC07.DSP_SERVICE_STARTS := L#0; 
   SRVC07.FLAG_SERVICE := TRUE; 
   SRVC07.FLAG_SERVICE_WARN := TRUE; 
   SRVC07.RESET := B#16#0; 
   SRVC08.STARTS := L#0; 
   SRVC08.RUN_H := L#0; 
   SRVC08.RUN_SEC := 0; 
   SRVC08.SERVICE_H := 0; 
   SRVC08.SERVICE_SEC := 0; 
   SRVC08.SERVICE_STARTS := L#0; 
   SRVC08.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC08.USER_ID := 0; 
   SRVC08.USER_NAME := ''; 
   SRVC08.DSP_SERVICE_H := 0; 
   SRVC08.DSP_SERVICE_STARTS := L#0; 
   SRVC08.FLAG_SERVICE := FALSE; 
   SRVC08.FLAG_SERVICE_WARN := FALSE; 
   SRVC08.RESET := B#16#0; 
   SRVC09.STARTS := L#0; 
   SRVC09.RUN_H := L#0; 
   SRVC09.RUN_SEC := 0; 
   SRVC09.SERVICE_H := 0; 
   SRVC09.SERVICE_SEC := 0; 
   SRVC09.SERVICE_STARTS := L#0; 
   SRVC09.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC09.USER_ID := 0; 
   SRVC09.USER_NAME := ''; 
   SRVC09.DSP_SERVICE_H := 0; 
   SRVC09.DSP_SERVICE_STARTS := L#0; 
   SRVC09.FLAG_SERVICE := FALSE; 
   SRVC09.FLAG_SERVICE_WARN := FALSE; 
   SRVC09.RESET := B#16#0; 
   SRVC10.STARTS := L#0; 
   SRVC10.RUN_H := L#0; 
   SRVC10.RUN_SEC := 0; 
   SRVC10.SERVICE_H := 0; 
   SRVC10.SERVICE_SEC := 0; 
   SRVC10.SERVICE_STARTS := L#0; 
   SRVC10.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC10.USER_ID := 0; 
   SRVC10.USER_NAME := ''; 
   SRVC10.DSP_SERVICE_H := 0; 
   SRVC10.DSP_SERVICE_STARTS := L#0; 
   SRVC10.FLAG_SERVICE := FALSE; 
   SRVC10.FLAG_SERVICE_WARN := FALSE; 
   SRVC10.RESET := B#16#0; 
   SRVC11.STARTS := L#0; 
   SRVC11.RUN_H := L#0; 
   SRVC11.RUN_SEC := 0; 
   SRVC11.SERVICE_H := 0; 
   SRVC11.SERVICE_SEC := 0; 
   SRVC11.SERVICE_STARTS := L#0; 
   SRVC11.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC11.USER_ID := 0; 
   SRVC11.USER_NAME := ''; 
   SRVC11.DSP_SERVICE_H := 0; 
   SRVC11.DSP_SERVICE_STARTS := L#0; 
   SRVC11.FLAG_SERVICE := FALSE; 
   SRVC11.FLAG_SERVICE_WARN := FALSE; 
   SRVC11.RESET := B#16#0; 
   SRVC12.STARTS := L#0; 
   SRVC12.RUN_H := L#0; 
   SRVC12.RUN_SEC := 0; 
   SRVC12.SERVICE_H := 0; 
   SRVC12.SERVICE_SEC := 0; 
   SRVC12.SERVICE_STARTS := L#0; 
   SRVC12.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC12.USER_ID := 0; 
   SRVC12.USER_NAME := ''; 
   SRVC12.DSP_SERVICE_H := 0; 
   SRVC12.DSP_SERVICE_STARTS := L#0; 
   SRVC12.FLAG_SERVICE := FALSE; 
   SRVC12.FLAG_SERVICE_WARN := FALSE; 
   SRVC12.RESET := B#16#0; 
   SRVC13.STARTS := L#0; 
   SRVC13.RUN_H := L#0; 
   SRVC13.RUN_SEC := 0; 
   SRVC13.SERVICE_H := 0; 
   SRVC13.SERVICE_SEC := 0; 
   SRVC13.SERVICE_STARTS := L#0; 
   SRVC13.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC13.USER_ID := 0; 
   SRVC13.USER_NAME := ''; 
   SRVC13.DSP_SERVICE_H := 0; 
   SRVC13.DSP_SERVICE_STARTS := L#0; 
   SRVC13.FLAG_SERVICE := FALSE; 
   SRVC13.FLAG_SERVICE_WARN := FALSE; 
   SRVC13.RESET := B#16#0; 
   SRVC14.STARTS := L#0; 
   SRVC14.RUN_H := L#0; 
   SRVC14.RUN_SEC := 0; 
   SRVC14.SERVICE_H := 0; 
   SRVC14.SERVICE_SEC := 0; 
   SRVC14.SERVICE_STARTS := L#0; 
   SRVC14.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC14.USER_ID := 0; 
   SRVC14.USER_NAME := ''; 
   SRVC14.DSP_SERVICE_H := 0; 
   SRVC14.DSP_SERVICE_STARTS := L#0; 
   SRVC14.FLAG_SERVICE := FALSE; 
   SRVC14.FLAG_SERVICE_WARN := FALSE; 
   SRVC14.RESET := B#16#0; 
   SRVC15.STARTS := L#0; 
   SRVC15.RUN_H := L#0; 
   SRVC15.RUN_SEC := 0; 
   SRVC15.SERVICE_H := 0; 
   SRVC15.SERVICE_SEC := 0; 
   SRVC15.SERVICE_STARTS := L#0; 
   SRVC15.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC15.USER_ID := 0; 
   SRVC15.USER_NAME := ''; 
   SRVC15.DSP_SERVICE_H := 0; 
   SRVC15.DSP_SERVICE_STARTS := L#0; 
   SRVC15.FLAG_SERVICE := FALSE; 
   SRVC15.FLAG_SERVICE_WARN := FALSE; 
   SRVC15.RESET := B#16#0; 
   SRVC16.STARTS := L#0; 
   SRVC16.RUN_H := L#0; 
   SRVC16.RUN_SEC := 0; 
   SRVC16.SERVICE_H := 0; 
   SRVC16.SERVICE_SEC := 0; 
   SRVC16.SERVICE_STARTS := L#0; 
   SRVC16.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC16.USER_ID := 0; 
   SRVC16.USER_NAME := ''; 
   SRVC16.DSP_SERVICE_H := 0; 
   SRVC16.DSP_SERVICE_STARTS := L#0; 
   SRVC16.FLAG_SERVICE := FALSE; 
   SRVC16.FLAG_SERVICE_WARN := FALSE; 
   SRVC16.RESET := B#16#0; 
   SRVC17.STARTS := L#0; 
   SRVC17.RUN_H := L#0; 
   SRVC17.RUN_SEC := 0; 
   SRVC17.SERVICE_H := 0; 
   SRVC17.SERVICE_SEC := 0; 
   SRVC17.SERVICE_STARTS := L#0; 
   SRVC17.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC17.USER_ID := 0; 
   SRVC17.USER_NAME := ''; 
   SRVC17.DSP_SERVICE_H := 0; 
   SRVC17.DSP_SERVICE_STARTS := L#0; 
   SRVC17.FLAG_SERVICE := FALSE; 
   SRVC17.FLAG_SERVICE_WARN := FALSE; 
   SRVC17.RESET := B#16#0; 
   SRVC18.STARTS := L#0; 
   SRVC18.RUN_H := L#0; 
   SRVC18.RUN_SEC := 0; 
   SRVC18.SERVICE_H := 0; 
   SRVC18.SERVICE_SEC := 0; 
   SRVC18.SERVICE_STARTS := L#0; 
   SRVC18.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC18.USER_ID := 0; 
   SRVC18.USER_NAME := ''; 
   SRVC18.DSP_SERVICE_H := 0; 
   SRVC18.DSP_SERVICE_STARTS := L#0; 
   SRVC18.FLAG_SERVICE := FALSE; 
   SRVC18.FLAG_SERVICE_WARN := FALSE; 
   SRVC18.RESET := B#16#0; 
   SRVC19.STARTS := L#0; 
   SRVC19.RUN_H := L#0; 
   SRVC19.RUN_SEC := 0; 
   SRVC19.SERVICE_H := 0; 
   SRVC19.SERVICE_SEC := 0; 
   SRVC19.SERVICE_STARTS := L#0; 
   SRVC19.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC19.USER_ID := 0; 
   SRVC19.USER_NAME := ''; 
   SRVC19.DSP_SERVICE_H := 0; 
   SRVC19.DSP_SERVICE_STARTS := L#0; 
   SRVC19.FLAG_SERVICE := FALSE; 
   SRVC19.FLAG_SERVICE_WARN := FALSE; 
   SRVC19.RESET := B#16#0; 
   SRVC20.STARTS := L#0; 
   SRVC20.RUN_H := L#0; 
   SRVC20.RUN_SEC := 0; 
   SRVC20.SERVICE_H := 0; 
   SRVC20.SERVICE_SEC := 0; 
   SRVC20.SERVICE_STARTS := L#0; 
   SRVC20.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC20.USER_ID := 0; 
   SRVC20.USER_NAME := ''; 
   SRVC20.DSP_SERVICE_H := 0; 
   SRVC20.DSP_SERVICE_STARTS := L#0; 
   SRVC20.FLAG_SERVICE := FALSE; 
   SRVC20.FLAG_SERVICE_WARN := FALSE; 
   SRVC20.RESET := B#16#0; 
   SRVC21.STARTS := L#0; 
   SRVC21.RUN_H := L#0; 
   SRVC21.RUN_SEC := 0; 
   SRVC21.SERVICE_H := 0; 
   SRVC21.SERVICE_SEC := 0; 
   SRVC21.SERVICE_STARTS := L#0; 
   SRVC21.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC21.USER_ID := 0; 
   SRVC21.USER_NAME := ''; 
   SRVC21.DSP_SERVICE_H := 0; 
   SRVC21.DSP_SERVICE_STARTS := L#0; 
   SRVC21.FLAG_SERVICE := FALSE; 
   SRVC21.FLAG_SERVICE_WARN := FALSE; 
   SRVC21.RESET := B#16#0; 
   SRVC22.STARTS := L#0; 
   SRVC22.RUN_H := L#0; 
   SRVC22.RUN_SEC := 0; 
   SRVC22.SERVICE_H := 0; 
   SRVC22.SERVICE_SEC := 0; 
   SRVC22.SERVICE_STARTS := L#0; 
   SRVC22.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC22.USER_ID := 0; 
   SRVC22.USER_NAME := ''; 
   SRVC22.DSP_SERVICE_H := 0; 
   SRVC22.DSP_SERVICE_STARTS := L#0; 
   SRVC22.FLAG_SERVICE := FALSE; 
   SRVC22.FLAG_SERVICE_WARN := FALSE; 
   SRVC22.RESET := B#16#0; 
   SRVC23.STARTS := L#0; 
   SRVC23.RUN_H := L#0; 
   SRVC23.RUN_SEC := 0; 
   SRVC23.SERVICE_H := 0; 
   SRVC23.SERVICE_SEC := 0; 
   SRVC23.SERVICE_STARTS := L#0; 
   SRVC23.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC23.USER_ID := 0; 
   SRVC23.USER_NAME := ''; 
   SRVC23.DSP_SERVICE_H := 0; 
   SRVC23.DSP_SERVICE_STARTS := L#0; 
   SRVC23.FLAG_SERVICE := FALSE; 
   SRVC23.FLAG_SERVICE_WARN := FALSE; 
   SRVC23.RESET := B#16#0; 
   SRVC24.STARTS := L#0; 
   SRVC24.RUN_H := L#0; 
   SRVC24.RUN_SEC := 0; 
   SRVC24.SERVICE_H := 0; 
   SRVC24.SERVICE_SEC := 0; 
   SRVC24.SERVICE_STARTS := L#0; 
   SRVC24.LAST_SERVICE_DATE := D#1990-1-1; 
   SRVC24.USER_ID := 0; 
   SRVC24.USER_NAME := ''; 
   SRVC24.DSP_SERVICE_H := 0; 
   SRVC24.DSP_SERVICE_STARTS := L#0; 
   SRVC24.FLAG_SERVICE := FALSE; 
   SRVC24.FLAG_SERVICE_WARN := FALSE; 
   SRVC24.RESET := B#16#0; 
END_DATA_BLOCK

DATA_BLOCK "DB521_SERVICE_CFG"
TITLE =
VERSION : 0.1


  STRUCT     
   CFG_SRVC_PUMPEN : "UDT_SERVICE_CFG_DRV";    //Konfiguration Service: Pumpen
   CFG_SRVC_LFT : "UDT_SERVICE_CFG_DRV";    //Konfiguration Service: Lüfter
   CFG_SRVC03 : "UDT_SERVICE_CFG_DRV";    //Konfiguration Service:  
   CFG_SRVC04 : "UDT_SERVICE_CFG_DRV";    //Konfiguration Service:  
  END_STRUCT ;    
BEGIN
   CFG_SRVC_PUMPEN.STD := 8600; 
   CFG_SRVC_PUMPEN.STARTS := L#0; 
   CFG_SRVC_PUMPEN.STD_DSP_MSG := 50; 
   CFG_SRVC_PUMPEN.STARTS_DSP_MSG := 100; 
   CFG_SRVC_PUMPEN.STD_AKTIV := TRUE; 
   CFG_SRVC_PUMPEN.STARTS_AKTIV := FALSE; 
   CFG_SRVC_PUMPEN.FLAG2 := FALSE; 
   CFG_SRVC_PUMPEN.FLAG3 := FALSE; 
   CFG_SRVC_LFT.STD := 8600; 
   CFG_SRVC_LFT.STARTS := L#0; 
   CFG_SRVC_LFT.STD_DSP_MSG := 50; 
   CFG_SRVC_LFT.STARTS_DSP_MSG := 100; 
   CFG_SRVC_LFT.STD_AKTIV := TRUE; 
   CFG_SRVC_LFT.STARTS_AKTIV := FALSE; 
   CFG_SRVC_LFT.FLAG2 := FALSE; 
   CFG_SRVC_LFT.FLAG3 := FALSE; 
   CFG_SRVC03.STD := 1000; 
   CFG_SRVC03.STARTS := L#0; 
   CFG_SRVC03.STD_DSP_MSG := 50; 
   CFG_SRVC03.STARTS_DSP_MSG := 100; 
   CFG_SRVC03.STD_AKTIV := TRUE; 
   CFG_SRVC03.STARTS_AKTIV := FALSE; 
   CFG_SRVC03.FLAG2 := FALSE; 
   CFG_SRVC03.FLAG3 := FALSE; 
   CFG_SRVC04.STD := 1000; 
   CFG_SRVC04.STARTS := L#0; 
   CFG_SRVC04.STD_DSP_MSG := 50; 
   CFG_SRVC04.STARTS_DSP_MSG := 100; 
   CFG_SRVC04.STD_AKTIV := TRUE; 
   CFG_SRVC04.STARTS_AKTIV := FALSE; 
   CFG_SRVC04.FLAG2 := FALSE; 
   CFG_SRVC04.FLAG3 := FALSE; 
END_DATA_BLOCK

FUNCTION "m7b_DRIVE_INFO" : VOID
TITLE =Drive Info
//Informationsfunktion für Antriebe:
//
//- Anzahl der Starts
//- Betriebsstunden
//- Service/Wartungsmeldung nach Anzahl der Starts und/oder Betriebsstunden
//- Service Warnmeldung Anzahl Starts oder Betriebstunden vor dem fälligen
//  Wartungstermin
//
//Mit Speicherung des Letzten Servicedatums sowie der Userkennung
//des Verantwortlichen
//
//PARAMETER IN:
//  SIGNAL:   Ansteuersignal des Antriebs (Antrieb Start)
//  SERVICE_RESET: Signal Service erledigt, Serviceintervall wird zurückgesetzt   
// 
//  DrvCfg: UDT1001: UDT_SERVICE_CFG_DRV, Struktur mit Service Konfigurationsdaten
//
//PARAMETER IN_OUT:
//  DrvInf: UDT1000: UDT_SERVICE_INF, Struktur in der Service- und Betriebsdaten  
// 
//                   gespeichert werden. 
//
//AUTOR: Stefan Maag
//DATUM: 5/2005
//
//AENDERUNGSVERMERKE:
//--------------------------------------------------------------------------------
//DATUM        NAME       AENDERUNG
//--------------------------------------------------------------------------------
//02.07.2012   S.Maag     Anzeige Rest- Zeit/Starts
//                        Vorbereitung UserName Service speichern
//--------------------------------------------------------------------------------
//
//HINWEISE:
AUTHOR : 'S.Maag'
VERSION : 0.1


VAR_INPUT
  SIGNAL : BOOL ;    //Motorsignal
  SERVICE_RESET : BOOL ;    
  DrvCfg : "UDT_SERVICE_CFG_DRV";    
END_VAR
VAR_OUTPUT
  SERVICE : BOOL ;    //Service fällig
  SERV_WARN : BOOL ;    //Service demnächst fällig
END_VAR
VAR_IN_OUT
  DrvInf : "UDT_SERVICE_INF_DRV";    
  HM : BOOL ;    //Hilfsmerker
END_VAR
VAR_TEMP
  DatumZeit : DATE_AND_TIME ;    
  DATUM : DATE ;    
  RET : INT ;    
  SERVICE_H : BOOL ;    
  SERVICE_STARTS : BOOL ;    
  SERVICE_WARN_H : BOOL ;    
  SERVICE_WARN_STARTS : BOOL ;    
  RESET : BOOL ;    
  tmpH : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =Anzahl der Starts zählen

      U     #SIGNAL; 
      FP    #HM; 
      SPBN  ne2; 
      L     #DrvInf.STARTS; // Starts gesamt
      +     L#1; 
      T     #DrvInf.STARTS; 

      L     #DrvInf.SERVICE_STARTS; // Starts seit letzter Wartung
      +     L#1; 
      T     #DrvInf.SERVICE_STARTS; 

ne2:  NOP   0; 

NETWORK
TITLE =(Betriebs-) Stunden zählen

      U     #SIGNAL; // Gerät eingeschaltet
      U     "TAKT_FLK+1s"; // Takt 1 Sekunde
      SPB   rcnt; 
      SPA   ne3; 

rcnt: L     #DrvInf.RUN_SEC; // Speicher für Sekunden
      +     1; // erhöhen
      T     #DrvInf.RUN_SEC; 
      L     3600; // prüfen ob 1 Stunde vergangen = 3600 sec.
      >=I   ; 
      SPB   rh; // wenn ja, Stunden bearbeiten
      SPA   ne3; 

rh:   L     0; // neue Stunde: zuerst Sekunden löschen
      T     #DrvInf.RUN_SEC; 

      L     #DrvInf.RUN_H; // Stundenspeicher erhöhen
      +     L#1; 
      T     #DrvInf.RUN_H; 
ne3:  NOP   0; 
NETWORK
TITLE =(Betriebs-) Stunden seit letzter Wartung zählen

      U     #SIGNAL; // Gerät eingeschaltet
      U     "TAKT_FLK+1s"; // Takt 1 Sekunde
      SPB   scnt; 
      SPA   ne4; 

scnt: L     #DrvInf.SERVICE_SEC; // Speicher für Sekunden
      +     1; // erhöhen
      T     #DrvInf.SERVICE_SEC; 
      L     3600; // prüfen ob 1 Stunde vergangen = 3600 sec.
      >=I   ; 
      SPB   sh; // wenn ja, Stunden bearbeiten
      SPA   ne4; 

sh:   L     0; // neue Stunde: zuerst Sekunden löschen
      T     #DrvInf.SERVICE_SEC; 

      L     #DrvInf.SERVICE_H; // Stundenspeicher erhöhen
      +     L#1; 
      T     #DrvInf.SERVICE_H; 

ne4:  NOP   0; 
NETWORK
TITLE =Resetbedingung
//RESET-Button über Service-Info-Struktur
//oder externer Eingang RESET
      O(    ; 
      L     #DrvInf.RESET; 
      L     1; 
      ==I   ; 
      )     ; 
      O     #SERVICE_RESET; 
      =     #RESET; 
NETWORK
TITLE =Service Intervall rücksetzen

      UN    #RESET; 
      SPB   ne5; 
      L     L#0; 
      T     #DrvInf.SERVICE_H; 
      T     #DrvInf.SERVICE_SEC; 
      T     #DrvInf.SERVICE_STARTS; 

      CALL "READ_CLK" (// System Datum- und Uhrzeit
           RET_VAL                  := #RET,
           CDT                      := #DatumZeit);

      CALL FC   306 (// Datum aus System Datum- Zeit lösen
           IN                       := #DatumZeit,
           RET_VAL                  := #DATUM);

      L     #DATUM; 
      T     #DrvInf.LAST_SERVICE_DATE; // aktuelles Datum als letztes Servicedatum speichern

      L     0; // Reset-Befehl löschen
      T     #DrvInf.RESET; 
ne5:  NOP   0; 
NETWORK
TITLE =Anzeige Restzeit bis Service

      L     #DrvCfg.STD; 
      L     #DrvInf.SERVICE_H; 
      -I    ; 
      SPPZ  sav1; // Springe wenn >=0
      L     0; // sonst auf 0 begrenzen
sav1: T     #DrvInf.DSP_SERVICE_H; 
NETWORK
TITLE =Anzeige Reststarts bis Service

      L     #DrvCfg.STARTS; 
      L     #DrvInf.SERVICE_STARTS; 
      -D    ; 
      SPPZ  sav2; // Springe wenn >=0
      L     L#0; // sonst auf 0 begrenzen
sav2: T     #DrvInf.DSP_SERVICE_STARTS; 
NETWORK
TITLE =Betriebsstunden für Service prüfen
//Meldung Service ist jetzt fällig, nach Betriebsstunden
      U(    ; 
      L     #DrvCfg.STD; // Anzahl der Betriebsstunde für Service
      L     #DrvInf.SERVICE_H; // Anzahl der Betriebsstunden seit letztem Service
      >=I   ; 
      )     ; 
      U     #DrvCfg.STD_AKTIV; // Aktivierungsflag für Service nach Betriebsstunden auswerten
      =     #SERVICE_H; 

NETWORK
TITLE =Starts für Service prüfen
//Meldung Service ist jetzt fällig, nach Anzahl starts
      U(    ; 
      L     #DrvCfg.STARTS; // Anzahl der Starts für Service
      L     #DrvInf.SERVICE_STARTS; // Anzahl der Starts seit letzem Servie
      >=I   ; 
      )     ; 
      U     #DrvCfg.STARTS_AKTIV; // Aktivierungsflag für Service nach Starts auswerten
      =     #SERVICE_STARTS; 
NETWORK
TITLE =Ausgang Service
//Meldung Service ist jetzt fällig
      O     #SERVICE_H; 
      O     #SERVICE_STARTS; 
      =     #SERVICE; // Bausteinausgang Service jetzt fälig
      =     #DrvInf.FLAG_SERVICE; 
NETWORK
TITLE =Betriebsstunden für Service Warnmeldung prüfen
//Warnung bzw- Hinweis, daß Service demnächst fällig ist, nach Betriebsstunden
      U(    ; 
      L     #DrvCfg.STD; 
      L     #DrvCfg.STD_DSP_MSG; 
      -I    ; 
      L     #DrvInf.SERVICE_H; 
      >=I   ; 
      )     ; 
      U     #DrvCfg.STD_AKTIV; // Aktivierungsflag für Service nach Betriebsstunden auswerten
      =     #SERVICE_WARN_H; 

NETWORK
TITLE =Starts für Service Warnmeldung prüfen
//Warnung bzw- Hinweis, daß Service demnächst fällig ist, nach Betriebsstunden
      U(    ; 
      L     #DrvCfg.STARTS; 
      L     #DrvCfg.STARTS_DSP_MSG; 
      -D    ; 
      L     #DrvInf.SERVICE_STARTS; 
      >=D   ; 
      )     ; 
      U     #DrvCfg.STARTS_AKTIV; // Aktivierungsflag für Service nach Starts auswerten
      =     #SERVICE_WARN_STARTS; 

NETWORK
TITLE =Ausgang Service demnächst

      O     #SERVICE_WARN_H; 
      O     #SERVICE_WARN_STARTS; 
      =     #SERV_WARN; // Bausteinausgang Service demnächst fällig
      =     #DrvInf.FLAG_SERVICE_WARN; 
END_FUNCTION
 
Zurück
Oben