-> Hier kostenlos registrieren
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?
	
	
	
		
	
		
			
		
		
	
				
			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