Visualisierung für Logo 0BA7

  • Visualisierung für Logo 0BA7 / Ferndiagnose-Tool

    Hallo zusammen,

    ich arbeite derzeit an einem Projekt für die Visualisierung einer Siemens Logo 0BA7 um verschiedene Werte und die digitalen sowie analogen Ein-/Ausgänge auslesen zu können.
    Dabei greife ich auf die UDF libnodave.au3. von "funkey" zurück, welche ich erweitert habe.

    Ziel ist es in der GUI eine vollausgebaute Logo 0BA7 (24 digital Eingänge, 16 digital Ausgänge, 8 analog Eingänge, 2 analog Ausgänge) schematisch darzustellen und die jeweiligen Module, je nach Ausbau, an- bzw. abzuwählen. Je nachdem was dann ausgelesen werden soll, wird dann per TCP/IP von der Logo abgefragt und in der GUI dargestellt. Schnittstellenprotokoll ist TCP/IP für die S7-200.

    Ein Screen zur der bisherigen GUI habe ich angehängt, es fehlt hier aber noch die Möglichkeit zur An-/Abwahl der Zusatz-Module

    v0.3 (05.11.2013)
    - Script auf Event-Mode umgeschrieben (bessere Performance und Reaktion der Button-Anwahl)
    bekannte Bugs:
    - es ist bisher nicht möglich zwei Anwendungen im Netzwerk gleichzeitig laufen zu lassen (die zuletzt laufende Anwendung crasht)
    - die analogen Ein-/Ausgänge lassen sich momentan nicht lesen (in den Hilfe-Dateien von libnodave gibt es auch keinen sichtbaren Lösungsansatz für die analogen Ein-/Ausgänge der S7-200)

    v0.2 (nicht veröffentlicht)
    - mehrfache Verwendung von _daveInit() entfernt
    - Abfrage zum Verbindungsaufbau über @error realisiert
    bekannte Bugs:
    - es ist bisher nicht möglich zwei Anwendungen im Netzwerk gleichzeitig laufen zu lassen (die zuletzt laufende Anwendung crasht)
    - gelegentlich Crash/Freeze wenn Programm keine Logo mit der angebenen IP findet
    - die analogen Ein-/Ausgänge lassen sich momentan nicht lesen (in den Hilfe-Dateien von libnodave gibt es auch keinen sichtbaren Lösungsansatz für die analogen Ein-/Ausgänge der S7-200)

    v0.1
    - Connect zur PLC über TCP/IP
    - Auslesen des Grundmoduls (alle digitalen und analogen Ein-/Ausgänge sowie die in der Logo festgelegten VM´s für die Übertragung über Ethernet)
    - Anzeige der Werte in der GUI
    bekannte Bugs:
    - es ist bisher nicht möglich zwei Anwendungen im Netzwerk gleichzeitig laufen zu lassen (die zuletzt laufende Anwendung crasht)
    - gelegentlich Crash/Freeze wenn Programm keine Logo mit der angebenen IP findet
    - die analogen Ein-/Ausgänge lassen sich momentan nicht lesen (in den Hilfe-Dateien von libnodave gibt es auch keinen sichtbaren Lösungsansatz für die analogen Ein-/Ausgänge der S7-200)

    Spoiler anzeigen
    [autoit]


    ; #INDEX# =======================================================================================================================
    ; Title .........: GUI für Siemens Logo 0BA7 / Ferndiagnose-Tool
    ; AutoIt Version : 3.3.8.1
    ; Language ......: Deutsch
    ; Description ...: GUI für die Siemens Logo 0BA7
    ; - ermöglicht die visuelle Ansicht auf die digitalen und analogen Eingäng/Ausgänge sowie die im Logo-Programm festgelegten Werte für die Ethernet-Schnittstelle für eine Visualisierung
    ; - Verbindung zur PLC erfolgt ausschließlich über TCP/IP über eine frei einstellbare IP-Adresse
    ; - alle Zusatz-Module lassen sich an- und abwählen, je nachdem was verbaut wurde
    ; Author(s) .....: Flitzpiepe84
    ; Source(s) .....: libnodave.au3 (funkey)
    ; - von Flitzpiepe84 erweitert

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

    ; ===============================================================================================================================

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <libnodave.au3>
    #include <debugger.au3>

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

    Opt("GUIOnEventMode", 1)

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

    #Region ### START Koda GUI section ### Form=g:\gui für 0ba7\gui.kxf
    $Form1 = GUICreate("Visualisierung / Ferndiagnose für 0BA7", 1256, 663, -1, -1)
    $Group1 = GUICtrlCreateGroup("Logo 0BA7", 10, 80, 260, 520)
    $Group2 = GUICtrlCreateGroup("DI 1-8", 20, 100, 100, 230)
    $DI1 = GUICtrlCreateCheckbox("", 76, 124, 17, 17)
    $Label3 = GUICtrlCreateLabel("I 1", 36, 124, 16, 17, $SS_CENTERIMAGE)
    $DI2 = GUICtrlCreateCheckbox("", 76, 148, 17, 17)
    $Label4 = GUICtrlCreateLabel("I 2", 36, 148, 16, 17, $SS_CENTERIMAGE)
    $DI3 = GUICtrlCreateCheckbox("", 76, 172, 17, 17)
    $Label5 = GUICtrlCreateLabel("I 3", 36, 172, 16, 17, $SS_CENTERIMAGE)
    $DI4 = GUICtrlCreateCheckbox("", 76, 196, 17, 17)
    $Label6 = GUICtrlCreateLabel("I 4", 36, 196, 16, 17, $SS_CENTERIMAGE)
    $DI5 = GUICtrlCreateCheckbox("", 76, 220, 17, 17)
    $Label7 = GUICtrlCreateLabel("I 5", 36, 220, 16, 17, $SS_CENTERIMAGE)
    $DI6 = GUICtrlCreateCheckbox("", 76, 244, 17, 17)
    $Label8 = GUICtrlCreateLabel("I 6", 36, 244, 16, 17, $SS_CENTERIMAGE)
    $DI7 = GUICtrlCreateCheckbox("", 76, 268, 17, 17)
    $Label9 = GUICtrlCreateLabel("I 7", 36, 268, 16, 17, $SS_CENTERIMAGE)
    $DI8 = GUICtrlCreateCheckbox("", 76, 292, 17, 17)
    $Label10 = GUICtrlCreateLabel("I 8", 36, 292, 16, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("DA 1-4", 18, 350, 100, 230)
    $DA1 = GUICtrlCreateCheckbox("", 74, 374, 17, 17)
    $Label27 = GUICtrlCreateLabel("Q 1", 34, 374, 21, 17, $SS_CENTERIMAGE)
    $DA2 = GUICtrlCreateCheckbox("", 74, 398, 17, 17)
    $Label28 = GUICtrlCreateLabel("Q 2", 34, 398, 21, 17, $SS_CENTERIMAGE)
    $DA3 = GUICtrlCreateCheckbox("", 74, 422, 17, 17)
    $Label29 = GUICtrlCreateLabel("Q 3", 34, 422, 21, 17, $SS_CENTERIMAGE)
    $DA4 = GUICtrlCreateCheckbox("", 74, 446, 17, 17)
    $Label30 = GUICtrlCreateLabel("Q 4", 34, 446, 21, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("VM", 130, 260, 130, 320)
    $Label47 = GUICtrlCreateLabel("VM 0", 146, 284, 31, 17, $SS_CENTERIMAGE)
    $Label48 = GUICtrlCreateLabel("VM 2", 146, 308, 31, 17, $SS_CENTERIMAGE)
    $Label49 = GUICtrlCreateLabel("VM 4", 146, 332, 31, 17, $SS_CENTERIMAGE)
    $Label50 = GUICtrlCreateLabel("VM 6", 146, 356, 31, 17, $SS_CENTERIMAGE)
    $Label51 = GUICtrlCreateLabel("VM 8", 146, 380, 31, 17, $SS_CENTERIMAGE)
    $Label52 = GUICtrlCreateLabel("VM 10", 146, 404, 37, 17, $SS_CENTERIMAGE)
    $Label53 = GUICtrlCreateLabel("VM 12", 146, 428, 37, 17, $SS_CENTERIMAGE)
    $Label54 = GUICtrlCreateLabel("VM 14", 146, 452, 37, 17, $SS_CENTERIMAGE)
    $VM0 = GUICtrlCreateInput("0000", 186, 284, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM2 = GUICtrlCreateInput("0000", 186, 308, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM4 = GUICtrlCreateInput("0000", 186, 332, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM6 = GUICtrlCreateInput("0000", 186, 356, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM8 = GUICtrlCreateInput("0000", 186, 380, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM10 = GUICtrlCreateInput("0000", 186, 404, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM12 = GUICtrlCreateInput("0000", 186, 428, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $VM14 = GUICtrlCreateInput("0000", 186, 452, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group13 = GUICtrlCreateGroup("AI 1-4", 130, 100, 130, 140)
    $Label55 = GUICtrlCreateLabel("AI 1", 146, 124, 23, 17, $SS_CENTERIMAGE)
    $Label56 = GUICtrlCreateLabel("AI 2", 146, 148, 23, 17, $SS_CENTERIMAGE)
    $Label57 = GUICtrlCreateLabel("AI 3", 146, 172, 23, 17, $SS_CENTERIMAGE)
    $Label58 = GUICtrlCreateLabel("AI 4", 146, 196, 23, 17, $SS_CENTERIMAGE)
    $Input9 = GUICtrlCreateInput("0000", 186, 124, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $Input10 = GUICtrlCreateInput("0000", 186, 148, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $Input11 = GUICtrlCreateInput("0000", 186, 172, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $Input12 = GUICtrlCreateInput("0000", 186, 196, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group8 = GUICtrlCreateGroup("Digital-Erweiterung 1", 285, 80, 220, 520)
    $Group5 = GUICtrlCreateGroup("DI 9-16", 295, 100, 100, 230)
    $DI9 = GUICtrlCreateCheckbox("", 351, 124, 17, 17)
    $Label11 = GUICtrlCreateLabel("I 9", 311, 124, 16, 17, $SS_CENTERIMAGE)
    $DI10 = GUICtrlCreateCheckbox("", 351, 148, 17, 17)
    $Label12 = GUICtrlCreateLabel("I 10", 311, 148, 22, 17, $SS_CENTERIMAGE)
    $DI11 = GUICtrlCreateCheckbox("", 351, 172, 17, 17)
    $Label13 = GUICtrlCreateLabel("I 11", 311, 172, 22, 17, $SS_CENTERIMAGE)
    $DI12 = GUICtrlCreateCheckbox("", 351, 196, 17, 17)
    $Label14 = GUICtrlCreateLabel("I 12", 311, 196, 22, 17, $SS_CENTERIMAGE)
    $DI13 = GUICtrlCreateCheckbox("", 351, 220, 17, 17)
    $Label15 = GUICtrlCreateLabel("I 13", 311, 220, 22, 17, $SS_CENTERIMAGE)
    $DI14 = GUICtrlCreateCheckbox("", 351, 244, 17, 17)
    $Label16 = GUICtrlCreateLabel("I 14", 311, 244, 22, 17, $SS_CENTERIMAGE)
    $DI15 = GUICtrlCreateCheckbox("", 351, 268, 17, 17)
    $Label17 = GUICtrlCreateLabel("I 15", 311, 268, 22, 17, $SS_CENTERIMAGE)
    $DI16 = GUICtrlCreateCheckbox("", 351, 292, 17, 17)
    $Label18 = GUICtrlCreateLabel("I 16", 311, 292, 22, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group6 = GUICtrlCreateGroup("DA 4-8", 295, 350, 100, 230)
    $DA5 = GUICtrlCreateCheckbox("", 351, 374, 17, 17)
    $Label31 = GUICtrlCreateLabel("Q 5", 311, 374, 21, 17, $SS_CENTERIMAGE)
    $DA6 = GUICtrlCreateCheckbox("", 351, 398, 17, 17)
    $Label32 = GUICtrlCreateLabel("Q 6", 311, 398, 21, 17, $SS_CENTERIMAGE)
    $DA7 = GUICtrlCreateCheckbox("", 351, 422, 17, 17)
    $Label33 = GUICtrlCreateLabel("Q 7", 311, 422, 21, 17, $SS_CENTERIMAGE)
    $DA8 = GUICtrlCreateCheckbox("", 351, 446, 17, 17)
    $Label34 = GUICtrlCreateLabel("Q 8", 311, 446, 21, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group7 = GUICtrlCreateGroup("DA 9-12", 397, 350, 100, 230)
    $DA9 = GUICtrlCreateCheckbox("", 453, 374, 17, 17)
    $Label35 = GUICtrlCreateLabel("Q 9", 413, 374, 21, 17, $SS_CENTERIMAGE)
    $DA10 = GUICtrlCreateCheckbox("", 453, 398, 17, 17)
    $Label36 = GUICtrlCreateLabel("Q 10", 413, 398, 27, 17, $SS_CENTERIMAGE)
    $DA11 = GUICtrlCreateCheckbox("", 453, 422, 17, 17)
    $Label37 = GUICtrlCreateLabel("Q 11", 413, 422, 27, 17, $SS_CENTERIMAGE)
    $DA12 = GUICtrlCreateCheckbox("", 453, 446, 17, 17)
    $Label38 = GUICtrlCreateLabel("Q 12", 413, 446, 27, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group9 = GUICtrlCreateGroup("Digital-Erweiterung 2", 520, 80, 230, 521)
    $Group10 = GUICtrlCreateGroup("DI 17-24", 528, 100, 96, 230)
    $DI17 = GUICtrlCreateCheckbox("", 584, 124, 17, 17)
    $Label19 = GUICtrlCreateLabel("I 17", 544, 124, 22, 17, $SS_CENTERIMAGE)
    $DI18 = GUICtrlCreateCheckbox("", 584, 148, 17, 17)
    $Label20 = GUICtrlCreateLabel("I 18", 544, 148, 22, 17, $SS_CENTERIMAGE)
    $DI19 = GUICtrlCreateCheckbox("", 584, 172, 17, 17)
    $Label21 = GUICtrlCreateLabel("I 19", 544, 172, 22, 17, $SS_CENTERIMAGE)
    $DI20 = GUICtrlCreateCheckbox("", 584, 196, 17, 17)
    $Label22 = GUICtrlCreateLabel("I 20", 544, 196, 22, 17, $SS_CENTERIMAGE)
    $DI21 = GUICtrlCreateCheckbox("", 584, 220, 17, 17)
    $Label23 = GUICtrlCreateLabel("I 21", 544, 220, 22, 17, $SS_CENTERIMAGE)
    $DI22 = GUICtrlCreateCheckbox("", 584, 244, 17, 17)
    $Label24 = GUICtrlCreateLabel("I 22", 544, 244, 22, 17, $SS_CENTERIMAGE)
    $DI23 = GUICtrlCreateCheckbox("", 584, 268, 17, 17)
    $Label25 = GUICtrlCreateLabel("I 23", 544, 268, 22, 17, $SS_CENTERIMAGE)
    $DI24 = GUICtrlCreateCheckbox("", 584, 292, 17, 17)
    $Label26 = GUICtrlCreateLabel("I 24", 544, 292, 22, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group11 = GUICtrlCreateGroup("DA 13-16", 528, 350, 100, 231)
    $DA13 = GUICtrlCreateCheckbox("", 584, 374, 17, 17)
    $Label39 = GUICtrlCreateLabel("Q 13", 544, 374, 27, 17, $SS_CENTERIMAGE)
    $DA14 = GUICtrlCreateCheckbox("", 584, 398, 17, 17)
    $Label40 = GUICtrlCreateLabel("Q 14", 544, 398, 27, 17, $SS_CENTERIMAGE)
    $DA15 = GUICtrlCreateCheckbox("", 584, 422, 17, 17)
    $Label41 = GUICtrlCreateLabel("Q 15", 544, 422, 27, 17, $SS_CENTERIMAGE)
    $DA16 = GUICtrlCreateCheckbox("", 584, 446, 17, 17)
    $Label42 = GUICtrlCreateLabel("Q 16", 544, 446, 27, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group12 = GUICtrlCreateGroup("DA 17-24", 640, 350, 100, 233)
    $Checkbox41 = GUICtrlCreateCheckbox("", 696, 374, 17, 17)
    $Label43 = GUICtrlCreateLabel("NV", 656, 374, 19, 17, $SS_CENTERIMAGE)
    $Checkbox42 = GUICtrlCreateCheckbox("", 696, 398, 17, 17)
    $Label44 = GUICtrlCreateLabel("NV", 656, 398, 19, 17, $SS_CENTERIMAGE)
    $Checkbox43 = GUICtrlCreateCheckbox("", 696, 422, 17, 17)
    $Label45 = GUICtrlCreateLabel("NV", 656, 422, 19, 17, $SS_CENTERIMAGE)
    $Checkbox44 = GUICtrlCreateCheckbox("", 696, 446, 17, 17)
    $Label46 = GUICtrlCreateLabel("NV", 656, 446, 19, 17, $SS_CENTERIMAGE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group14 = GUICtrlCreateGroup("Analog-Erweiterung 1", 765, 80, 150, 521)
    $Group15 = GUICtrlCreateGroup("AI 5-6", 775, 100, 130, 230)
    $Label59 = GUICtrlCreateLabel("AI 5", 791, 124, 23, 17, $SS_CENTERIMAGE)
    $Label60 = GUICtrlCreateLabel("AI 6", 791, 148, 23, 17, $SS_CENTERIMAGE)
    $AI5 = GUICtrlCreateInput("0000", 831, 124, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $AI6 = GUICtrlCreateInput("0000", 831, 148, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group16 = GUICtrlCreateGroup("Analog-Erweiterung 2", 930, 80, 150, 520)
    $Group17 = GUICtrlCreateGroup("AI 7-8", 940, 100, 130, 230)
    $Label61 = GUICtrlCreateLabel("AI 7", 956, 124, 23, 17, $SS_CENTERIMAGE)
    $Label62 = GUICtrlCreateLabel("AI 8", 956, 148, 23, 17, $SS_CENTERIMAGE)
    $AI7 = GUICtrlCreateInput("0000", 996, 124, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $AI8 = GUICtrlCreateInput("0000", 996, 148, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group18 = GUICtrlCreateGroup("Analog-Erweiterung 3", 1095, 80, 150, 521)
    $Group19 = GUICtrlCreateGroup("AA 1-2", 1105, 350, 130, 230)
    $Label63 = GUICtrlCreateLabel("AQ 1", 1121, 374, 28, 17, $SS_CENTERIMAGE)
    $Label64 = GUICtrlCreateLabel("AQ 2", 1121, 398, 28, 17, $SS_CENTERIMAGE)
    $AQ1 = GUICtrlCreateInput("0000", 1161, 374, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    $AQ2 = GUICtrlCreateInput("0000", 1161, 398, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_RIGHT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label1 = GUICtrlCreateLabel("IP-Adresse:", 16, 10, 58, 17, $SS_CENTERIMAGE)
    $Label2 = GUICtrlCreateLabel("Port:", 46, 35, 26, 17, $SS_CENTERIMAGE)
    $InputIP = GUICtrlCreateInput("192.168.2.177", 78, 10, 95, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    $InputPort = GUICtrlCreateInput("102", 78, 35, 35, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    $Connect = GUICtrlCreateButton("Connect", 232, 16, 113, 25)
    $Disconnect = GUICtrlCreateButton("Disonnect", 360, 16, 113, 25)
    $StatusBar1 = _GUICtrlStatusBar_Create($Form1)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;Verwendete Variablen
    Global $isStarted = 0
    Global $refresh =750
    Global $Connection = 0
    $sIPAddress = GUICtrlRead ($InputIP)
    $iPort = GUICtrlRead ($InputPort)

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

    Global $VM, $newValue[15], $InputBit[24], $OutputBit[16], $InputValue[17], $OutputValue[4]
    Global $iSocket= $iPort,$hInterface,$hConnection, $VM, $newValue, $IBit, $OBit, $IByte, $OByte
    Global $ping= Ping($sIPAddress,500)

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

    Local $VM1, $VM2, $VM3, $VM4, $VM5, $VM6, $VM8, $VM10, $VM12, $VM14
    Local $I1, $I2, $I3, $I4, $I5, $I6, $I7, $I8, $I9, $I10, $I11, $I12, $I13, $I14, $I15, $I16, $I17, $I18, $I19, $I20, $I21, $I22, $I23, $I24
    Local $Q1, $Q2, $Q3, $Q4, $Q5, $Q6, $Q7, $Q8, $Q9, $Q10, $Q11, $Q12, $Q13, $Q14, $Q15, $Q16
    Local $AI1, $AI2, $AI3, $AI4, $AI5, $AI6, $AI7, $AI8
    Local $AQ1, $AQ2

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

    While 1
    _daveInit()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Events")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_Events")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_Events")

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

    GUICtrlSetOnEvent($Connect, "_Connect")
    GUICtrlSetOnEvent($Disconnect, "_Disconnect")

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

    If $isStarted = 1 and $Connection = 1 Then
    _ReadPLC()
    EndIf

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

    WEnd

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

    Func _Events() ; hier sind die Events der GUI:
    ; Fenster Schliessen, Minimieren, Maximieren,

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

    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE

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

    Case @GUI_CtrlId = $GUI_EVENT_RESTORE

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

    EndSelect
    EndFunc

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

    Func _Connect()
    GUICtrlSetState($Connect, $GUI_DISABLE)
    GUICtrlSetState($Disconnect, $GUI_ENABLE)
    GUICtrlSetState ($InputIP, $GUI_DISABLE)
    GUICtrlSetState ($InputPort, $GUI_DISABLE)
    _daveTCPConnectLogo0BA7($sIPAddress, $iSocket, $hInterface, $hConnection,0, 0, 1,"Logo")
    If @error = 0 Then
    GUICtrlSetState($Connect, $GUI_DISABLE)
    GUICtrlSetState($Disconnect, $GUI_ENABLE)
    GUICtrlSetState ($InputIP, $GUI_DISABLE)
    GUICtrlSetState ($InputPort, $GUI_DISABLE)
    _GUICtrlStatusBar_SetText ($StatusBar1,"PLC Connected")
    $isStarted = 1
    $Connection = 1

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

    ElseIf @error > 0 then
    GUICtrlSetState($Disconnect, $GUI_DISABLE)
    GUICtrlSetState($Connect, $GUI_ENABLE)
    GUICtrlSetState ($InputIP, $GUI_ENABLE)
    GUICtrlSetState ($InputPort, $GUI_ENABLE)
    _GUICtrlStatusBar_SetText ($StatusBar1,"Fehler beim Verbindungsaufbau")
    $isStarted = 0
    $Connection = 0
    EndIf
    EndFunc

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

    Func _Disconnect()
    GUICtrlSetState($Disconnect, $GUI_DISABLE)
    GUICtrlSetState($Connect, $GUI_ENABLE)
    GUICtrlSetState ($InputIP, $GUI_ENABLE)
    GUICtrlSetState ($InputPort, $GUI_ENABLE)
    _daveTCPDisconnect($iSocket,$hInterface,$hConnection)
    If @error = 0 Then
    GUICtrlSetState($Disconnect, $GUI_DISABLE)
    GUICtrlSetState($Connect, $GUI_ENABLE)
    GUICtrlSetState ($InputIP, $GUI_ENABLE)
    GUICtrlSetState ($InputPort, $GUI_ENABLE)
    _GUICtrlStatusBar_SetText ($StatusBar1,"PLC Disconnected")
    $Connection = 0
    $isStarted = 0
    EndIf
    EndFunc

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

    Func _ReadPLC()
    ; Lesen der Siemens-Logo Werte

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

    If $isStarted = 1 and $Connection = 1 Then

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

    ; Lesen der VM aus DB 1
    For $VM = 0 to 14 step 2
    _daveReadBytes($hConnection,$daveDB,1,$VM,2)
    $newValue[$VM] = _daveGetU16($hConnection)
    Next

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

    ; Lesen der Eingangs-Bits 1 - 8
    For $IBit = 0 To 7 Step 1
    $InputBit[$IBit] = _daveReadBit($hConnection, $daveInputs, 0,0,$IBit)
    Next

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

    ; Lesen der Ausgangs-Bits 1 - 4
    For $OBit = 0 To 3 Step 1
    $OutputBit[$OBit] = _daveReadBit($hConnection, $daveOutputs, 0,0,$OBit)
    Next

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

    ;~ ; Lesen der Analog-Eingänge 1-4
    ;~ For $IByte = 0 to 6 Step 2
    ;~ _daveReadBytes($hConnection,$daveAnaIn,0,$IByte,2)
    ;~ $InputValue[$IByte] = _daveGetU16($hConnection)
    ;~ Next

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

    ; Schreiben der VM-Werte in die GUI
    GUICtrlSetData($VM0, $newValue[0])
    GUICtrlSetData($VM2, $newValue[2])
    GUICtrlSetData($VM4, $newValue[4])
    GUICtrlSetData($VM6, $newValue[6])
    GUICtrlSetData($VM8, $newValue[8])
    GUICtrlSetData($VM10, $newValue[10])
    GUICtrlSetData($VM12, $newValue[12])
    GUICtrlSetData($VM14, $newValue[14])

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

    ; Schreiben der Eingägnge in die GUI
    If $InputBit[0] = 1 then
    GUICtrlSetState($DI1, $GUI_CHECKED)
    ElseIf $InputBit[0] = 0 then
    GUICtrlSetState($DI1, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[1] = 1 then
    GUICtrlSetState($DI2, $GUI_CHECKED)
    ElseIf $InputBit[1] = 0 then
    GUICtrlSetState($DI2, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[2] = 1 then
    GUICtrlSetState($DI3, $GUI_CHECKED)
    ElseIf $InputBit[2] = 0 then
    GUICtrlSetState($DI3, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[3] = 1 then
    GUICtrlSetState($DI4, $GUI_CHECKED)
    ElseIf $InputBit[3] = 0 then
    GUICtrlSetState($DI4, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[4] = 1 then
    GUICtrlSetState($DI5, $GUI_CHECKED)
    ElseIf $InputBit[4] = 0 then
    GUICtrlSetState($DI5, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[5] = 1 then
    GUICtrlSetState($DI6, $GUI_CHECKED)
    ElseIf $InputBit[5] = 0 then
    GUICtrlSetState($DI6, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[6] = 1 then
    GUICtrlSetState($DI7, $GUI_CHECKED)
    ElseIf $InputBit[6] = 0 then
    GUICtrlSetState($DI7, $GUI_UNCHECKED)
    EndIf

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

    If $InputBit[7] = 1 then
    GUICtrlSetState($DI8, $GUI_CHECKED)
    ElseIf $InputBit[7] = 0 then
    GUICtrlSetState($DI8, $GUI_UNCHECKED)
    EndIf

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

    ; Schreiben der Ausgänge in die GUI
    If $OutputBit[0] = 1 then
    GUICtrlSetState($DA1, $GUI_CHECKED)
    ElseIf $OutputBit[0] = 0 then
    GUICtrlSetState($DA1, $GUI_UNCHECKED)
    EndIf

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

    If $OutputBit[1] = 1 then
    GUICtrlSetState($DA2, $GUI_CHECKED)
    ElseIf $OutputBit[1] = 0 then
    GUICtrlSetState($DA2, $GUI_UNCHECKED)
    EndIf

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

    If $OutputBit[2] = 1 then
    GUICtrlSetState($DA3, $GUI_CHECKED)
    ElseIf $OutputBit[2] = 0 then
    GUICtrlSetState($DA3, $GUI_UNCHECKED)
    EndIf

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

    If $OutputBit[3] = 1 then
    GUICtrlSetState($DA4, $GUI_CHECKED)
    ElseIf $OutputBit[3] = 0 then
    GUICtrlSetState($DA4, $GUI_UNCHECKED)
    EndIf
    EndIf
    EndFunc

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


    Über Hinweise, Anregungen, Bugs und Lösungsvorschläge würde ich mich freuen.


    MfG

    Christian

  • Wie kann ich mich mit mehreren Programmen gleichzeitig zu einer
    Siemenssteuerung per TCP/IP verbinden, ohne das mir das Programm was
    zuletzt lief crasht?
    Jedesmal wenn ich mein Programm, welches ich Stück
    für Stück erweitere, starte und mit der PLC verbinde, dann crasht auf
    dem anderen PC das bisher laufende Programm.

    Und was muss ich anders machen, damit mir bei einen Verbindungsfehler (zb. fehlende Netzwerk-Verbindung, falsch eingestellte IP, ausgefallene PLC, ...) das Programm in der Statusbar "Verbindugsfehler anzeigt, der Connect-Button wieder auf Status enable und der Button für Disconnect auf disable gestellt wird.

  • So ein Skript für die Logo hab ich auch mal gemacht, allerdings nur für serielle Kommunikation über RS232 mit älteren Logo-Modellen. Weiß nur nicht mehr wo ich das habe.
    Also ich hatte eigentlich nie Probleme, mich mehrmals mit einer SPS zu verbinden, da stürzt bei mir nchts ab. Aber ich habe da ein paar Kleinigkeiten in deinem Skript gesehen, die vielleicht ncht ganz optimal sind.

    _DaveInit() solltest du nur einmal aufrufen, vor der Hauptschleife.
    _daveReadBytes() solltest du nicht nach _daveTCPDisconnect() verwenden, um zu überprüfen, ob die Verbindung abgebaut wurde. Das klappt auch so!
    _DaveDeinit() wird automatisch beim beenden des Skriptes aufgerufen, das brauchst du nicht expizit zu machen.
    Ich würde das ganze Skript auf den Event-Modus umbauen, da es damit übersichtlicher wird.
    Vielleicht kann die Logo nur eine Verbindung über TCP aufbauen, und da du nicht abfragst ob die Verbindung überhaupt aufgebaut werden konnte, wird das Skript wahrscheinlich crashen.


    Genauer habe ich nicht geschaut und testen kann ich auch nicht.

    mfg
    funkey

  • Die Logo ist in der Lage mehrere TCP/IP-Verbindungen zu akzeptieren. Habe extra in den Einstellungen der Ethernet-Schnittstelle im Logosoft-Comfort nachgeschaut bzw. dies muss sowieso eingestellt werden, wenn ich ein Panel (Display zur Visualierung) anbinden will.
    Wenn ich aber parallel zu meinem Programm, die Online-Ansicht in der Logosoft-Comfort einschalte, dann crasht mein Programm wiederum nicht. Und in dem Moment sind 2 Verbindungen an der Logo aktiv. Funktioniert in der Art sogar von ein und dem selben PC. Daher war mein Gedanke, das ich im Script etwas vergessen oder falsch gemacht habe.

    die Tipps und Anregungen werde ich mit umsetzen, vorallem das _DaveInit() und die Sache mit dem _daveTCPDisconnect() werde ich bereinigen
    Ich dachte das mit dem _daveDeInit() muss gemacht werden, damit die .dll wieder freigegeben wird?
    Und zu dem Event-Modus muss ich mich erstmal schlau machen und reinlesen, das ist schließlich mein erstes Script :D


    Wie kann man eigentlich von der S7-200 die Analog Ein-/Ausgänge auslesen? In der Readme von libnodave ist das leider nicht dokumentiert. Die entsprechende Memory Area ist aber aufgeführt mit "daveAnaIn" für die S7-200 :?:

  • Hallo

    Möglicherweise kann mir hier jemand weiterhelfen.[Blockierte Grafik: http://www.automation.siemens.com/forum/skins/emoticons/emotion-70.bmp]

    Der letzte Beitrag ist schon länger her.Aber dennoch finde ich es hier passend.

    Ich habe eine 0ba7 die ich bereits erfolgreich bediehnen kann mit der Software Logo Monitor Multi
    mit Libnodave (wird nur benötigt zum Schalten)
    Auch das Schalten der Ausgänge geht damit Tip Top !
    Das hat mir so gut gefallen das ich eine 2 Logo damit steuern möchte.

    Bekomme
    die 2´te Logo zwar angezeigt im Programm (Logo Monitor Multi) über ein weiteres Grünes Licht
    aber das Schalten geht abselut nicht,möchte fast sagen die Soft hängt sich
    auf beim Schaltversuch.

    So viel falsch kann ich ja nicht machen da es bereits ja geht an der ersten Logo.

    Kenn jemand das Problem damit oder weis einen Tip wie man das beheben kann.

    Möglicherweise hangt es ja auch am Libnodave

    P.S Meine Software ist regestriert und laut Anleitung sollte es auch möglich sein mehrer Oba7 Geräte damit zu steuern.

    Hersteller der Soft meldet sich bisher nicht (seit Dezember 2013)[Blockierte Grafik: http://www.automation.siemens.com/forum/skins/emoticons/emotion-79.gif]habe nicht einmal eine Bestätigung bekommen das er meine Mails geöffnet hat.

    Nun ja ich hoffe mal auf Hilfestellung hier :P