Serial Port liest Daten nicht richtig / RTS setzen

21/02/2010 - 15:37 von Sven Grabau | Report spam
Hallo NG,
ich verwende VB2008 und will von einem COM-Port Daten eines Datenloggers
lesen.
Mit einem Port-Monitor kann ich den Datanverkehr überwachen.
Öffnen, Schreiben und Schliessen funktioniert einwandfrei.
Nach dem Schreiben z.B. eines Befehls an den Datenlogger spiegelt der mir
den Befehl zurück, den kann ich auch lesen.
Zum Lesen der eigenlichen Daten muß ich jedoch direkt nach dem Lesen des
gespiegelten Befehls RTS setzen und dann die Datan lesen. Ich versuche das
mit "PORT.RtsEnable=true" - allerdinges setzt mir dann VB (bzw. .NET) noch
einiges dazwischen (z.B. BaudRate, SetDTR, usw.). Der Datalogger kommt damit
nicht zurecht und sendet ein Fehlerzeichen.
Wie kann ich also aus VB heraus nur RTS setzen (ohne das darumherum) ?
Gruß
 

Lesen sie die antworten

#1 Thomas Scheidegger
21/02/2010 - 16:58 | Warnen spam
Hallo Sven

mit "PORT.RtsEnable=true"
allerdinges setzt mir dann VB (bzw. .NET)
noch einiges dazwischen (z.B. BaudRate, SetDTR, usw.)



im (Reference) Source-Code von .NET werden dabei tatsàchlich die Win32 APIs
SetCommState
EscapeCommFunction
nacheinander aufgerufen!

Einmal mehr ein negativer Punkt für die recht missglückte SerialPort Klasse.
Bei 'toleranten' 08/15-Geràten mag diese zwar brauchbar sein,
sobald aber genauere Kontrolle nötig ist,
wird sie leicht mal unbrauchbar (und ist auch relativ 'tràge').

Eine Lösung scheint mir da nur möglich:
entweder direkt das API zu nutzen
(du musst wohl die ganze SerialPort Klasse ersetzten, weil native Handle
nicht public!
suche: eine der 'alten' VB.NET PInvoke Source Codes aus .NET 1.x Zeiten)

oder ggf Code ohne .NET (C++, bitte aber nicht das alte VB Comm ActiveX)



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen