Beogradjanin
Level-1
- Beiträge
- 21
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Guten Tag,
ich versuche zur Zeit einen Baustein in SCL zu programmieren, den ich in Verbindung mit dem CountOh nutzen will.
Der CountOh berechnet die Betriebsstunden für das aktuelle Jahr. Ich benötige aber diesen Wert auch für das letzte Jahr...
Beispiel:
2013: aktuell 200h (Ende des Jahres 480h)
2012: 500h
---
2014: aktuell 100h
2013: 480h
etc.
Dieser Wert von dem aktuellen Jahr (OhActualYear) soll an jedem neuen Jahr am 1.1. um 00:00 Uhr in ein Variable Namens OhLastYear gespeichert werden.
Ich habe bis jetzt so einiges programmiert, nur irgendwie klappt der Vergleich nicht, das, wenn die aktuelle Zeit größer als die Vergleichszeit ist, dass er den Wert von OhActualYear nach OhLastYear schreibt und den OhActualYear auf 0 setzt.
Der Code ist noch nicht vollständig. Bis jetzt will ich nur anhand einer Hilfsvariablen namens "gr" testen, ob der Vergleich funktioniert.
Und das tut er nicht.
Also mache ich irgendwas falsch.
Oder kann man das ganze Problem deutlich einfacher verwirklichen?
ich versuche zur Zeit einen Baustein in SCL zu programmieren, den ich in Verbindung mit dem CountOh nutzen will.
Der CountOh berechnet die Betriebsstunden für das aktuelle Jahr. Ich benötige aber diesen Wert auch für das letzte Jahr...
Beispiel:
2013: aktuell 200h (Ende des Jahres 480h)
2012: 500h
---
2014: aktuell 100h
2013: 480h
etc.
Dieser Wert von dem aktuellen Jahr (OhActualYear) soll an jedem neuen Jahr am 1.1. um 00:00 Uhr in ein Variable Namens OhLastYear gespeichert werden.
Ich habe bis jetzt so einiges programmiert, nur irgendwie klappt der Vergleich nicht, das, wenn die aktuelle Zeit größer als die Vergleichszeit ist, dass er den Wert von OhActualYear nach OhLastYear schreibt und den OhActualYear auf 0 setzt.
Code:
FUNCTION_BLOCK FB1111
TITLE ='Speichert die Betriebsstunden aus dem letzten Jahr'
NAME:'SaveOpH'
AUTHOR:'Lukic'
FAMILY:'TIME'
VERSION: '1.0'
// Typical-Attribute
{
S7_m_c:='true';
S7_blockview:='big'
}
//Input: From Block CountOh
VAR_INPUT
Days: INT;
Hours: INT;
Minutes: INT;
ActDateTime: DATE_AND_TIME;
END_VAR
//Output
VAR_OUTPUT
//Operating hours of the actual year
OhActualYear: REAL;
//Operating hours of the last year
OhLastYear: REAL;
//Date to save the operating hours to OhLastYear and reset OhActualYear
CmpDate: DATE_AND_TIME;
gr : BOOL;
END_VAR
VAR
CmpDateTime: DATE_AND_TIME;
arrayCmpDateTime AT CmpDateTime:
STRUCT
Jahr: Byte;
Monat: BYTE;
Tag: BYTE;
Stunde: BYTE;
Minute: BYTE;
Sekunde: BYTE;
MS_UND_WDAY: WORD;
END_STRUCT;
DateTime: DATE_AND_TIME;
arrayDateTime AT DateTime:
STRUCT
Jahr: Byte;
Monat: BYTE;
Tag: BYTE;
Stunde: BYTE;
Minute: BYTE;
Sekunde: BYTE;
MS_UND_WDAY: WORD;
END_STRUCT;
thisYear:INT;
tYear:INT;
END_VAR
BEGIN
tYear:=READ_CLK(CDT :=DateTime);
//Working Hours of the actual year
OhActualYear:=(Days*24)+Hours+(INT_TO_REAL(Minutes)/60);
thisYear:=BCD_TO_INT(arrayDateTime.Jahr);
//next Year
arrayCmpDateTime.Jahr := INT_TO_BYTE(thisYear+1);
CmpDate:=CmpDateTime;
gr:=GE_DT(DT1 := actDateTime,DT2 := CmpDate); // BOOL
;
END_FUNCTION_BLOCK
Der Code ist noch nicht vollständig. Bis jetzt will ich nur anhand einer Hilfsvariablen namens "gr" testen, ob der Vergleich funktioniert.
Und das tut er nicht.
Also mache ich irgendwas falsch.
Oder kann man das ganze Problem deutlich einfacher verwirklichen?