Ach so, das sind die Sockets. Da kann ich gar nicht groß mitreden.
Wie viel es kostet, eine ältere Entwicklungsumgebung mitzuschleppen, muss man sich ausrechnen. Aber oft ist es gar nicht so schlimm, jedenfalls für ein paar Jahre. Mit den virtuellen Maschinen kann man solche Speziallösungen auch relativ preiswert auslagern auf eine virtuelle Maschine, die man nur startet, wenn man Änderungen machen muss.
Ich hatte mehrere Jahre noch ein VO 2.5 parallel zu VO 2.8 installiert, weil ein automatisches Update für ein Hilfsprogramm nicht funktioniert hätte wegen den Runtime-Dlls cavort... -> vorun...
Erst als die alte virtualisierte Entwicklungsumgebung mit Windows Vista nicht mehr funktionierte, hatte ich mich um Ersatz gekümmert, der auch mehr als 1 Tag Arbeit und Hilfe von Kollegen benötigt. Das sind natürlich "technische Schulden", die irgendwann abgearbeitet werden müssen.
Gruß
Arne
SerialLib Klasse für VO 2.8
Moderator: wriedmann
- ArneOrtlinghaus
- Posts: 412
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
-
- Posts: 97
- Joined: Tue Mar 01, 2016 11:50 am
- Location: Germany
SerialLib Klasse für VO 2.8
Hallo Franz,
...wenn Du dazu Testanwendungen mitsenden würdest (Deinen EchoSrv und die Testanwendung zum Senden der Nachrichten) wäre es viel einfacher, bei dem Problem zu helfen. So müsste erst eine Testumgebung erstellt werden - die dann evtl. von Deiner Anwendung abweicht.
Gruss
Gerhard
...wenn Du dazu Testanwendungen mitsenden würdest (Deinen EchoSrv und die Testanwendung zum Senden der Nachrichten) wäre es viel einfacher, bei dem Problem zu helfen. So müsste erst eine Testumgebung erstellt werden - die dann evtl. von Deiner Anwendung abweicht.
Gruss
Gerhard
SerialLib Klasse für VO 2.8
Hallo Gerhard,
der EchoSrv ist 1:1 derjenige, der bei VO dabei ist. Meine App kann ich nicht posten, da sind zu viele Umgebungsbedingungen vorhanden, die woanders nicht laufen würden (Oracle DB, 2 Waagen, 2 Magnetkartenleser, ..). Eine Reduktion auf das Wesentliche umfaßt den geposteten Teil, werd ich aber gerne in eine MDI oder SDI Basisapp einbauen, dauert ein wenig.
der EchoSrv ist 1:1 derjenige, der bei VO dabei ist. Meine App kann ich nicht posten, da sind zu viele Umgebungsbedingungen vorhanden, die woanders nicht laufen würden (Oracle DB, 2 Waagen, 2 Magnetkartenleser, ..). Eine Reduktion auf das Wesentliche umfaßt den geposteten Teil, werd ich aber gerne in eine MDI oder SDI Basisapp einbauen, dauert ein wenig.
SerialLib Klasse für VO 2.8
Hallo Franz,
das Senden erfolgt bei deinem Beispiel direkt hintereinander. Kommen die beiden Nachrichten vielleicht zusammen an? Was ist denn auf der Serverseite zu sehen? Was kommt bei deinem Logger genau an?
Mach mal zwischen die beiden SendLine ein Sleep(1000) rein und probier erneut.
Stefan
das Senden erfolgt bei deinem Beispiel direkt hintereinander. Kommen die beiden Nachrichten vielleicht zusammen an? Was ist denn auf der Serverseite zu sehen? Was kommt bei deinem Logger genau an?
Mach mal zwischen die beiden SendLine ein Sleep(1000) rein und probier erneut.
Stefan
SerialLib Klasse für VO 2.8
Hallo Stefan,
den Sleep dazwischen hab ich schon probiert, hilft aber nichts.
Ich habe meine App nun aufs Minimum reduziert und beigelegt. Der Echo Protocol Server von VO ist nicht dabei, weil original VO. Defaultmäßig sendet meine App nach 127.0.0.1 Port 7.
den Sleep dazwischen hab ich schon probiert, hilft aber nichts.
Ich habe meine App nun aufs Minimum reduziert und beigelegt. Der Echo Protocol Server von VO ist nicht dabei, weil original VO. Defaultmäßig sendet meine App nach 127.0.0.1 Port 7.
SerialLib Klasse für VO 2.8
dein Programm funktioniert. In TcpView sieht man 2 Nachrichten.
Mit meinem eigenen TCPServer sehe ich auch beide Nachrichten. Der EchoServer scheint also das Problem zu sein.
Stefan
Mit meinem eigenen TCPServer sehe ich auch beide Nachrichten. Der EchoServer scheint also das Problem zu sein.
Stefan
-
- Posts: 774
- Joined: Wed May 17, 2017 8:50 am
- Location: Germany
SerialLib Klasse für VO 2.8
Hallo Franz,
Wenn es mit dem SendLine() ein Problem gibt müsste die Methode lt. Doku dann ja 0 zurückgeben.
Falls 0, würde ich mir mal die Properties Error, ErrorMsg und Status anzeigen lassen. Sehe gerade, dass es auch noch eine Methode DisplayError() gibt.
Gruß
Karl-Heinz
Wenn es mit dem SendLine() ein Problem gibt müsste die Methode lt. Doku dann ja 0 zurückgeben.
Code: Select all
Number of data sent, if successful; otherwise, 0 (zero).
Gruß
Karl-Heinz
SerialLib Klasse für VO 2.8
Ich habe die Anwendung jetzt so umgebaut, dass nach jeder Antwort vom EchoSrv wieder eine neue Anfrage gesendet wird. Also müßte das ganze jetzt wie beim PingPong immer hin- und hergehen, was es aber nicht tut. Ab der 2. Sendung kommt Error 10060 Timeout zurück. Außerdem scheint die ganze Kommunikation ziemlich asynchron zu sein und die Anwendung crashed auch ziemlich unbegründet in ihrer Schleife.
Der Unterschied zum EchoClt ist, dass dort mit jedem man. Sendevorgang ein neuer Socket eröffnet wird. Daher ist jede Sendung immer die erste Sendung und es gibt keine Schleife.
Der Unterschied zum EchoClt ist, dass dort mit jedem man. Sendevorgang ein neuer Socket eröffnet wird. Daher ist jede Sendung immer die erste Sendung und es gibt keine Schleife.
SerialLib Klasse für VO 2.8
Hallo Franz,
Du machst nach dem CreateVOThread ein CloseHandle. Ich denke das sollte erst aufgerufen werden wenn der Thread beendet wurde.
Für weitere Test würde ich als erstes mal das Threading Zeug rausschmeißen. Bau dir ein Schleife in der du sendest und empfängst. Immer schon im Wechsel. Wenn das geht, fängst du an Stück für Stück umzubauen. Und wenn du unbedingt mit Thread arbeiten möchtest, dann sollte sich dieser auf das wesentlich beschränken: Daten abholen und zur Weiterverarbeitung bereitstellen. EndDialog und ApplicationExec gehören definitiv nicht in einen Thread sondern ins Hauptprogramm.
Stefan
Du machst nach dem CreateVOThread ein CloseHandle. Ich denke das sollte erst aufgerufen werden wenn der Thread beendet wurde.
Für weitere Test würde ich als erstes mal das Threading Zeug rausschmeißen. Bau dir ein Schleife in der du sendest und empfängst. Immer schon im Wechsel. Wenn das geht, fängst du an Stück für Stück umzubauen. Und wenn du unbedingt mit Thread arbeiten möchtest, dann sollte sich dieser auf das wesentlich beschränken: Daten abholen und zur Weiterverarbeitung bereitstellen. EndDialog und ApplicationExec gehören definitiv nicht in einen Thread sondern ins Hauptprogramm.
Stefan
SerialLib Klasse für VO 2.8
Hallo Stefan,
unter VO 2.7 funktioniert das Originalprogramm mit diesem Thread genau in dieser Form. Neu hinzugekommen sind nur die Anzeigen mit ? und das neuerliche Senden
damits eine Schleife ergibt. In der Praxis schauts so aus, dass nach dem ersten Senden der Infonachricht gewartet wird, dass der crdServer meldet "Karte gesteckt" und dann gibts erst die Rückantwort "Auswurf vorn" oder "Auswurf hinten".
Ich versuche mal den EchoSrv so umzubauen, dass genau dieser Ablauf gegeben ist.
unter VO 2.7 funktioniert das Originalprogramm mit diesem Thread genau in dieser Form. Neu hinzugekommen sind nur die Anzeigen mit ? und das neuerliche Senden
Code: Select all
IF !Empty(cLine)
nRet := oDta:_oSocket:SendLine("INFO#Next") // Kommt nicht an
ELSE
ENDIF
Ich versuche mal den EchoSrv so umzubauen, dass genau dieser Ablauf gegeben ist.