libnodave mehrere Anlagen

dirknico

Level-2
Beiträge
233
Reaktionspunkte
14
Hallo,

wir sind gerade dabei mit libnodave via Excel Daten aus unseren Maschinen (derzeit 6) auszulesen.
Das ganze funktioniert prinzipiell erstmal.
Hierfür haben wir uns an dem Tankbeispiel https://www.sps-forum.de/threads/libnodave-beispiel-tcp-verbindung-zu-s7-welt.62825/ orientiert.

Jetzt möchten wir die Daten aus den 6 Maschinen zyklisch, wenn möglich im Sekundentakt abrufen.
Hierzu haben wir im VBA einen Timer angelegt, die Daten der Maschinen werden in einer Schleife nacheinander abgerufen.
Meine Fragen:

- ist das ganze so sinnvoll, oder kann ich die Verbindungen zu den Maschinen und das abrufen parallel machen?
- muss ich nach jedem Abruf die Verbindung schließen (cleanup) oder kann die bestehen bleiben?

Code:
Sub readFromAnlage_neu()

#If Win64 Then
 Dim ph As LongPtr, di As LongPtr, dc As LongPtr
#Else
 Dim ph As Long, di As Long, dc As Long
#End If

Dim i, Ziel, Tabelle, IP, res, res2, Pfad, Zeile, Spalte, System, Zieldatei As Worksheet

    Set System = ThisWorkbook.Worksheets("System")
    Pfad = ThisWorkbook.Path & "\Daten\" & Format(Now, "yyyy")
      
    For i = 1 To System.Range("B1")

        IP = System.Range("B" & i + 2) 'IP-Adresse aus Arbeitsblatt
    
        res = verbinden_neu(ph, di, dc, IP, i + 2)
        
        If res = 0 Then
          
            res2 = daveReadBytes(dc, daveDB, System.Range("E" & i + 2), System.Range("F" & i + 2), System.Range("G" & i + 2), 0)
            
            If res2 = 0 Then
                Select Case i
                
                Case 1
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage1")
                Case 2
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage2")
                Case 3
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage3")
                Case 4
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage4")
                Case 5
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage5")
                Case 6
                    Set Tabelle = ThisWorkbook.Worksheets("Anlage6")
                End Select
                
                'Zeile
                Zeile = (Format(Timer(), "0") * 4) - 3
                System.Range("B17") = Zeile
                
                'Spalte
                Spalte = Format(Now, "dd") * 1
                  
                Tabelle.Cells(Zeile, Spalte) = daveGetS16(dc)  'Status
                Tabelle.Cells(Zeile + 1, Spalte) = daveGetS16(dc)  'Betriebsart
                Tabelle.Cells(Zeile + 2, Spalte) = daveGetS16(dc)  'Hubzahl
                Tabelle.Cells(Zeile + 3, Spalte) = daveGetS16(dc)  'Stückzahl
            End If
    
        End If
        
        Call cleanUp(ph, di, dc)
    Next i
    
End Sub
 
Ich hab mir damals ein Excel-Addin geschrieben, welches von verschiedenen SPSen parallel Daten holt.
Weiß nicht ob das bei dir funktioniert.

Prinzipiell musst du die Verbindungen nicht schließen und kannst auch mehrere gleichzeitig öffnen.
 
Zurück
Oben