IP im Netzwerk abfrangen und an SPS senden

  • Hallo

    Ich wollte mehrere IP Adressen im Netzwerk abfragen und an eine SPS senden. Ich
    habe den Anfang mit der Abfrage der IP Adressen begonnen.

    Hierzu habe ich ein paar Fragen.


    Zuerst wollte ich Radio Butten verwenden um zu signalisieren ob eine IP Online
    ist. Dies hat leider nicht funktioniert.

    Kann mir jemand erklären wie dies Funktioniert?


    Wenn das Programm läuft kommt es zum Flackern zwischen Online und Offline?


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Andreas\Downloads\test1\LibnoDave\Netzwerkanwesenheit SPS.kxf
    ; Globale Variablen
    Global $Input[5]
    Global $Radio[5]
    ; GUI Init
    $Form1 = GUICreate("Form1", 615, 438, 473, 180)
    $Button1 = GUICtrlCreateButton("Start", 360, 80, 145, 57)
    $Button2 = GUICtrlCreateButton("Stop", 360, 144, 145, 57)
    $Input[1] = GUICtrlCreateInput("192.168.178.", 75, 80, 161, 21)
    $Input[2] = GUICtrlCreateInput("192.168.178", 75, 110, 161, 21)
    $Input[3] = GUICtrlCreateInput("192.168.178.", 75, 140, 161, 21)
    $Input[4] = GUICtrlCreateInput("192.168.178.", 75, 170, 161, 21)
    $Radio[1] = GUICtrlCreateInput("", 245, 80, 113, 17)
    $Radio[2] = GUICtrlCreateInput("", 245, 110, 113, 17)
    $Radio[3] = GUICtrlCreateInput("", 245, 140, 113, 17)
    $Radio[4] = GUICtrlCreateInput("", 245, 170, 113, 17)
    $SPS_IP = GUICtrlCreateInput("192.168.178.", 384, 272, 121, 21)
    $SPS_IP_TEXT = GUICtrlCreateLabel("SPS_IP", 384, 248, 41, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; Programm Start

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

    While 1
    $nMsg = GUIGetMsg()

    AdlibRegister ( ip_Abfrage(),5000) ;Funktion alle 5sec aufrufen

    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    Exit

    EndSwitch
    WEnd

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

    ; Funktiom Abfrab ob IP Online ist
    Func ip_Abfrage()

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

    For $i = 1 TO 4
    $IP_X = GUICtrlRead ($Input[$i]) ; Lese IP aus GUI

    $iPing = Ping($IP_X,100) ;Abfrage ob IP im Netzwerk vorhanden , Online ist

    If $iPing = 0 Then
    GUICtrlSetData ($Radio[$i], "Offline") ; Wenn IP Online schreibe in GUI Online

    Else
    GUICtrlSetData ($Radio[$i], "Online") ; Wenn IP Offline schreibe in GUI Offline

    EndIf

    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • das liegt daran das du

    [autoit]

    AdlibRegister ( ip_Abfrage(),5000)

    [/autoit]

    zu

    [autoit]

    AdlibRegister ( "ip_Abfrage",5000)

    [/autoit]

    ändern musst. Ansonsten registrierst du eine function die den namen des return wert von ip_Abfrage() hat.

  • Hallo
    kanst du mir das mal genauer erklären ?
    ich dachte das Prgramm lauft nur inerhaltb der While Schleife und springt bei Aufruf in die einselnen Funktionen ?
    Wie mache ich es wenn die Funktionen nur ausgefürt werden soll wenn Merker run 1 ist . Bei Stop soll die funktion nicht mehr ausgefürt werden ?

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Andreas\Downloads\test1\LibnoDave\Netzwerkanwesenheit SPS.kxf
    ; Globale Variablen
    Global $Input[5]
    Global $Radio[5]

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

    Global $Run
    ; GUI Init
    $Form1 = GUICreate("Form1", 615, 438, 473, 180)
    $Start = GUICtrlCreateButton("Start", 360, 80, 145, 57)

    $Stop = GUICtrlCreateButton("Stop", 360, 144, 145, 57)
    $runGui = GUICtrlCreateInput("Stop" , 400, 220, 60, 21)
    $save = GUICtrlCreateButton("Save" , 480, 220, 60, 57)
    $Input[1] = GUICtrlCreateInput("192.168.178.35", 75, 80, 161, 21)
    $Input[2] = GUICtrlCreateInput("192.168.178.20", 75, 110, 161, 21)
    $Input[3] = GUICtrlCreateInput("192.168.178.53", 75, 140, 161, 21)
    $Input[4] = GUICtrlCreateInput("192.168.178.", 75, 170, 161, 21)
    $Radio[1] = GUICtrlCreateInput("", 245, 80, 113, 17)
    $Radio[2] = GUICtrlCreateInput("", 245, 110, 113, 17)
    $Radio[3] = GUICtrlCreateInput("", 245, 140, 113, 17)
    $Radio[4] = GUICtrlCreateInput("", 245, 170, 113, 17)
    $SPS_IP = GUICtrlCreateInput("192.168.178.", 384, 272, 121, 21)
    $SPS_IP_TEXT = GUICtrlCreateLabel("SPS_IP", 384, 248, 41, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; Programm Start
    ;IP Adressen aus Config laden
    _LoadConfigGui()

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

    AdlibRegister ( "ip_Abfrage",5000) ;Funktion alle 5sec aufrufen

    While 1
    $nMsg = GUIGetMsg()
    ;If $run = 1 Then
    ; AdlibRegister ( ip_Abfrage(),500) ;Funktion alle 5sec aufrufen

    ;EndIf


    Switch $nMsg

    Case $GUI_EVENT_CLOSE
    Exit
    Case $Start
    $run = 1
    GUICtrlSetData ($runGui, "run")
    Case $Stop
    $run = 0
    GUICtrlSetData ($runGui, "Stop")
    _Status_reset()
    Case $save
    _SaveConfigGui()


    EndSwitch
    WEnd

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

    ; Funktiom Abfrab ob IP Online ist
    Func ip_Abfrage()

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

    For $i = 1 TO 4

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

    $IP_X = GUICtrlRead ($Input[$i]) ; Lese IP aus GUI

    $iPing = Ping($IP_X,250) ;Abfrage ob IP im Netzwerk vorhanden , Online ist

    If $iPing = 0 Then
    GUICtrlSetData ($Radio[$i], "Offline") ; Wenn IP Online schreibe in GUI Online

    Else
    GUICtrlSetData ($Radio[$i], "Online" ) ; Wenn IP Offline schreibe in GUI Offline

    EndIf

    Next
    EndFunc

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

    ;IP Adressen Speicherin in int
    Func _SaveConfigGui()

    For $i = 1 to 4
    $_save = GUICtrlRead ($Input[$i])
    IniWrite(@ScriptDir & "\setup.ini", "Adresse", "ip"&$i, $_save)
    Next

    EndFunc

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

    ;IP Adressen lesen aus int
    Func _LoadConfigGui()

    For $i = 1 to 4
    $Load = IniRead(@ScriptDir & "\setup.ini", "Adresse","ip"&$i, "192.168.178.")
    GUICtrlSetData ($Input[$i],$Load)
    Next

    EndFunc
    ;Status löschen wenn Programm Stop
    Func _Status_reset()
    For $i = 1 to 4
    GUICtrlSetData ($Radio[$i], "" ) ; Wenn IP Offline schreibe in GUI Offline
    Next
    EndFunc

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

    2 Mal editiert, zuletzt von emilio20 (18. Dezember 2013 um 13:21)

  • indem fall kannst du die Adlibregister dem button zuweisen. du musst nur darauf achten das du nicht wieder wie in deinem ersten skript die function bei jedem schleifendurchgang neu registrierst.

    Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Start
    AdlibRegister("ip_Abfrage",5000)
    GUICtrlSetData ($runGui, "run")
    Case $Stop
    AdlibUnRegister("ip_Abfrage")
    GUICtrlSetData ($runGui, "Stop")
    _Status_reset()
    Case $save
    _SaveConfigGui()
    EndSwitch
    WEnd

    [/autoit]

    mit AdlibUnRegister stoppst du das automatische ausführen von ip_Abfrage() wieder und du könntest die function wieder neu Registrieren.

    Einmal editiert, zuletzt von Skerg (18. Dezember 2013 um 15:26)

  • Hallo
    danke für die Antwort.

    Das abfragen der IP ist soweit ok ich versuche jetzt mal eine TCP Verbinung über Libnodave aufzubauen.
    mir ist hierzu noch einiges unklar.
    Welche daten mussen in welchen ordner ?
    habe die Datei LibNoDave.au3 und die libnodave.dell im selben Ordner wie das Programm. Was fehlt noch ?

    Habe mal diese Script probiert. . Antwort in MSgBox -1 und in Autoit
    If $aRet[0] <= 0 Then SetError(1)
    If $aRet^ ERROR

    Spoiler anzeigen
    [autoit]


    #include "LibNoDave.au3"

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

    Global $IPAddress = "192.168.178.30"
    _DaveInit()

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

    $fds = DllStructCreate($_daveOSserialType)

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

    $hSocket = _openSocket($IPAddress,102)
    DllStructSetData($fds, "rfd", $hSocket)
    DllStructSetData($fds, "wfd", $hSocket)

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

    ;MsgBox(0,"$hSocket","= "& $hSocket)

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

    $p_di = _daveNewInterface($fds,"IF1",0,$daveProtoISOTCP,$daveSpeed187k)
    ConsoleWrite("$p_di = " & $p_di & @CR)
    _daveInitAdapter($p_di)

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

    ;_daveSetTimeout($p_di, 5000000)

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

    ;$p_dc = _daveNewConnection($p_di, 2, 2, 0)
    $p_dc = _daveNewConnection($p_di, 1, 1, 0)
    ConsoleWrite("$p_dc = " & $p_dc & @CR)

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

    If ( _daveConnectPLC($p_dc) = 0 ) then
    MsgBox(0,"CONNECTET",";-) ")

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

    Else
    MsgBox(0,"dislike",_daveConnectPLC($p_dc))

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

    EndIf

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

    _closeSocket($hSocket)
    _DaveDeInit()

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

    Exit

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