Produkt: | Elvis |
Version: | ab 1.3 |
Stand: | 2002-07-25 |
Zusammenfassung
Wenn die PC-Zeit als Telegramme auf den Bus gesendet werden soll (beim EIB: EIS3 und EIS4), kann die Zeit, die über den Systemport zur Verfügung steht, benutzt werden. Diese Zeit ist aber lokalisiert und enthält auch die Sommer-/Winterzeit-Umschaltung. Manchmal muß man aber die Greenwich Mean Time = Universal Time Coordinate (UTC) auf den Bus senden. Die nachfolgenden Funktionen ermitteln die lokale Zeit und die UTC und deren Rückgabewert kann direkt entsprechenden Datenpunkten (Typen: EIB Uhrzeit und EIB Datum) zugewiesen werden.
Einzelheiten
1. Im Globalen Script des Prozessservers werden einige Funktionen deklariert. Download Skript (3 KB).
Bitte nicht aus dem Web heraus kopieren – hier können Sonderzeichen enthalten sein, die zu Fehlfunktionen führen!
Sub OnLoad()
Database.Datapoint(„datum“).ActualValue = CDate(0)
Database.Datapoint(„zeit“).ActualValue = CDate(0)
End Sub
Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Declare Function SetSystemTime Lib „kernel32“ (ByRef lpSystemTime _
As SYSTEMTIME) As Long
Declare Function VariantTimeToSystemTime Lib „oleaut32″(ByVal vtime As Date, _
ByRef lpSystemTime As SYSTEMTIME) As Long
Declare Function SystemTimeToVariantTime Lib „oleaut32″(ByRef lpSystemTime As SYSTEMTIME, ByRef vtime As Date) As Long
Declare Function GetSystemTime Lib „kernel32“ (ByRef lpSystemTime As SYSTEMTIME) As Long
Declare Function GetLocalTime Lib „kernel32“ (ByRef lpSystemTime As SYSTEMTIME) As Long
Function GetDateTimeUTC() As Date
Dim systime As SYSTEMTIME
Dim vartime As Date
GetSystemTime systime
If SystemTimeToVariantTime(systime, vartime) = 0 Then
Print „SystemTimeToVariantTime failed“
Else
GetDateTimeUTC = vartime
End If
End Function
Function GetDateTimeLocal() As Date
Dim localtime As SYSTEMTIME
Dim vartime As Date
GetLocalTime localtime
If SystemTimeToVariantTime(localtime, vartime) = 0 Then
Print „SystemTimeToVariantTime failed“
Else
GetDateTimeLocal = vartime
End If
End Function
2. Datenpunkten vom Typ EIB Uhrzeit oder EIB Datum die DateTimeLocal oder DateTimeUTC zuweisen. In diesem kleinen Beispiel wird über den Datenpunkt Local_UTC_Time_Switch zwischen der Lokalen und der UTC umgeschaltet. Der Datenpunkt Zeit_jetzt_senden_Befehl dient nur als Ereignis, das die Berechnung auslösen soll. Er kann z.B. über einen Timer ein Zeitprogramm oder einfach über den Bedienen verändert werden.
Bitte nicht aus dem Web heraus kopieren – hier können Sonderzeichen enthalten sein, die zu Fehlfunktionen führen! Es geht schneller und sicherer, wenn Sie die Datenpunkte anlegen und diese dann für Ihre Berechnung aus der im Editor angebotenen Liste auswählen.
‚@(Zeit_jetzt_senden_Befehl).NominalValue
Dim dDateTime As Date
If Database.Datapoint(„Local_UTC_Time_Switch“).NominalValue Then
dDateTime = GetDateTimeUTC()
Else
dDateTime = GetDateTimeLocal()
End If
Database.Datapoint(„datum_UTC“).NominalValue = dDateTime
Database.Datapoint(„zeit_UTC“).NominalValue = dDateTime
Result = dDateTime