Mehrere Funktionen gleichzeitig ausführen

  • Folgendes Problem habe ich:

    Folgendes Script habe ich schon gebaut, funktioniert auch bis auf eine Kleinigkeit

    Wenn die Variable $DF00 = 2 oder 3 soll alle 500ms bzw. 250ms der String $Rel_1_T an den seriellen port gesendet werden.

    Aber irgend etwas will da nicht.

    Hier mein Script:

    Danke euch schon mal

  • Was genau funktioniert denn nicht? Ich hab leider nicht die Möglichkeit dein Script zu testen, also musst du schon eine genauere Problembeschreibung zur Verfügung stellen.
    Hast du schon versucht mit MsgBoxen die Stelle zu finden, an der das Script möglicherweise nicht ausgeführt wird?

  • ich hoffe ich habe es richtig verstanden...

    Spoiler anzeigen
    [autoit]

    #include "Func_Serial.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $bToggle = False

    [/autoit] [autoit][/autoit] [autoit]

    ;Alle Konstanten müssen angepasst werden!
    ;Gemäss Spezifikationen der Karte!
    Global Const $ComPort = 3
    Global Const $Baudrate = 19200
    Global Const $Bits = 8
    Global Const $Parity = 0
    Global Const $Stop = 0
    Global Const $Rts = 1

    [/autoit] [autoit][/autoit] [autoit]

    ;A= Aus, E= Ein, T= Toggle
    Global Const $Init = String(Chr(1) & Chr(1) & Chr(1) & Chr(1))
    Global Const $Alle_E = String(Chr(3) & Chr(1) & Chr(255) & Chr(253))
    Global Const $Alle_A = String(Chr(3) & Chr(1) & Chr(0) & Chr(2))
    Global Const $Rel_1_E = String(Chr(6) & Chr(1) & Chr(1) & Chr(6))
    Global Const $Rel_1_A = String(Chr(7) & Chr(1) & Chr(1) & Chr(7))
    Global Const $Rel_1_T = String(Chr(8) & Chr(1) & Chr(1) & Chr(8))
    Global Const $Rel_2_E = String(Chr(6) & Chr(1) & Chr(2) & Chr(5))
    Global Const $Rel_2_A = String(Chr(7) & Chr(1) & Chr(2) & Chr(4))
    Global Const $Rel_2_T = String(Chr(8) & Chr(1) & Chr(2) & Chr(11))

    [/autoit] [autoit][/autoit] [autoit]

    Global $SendPort = _OpenCOMPort($ComPort, $Baudrate, $Bits, $Parity, $Stop, $Rts)
    If $SendPort = -1 Then
    MsgBox(16, "FEHLER", "Schnittstelle Com" & $ComPort & " konnte nicht geöffnet werden!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _SendSerialString($SendPort, $Init)
    Sleep(250)
    _SendSerialString($SendPort, $Rel_1_E)
    Sleep(250)
    _SendSerialString($SendPort, $Rel_2_E)
    Sleep(250)
    _SendSerialString($SendPort, $Rel_1_A)
    Sleep(250)
    _SendSerialString($SendPort, $Rel_2_A)
    MsgBox(0, "INIT", "INIT ABGESCHLOSSEN", 5)

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("Ende")
    Func Rel_1_T();Blinken
    _SendSerialString($SendPort, $Rel_1_T)
    EndFunc ;==>Rel_1_T

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    ;Player1
    $DF0 = FileOpen("C:\DF_0.txt", 0)
    $DF00 = FileReadLine($DF0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    If $DF00 = "1" Then ;Wiedergabe
    If $bToggle = True Then
    AdlibUnRegister("Rel_1_T")
    $bToggle = False
    EndIf
    _SendSerialString($SendPort, $Rel_1_E)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ElseIf $DF00 = "0" Then ;Stop
    If $bToggle = True Then
    AdlibUnRegister("Rel_1_T")
    $bToggle = False
    EndIf
    _SendSerialString($SendPort, $Rel_1_A)

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $DF00 = "2" Then ;EOF
    AdlibRegister("Toggle", 500)

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $DF00 = "3" Then ;FADE
    AdlibRegister("Toggle", 250)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    FileClose($DF0)

    [/autoit] [autoit][/autoit] [autoit]

    ;Player2
    $DF1 = FileOpen("C:\DF_1.txt", 0)
    $DF01 = FileReadLine($DF1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    If $DF01 = "1" Then
    _SendSerialString($SendPort, $Rel_2_E)

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $DF01 = "0" Then
    _SendSerialString($SendPort, $Rel_2_A)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    FileClose($DF1)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    Func Ende()
    FileClose($DF0)
    FileClose($DF1)
    _CloseCOMPort($SendPort)
    EndFunc ;==>Ende

    [/autoit] [autoit][/autoit] [autoit]

    Func Toggle()
    _SendSerialString($SendPort, $Rel_1_T)
    $bToggle = True
    EndFunc ;==>Toggle

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    mit AdlibRegister muss man funktionen aufrufen ;)

    Einmal editiert, zuletzt von Alizame (13. April 2012 um 17:55) aus folgendem Grund: sry, hab vergessen Com-port wieder auf 3 zu setzen

  • Fast würde ich mal sagen, Toggel ist nur wenn DF00 "2"oder "3" ist, wenn also 1 oder 2 ist, darf nicht getogglet werden.