xsharp.eu • SerialLib Klasse für VO 2.8 - Page 3
Page 3 of 4

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 10:09 am
by ArneOrtlinghaus
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

Posted: Thu Jun 23, 2022 11:45 am
by g.bunzel@domonet.de
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

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 12:10 pm
by lagraf
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.

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 12:20 pm
by SHirsch
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

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 12:51 pm
by lagraf
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.
LFSTest.zip
(4.69 KiB) Downloaded 149 times

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 1:11 pm
by SHirsch
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

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 1:21 pm
by Karl-Heinz
Hallo Franz,

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).
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

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 2:38 pm
by lagraf
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.
LFSTest.zip
(4.8 KiB) Downloaded 145 times

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 2:52 pm
by SHirsch
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

SerialLib Klasse für VO 2.8

Posted: Thu Jun 23, 2022 3:13 pm
by lagraf
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

Code: Select all

IF !Empty(cLine)
	nRet := oDta:_oSocket:SendLine("INFO#Next")     // Kommt nicht an
ELSE
ENDIF
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.