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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: DB via LIBNODAVE auslesen und in EXCEL darstellen / Neu

  1. #1
    Registriert seit
    21.10.2013
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    Ich habe eine CPU315-2 PN/DP und möchte via LIBNODAVE Werte aus einem Datenbaustein auslesen und in Excel auswerten. Der Auslesevorgang sollte über eine Schaltfläche gestartet werden und nur einmal durchlaufen.
    Es wäre kein Problem die Werte hintereinander als INT in einen DB zusammen zu fassen.

    Ich habe mir schon das Beispiel ( [Libnodave] Beispiel TCP Verbindung zu S7-Welt ) angeschaut und denke ansatzweise zu verstehen wie das mit dem daveReadBytes Befehl funktioniert.

    res2 = daveReadBytes(dc, daveDB, 30, 1020, 12, 0) //Hier steht ja die 30 für den DB, die 1020 für das Startbyte und die 12 für die Bytes die ausgelesen werden nur wofür ist die 0?

    If res2 <> 0 Then Exit Do //warum muss res2 =0 sein?

    Um die Werte in die Zellen zu schreiben benutzt man ja
    z = Range("RWDF").Row
    s = Range("RWDF").Column
    Cells(z, s) = daveGetS32(dc) / 100 //die 32 steht ja für 32 Bit nur wofür die /100?

    Was ich nur noch nicht verstehe ist wie ich den Header aufbauen muss um eine Verbindung zur SPS aufbauen zu können. Die Verbindung soll via Ethernet aufgebaut werden die IP wäre für den ersten Test egal da ich eine Test CPU am Schreibtisch habe die beliebig konfiguriert werden kann. Wir haben in der Firma auch eine kleine Box die via Ethernet angeschlossen wird und dann ein WLAN-Netzwerk aufbaut über das man dann mit der SPS kommunizieren kann. Ist es möglich, dass über dies WLAN-Netzwerk Daten ausgelesen werden?

    Ich muss dazu sagen, dass ich mit VBA und LIBNODAVE noch keine Erfahrungen habe.

    EDIT:

    Ich habe ein Testprogram auf die CPU geladen... ich würde jetzt gerne aus dem DB1 die Wörter 0-6 auslesen
    Zitieren Zitieren DB via LIBNODAVE auslesen und in EXCEL darstellen / Neu  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von mlohmann Beitrag anzeigen
    res2 = daveReadBytes(dc, daveDB, 30, 1020, 12, 0) //Hier steht ja die 30 für den DB, die 1020 für das Startbyte und die 12 für die Bytes die ausgelesen werden nur wofür ist die 0?

    If res2 <> 0 Then Exit Do //warum muss res2 =0 sein?
    Als letzten Parameter von daveReadBytes(...) kann man einen Pointer auf einen eigenen Pufferbereich angegeben, wo daveReadBytes(...) die gelesenen Bytes ablegt. Bei 0 wird ein interner Puffer von Libnodave benutzt.
    Wenn der Result von daveReadBytes(...) <> 0 ist, dann ist ein Fehler aufgetreten, der Inhalt von dem Puffer darf nicht ausgewertet werden.

    In dem Libnodave-Package ist ein Ordner doc
    darin sind die Funktionen ausführlich erklärt
    Zitat Zitat von daveReadBytes.html
    daveReadBytes

    Reads a sequence of bytes from PLC memory.

    int daveReadBytes(daveConnection * dc, int area, int DB, int start, int len, void * buffer);

    Parameters:
    • dc: A pointer to a daveConnection structure representing an established connection.
    • area: A constant that specifies a memory area in the PLC.
    • DB: The number of a data block. Only meaningful if area is daveDB. Use 0 oterwise.
    • start: The address of the first byte in the block.
    • len: The number of bytes to read.
    • buffer: A pointer to some memory space where you want the result to be copied too.


    Result:

    The function returns 0 on success. Nonzero return codes may be passed to daveStrerror() to get a textual explanation of what happened. Generally, positive error codes represent errors reported by the PLC, while negative ones represent errors detected by LIBNODAVE, e.g. no response from the PLC.

    Hints:

    buffer:

    You may call daveReadBytes() without a buffer specifying NULL (C) or nil (Pascal). There is, however, an internal buffer that is part of the daveConnection structure. This internal buffer allways holds the result from the last read operation.

    Um die Werte in die Zellen zu schreiben benutzt man ja
    z = Range("RWDF").Row
    s = Range("RWDF").Column
    Cells(z, s) = daveGetS32(dc) / 100 //die 32 steht ja für 32 Bit nur wofür die /100?
    "RWDF" ist der Name einer Zelle in dem Excel-Blatt ("D25")
    Das habe ich gemacht, um den Anfangsbereich der Datenausgabe in der Tabelle verschiebbar zu machen, ohne alle Zell-Adressen anpassen zu müssen.
    Weil "RWDF" = "D25" ist, könnte man statt
    z = Range("RWDF").Row
    s = Range("RWDF").Column

    auch fest schreiben
    z = 25
    s = 4


    Mit daveGetS32(dc) wird ein 32Bit-Wert (DINT) aus dem Puffer von daveReadBytes(...) entnommen
    und mit "/ 100" werden 2 Nachkommastellen "hervorgezaubert".
    Der Wert ist ein DINT-Zähler, der in 0.01m³-Einheiten zählt. Wenn der Zählerstand 12345 ist, dann wird durch das "/ 100" in der Excel-Zelle "123.45 m³" angezeigt


    Ich habe eine CPU315-2 PN/DP [...]
    Was ich nur noch nicht verstehe ist wie ich den Header aufbauen muss um eine Verbindung zur SPS aufbauen zu können. Die Verbindung soll via Ethernet aufgebaut werden [...]
    Ist es möglich, dass über dies WLAN-Netzwerk Daten ausgelesen werden?
    Ja klar, WLAN ist kein Problem.

    Der Verbindungsaufbau muß aussehen wie bei der Function connectBEA(...)
    Da mußt Du nur bei peer$ = "192.168.100.13" die IP-Adresse Deiner 315-2PN/DP eintragen.


    Ich habe ein Testprogram auf die CPU geladen... ich würde jetzt gerne aus dem DB1 die Wörter 0-6 auslesen
    Code:
    ...
    res2 = daveReadBytes(dc, daveDB, 1, 0, 14, 0)
    ...
    z = ...
    s = ...
    Cells(z, s) = daveGetU16(dc)      ' DB1.DBW0
    Cells(z + 1, s) = daveGetU16(dc)  ' DB1.DBW2
    ...
    Cells(z + 6, s) = daveGetU16(dc)  ' DB1.DBW12
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    mlohmann ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke schon mal dafür. Ich habe das nun in dem Beispielcode für mein Program angepasst bekomme aber die Fehlermeldung "Fehler beim Öffnen TCP-Socket!" woran kann das liegen?

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Libnodave kann zu dem in der Meldung angegebenen Port an der angegebenen IP-Adresse keine Verbindung aufbauen.
    ( Fehler bei der Zeile: ph = openSocket(102, peer$) )
    - falsche IP-Adresse?
    - falscher Port? muß normalerweise Port 102 sein
    - CPU nicht erreichbar? Funktioniert Ping zu der CPU?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    mlohmann ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    Private Function connectBEA(ByRef ph As Long, ByRef di As Long, ByRef dc As Long) As Long
    Dim res, resmb, peer$, MpiPpi, Rack, slot
    ph = 0: di = 0: dc = 0
    connectBEA = -1
    res = -1
    ' Verbindungsparameter TCP: peer$, Rack, Slot (MpiPpi wird nicht genutzt)
    peer$ = "192.168.1.239"
    MpiPpi = 2: Rack = 0: slot = 2
    ' port-Handle erzeugen
    ph = openSocket(102, peer$) ' for ISO over TCP
    If (ph > 0) Then
        di = daveNewInterface(ph, ph, "IF1", 0, daveProtoISOTCP, daveSpeed187k)
    '    Call daveSetTimeout(di, 500000)
        res = daveInitAdapter(di)
        If res = 0 Then
            dc = daveNewConnection(di, MpiPpi, Rack, slot)
            res = daveConnectPLC(dc)
            If res = 0 Then ' Verbindung zu PLC erfolgreich aufgebaut
                connectBEA = 0
            Else ' Fehler daveNewConnection() + daveConnectPLC()
                resmb = MsgBox("Keine Verbindung zu BEA-PLC!" & Chr(13) _
                             & "(" & peer$ & ":102, Rack 0, Slot " & slot & ")", vbExclamation, "Fehler bei Verbindungsaufbau")
            End If
        Else ' Fehler daveNewInterface() + daveInitAdapter()
            resmb = MsgBox("Fehler beim Initialisieren TCP-Interface!", vbExclamation, "Fehler bei Verbindungsaufbau")
        End If
    Else ' Fehler openSocket()
        resmb = MsgBox("Fehler beim Öffnen TCP-Socket!" & Chr(13) _
                     & "(" & peer$ & ":102)", vbExclamation, "Fehler bei Verbindungsaufbau")
    End If
    End Function
    #

    so stehts drin.

    Erreichbar ist die CPU. Ich hab die mit der testiso_tcp.exe auch schon gesteuert.

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Stammt denn die Fehlermeldung von connectBEA(..)?
    Steht in der Fehlermeldung tatsächlich "Fehler beim Öffnen TCP-Socket! (192.168.1.239:102)"?

    Die Schaltfläche [Werte aus PLC lesen] auf dem Blatt "Wasseraufbereitung" ruft die Function readFromWA() welche dann connectWA() aufruft. Hast Du den Aufruf zu connectBEA() geändert? Oder Du mußt in connectWA() den Verbindungsaufbau so ändern, daß er wie connectBEA() aussieht. connectBEA() ist für eine Verbindung zu einer CPU31x-PN auf Port 102 oder über CP343-1. Die connectWA() ist für eine Verbindung über einen IBH NetLink auf Port 1099.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    mlohmann ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe den code abgeändert und konnte nachdem ich einmal mit dem PC über den Simatic Manager onlinge gegangen bin auch eine Verbindung aufbauen und die Daten auslesen.
    Nur wenn ich das heute wieder versuch bekommen ich keine Verbindung zur CPU. Ich denke mal wenn ich erst wieder über den Simatic Manager gehe wirds funktionieren...
    als Fehlermeldung kommt in der Ecxel Tabelle fehler.JPG
    Und wenn ich die CPU anping bzw. bei der testISO_TCP.exe kommt die meldung fehler2.JPG

    Wie kann ich denn eine verbindung aufbauen ohne den Manager?

  8. #8
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    Sieht so aus als würde die Verbindung geblockt, z.Bsp im Switch bzw. einer Firewall.
    Die Libnodave Geschichte läuft unabhängig vom Manager. Schau das du einen ordentlichen Ping zur Steuerung hinbekommst, vorher brauchste garnichts anderes probieren.
    Nüchtern betrachtet war es besoffen besser.

  9. #9
    mlohmann ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.10.2013
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So Problem gelöst...
    Ganz einfach und ganz logisch...

    Der Simatic Manager stellt automatisch die Ip des PG passend zu der vom AG um. Da ich von unserem Firmennetzwerk die 192.168.102.XXX Ip bekommen habe und die SPS die IP 192.168.1.239 hat konnte es ja nicht klappen.
    Nachdem ich die SPS IP umgestellt habe funktionierte die Verbindung.

    Jetzt habe ich nur das Problem das ich beim weiten Versuch auf einmal eine 192.168.60.XXX IP zugewiesen bekommen habe und wieder nichts geklappt hat... Kann ich auch ohne Adminrechte mit ner Batch Datei die IP Adresse umstellen oder mit in dem VBAcode in der Exceltabelle? Die IP Adresse muss trotzdem automatisch beziehbar sein damit ich zurück am Schreibtisch auch in Firmennetz komme.

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die PG/PC-Schnittstellenparametrierung "TCP/IP(Auto)" darf nur benutzt werden, wenn das PG direkt mit einem Patchkabel mit der SPS verbunden ist oder höchstens ein einfacher Switch dazwischen ist (das "Auto" hat Siemens extra "erfunden" für diejenigen SPS-Programmierer welche Null Ahnung von Netzwerktechnik haben). Sobald Router in der Netzwerk-Infrastruktur vorhanden sind, funktioniert das Routing vom PG zur Ziel-SPS nicht mehr, wenn die PG/PC-Schnittstelle sich selbst eine IP aus dem Ziel-Subnetz gibt.

    Es nützt genausowenig, der Ziel-SPS eine IP zu geben, welche zum Subnetz des PG passt. Auch dann funktioniert das Routing nicht, weil Routing ja scheinbar nicht nötig ist, wenn sich PG und SPS im selben Subnetz befinden.

    Was kannst Du nun tun, wenn Du keine Administratorrechte auf Deinem PG hast?
    - zunächst die PG/PC-Schnittstelle umstellen auf "TCP/IP <netzwerkkarte>" - auf KEINEN Fall "TCP/IP(Auto)"!!!
    - die blöde Auto-IP-Adresse wieder loswerden: das Windows bzw. den Computer neu starten
    - der SPS eine IP geben, welche zur Netzwerkinfrastruktur passt: dazu befrage Euren Netzwerkadministrator

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. DB via LIBNODAVE auslesen und in EXCEL darstellen
    Von mlohmann im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 07.04.2014, 09:39
  2. Aus globale DB's Strings auslesen und darstellen
    Von S-Victor im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 09.03.2013, 10:30
  3. Antworten: 2
    Letzter Beitrag: 10.07.2011, 21:04
  4. libnodave und Excel
    Von tomatensaft im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 03.01.2007, 01:56
  5. S7 Libnodave und Excel
    Von uz71 im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 15.11.2006, 13:51

Lesezeichen

Berechtigungen

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