Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1776to1780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrere Objekt-Instanzen (WinSock)

Mehrere Objekt-Instanzen (WinSock)
23.08.2020 01:43:39
Martin
Guten Morgen liebe Excel-K(o)enner,
ich sitze seit Stunden an einem für mich zu anspruchsvollem Projekt: Ich möchte gerne mehrere Instanzen eines WinSock-Objektes erzeugen, um Daten verschiedener Messgeräte parallel über das Netzwerk auszulesen. Es klappt problemlos eine einzelne IP-Verbindung zu einem Messgerät herzustellen, jedoch gelingt es mir nicht dynamisch mehrere IP-Verbindungen zu verschiedenen Messgeräten aufzubauen. Ich verwende die OstroSoft Winsock Komponente: http://ostrosoft.com/oswinsck.aspx
Ich habe eine stark vereinfachte Exceldatei mit meinem bisherigen funkionierenden Code hochgeladen, womit eine einzelne IP-Verbindung einwandfrei hergestellt werden kann: https://www.herber.de/bbs/user/139793.xls
Wie müsste der Code modifiziert werden, damit mehrere Netzwerkverbindungen parallel hergestellt werden können?
Meine Zielstellung: Die jeweilige IP-Adresse soll aus der ComboBox "cboIPAddress" ausgelesen und bei Betätigung des CommandButtons "cmdConnect" (Öffne Netzwerkverbindung) hergestellt werden.
Beste Grüße
Martin

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 06:32:17
Oberschlumpf
Hi Martin,
ich kann dein Userform nicht starten, weil dies Meldung erscheint, dass eine Bibliothek fehlt, und es wird diese Zeile im Code markiert:
Dim WithEvents wsTCP As oswinsck.Winsock
Mir fehlt die Winsock-Bibliothek auch wirklich. Daher ist der Fehler ok.
Ich könnte ja eh keinen Testlauf machen, weil ich keinen Zugriff auf die von dir verwendeten IP's habe.
Und trotzdem hab ich ne Idee :-)
Schreib den ganzen Code, der im Klick-Ereignis des Buttons steht in Modul1, und zwar so:

Sub sbConnect(ByVal ipaddress As String)
Set wsTCP = CreateObject("OSWINSCK.Winsock")
With wsTCP
.Connect ipaddress, "23"
Do While .State = sckConnecting '6 SocketState.sckConnecting
DoEvents
Loop
If .State  sckConnected Then '7 Then 'SocketState.sckConnected Then
MsgBox "Verbindungsaufbau fehlgeschlagen", vbExclamation
Set wsTCP = Nothing
Exit Sub
End If
End With
End Sub
Und im Button shcreibst du diesen Code:
sbConnect cboIPAddress.Value
hmm..gerade denke ich, dass es doch eigtl egal ist, ob der Code direkt im Klick-Ereignis steht oder ins Modul1 ausgelagert wurde...aber ok, ich weiß es nicht.
vllt ist der Grund, wieso 2x Klick nicht funktioniert, weil der Button "belegt" ist, so lange der Code direkt im Ereignis steht und ausgeführt wird.
Na ja, versuchs mal...vllt hilfts ja doch :-)
Ciao
Thorsten
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 07:52:25
EtoPHG
Hallo Martin,
IMHO genügt es nicht nur die IP-Adresse für den Connect mitzugeben. Auf der Client-Seite (deinem XL) musst du bei jedem connect zu einem weiteren Gerät auch eine neue Port-Nummer mitgeben. Andernfalls würden all deine verbundenen Geräte auf den gleichen (Eingangsport) schreiben, was nicht funktionieren kann.
Gruess Hansueli
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 10:04:50
Martin
Hallo Hansueli,
die Portnummer ist bei allen Messgeräten gleich (Port 23), nur die IP-Adresse unterscheidet sich. Es sind die gleichen Messgeräte, daher ist auch das Schnittstellenprotokoll identisch.
Übrigens lassen die Messgeräte sogar jeweils drei Sockets zu, es könnten sich sogar bis zu drei Programme parallel von einem Rechner über eine IP und einen Port mit einem Messgerät gleichzeitig verbinden.
Viele Grüße
Martin
Anzeige
AW: Ich meine das PC-Port! (owT)
23.08.2020 10:13:30
EtoPHG

AW: Ich meine das PC-Port! (owT)
23.08.2020 10:46:25
Martin
Hallo Hansueli,
ich bin mir nicht ganz sicher ob ich dich korrekt verstehe. Falls du den Hardware-PC-Port meinst: Die Geräte befinden sich alle im selben Netzwerk und sind über einen normalen Ethernet-Switch miteinander verbunden.
Beste Grüße
Martin
AW: Ich meine das PC-Port! (owT)
23.08.2020 11:18:49
Martin
Hallo Hansueli,
ich glaube dich jetzt verstanden zu haben.
"Andernfalls würden all deine verbundenen Geräte auf den gleichen (Eingangsport) schreiben, was nicht funktionieren kann."
Die verbundenen Geräte schreiben tatsächlich auf den identischen Eingansport und es funktioniert (...zumindest bei einem anderen Programm). Den Messgeräten kann eine ID zugewiesen werden, die mit jedem eingehenden Datensatz übertragen wird. Daher lässt sich problemlos unterscheiden von welchem Messgerät welche Daten kommen. Aber auch ohne diese Möglichkeit sollte es theoretisch über die "RemoteHostIP" möglich sein das entsprechende Messgerät zu identifizieren.
Beste Grüße
Martin
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 10:35:46
Martin
Hallo Oberschlumpf,
diese fehlende Bibliothek "OstroSoft Winsock Component" ist nicht standardmäßig installiert und ist kostenlos hier erhältlich: http://ostrosoft.com/download/oswinsck.zip
Ich kann aber nicht verlangen, dass jemand fremde Software auf seinem Rechner installiert. Zudem ist es tatsächlich auch schwierig gleich mehrere netzwerkfähige Geräte zu finden, die eine solche Verbindung zulassen. Falls es trotzdem jemand versuchen möchte, würde ich den Code selbstverständlich so umschreiben, dass auch unterschiedlliche Port-Nummern festgelegt werden können (...ist ja im Moment fest auf Port 23 festgelegt).
Das Problem bei deinem Vorschlag besteht darin, dass die bestehende Verbindung über die Variable "wsTCP" quasi überschrieben wird. Gerne würde ich die Variable "wsTCP" irgendwie in mehreren Instanzen aufrufen können, aber genau das gelingt mir nicht.
Ich bin mal auf folgende Seite gestoßen, bei der es aber um eine Microsoft Winsock-Bibliothek in VB geht: https://www.devx.com/tips/Tip/5488
Ich müsste wsTCP wahrscheinlich irgendwie als Datenfeld-Objektvariable und wie in dem Seitenbeispiel eine Zählvariable deklarieren:
Dim WithEvents wsTCP() As oswinsck.Winsock 'Das "()" geht so nicht!
Public iNumSockets As Integer
Damit die Verbindungen etwa so aufgebaut werden können:
Private Sub cmdConnect_Click()
Set wsTCP(iNumSockets) = CreateObject("OSWINSCK.Winsock")
With wsTCP(iNumSockets)
.Connect cboIPAddress, "23"
Do While .State = sckConnecting '6 SocketState.sckConnecting
DoEvents
Loop
If .State  sckConnected Then '7 Then 'SocketState.sckConnected Then
MsgBox "Verbindungsaufbau fehlgeschlagen", vbExclamation
Set wsTCP(iNumSockets) = Nothing
Exit Sub
End If
NumSockets = NumSockets + 1 'für die nächste Instanz
End With
End Sub
Aber ich habe leider keine Ahnung wie das korrekt umgesetzt wird. Hast du vielleicht eine Idee?
Viele Grüße
Martin
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 12:20:35
Oberschlumpf
Hi Martin,
ich schrieb doch...
...ich habe keinen Zugriff auf deine IP-Adressen (IP's)
Außerdem hab ich doch gar keine Messgeräte
Und somit, nein, ich kann doch gar nix testen, mein letzter Beitrag war nur so ne Idee, weitere hab ich nicht.
Ciao
Thorsten
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 14:19:46
Martin
Hi Thorsten,
darf ich dir anbieten per TeamViewer auf meinem Rechner zu arbeiten? Dann würde ich zwei Messgeräte anschließen und du kannst unter "relativ" normalen Bedingungen direkt auf meinem Rechner arbeiten.
Beste Grüße
Martin
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 15:24:55
Oberschlumpf
Hi Martin,
unabhängig davon, dass ich vielleicht gar nicht das notwendige Wissen haben könnte, darf ich dir - allein nur wegen des Zeitaufwands, den auch ich haben werde - dir Kosten in Höhe von 60 Eur / angefangene Stunde in Rechnung stellen?!
Oder anders ausgedrückt:
Ja, ich weiß, du suchst eine Lösung.
Aber bei herber.de und jedem anderen Forum (nicht nur für Excel, sondern - jedes - Forum!) können Hilfesuchende Hilfe zur Selbsthilfe erfragen.
Dies beinhaltet aber keine Hausbesuche.
(Hilfe per TV ist auch eine Art von Hausbesuch)
Verstehst du, was ich meine?
Mag sein, dass du jetzt von mir denkst, dass ich ganz schön unfreundlich bin.
Nee, bin ich nicht. Ich hab ja versucht, dir zu helfen - so, wie ich versuche, hier auch vielen Anderen zu helfen.
Aber das, was du jetzt möchtest, geht übereine Forumshilfe weit hinaus.
Weiter viel Erfolg für dich.
Ciao
Thorsten
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 16:19:19
Martin
Hallo Thorsten,
abgesehen von der Tatsache, dass mir diese Problemlösung wahrscheinlich die 60 Euro Wert wäre (zumindest bei Erfolg), habe ich lediglich zur Vereinfachung der Hilfemöglichkeit die TeamViewer-Möglichkeit angeboten. Wie bereits geschrieben, möchte ich niemandem zumuten eine unnötige Bibliothek zu installieren bzw. kann ich nicht erwarten, dass jemand zwei Netzwerkgeräte zum Verbindungsaufbau hat.
Im Übrigen helfe ich auch anderen Forenmitgliedern und finde meine Projekt eigentlich eine recht spannende Herausforderung.
VG Martin
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 12:26:40
Planlos
meine vermutung
mit Set wsTCP = CreateObject("OSWINSCK.Winsock") erstellst du ein neues wstcp, ein existierendes wstcp wird dabei gekillt. wenn du mehrere verbindungen willst brauchst du für jede verbindung ein eigenes wstcp.
Anzeige
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 14:01:58
Martin
Hallo "Planlos",
ich hoffe, dass deine Vermutung nicht zutreffend ist. Im Notfall muss ich für jede Verbindung eine eigene "wsTCP"-Objekt-Variable statisch anlegen. Ich lasse den Beitrag als unbeantwortet gekennzeichnet, damit sich evtl. ein VBA-Guru mit meiner Frage befasst.
Vielen Dank!
Martin
AW: Mehrere Objekt-Instanzen (WinSock)
23.08.2020 17:15:36
Planlos
hallo martin
wenn dir diese bibliothek jetzt keine routinen zur möglichkeit der mehrfachverbindungen bietet, kommst du u.u um den von dir vermuteten notfall nicht drum herum. mit hinblick auf die events(_OnDataArrival, _OnStatusChanged) der wstcp-klasse ist das aber nicht so spassig.
alternativ müsstest du dir ein(e) eventwatcher/eventbrige programmieren um a) über eine collection die verschiedenen wstcp's dynamisch anzulegen und zu verwalten und b) die abgefeuerten events der einzelnen wstcp's zentral auf deine userform abfeuern zu können.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige