Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 62

Thema: Libnodave lernen

  1. #31
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Auf einmal gehts! Ja, sakradi !!!!

  2. #32
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    gibt es eine Anleitung im libnodave besser kennenzulernen?
    ich wurde gerne über Autoit eine Libnodave Verbindung zu meiner SPS 315 PN aufbauen. Hierzu gibt es schon ein Projekt. Allerdings verstehe ich noch nicht den Aufbau?

    Wenn jemand Lust hat könnte er mir mal diesen Code erklären?

    Code:
    #include "LibNoDave.au3"
    
    Global $IP_SPS1 = "10.1.3.105", $Socket_SPS1, $di_SPS1, $dc_SPS1, $Name_SPS1 = "SPS1"
    
    _DaveInit()
    
    _daveTCPConnect($IP_SPS1, $Socket_SPS1, $di_SPS1, $dc_SPS1, 0, 2, $Name_SPS1)
    If @error Then
        MsgBox(16, "Error " & @error, "TCP connection parameter incorrect for SPS1!")
        DllClose($DLL)
        Exit
    EndIf
    
    Local $Anzahl_Bytes = 7
    Local $StartByte = 220
    ; Schreibe 7 Bytes ausgehend vom MB 230
    
    $Buffer = DllStructCreate("CHAR buf[" & $Anzahl_Bytes & "]")
    $pBuffer = DllStructGetPtr($Buffer)
    
    _davePut8($pBuffer, 127)
    _davePut16($pBuffer, 3)
    _davePutFloat($pBuffer, 644321.55)
    
    _daveWriteBytes($dc_SPS1, $daveFlags, 0, $StartByte, $Anzahl_Bytes, $Buffer)
    
    _daveTCPDisconnect($Socket_SPS1, $di_SPS1, $dc_SPS1)
    _DaveDeInit()

  3. #33
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard

    Wo liet genau das Problem?
    Die LibNoDave-UDF wird initialisiert.
    Es wird eine Netzwerk-Verbindung zur SPS mit der IP 10.1.3.105 auf Rack 0 und Slot 2 aufgebaut.
    Es wird ein Speicherbereich von 7 Bytes vorbereitet.
    Es wird die Zahl 127 in den Speicherbereich geschrieben (MB220).
    Es wird die Integer-Zahl 3 in den Speicherbereich geschrieben (MW221).
    Es wird die Float-Zahl 644321.55 in den Speicherbereich geschrieben (MD223).
    Die sieben Bytes aus dem Speicherbereich werden auf die SPS geschrieben.
    Die Netzwerkverbindung wird abgebaut.
    Die LibNoDave-UDF wird deinitialisiert (nicht nötig, das geschieht automatisch).

  4. #34
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo danke erst mal für die antwort.

    folgendes ist mir noch unklar ? für was sind die anderen Variablen ?

    Golobale Variable , IP der SPS , ??? , ?? , ??? , ?????
    Global $IP_SPS1 = "10.1.3.105", $Socket_SPS1, $di_SPS1, $dc_SPS1, $Name_SPS1 = "SPS1"



    ISt dies die Verbinfungsart ? , IP der SPS, Slocket , di ??, , dc???? , 0 , 2, ??
    daveTCPConnect ($IP_SPS1, $Socket_SPS1, $di_SPS1, $dc_SPS1, 0, 2, $Name_SPS1)

  5. #35
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo, funkey

    wenn ich das oben genante Script auf meinen Rechner mit der IP meiner SPS 315 PN Starte wird kein Bit in den bereichen 220 - 223 gesetzt.
    Was müsste doch funktionieren oder ?

    Ich wurde mal in der einfachsten ausführung ohne Variablen den Befehl benötigen um eine Verbindung zu einer 315 PN über ISO over TCP zu erhalten ?

    Code:
    _daveTCPConnect(192.168.178, ????,????,?????, 0, 2, $Name_SPS1)
    oder
    _openS7online
    mir wäre sehr geholfen wenn du mir mal den Verbindungsaufbau mit Zeiten und den Verbindungsaabau beschreiben könntest
    Geändert von emilio20 (19.12.2013 um 00:31 Uhr)

  6. #36
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard

    Die ganzen Variablen werden von LibNoDave gebraucht. Das ist der einfachste Weg!

    Code:
    #include "LibNoDave.au3"Global $IP_SPS = "192.168.178"
    Global $Socket_SPS ; Der Socket wird von _daveTCPConnect() beschrieben
    Global $di_SPS ; Das Device Interface wird von _daveTCPConnect() beschrieben
    Global $dc_SPS ; Die Device Connection wird von _daveTCPConnect() beschrieben
    Global $Name_SPS = "SPS-Name" ; Name wird bei Logging und Debugging ausgegeben
    Global $CPU_Rack = 0
    Global $CPU_Slot = 2
    _DaveInit()
    
    _daveTCPConnect($IP_SPS, $Socket_SPS, $di_SPS, $dc_SPS, $CPU_Rack, $CPU_Slot, $Name_SPS)
    If @error Then
     MsgBox(16, "Error " & @error, "TCP connection parameter incorrect for " & $Name_SPS & "!")
     Exit
    Else
     MsgBox(64, "OK", "TCP connection established for " & $Name_SPS & "!")
    EndIf
    _daveTCPDisconnect($Socket_SPS, $di_SPS, $dc_SPS)

  7. #37
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo funkey
    super TCP verbindung geht. Es kommt der Text "OK TCP connection established for ..."

    Wenn ich jetzt das Schreiben der Variablen anhänge wird keine Variable gesetzt ? An was kann das leigen ?
    Das Lesen von Variablen funktioniert. Nur das Senden noch nicht.
    Mir ist noch unklar wie das Schreiben von Byts funktioniert ? für was ist
    $Buffer = DllStructCreate("CHAR buf[" & $hLine & "]")
    $pBuffer = DllStructGetPtr($Buffer)


    Code:
          #include "LibNoDave.au3"
        Global $IP_SPS = "192.168.178.30"
        Global $Socket_SPS ; Der Socket wird von _daveTCPConnect() beschrieben
        Global $di_SPS ; Das Device Interface wird von _daveTCPConnect() beschrieben
        Global $dc_SPS ; Die Device Connection wird von _daveTCPConnect() beschrieben
        Global $Name_SPS = "SPS-Name" ; Name wird bei Logging und Debugging ausgegeben
        Global $CPU_Rack = 0
        Global $CPU_Slot = 2
        _DaveInit()
    
        _daveTCPConnect($IP_SPS, $Socket_SPS, $di_SPS, $dc_SPS, $CPU_Rack, $CPU_Slot, $Name_SPS)
        
        $hDB = 5
        $hOffset=4
        $hLine=4
        
        _daveReadManyBytes($dc_SPS, $daveDB, $hDB, $hOffset, $hLine)
        $Ausgabe=_daveGetFloat($dc_SPS)
        
        
        
        
         ; Schreibe 
    
        $Buffer = DllStructCreate("CHAR buf[" & $hLine & "]")
        $pBuffer = DllStructGetPtr($Buffer)
    
    
         _davePutFloat($pBuffer, 25.0)
    
          _daveWriteBytes($dc_SPS, $daveDB, $hDB, $hOffset, $hLine, $Buffer)
        
        
        If @error Then
         MsgBox(16, "Error " & @error, "TCP connection parameter incorrect for " & $Name_SPS & "!")
         Exit
        Else
         MsgBox(64, "OK", "TCP connection established for " & $Ausgabe & $Name_SPS & "!")
      EndIf
      
      
      Sleep(5000)
      
        _daveTCPDisconnect($Socket_SPS, $di_SPS, $dc_SPS)
    Geändert von emilio20 (19.12.2013 um 17:19 Uhr)

  8. #38
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard

    Code:
    #include "LibNoDave.au3"
    Global $Socket_SPS ; Der Socket wird von _daveTCPConnect() beschrieben
    Global $di_SPS ; Das Device Interface wird von _daveTCPConnect() beschrieben
    Global $dc_SPS ; Die Device Connection wird von _daveTCPConnect() beschrieben
    Global $Name_SPS = "SPS-Name" ; Name wird bei Logging und Debugging ausgegeben
    Global $IP_SPS = "192.168.178.30"
    Global $CPU_Rack = 0
    Global $CPU_Slot = 2
    _DaveInit()
    _daveTCPConnect($IP_SPS, $Socket_SPS, $di_SPS, $dc_SPS, $CPU_Rack, $CPU_Slot, $Name_SPS)
    If @error Then
     MsgBox(16, "Error " & @error, "TCP connection parameter incorrect for " & $Name_SPS & "!")
     Exit
    Else
     MsgBox(64, "OK", "TCP connection established for " & $Name_SPS & "!")
    EndIf
    Global $iDB = 5 ; Nummer des Datenbausteines
    Global $iOffset = 4 ; Adress-Offset im Datenbaustein
    Global $iBytes = 4 ; Anzahl der im Speicher vorzubereitenden Bytes
    Global $Ausgabe
    Global $iRet = _daveReadManyBytes($dc_SPS, $daveDB, $iDB, $iOffset, $iBytes)
    If $iRet <> 0 Then
     MsgBox(16, "Error " & $iRet, "Cannot read " & $iBytes & " Bytes from DB " & $iDB & " at offset " & $iOffset & "!")
    Else
     $Ausgabe = _daveGetFloat($dc_SPS)
     MsgBox(64, "Success", "You got value " & $Ausgabe & " from " & $Name_SPS)
    EndIf
    ; Schreibe
    Global $Buffer = DllStructCreate("CHAR buf[" & $iBytes & "]") ; Speicher vorbereiten auf den die bytes geschrieben werden
    Global $fValue = 25.0
    _davePutFloat($Buffer, $fValue)
    $iRet = _daveWriteBytes($dc_SPS, $daveDB, $iDB, $iOffset, $iBytes, $Buffer)
    If @error Or $iRet <> 0 Then
     MsgBox(16, "Error " & $iRet, "Cannot write " & $iBytes & " Bytes to DB " & $iDB & " at offset " & $iOffset & "!")
    Else
     MsgBox(64, "Success", "You wrote " & $fValue & " to " & $Name_SPS)
    EndIf
    _daveTCPDisconnect($Socket_SPS, $di_SPS, $dc_SPS)

  9. #39
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    super vielen Dank funktioniert.
    Jetzt kann ich erst mal ein bisschen spielen damit.

    Eine Frage noch
    Wenn ich ein Programm habe da ständig Variablen sendet und empfängt muss ich dann die Verbindung jedes Mal öffnen und schließen? Oder mach ich eine schleife innerhalb der Verbindung?

  10. #40
    Registriert seit
    21.10.2010
    Beiträge
    158
    Danke
    21
    Erhielt 29 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von emilio20 Beitrag anzeigen
    Eine Frage noch
    Wenn ich ein Programm habe da ständig Variablen sendet und empfängt muss ich dann die Verbindung jedes Mal öffnen und schließen? Oder mach ich eine schleife innerhalb der Verbindung?
    Ich würde sagen das ist Geschmackssache, aber der Auf- und Abbau einer Verbindung dauert auch seine Zeit. Also wenn ich Daten z.B. alle 2 Sekunden aus der SPS hole, dann öffne ich nur am Anfang die Verbindung und schließe sie erst wenn ich das Programm beende. wenn ich aber nur alle 60 Sekunden Werte brauche, dann öffne und schließe ich die Verbindung jedes Mal.
    Geändert von funkey (21.12.2013 um 06:40 Uhr)

Ähnliche Themen

  1. AWL lernen
    Von Flux im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 08.10.2012, 15:07
  2. E-Plan lernen
    Von dirknico im Forum E-CAD
    Antworten: 20
    Letzter Beitrag: 23.01.2012, 21:44
  3. Englisch lernen
    Von Lipperlandstern im Forum Stammtisch
    Antworten: 18
    Letzter Beitrag: 07.12.2007, 15:05
  4. Pascal lernen
    Von tycomatze im Forum Hochsprachen - OPC
    Antworten: 18
    Letzter Beitrag: 05.07.2007, 09:13
  5. WIN CC lernen
    Von Outrider im Forum HMI
    Antworten: 4
    Letzter Beitrag: 27.07.2004, 16:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •