Variablen zwischen 2 Scripten

  • Hallo!
    Ich hätt da mal gern´n Problem... ;)

    Also, ich habe noch nicht genug deswegen das folgende:
    Ich würde gern 2 Scripte parallel arbeiten lassen. Das eine soll ständig Daten für das andere bereit halten.
    In datei schreiben stelle ich mir zu langsam vor. Zwischenablage wäre eine Möglichkeit. Ist die schnell genug?
    Oder kann ich vllt. sogar Variablen des einen im anderen abfragen???....

    ... wasweisichdennschon...

    Einmal editiert, zuletzt von Chrischn (7. September 2009 um 15:49)

  • Direkt kommunizieren können sie wahrscheinlich nicht.
    Nur mit der Variante von Depreed.
    Damit würde es funktionieren.
    Aber ich frage mich, ob per FileWrite nicht doch schneller ist.
    Wenn die Schleife unentwegt Daten schreibt, kannst du sie genau so schnell auslesen..


    EDIT:
    Kannst du die Skripte mal posten?
    Ich bekomm die bestimmt in 1 zusammengebastelt ^^

  • OK, gern. Du hast es ja nichtz anders gewollt:
    Ist im Moment wegen dem Primärproblem noch 1 Script, aber die Func "ReadLPTPortPins" würde ich gern outsourcen.

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: Christian Birkmann
    Script Function: M&B TS4

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

    #ce ----------------------------------------------------------------------------

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

    #Region Konstanten und Variablen
    #include <Array.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #RequireAdmin
    Opt('MustDeclareVars', 1)
    Global $RegSchluessel = "HKey_Local_Machine\Software\Schröder\TS4", $AktuelleMotorStellung = 0, $ReferenzierenAbgeschlossen = 0
    Global $AktuellesMass = 0, $Zielmass = 0, $LaengstischOption, $AnzahlSchnitte, $Beschleunigung
    Global $ParallelPort, $Pause, $PausenTaste
    Global $ReferenzMass, $Gewindesteigung, $SchritteProUmdrehung, $AchsUmkehrSpiel, $Systempasswort ,$Laengstisch, $Slider, $AnzahlSchnitteInput
    Global $AktuelleEndstufen, $SchnittAbstandInput, $SchnittBreiteInput, $StartPositionInput, $AktuellesMassLabel, $Fortschrittsbalken, $Status
    Global $Start, $Referenzieren, $Grundeinstellungen_Aendern, $msg, $Speichern, $Regfehler, $GES, $RM, $GS, $SPU, $AUS, $SP, $Laufzeit, $Speed
    Global $SchnitteAbsolviert, $SchnittAbstand, $SchnittAbstandInput, $SchnittBreite, $StartPosition, $BCD[2], $In[8],$del, $Exit,$MoveStart, $PP, $ParallelPort
    Global $EndschalterLinks, $EndschalterRechts, $EndschalterOben, $EndschalterUnten, $EndschalterHinten, $EndschalterVorn, $Aus = "0xff4040", $An = "0x00FF00"
    Global $Out0 = 0;MotorEndstufenkanal 1
    Global $Out1 = 0;MotorEndstufenkanal 2
    Global $Out2 = 0;Wippe Hoch
    Global $Out3 = 0;Wippe Runter
    Global $Out4 = 0;Tisch Nach Vorn
    Global $Out5 = 0;Tisch Nach Hinten
    Global $Out6 = 0;Hydraulik Ein
    Global $Out7 = 0;Werkzeug Ein
    Global $In0 ;Not-Aus
    Global $In1 ;Endschalter Oben
    Global $In2 ;Endschalter Unten
    Global $In3 ;Endschalter Hinten
    Global $In4 ;Endschalter Vorn
    Global $In5 ;Endschalter Links
    Global $In6 ;Endschalter Rechts
    Global $In7 ;--frei--
    Global $Dll = DLLOpen(@ScriptDir & "/inpout32.dll")
    HotKeySet("{ESC}","_Exit")
    HotKeySet("{PAUSE}", "Pause")
    #EndRegion Konstanten und Variablen

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

    #Region GUI
    GUICreate("Meyer & Burger - TS4 Control-Center",1024,768,0,0,1)
    GUISetState(@sw_show)

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

    GUICtrlCreateGroup("Programmeinstellungen", 10, 10)
    $Laengstisch = GUICtrlCreateCheckbox("Programm mit Längstisch",20,30)
    GUICtrlCreateLabel("Vorschub Quertisch 1 - 100%",20,80)
    $Slider = GUICtrlCreateSlider(20,100,150)
    GUICtrlSetLimit($Slider, 100 , 1 )
    GUICtrlSetData($Slider,100)

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

    GUICtrlCreateGroup("Bearbeitungsdaten", 300, 10,200,300)
    GUICtrlCreateLabel("Anzahl Schnitte",310,30)
    $AnzahlSchnitteInput = GUICtrlCreateInput("1",310,50)
    GUICtrlCreateLabel("Schnittabstand",310,80)
    $SchnittAbstandInput = GUICtrlCreateInput("1",310,100)
    GUICtrlCreateLabel("Schnittbreite",310,130)
    $SchnittBreiteInput = GUICtrlCreateInput("1",310,150)
    GUICtrlCreateLabel("Startposition",310,180)
    $StartPositionInput = GUICtrlCreateInput("1",310,200)
    $Start = GUICtrlCreateButton("Programm Start",300,320,200,50)
    $PausenTaste = GUICtrlCreateButton("Programm Pause <Pause>",300,380,200,50)

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

    GUICtrlCreateGroup("StatusDaten", 600,10,300,450)
    GUICtrlCreateLabel("Aktuelles Maß Quertisch: ",610,30)
    $AktuellesMassLabel = GUICtrlCreateLabel(Round($AktuellesMass,4)& " mm",750,30,100)
    GUICtrlCreateLabel("Programmfortschritt",610,80)
    $Fortschrittsbalken = GUICtrlCreateProgress(610,105,270,20)
    $Status = GUICtrlCreateLabel("Grundeinstellungen werden geladen...",610,130,280,60)
    GUICtrlCreateLabel("Endschalter Links",610,200)
    $EndschalterLinks = GUICtrlCreateLabel(" ",750,200,15,15)
    GUICtrlSetBkColor ($EndschalterLinks, 0xff4040 )
    GUICtrlCreateLabel("Endschalter Rechts",610,230)
    $EndschalterRechts = GUICtrlCreateLabel(" ",750,230,15,15)
    GUICtrlSetBkColor ($EndschalterRechts, 0xff4040 )
    GUICtrlCreateLabel("Endschalter Oben",610,260)
    $EndschalterOben = GUICtrlCreateLabel(" ",750,260,15,15)
    GUICtrlSetBkColor ($EndschalterOben, 0xff4040 )
    GUICtrlCreateLabel("Endschalter Unten",610,290)
    $EndschalterUnten = GUICtrlCreateLabel(" ",750,290,15,15)
    GUICtrlSetBkColor ($EndschalterUnten, 0xff4040 )
    GUICtrlCreateLabel("Endschalter Vorn",610,320)
    $EndschalterVorn = GUICtrlCreateLabel(" ",750,320,15,15)
    GUICtrlSetBkColor ($EndschalterVorn, 0xff4040 )
    GUICtrlCreateLabel("Endschalter Hinten",610,350)
    $EndschalterHinten = GUICtrlCreateLabel(" ",750,350,15,15)
    GUICtrlSetBkColor ($EndschalterHinten, 0xff4040 )

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

    $Exit = GUICtrlCreateButton("Maschine ausschalten <ESC>",50,590,200,20)
    $Referenzieren = GUICtrlCreateButton("Referenzieren",50,620,200,20)
    $Grundeinstellungen_Aendern = GUICtrlCreateButton("Grundeinstellungen ändern",50,650,200,20)
    #EndRegion GUI

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

    Grundeinstellungen_Lesen()

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

    Sleep(1000)

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

    #Region Hauptprogramm
    While 1
    GUICtrlSetData($Status,"Referenzpunkt nicht angefahren")
    ReadLPTPortPins()
    While 1
    ReadLPTPortPins()
    If $In0 = 0 Then ExitLoop ;Notaus
    Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $Grundeinstellungen_Aendern
    If InputBox("Grundeinstellungen","Bitte Kennwort eingeben","","*") = $Systempasswort Then Grundeinstellungen_Aendern()
    Case $msg = $Start
    Start()
    Case $msg = $Referenzieren
    Referenzieren()
    case $msg = $Exit
    _Exit()
    Case $msg = $PausenTaste
    Pause()
    EndSelect
    WEnd
    ;Im Not-Aus-Fall - Alles abschalten und Meldung erzeugen
    $Out2 = 0
    $Out3 = 0
    $Out4 = 0
    $Out5 = 0
    $Out6 = 0
    $Out7 = 0
    SetLPTPortPins()
    GUICtrlSetData($Status,"Not-Aus durch Überwachungsrelais oder Bediener"& @lf &"Bitte Not-Aus aufheben und OK drücken")
    MSGBox(16,"Fehler","Not-Aus durch Überwachungsrelais oder Bediener"& @lf &"Bitte Not-Aus aufheben und OK drücken")
    Sleep(500)
    WEnd
    #EndRegion Hauptprogramm

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

    Func Grundeinstellungen_Lesen()
    $Regfehler = 0
    $ParallelPort = RegRead($RegSchluessel,"ParallelPort")
    If @error <>0 Then $Regfehler = 1
    $ReferenzMass = RegRead($RegSchluessel,"Referenzmass")
    If @error <>0 Then $Regfehler = 1
    $Gewindesteigung = RegRead($RegSchluessel,"Gewindesteigung")
    If @error <>0 Then $Regfehler = 1
    $SchritteProUmdrehung = RegRead($RegSchluessel,"SchritteProUmdrehung")
    If @error <>0 Then $Regfehler = 1
    $AchsUmkehrSpiel = RegRead($RegSchluessel,"AchsUmkehrSpiel")
    If @error <>0 Then $Regfehler = 1
    $Systempasswort = RegRead($RegSchluessel,"Systempasswort")
    If @error <>0 Then $Regfehler = 1
    ;If $Regfehler = 0 Then MSGBox(0,"Bestätigung","Einstellungen gelesen",3)
    If $Regfehler = 1 Then MSGBox(16,"System-Fehler","Fehler beim Lesen aus Windows Registrierung-DB")
    EndFunc

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

    Func Grundeinstellungen_Aendern()
    $GES = GUICtrlCreateGroup("Grundeinstellungen",10,250,250,250)

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

    GUICtrlCreateLabel("Par.-Port-Adresse.:",20,290,150)
    $PP = GUICtrlCreateInput($ParallelPort,150,290,80)
    GUICtrlCreateLabel("Ref.-Mass:",20,320,150)
    $RM = GUICtrlCreateInput($ReferenzMass,150,320,80)
    GUICtrlCreateLabel("Gewindesteigung:",20,350,150)
    $GS = GUICtrlCreateInput($Gewindesteigung,150,350,80)
    GUICtrlCreateLabel("Schritte pro Umdrehung:",20,380,150)
    $SPU = GUICtrlCreateInput($SchritteProUmdrehung,150,380,80)
    GUICtrlCreateLabel("Achsumkehrspiel",20,410,150)
    $AUS = GUICtrlCreateInput($AchsUmkehrSpiel,150,410,80)
    GUICtrlCreateLabel("Systempasswort",20,440,150)
    $SP = GUICtrlCreateInput($Systempasswort,150,440,80)
    $Speichern = GUICtrlCreateButton("Einstellungen speichern",20,470,230)
    While 1
    Sleep(10)
    $msg = GUIGetMsg()
    Select
    Case $msg = $Speichern
    Grundeinstellungen_Speichern()
    ExitLoop
    Case $msg = $Grundeinstellungen_Aendern Or $msg = $Start Or $msg = $Referenzieren
    MSGBox(0,"Fehler","Bitte erst Speichern",3)
    EndSelect
    WEnd
    EndFunc

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

    Func Grundeinstellungen_Speichern()
    $Regfehler = 0
    $ParallelPort = GUICtrlRead($PP)
    If @error <>0 Then $Regfehler = 1
    $ReferenzMass = GUICtrlRead($RM)
    If @error <>0 Then $Regfehler = 1
    $Gewindesteigung = GUICtrlRead($GS)
    If @error <>0 Then $Regfehler = 1
    $SchritteProUmdrehung = GUICtrlRead($SPU)
    If @error <>0 Then $Regfehler = 1
    $AchsUmkehrSpiel = GUICtrlRead($AUS)
    If @error <>0 Then $Regfehler = 1
    $Systempasswort = GUICtrlRead($SP)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"ParallelPort","REG_SZ",$ParallelPort)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"Referenzmass","REG_SZ",$Referenzmass)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"Gewindesteigung","REG_SZ",$Gewindesteigung)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"SchritteProUmdrehung","REG_SZ",$SchritteProUmdrehung)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"AchsUmkehrSpiel","REG_SZ",$AchsUmkehrSpiel)
    If @error <>0 Then $Regfehler = 1
    RegWrite($RegSchluessel,"Systempasswort","REG_SZ",$Systempasswort)
    If @error <>0 Then $Regfehler = 1
    If $Regfehler = 0 Then
    $del = $GES
    Do ;Group Grundeinstellungen wieder entfernen
    GUICtrlDelete($del)
    $del = $del + 1
    Until $del = $Speichern+1
    MSGBox(0,"Bestätigung","Einstellungen gespeichert",3)
    EndIf
    If $Regfehler = 1 Then MSGBox(16,"System-Fehler","Fehler beim Schreiben in Windows Registrierung-DB")

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

    EndFunc

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

    Func Start()
    If Not $ReferenzierenAbgeschlossen Then
    MSGBox(16,"Fehler","Referenzpunkt nicht angefahren!")
    Else
    $Laufzeit = TimerInit()
    GUICtrlSetData($Fortschrittsbalken,0)
    $Speed = GUICtrlRead($Slider)
    $LaengstischOption = GUICtrlRead($Laengstisch)
    $AnzahlSchnitte = GUICtrlRead($AnzahlSchnitteInput)
    $SchnitteAbsolviert = 0
    $SchnittAbstand = GUICtrlRead($SchnittAbstandInput)
    $SchnittBreite = GUICtrlRead($SchnittBreiteInput)
    $StartPosition = GUICtrlRead($StartPositionInput)
    GUICtrlSetData($Status,"Startposition wird angefahren...")
    If $StartPosition < $AktuellesMass Then
    FahreNachLinks($StartPosition)
    Else
    FahreNachRechts($StartPosition)
    EndIf

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

    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    GUICtrlSetData($Status,"Bearbeite Schnitt " & " " & $SchnitteAbsolviert + 1 & " " & "von" & " " & $AnzahlSchnitte & "...")
    $Out7 = 1 ;Werkzeug Ein
    SetLPTPortPins()
    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    $Out2 = 1 ;Wippe Hoch 1
    SetLPTPortPins()
    Sleep(500)
    ReadLPTPortPins()
    Until $In1 = 1 ;Endschalter Oben
    If $LaengstischOption = 1 Then
    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    $Out2 = 0 ;Wippe Hoch 0
    $Out4 = 1 ;Tisch Nach Vorn 1
    SetLPTPortPins()
    Sleep(500)
    ReadLPTPortPins()
    Until $In4 = 1 ;Endschalter Vorn
    EndIf
    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    $Out4 = 0 ;Tisch Nach Vorn 0
    $Out3 = 1 ;Wippe Runter 1
    SetLPTPortPins()
    Sleep(500)
    Until $In2 = 1 ;Endschalter Unten
    If $LaengstischOption = 1 Then
    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    $Out3 = 0 ;Wippe Runter 0
    $Out5 = 1 ;Tisch Nach Hinten 1
    SetLPTPortPins()
    Sleep(500)
    Until $In3 = 1 ;Endschalter Hinten
    EndIf
    Do
    If $In0 = 0 Then ExitLoop ;Notaus
    $Out5 = 0 ;Tisch Nach Hinten 0
    $Out2 = 1 ;Wippe Hoch 1
    SetLPTPortPins()
    Sleep(500)
    ReadLPTPortPins()
    Until $In1 = 1 ;Endschalter Oben
    $StartPosition = $StartPosition + $Schnittabstand + $SchnittBreite
    $SchnitteAbsolviert = $SchnitteAbsolviert + 1
    If $SchnitteAbsolviert < $AnzahlSchnitte Then FahreNachRechts($StartPosition)
    GUICtrlSetData($Fortschrittsbalken,($SchnitteAbsolviert/$AnzahlSchnitte*100))
    If $In0 = 0 Then ExitLoop ;Notaus
    Until $SchnitteAbsolviert = $AnzahlSchnitte
    $Laufzeit = TimerDiff($Laufzeit)
    GUICtrlSetData($Status,"Bearbeitung abgeschlossen!"& @lf & $AnzahlSchnitte & " Schnitte" &" in " & Round($Laufzeit/1000/60,0) & " Minuten" )
    $Out2 = 0
    $Out3 = 0
    $Out4 = 0
    $Out5 = 0
    $Out6 = 0
    $Out7 = 0
    SetLPTPortPins()
    EndIf
    EndFunc

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

    Func FahreNachLinks($Zielmass)
    $MoveStart = $AktuellesMass
    Do
    ReadLPTPortPins()
    If $In0 = 0 Then ExitLoop ;Notaus
    MotorDrehenLinks()
    If $Zielmass - $AktuellesMass < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
    If $AktuellesMass - $MoveStart < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
    If $Beschleunigung < 3 Then $Beschleunigung = 5
    If $Beschleunigung > 200 Then $Beschleunigung = 100
    Sleep($Beschleunigung)
    Until $AktuellesMass <= $Zielmass - $AchsUmkehrSpiel/2
    EndFunc

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

    Func FahreNachRechts($Zielmass)
    $MoveStart = $AktuellesMass
    Do
    ReadLPTPortPins()
    If $In0 = 0 Then ExitLoop;Notaus
    MotorDrehenRechts()
    If $Zielmass - $AktuellesMass < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
    If $AktuellesMass - $MoveStart < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
    If $Beschleunigung < 3 Then $Beschleunigung = 5
    If $Beschleunigung > 200 Then $Beschleunigung = 100
    Sleep($Beschleunigung)
    Until $AktuellesMass >= $Zielmass + $AchsUmkehrSpiel/2
    EndFunc

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

    Func MotorDrehenLinks()
    $AktuelleMotorStellung = $AktuelleMotorStellung - 1
    If $AktuelleMotorStellung <=0 Then $AktuelleMotorStellung = $SchritteProUmdrehung
    $AktuellesMass = $AktuellesMass-($Gewindesteigung*(1/$SchritteProUmdrehung))
    $AktuelleEndstufen = $AktuelleEndstufen -1
    If $AktuelleEndstufen < 1 Then $AktuelleEndstufen = 4
    Select
    Case $AktuelleEndstufen = 1
    $Out0 = 0
    $Out1 = 0
    Case $AktuelleEndstufen = 2
    $Out0 = 1
    $Out1 = 0
    Case $AktuelleEndstufen = 3
    $Out0 = 1
    $Out1 = 1
    Case $AktuelleEndstufen = 4
    $Out0 = 0
    $Out1 = 1
    EndSelect
    SetLPTPortPins()
    GUICtrlSetData($AktuellesMassLabel,Round($AktuellesMass,4)& " mm")
    EndFunc

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

    Func MotorDrehenRechts()
    $AktuelleMotorStellung = $AktuelleMotorStellung + 1
    If $AktuelleMotorStellung >$SchritteProUmdrehung Then $AktuelleMotorStellung = 1
    $AktuellesMass = $AktuellesMass+($Gewindesteigung*(1/$SchritteProUmdrehung))
    $AktuelleEndstufen = $AktuelleEndstufen +1
    If $AktuelleEndstufen > 4 Then $AktuelleEndstufen = 1
    Select
    Case $AktuelleEndstufen = 1
    $Out0 = 0
    $Out1 = 0
    Case $AktuelleEndstufen = 2
    $Out0 = 1
    $Out1 = 0
    Case $AktuelleEndstufen = 3
    $Out0 = 1
    $Out1 = 1
    Case $AktuelleEndstufen = 4
    $Out0 = 0
    $Out1 = 1
    EndSelect
    SetLPTPortPins()
    GUICtrlSetData($AktuellesMassLabel,Round($AktuellesMass,4)& " mm")
    EndFunc

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

    Func Referenzieren()
    GUICtrlSetData($Status,"Referenzpunkt wird angefahren...")
    While $In5=0 ;Endschalter Links
    If $In0 = 0 Then ExitLoop ;Notaus
    ReadLPTPortPins()
    MotorDrehenLinks()
    Sleep(50)
    WEnd
    While $In5=1 ;Endschalter Links
    If $In0 = 0 Then ExitLoop ;Notaus
    ReadLPTPortPins()
    MotorDrehenRechts()
    Sleep(50)
    WEnd
    While $In5=0 ;Endschalter Links
    If $In0 = 0 Then ExitLoop ;Notaus
    ReadLPTPortPins()
    MotorDrehenLinks()
    Sleep(50)
    $AktuellesMass = $ReferenzMass
    $ReferenzierenAbgeschlossen = 1
    GUICtrlSetData($Status,"Referenzieren abgeschlossen!" & @lf & "Bereit zur Bearbeitung")
    WEnd
    If $In0=1 Then
    $AktuellesMass = $ReferenzMass
    $ReferenzierenAbgeschlossen = 1
    GUICtrlSetData($Status,"Referenzieren abgeschlossen!" & @lf & "Bereit zur Bearbeitung")
    EndIf
    EndFunc

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

    Func SetLPTPortPins()
    ;Convert bits to BCD
    $BCD = 0
    If $Out0 = 1 Then $BCD = $BCD + 1
    If $Out1 = 1 Then $BCD = $BCD + 2
    If $Out2 = 1 Then $BCD = $BCD + 4
    If $Out3 = 1 Then $BCD = $BCD + 8
    If $Out4 = 1 Then $BCD = $BCD + 16
    If $Out5 = 1 Then $BCD = $BCD + 32
    If $Out6 = 1 Then $BCD = $BCD + 64
    If $Out7 = 1 Then $BCD = $BCD + 128
    ;pass the call to inpout32.dll
    DllCall( $DLL, "int", "Out32", "int", $ParallelPort, "int", $BCD)
    EndFunc

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

    Func ReadLPTPortPins()
    $BCD = DllCall( $DLL, "short", "Inp32", "short", $ParallelPort)
    $In = _DezToBin($BCD[0])
    $In0 = $In[0]
    $In1 = $In[1]
    $In2 = $In[2]
    $In3 = $In[3]
    $In4 = $In[4]
    $In5 = $In[5]
    $In6 = $In[6]
    $In7 = $In[7]

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

    If $In1 = 0 Then GUICtrlSetBkColor ($EndschalterOben, $Aus )
    If $In1 = 1 Then GUICtrlSetBkColor ($EndschalterOben, $An )
    If $In2 = 0 Then GUICtrlSetBkColor ($EndschalterUnten, $Aus )
    If $In2 = 1 Then GUICtrlSetBkColor ($EndschalterUnten, $An )
    If $In3 = 0 Then GUICtrlSetBkColor ($EndschalterHinten, $Aus )
    If $In3 = 1 Then GUICtrlSetBkColor ($EndschalterHinten, $An )
    If $In4 = 0 Then GUICtrlSetBkColor ($EndschalterVorn, $Aus )
    If $In4 = 1 Then GUICtrlSetBkColor ($EndschalterVorn, $An )
    If $In5 = 0 Then GUICtrlSetBkColor ($EndschalterLinks, $Aus )
    If $In5 = 1 Then GUICtrlSetBkColor ($EndschalterLinks, $An )
    If $In6 = 0 Then GUICtrlSetBkColor ($EndschalterRechts, $Aus )
    If $In6 = 1 Then GUICtrlSetBkColor ($EndschalterRechts, $An )

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

    ;ToolTip($In[0]&$In[1]&$In[2]&$In[3]&$In[4]&$In[5]&$In[6]&$In[7])
    ;Überbrückungen
    ;$In0 = 1 ;Notaus
    ;$In1 = 1 ;Endschalter Oben
    ;$In2 = 1 ;Endschalter Unten
    ;$In3 = 1 ;Endschalter Hinten
    ;$In4 = 1 ;Endschalter Vorn
    ;$In5 = 1 ;Endschalter Links
    ;$In6 = 1 ;Endschalter Rechts
    ;$In7 = 1
    EndFunc

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

    Func _DezToBin($query)
    DIM $return_array[8]
    If $query - 128 > -1 Then
    $return_array[7] = 1
    $query = $query - 128
    Else
    $return_array[7] = 0
    EndIf
    If $query - 64 > -1 Then
    $return_array[6] = 1
    $query = $query - 64
    Else
    $return_array[6] = 0
    EndIf
    If $query - 32 > -1 Then
    $return_array[5] = 1
    $query = $query - 32
    Else
    $return_array[5] = 0
    EndIf
    If $query- 16 > -1 Then
    $return_array[4] = 1
    $query = $query - 16
    Else
    $return_array[4] = 0
    EndIf
    If $query - 8 > -1 Then
    $return_array[3] = 1
    $query = $query - 8
    Else
    $return_array[3]=0
    EndIf
    If $query - 4 > -1 Then
    $return_array[2] = 1
    $query = $query - 4
    Else
    $return_array[2] = 0
    EndIf
    If $query - 2 > -1 Then
    $return_array[1] = 1
    $query = $query - 2
    Else
    $return_array[1] = 0
    EndIf
    If $query - 1 > -1 Then
    $return_array[0] = 1
    $query = $query - 1
    Else
    $return_array[0] = 0
    EndIf
    Return $return_array
    EndFunc

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

    Func _Exit()
    DllClose($DLL)
    If MsgBox(4,"Programm wird geschlossen","Soll der Rechner heruntergefahren werden?",10) = 6 Then Run('shutdown -s -t 5 -c "Maschine wird ausgeschaltet"')
    Exit
    EndFunc

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

    Func Pause()
    $Pause = NOT $Pause
    While $Pause
    sleep(100)

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

    WEnd
    ToolTip("")
    EndFunc

    [/autoit]

    ... wasweisichdennschon...

  • Spoiler anzeigen
    [autoit]


    #Include <Array.au3>
    #Include <GUIConstantsEx.au3>

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

    Opt('WinTitleMatchMode', 3)

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

    global const $TITLE_RECEIVER = 'DVBViewerSleepTimerReceiver'
    global const $WM_COPYDATA = 0x004A
    Global $NewDataAvailable = False, $avData[1]

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

    if WinExists($TITLE_RECEIVER) then
    ; Kommandozeile an schon laufendes Skript weitergeben
    If $CMDLINE[0] = 0 Then Exit
    _SendData(WinGetHandle($TITLE_RECEIVER),$CMDLINERAW)
    Exit
    else
    ; Empfänger mit normalem Skript starten
    _Receiver()
    Exit
    endif

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

    func _Receiver()
    GUICreate($TITLE_RECEIVER)
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')

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

    while 1
    Sleep(10)
    if $NewDataAvailable then
    $NewDataAvailable = False
    $sMsg = $avData[1]
    _ArrayDelete($avData,1)
    $aMsg = _ParseCMDLine($sMsg)
    For $i = 0 To UBound($aMsg)-1
    Switch $aMsg[$i][1]
    Case "dauer"
    MsgBox(0, '', "Dauer anzeigen")
    Case "stop"
    MsgBox(0, '', "beenden")
    Exit
    EndSwitch
    Next
    endif
    wend

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

    GUIDelete()
    endfunc; _Receiver

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

    ;===============================================================================
    ;
    ; Function Name: _ParseCMDLine($CMDString)
    ; Description:: Parses a CMD-String to Parameters with Values
    ; Parameter(s): $CMDString -> String to parse
    ; Requirement(s): ?
    ; Return Value(s): Error: 0 and @error = StringRegExp-Error
    ; Success: 2 Dimensional Array:
    ; $array[$i][0] : Parameter including value
    ; $array[$i][1] : Parameter
    ; $array[$i][2] : Value with quotation marks (only if value has quotaion marks)
    ; $array[$i][3] : Value without quotation marks
    ; Author(s): Prog@ndy
    ;
    ; Basis: http://regexlib.com/REDetails.aspx?regexp_id=1220
    ;===============================================================================
    ;
    Func _ParseCMDLine($CMDString)
    Local $y, $j, $i, $entry
    Local $x = StringRegExp($CMDString,'(?:\s*)(?<=[-|/])(?<name>[^\s-|/:|=]*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>\S*)))|\w*?)',4)
    If @error Then Return SetError(@error,0,0)
    Local $ResultArray[UBound($x)][4]
    For $i = 0 To UBound($x)-1
    $entry = $x[$i]
    For $y = 0 To UBound($entry)-1
    $j = $y
    If $y > 3 Then $j = 3
    $ResultArray[$i][$j] = $entry[$y]
    Next
    Next
    Return $ResultArray
    EndFunc
    func _SendData($hWnd, $sData)

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

    local $tCOPYDATA, $tMsg

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

    $tMsg = DllStructCreate('wchar[' & StringLen($sData) + 1 & ']')
    DllStructSetData($tMsg, 1, $sData)
    $tCOPYDATA = DllStructCreate('dword;dword;ptr')
    DllStructSetData($tCOPYDATA, 2, DllStructGetSize($tMsg))
    DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
    $Ret = DllCall('user32.dll', 'lparam', 'SendMessageW', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
    if (@error) or ($Ret[0] = -1) then
    return 0
    endif
    return 1
    endfunc; _SendData

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

    func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)

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

    local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
    local $tMsg = DllStructCreate('wchar[' & DllStructGetData($tCOPYDATA, 2)/2 & ']', DllStructGetData($tCOPYDATA, 3))

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

    _ArrayAdd($avData, DllStructGetData($tMsg, 1))
    $NewDataAvailable = True

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

    return 0
    endfunc; _WM_COPYDATA

    [/autoit]

    So können Skripte per cmdline "kommunizieren".

  • Und noch eine öglichkeit gibt es: die, die von Autouit dafür vorgesehen ist.
    Die Funktionen sind relativ unbekannt. Mit AutoItWinSetTitle definierst du den Titel des unsichtbaren Autoit-fensters, welches bei jedem AutoItSkript immer vorhanden ist.
    Wenn du zum Test das Fenster mal sichtbar machst kannst du die ID der EditBox darin rausfinden. Darüber können zwei Skripte miteinander kommunizieren.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Natürlich kriegt ihr ein Beispiel:

    sender.au3
    [autoit]

    global $instance=1
    AutoItWinSetTitle("TEST123")
    ;Daten schreiben:

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

    _SETTEXT(InputBox("Text eingeben","Geben Sie Text ein"))
    Sleep(10000)
    Func _SETTEXT($text)
    ControlSetText(AutoItWinGetTitle(),"",$instance,$text)
    EndFunc

    [/autoit]
    empfänger.au3
    [autoit]

    global $instance=1
    Do
    ;Daten lesen
    $msg=_GETTEXT()
    Until $msg<>""
    MsgBox(0,"Gesendet:",$msg)
    Func _GETTEXT()
    Return ControlGetText("TEST123","",$instance)
    EndFunc

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Im englischen Forum ist doch ein Beispiel:

    Spoiler anzeigen
    [autoit]


    ;Script1
    #include "MessageHandler.au3"

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

    $Local_ReceiverID_Name = "Script1sReceiverID";This is the ID that the other script will use to send data
    $Remote_ReceiverID_Name = "Script2sReceiverID";This is the ID of the script we want to send data too

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

    $hwnd = _SetAsReceiver($Local_ReceiverID_Name)
    ConsoleWrite("hwnd of the Local_ReceiverID_Name is " & $hwnd & @crlf)
    $myFunc = _SetReceiverFunction("_MyFunc2")
    ConsoleWrite("My data receiver function is " & $myFunc & @crlf)

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _MyFunc2($vText)
    Msgbox(0,@ScriptName,"I am " & @ScriptName & " I have received some data" & @crlf & @crlf & $vText & @crlf & @crlf & "And now I'm sending the data back")
    $iSent = _SendData($vText,$Remote_ReceiverID_Name)
    Exit
    EndFunc

    [/autoit]
    Spoiler anzeigen
    [autoit]


    ;Script2
    #include "MessageHandler.au3"

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

    $Local_ReceiverID_Name = "Script2sReceiverID";This is the ID that the other script will use to send data
    $Remote_ReceiverID_Name = "Script1sReceiverID";This is the ID of the script we want to send data too

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

    $hwnd = _SetAsReceiver($Local_ReceiverID_Name)
    ConsoleWrite("hwnd of the Local_ReceiverID_Name is " & $hwnd & @crlf)
    $myFunc = _SetReceiverFunction("_MyFunc2")
    ConsoleWrite("My data receiver function is " & $myFunc & @crlf)

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

    $Str = InputBox(@ScriptName," I am " & @ScriptName & @crlf & "Enter some data to be sent to the other script")

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

    $iSent = _SendData($Str,$Remote_ReceiverID_Name)

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

    While 1
    sleep(100)
    WEnd

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

    Func _MyFunc2($vText)
    Msgbox(0,@ScriptName,@ScriptName & " has received a message" & @crlf & $vText)
    Exit
    EndFunc

    [/autoit]

    Beide radikal gekürzt:

    Empfänger:

    Spoiler anzeigen
    [autoit]


    ;Script1
    #include "MessageHandler.au3"

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

    $Local_ReceiverID_Name = "Script1sReceiverID";This is the ID that the other script will use to send data

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

    $hwnd = _SetAsReceiver($Local_ReceiverID_Name)
    $myFunc = _SetReceiverFunction("_MyFunc2")

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _MyFunc2($vText)
    Msgbox(0,""," Ich bin der Empfänger und habe folgende Nachricht empfangen" & @crlf & @crlf & $vText)
    Exit
    EndFunc

    [/autoit]

    Sender:

    Spoiler anzeigen
    [autoit]


    ;Script2
    #include "MessageHandler.au3"

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

    $Local_ReceiverID_Name = "Script2sReceiverID";This is the ID that the other script will use to send data
    $Remote_ReceiverID_Name = "Script1sReceiverID";This is the ID of the script we want to send data too

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

    $hwnd = _SetAsReceiver($Local_ReceiverID_Name)

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

    $Str = InputBox(""," Ich bin der Sender "& @crlf & "Bitte Nachricht zum Senden eingeben")

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

    $iSent = _SendData($Str,$Remote_ReceiverID_Name)

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

    While 1
    sleep(100)
    WEnd

    [/autoit]