Hallo Leute,
versuche gerade mit C# (Visual Studio 2013, wpf) eine serielle Konsole
ans Laufen zu bekommen. Mit einem anderen Terminal-Programm weiss ich,
dass
über Port15 Daten von der Gegenstelle empfangen werden.
Das ist mein bisheriger Code:
1. Wenn ich auf den Start-Button klicke, weiss ich, dass COM15
erfolgreich geöffnet wird (mittels MessageBox geseehen).
Danach passiert nichts. Ich würde erwarten, dass ständig empfangene
Daten (von denen ich ja weiss, dass sie von der Gegenstelle versendet
werden) in der Textbox ausgegeben werden.
2. Wenn ich jetzt mal etwas in die Textbox eintippe, erhalte ich
folgende Fehlermeldung:
Hallo,
ich kann jetzt nicht direkt was mit den Fehlermeldungen anfangen, jedoch
hatte ich vor einiger Zeit auch mal ein Problem mit COM >9. Ab COM10
solltest Du mal folgenden String probieren:
serialPort1.PortName = "\\\\.\\COM15";
Das hatte bei mir geholfen.
Gruß
TK
Hallo TK,
danke für deine Antwort.
Wenn ich deine COM15-Schreibweise ausprobiere, so erhalte ich beim
Klicken des Start-Button die Fehlermeldung "{"Der Anschlussname darf
nicht mit \"\\\" beginnen.\r\nParametername: PortName"}.
Daher denke ich, dass meine Schreibweise schon OK war.
Gruß, hssig
Hast Du Unicode Strings?
Was Du schreiben willst ist "\\.\COM15".
Bei C++ mit 8bit-char sieht das halt aus, wie TK geschrieben hat -
"\\\\.\\COM15".
Probier mal die Version, wie in der zwoten Zeile geschrieben.
Grüße,
Marcus
Hallo Markus,
>"\\.\COM15".>>Error 1 Unrecognized escape sequence
Wie gesagt, das scheint ja nicht das Problem zu sein, weil
"serialPort1.IsOpen"
Gruß, hssig
Hssig 7. schrieb:> Wie gesagt, das scheint ja nicht das Problem zu sein, weil> "serialPort1.IsOpen"
das denke ich auch.
mache doch einfach mal ein Read ohne Event.
Hssig 7. schrieb:>>"\\.\COM15".>>>Error 1 Unrecognized escape sequence> Wie gesagt, das scheint ja nicht das Problem zu sein, weil> "serialPort1.IsOpen"
Danke für die Rückmeldung. War nur so eine Vermutung, weil ein Kollege
die Tage das Problem hatte. Marcus
Hssig 7. schrieb:> private void serialPort1_DataReceived(object sender,> System.IO.Ports.SerialDataReceivedEventArgs e)> {> RxString = serialPort1.ReadExisting();>
Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.Disp
atcherPriority.Background,
> new EventHandler(DisplayText));> }
Das ist kompletter Schwachsinn. Sehr wahrscheinlich irgendwoher aus dem
I-Net ohne jedes Verständnis des Sachverhaltes per C&P übernommen...
Auch nur die minimalste Andeutung eigenständigen Denkens sollte
zumindest diese Frage produzieren: Was passiert hier eigentlich mit
"RxString", was ja die begehrten Inhalte von der Quelle in's Ziel
transportieren sollte...
OMG, wo soll das alles noch enden...
>Auch nur die minimalste Andeutung eigenständigen Denkens sollte>zumindest diese Frage produzieren:
Die Frage wurde produziert ;-)
Ich habe mal das mit dem Threading ersteinmal weggelassen, hier der
geänderte Ansatz, bei dem ich mit jedem Event "serialPort1_DataReceived"
eine Funktion (über Delegate) aufrufe, in der "RxString" ausgegeben
wird.
Ich sehe leider immer noch keine Daten, nachdem ich den COM-Port
geöffnet habe.
Hier der Code:
was sagt denn der Debugger?
wird serialPort1_DataReceived überhaupt angesprungen und wenn jam was
steht denn nach dem Lesevorgang in deinem RxString drin?
Hallo,
der Debugger zeigt, dass "serialPort1_DataReceived" und "RxString" auch
mit (richtigem) Inhalt gefüllt wird, dennoch sehe ich keinen Inhalt in
der Textbox.
Gruß, hssig
Hssig 7. schrieb:> Die Frage wurde produziert ;-)
Selbst wenn ich das tatsächlich glauben würde (was ich nicht tue): Das
wäre nur ein sehr kleiner Lichtblick.
Denn: Die unmittelbare Konsequenz wäre, sich die Funktionsweise und
Anwendung von Delegaten reinzuziehen. Was du ganz offensichtlich nicht
getan hast...
Und nein: es würde dir nicht wirklich nützen, wenn ich dir den
korrekten Quelltext für dein konkretes Problem vorbeten würde. Deswegen
tue ich das auch nicht. Ich weise dich aber gern darauf hin, daß es
schätzungweise einige zehntausend Codebeispiele zu dieser Sache im
Internet gibt. Du mußt einfach nur diesen Scheiß (ein Stück weit)
durcharbeiten, um das KONZEPT zu begreifen. Hast du das erstmal
tatsächlich begriffen, kannst du dir den Rest der Lektüre sparen, denn
dann bist du erstmal in der Lage, jegliche Delegaten korrekt zu
deklarieren und ihre Implementierungen korrekt mit Parametern zu
füttern.
Dann bleibt nur noch eins: Die Sache auch noch multithreaded mit
Invoke/BeginInvoke umzusetzen. Das ist dann vergleichweise sehr trivial,
denn die Methoden benötigen nur die Adresse des Delegaten und dessen
Parameterliste als Object-Array. Das bereitzustellen erfordert dann
endgültig nur noch einen kleine Auswahl absolut grundlegender
Sprachkentnisse.
Die du hoffentlich hast oder bereit bist, mit Schweiß und Tränen zu
erwerben. Von nix kommt nix...
c-Hater,
du musst dich an der Diskussion nicht beteiligen.
Mein zuletzt geszeigter Code stellt doch eine Diskussionsgrundlage dar.
Die Thread-Geschichte habe ich wie gesagt rausgenommen und werde ich mir
später nochmal antun. Wie gesagt ...
Kann jemand mir einen Tipp geben, wieso der Inhalt von RxString nicht in
der Textbox ausgegeben wird?
Gruß, hssig