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