Zeitsteuerung

C

CIX88

Erstmal Hallo,

gibt es Beispiele für eine Zeitsteuerung ?
Ich möchte eine TXT-Datei mit folgenden Format auslesen:

# MIN STU TAG MONAT WOCHENTAG Befehl_ausführen
Siehe auch mit GOOGLE "crontab"

Sind die Inhalte in den Zeilen der TXT-Werte = True, soll eine Funktion ausgelöst werden.

Wer hat sich damit beschäftigt oder kennt sich aus ?
 
Du brauchst also ein Programm, dass imm Überprüft was für ein Datum und Uhrzeit jetzt ist und falls für diese Zeit ein Vorgang im Textfile steht, diesen auslösen, oder?
 
Nunja ich wollte soetwas programmieren.

Noch dazu Beispiele wie ich das meine:

' um 16:30 Uhr, jeden tag, den Befehl/Option op1 auslösen
30 16 * * * op1

' immer Montags 18:00 Uhr Befehl/Option op2 ausslösen
00 18 * * 1 op2

' am 31.12 den Befehl/Option op3 auslösen
* * 31 12 * op3

Diese Zeilen sollen dann in einer ganz normalen TXT-Datei stehen.
Sie müssen also bei Programmstart eingelsen , und dann mittels Timer ausgewertet werden.
 
Jo so würd ichs auch machen. Jeden "Befehl" am Anfang einlesen.
Auf der Form platzierst du einen timer der so alle 10 Sekunde aufgerufen wird.
Darin ermittelst du das aktuelle Datum und die aktuelle Zeit und so. Jetzt überprüfst du ob ein Befehl in den letzten 10 Sekunden hätte ausgeführt werden sollte (kann also bis 10 Sekunden von der eingestellen Startzeit im Textfile abweichen). Wenn du den "Befehl" auslöst, musst du noch ihrgendwo festhalten, dass der "Befehl" schon ausgeführt wurde.

Ich sehe da keine grossen Probleme. Was sind die konkreten Probleme wobei du Hilfe brauchst?
 
Eventuell geht es auch, den Benutzer in Textboxen der Form die Anweisungen und Uhrzeiten zu hinterlegen und das ganze mit WritePropertyBag zu speichern. Nur so als Idee, falls Dir das mehr zusagt.
 
Bis auf die auswertung von Befehlen, sieht jetzt das Teil so in etwa aus:

Code:
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

' Werte definieren
Public StDatei$ ' Steuerdatei

Public woTA$  ' Wochentag

Public v_TA$  ' von Tag
Public v_MO$  ' von Monat
Public vSTU$  ' von Stunde
Public vMIN$  ' von Minute

Public b_TA$  ' bis Tag
Public b_MO$  ' bis Monat
Public bSTU$  ' bis Stunde
Public bMIN$  ' bis Minute

Public jetztWTG$  ' jetzt Wochentag
Public jetzt_TA$  ' jetzt Tag
Public jetzt_MO$  ' jetzt Monat
Public jetztSTU$  ' jetzt Stunde
Public jetztMIN$  ' jetzt Minute
Public jetztSEK$

' Wochentag
' 1 Sontag
' 2 Montag
' 3 Dienstag
' 4 Mittwoch
' 5 Donnerstag
' 6 Freitag
' 7 Samstag

' Ton bei ON
Function OP_ON()
    Beep 1000, 50
    Beep 1500, 50
End Function

' Ton bei OFF
Function OP_OFF()
    Beep 500, 50
    Beep 750, 50
    Beep 1000, 50
End Function

Function DateiCheck()
Dim SI As Integer
StDatei = App.Path & "\crontab.txt"
SI = FreeFile
    If Dir(StDatei) = "" Then
    Open StDatei For Output As #SI
    Print #SI, "#"
    Print #SI, "# Datum-Zeit-Steuerung"
    Print #SI, "#"
    Print #SI, "* * * * * * * * *"
    Close #SI
    End If
Call WerteLesen
End Function

Function WerteLesen()
If Mid(Time, 7, 2) = "00" Then ' nachfolgene Optionen nur zur vollen Minute auslösen

Dim TXT As String
Dim SI As Integer
Dim Zeile() As String
Dim ZZ() As String

    SI = FreeFile
        ' Text Zeilenweise einlesen
        Open StDatei For Input As #SI
        Do While Not EOF(SI)
        Input #SI, TXT

        Zeile = Split(TXT, vbNewLine)

       ' Zeilen mit # oder Leerezeilen inorieren
        If Left(Zeile(SI - 1), 1) <> "#" And Left(Zeile(SI - 1), 1) <> "" Then
        ZZ = Split(Zeile(SI - 1), " ")

                woTA = ZZ(0)
                v_TA = ZZ(1)
                v_MO = ZZ(2)
                vSTU = ZZ(3)
                vMIN = ZZ(4)
                b_TA = ZZ(5)
                b_MO = ZZ(6)
                bSTU = ZZ(7)
                bMIN = ZZ(8)
        Call DatumUhrzeitTimer

        End If
        DoEvents
        Loop
        Close #SI

End If
End Function

Function DatumUhrzeitTimer()

' aktuell Datum und Zeit ermitteln
jetztWTG = Weekday(Date)
jetzt_TA = Mid(Date, 1, 2)
jetzt_MO = Mid(Date, 4, 2)
jetztSTU = Mid(Time, 1, 2)
jetztMIN = Mid(Time, 4, 2)

' ausschalten
If bMIN = jetztMIN Or bMIN = "*" Then
If bSTU = jetztSTU Or bSTU = "*" Then
If woTA = jetztWTG Or woTA = "*" Then
If b_TA = jetzt_TA Or b_TA = "*" Then
If b_MO = jetzt_MO Or b_MO = "*" Then
    DatumUhrzeitTimer = 0
    Protokoll ("OFF"): OP_OFF ' Kontrolle
    Timer.opAK.Value = 0 ' Kontrolle
End If
End If
End If
End If
End If

' einschalten
If vMIN = jetztMIN Or vMIN = "*" Then
If vSTU = jetztSTU Or vSTU = "*" Then
If woTA = jetztWTG Or woTA = "*" Then
If v_TA = jetzt_TA Or v_TA = "*" Then
If v_MO = jetzt_MO Or v_MO = "*" Then
    DatumUhrzeitTimer = 1
    Protokoll ("ON"): OP_ON ' Kontrolle
    Timer.opAK.Value = 1 ' Kontrolle
End If
End If
End If
End If
End If

End Function


Function Protokoll(wert As String)
Dim SI As Integer
Dim TXT As String
TXT = App.Path & "\protokoll.txt"
SI = FreeFile
    Open TXT For Append As #SI
    Print #SI, Date & " - " & Time & " - " & wert
    Close #SI
End Function

Es wurde jetzt so programmiert, dass es eine Einschalt-Zeit/Datum und eine Ausschalt-Zeit/Datum gibt.

Sicher ist der Code noch nicht optimal, und kann noch verbessert werden, aber das Prinzip was ich wollte geht schon.

Ich knobbel weiter ....
 
Zurück