Hallo Ich möchte den SerialPort überwachen und möchte nur angezeigt bekommen das Daten übertragen werden welche das möchte ich nicht sichtbar machen nur das Signale gesendet werden. Port Öffnen und so geht alles. habe mal was ZUM ZEIGEN gebastelt. Es soll immer um springen solange Daten gesendet werden, soll 0 (leuchten ??) Wenn KEINE Daten gesendet werden soll 1 (leuchten ?) Mit welchen code stelle ich das am besten an ? Vielen Dank.
Serialport.datareceived ist dein Freund.
Warum verwendest du nicht die entsprechenden Events?
So, wenn der Bastler ausgeschlafen hat, kann er das hier nehmen und glücklich werden: https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived(v=vs.110).aspx
DAVID -. schrieb: > Ich möchte den SerialPort überwachen Hans Christian Knäckebröt schrieb: > Serialport.datareceived ist dein Freund usw. aber wahrscheinlich alles falsch. Er möchte wohl nicht seine eigene Software überwachen (wenn er eine geschrieben hätte, würde er wohl kaum fragen, wie man den Status anzeigt), sondern das Verhalten einer seriellen Schnittstelle, über die ein ANDERES Programm etwas sendet oder empfängt. Damit dürfte er überfordert sein, aber dafür gibt es Software, z.B. serial port monitor. Georg
Das Bild oben entspricht in keiner weise mein eigentlichen Programm. Sonder ist NUR zum verdeutlichen meines Problems. Hans Christian Knäckebröt schrieb: > Serialport.datareceived ist dein Freund. Den Code habe ich schon gefunden und versucht aber Wie genau kann ich das einen Radiobutton Zuordnen ? Und NEIN ich hab ein eigenes Programm auch wenns mehr einer bastel Bude entspricht. Meine fähigkeiten sind immer noch sehr oberflächlich. Welche events kommen da in frage ? Vielen Dank
:
Bearbeitet durch User
Möchtest du so eine Art Port activity LED haben? Dann würde ich in dem Event schreiben: Radiobutton.state = true Und dazu einen Timer laufen lassen, der den rb alle 100ms auf false zurücksetzen. Oder so.
HI, so weit ich weiß legst du eine Threshhold fest ab wann der "Interrupt" von deiner Seriellenschnittstelle auslöst. Wenn das erreicht ist kannst du mit den handler von datareceived drauf reagieren. Finde ich allerdings nicht sooo toll. Ich würde die abfrage pollen ist dann auch zu Linux kompatibel :)
Hans Christian Knäckebröt schrieb: > Möchtest du so eine Art Port activity LED haben? > Dann würde ich in dem Event schreiben: > Radiobutton.state = true > > Und dazu einen Timer laufen lassen, der den rb alle 100ms auf false > zurücksetzen. > > Oder so. Das mit dem Timer versuche ich dann gleich mal. Wie kann ich einen Pin eine anzeige zuweisen und ja es soll eine port activity (mir ist das wort nicht eingefallen) anzeige werden aber für jeden pin einzlen wenn das geht. Vielen Dank
Lars schrieb: > Finde ich allerdings nicht sooo toll. Ich würde die abfrage pollen ist > dann auch zu Linux kompatibel :) Sein Titel: Visual Studio C# Serielle Daten anzeigen /verstehe befehle nicht Merkste was? Ausserdem, den Serial Port pollen machen wirklich nur Leute, die es nicht besser wissen. Also 99,9% der absoluten Einsteiger, bis sie daran verzweifeln, dass sich ihr Programm daran erhängt und die GUI unbenutzbar wird.
Deswegen geht das Port polling in Linux auch nicht und Linux systeme laufen tendentiel besser.. beim Portpolling muss man halt wissen was man macht. ABer ich halt mich dann mal raus... ich sag mal so meine Programme laufen alle optimal.. und Laufzeit optmiert mit polling schon seid 20 Jahren auch schon ohne Visual C# ...
Lars schrieb: > Deswegen geht das Port polling in Linux auch nicht und Linux > systeme > laufen tendentiel besser.. beim Portpolling muss man halt wissen was man > macht. > > ABer ich halt mich dann mal raus... ich sag mal so meine Programme > laufen alle optimal.. und Laufzeit optmiert mit polling schon seid 20 > Jahren auch schon ohne Visual C# ... Ich nehme alles zurück und behaupte das Gegenteil. Entschuldigt meien threads und beachtet diese bitte nicht... select bei Linux ist auch kein pollen ich mache quasi beides.. :/.. einmal geschrieben nie weider reingeschaut ...
Vielleicht verstehe ich deine frage nicht, aber: Wenn ein Programm den Port öffnet ist er belegt und du kannst von außen nicht mehr auf den Port zugreifen.
Hallo David, wie reggie schon schrieb, einen Port der von einer anderen Anwendung belegt ist, kannst Du ohne tiefgreifende Kenntnisse im Betriebssystem nicht so einfach überwachen. Wenn Du aber Deinen eigenen Port den Du über SerialPort ansteuerst überwachen willst, dann ist der PinChanged Event der Klasse Dein Ding. https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.pinchanged(v=vs.110).aspx https://msdn.microsoft.com/de-de/library/system.io.ports.serialpinchange(v=vs.110).aspx Über diesen Event bekommst Du Auskunft über die einzelnen Statis der Pins. Gruß Frank
Wenn ich es mit zb case SerialPinChange.Ring: versuche bekomme ich immer. der name "serialPinChange.Ring ist im aktuellen kontext nicht enthalten. Wie oder besser Wo füge ich den das ein ? SerialPinChange.CDChanged SerialPinChange.CtsChanged SerialPinChange.DsrChanged SerialPinChange.Break Vielen Dank
Hallo, sieht man sofort das er Anfänger ist, deshalb sollte er erstmal das Pollen hinbekommen, danach auf Events umsteigen. Ich glaube nicht, dass es sinnvoll ist direkt mit schwierigen Sachen zu starten. Ansonsten könnte man auch die GUI in einen eignen Thread pachen, aber egal. Nun zum eigentlichen Thema: Um deine Anforderungen besser zu vestehen benötigen wir noch ein paar Informationen bzw. hab ich folgende Dinge verstanden. Dein externes Gerät benutzt wirklich die Hardware Pins wie z.b. DTR,...? Das ist wirklich selten geworden das Geräte die Handshakepins benutzen, vorallendingen von zweiten von USB to Serial Converter, deshalb noch eine weitere Frage von mir. 1. Reicht es nicht aus einfach zu prüfen, ob ein Byte über die serielle Schnittstelle angekommen ist? 2. Wie sieht dein HW Aufbau aus? Das Gerät ist direkt an deine COM Schnittstelle am PC angeschlossen? Hier findest Du ein schönes Beispiel von MS. Ist auch schon etwas viel für ein blutigen Anfänger, aber das Verständnis sollte erarbeitbar sein. https://msdn.microsoft.com/de-de/library/system.io.ports.serialport%28v=vs.110%29.aspx In dieser Methode werden die Daten empfangen und in dem String Message gespeichert und in der Console angezeigt, wenn dein Gerät nun Daten sendet, dann solltest Du die Werte als String in der Console sehen.
1 | public static void Read() |
2 | {
|
3 | while (_continue) |
4 | {
|
5 | try
|
6 | {
|
7 | string message = _serialPort.ReadLine(); |
8 | Console.WriteLine(message); |
9 | }
|
10 | catch (TimeoutException) { } |
11 | }
|
12 | }
|
Da hat einer mal ein ähnliches Problem gehabt und einen möglichen Lösungsansatz bekommen: http://www.mycsharp.de/wbb2/thread.php?threadid=111160 Thorsten schrieb: > Hallo, > > sieht man sofort das er Anfänger ist, deshalb sollte er erstmal das > Pollen hinbekommen, danach auf Events umsteigen. Ich glaube nicht, dass > es sinnvoll ist direkt mit schwierigen Sachen zu starten. Ansonsten > könnte man auch die GUI in einen eignen Thread pachen, aber egal. David erstellt hier aller halben Jahre einen Thread in dem er wissen will wie er irgendwas, was die serielle Schnittstelle betrifft bewerkstelligen kann. Mir ist nicht bekannt das er es bis heute irgendwie geschafft hat. Ich würde ihm raten die GUI mal außen vor zu lassen, bis er in einer Konsolenanwendung das geschafft hat was er will und dann die GUI drumherum zu bauen. Leider liest er aber auch immer nur das was er lesen will. Ich hatte Ihm in einem anderem Thread mal zu einem Velleman USB-IO Board geraten, mit dem er auf einfachste Art und Weise mal zu eine Erfolg gekommen wäre... sei es drum...
Das ich keine Ahnung habe steht ja denke ich oben schon klar. Die MS links habe ich alle schon durch (habe schon paar Monate still und heimlich versucht) den code schnipsel versuche ich später noch. Noch Interessanter sieht aber die Lösung aus dem letzen link von sven aus. Und ja auch solche fertigen Platinen wie zb K8055 habe ich mir angesehen und auch die android app bewundere ich sehr aber leider haben die fast immer nur digitale Eingänge die mir gar nix bringen. Der serielle Port kann immer hin analoge Signale erkennen und selber ausgeben. ich werde dann heute abend mal versuchen ob ich damit weiter kommen. vielen dank
Lars schrieb: > Deswegen geht das Port polling in Linux auch nicht Quatsch. Natürlich kannst du unter Linux die serielle Schnittstelle pollen. Allerdings sind Anfänger meist selbst dazu zu blöd... Die Lesen in aller Regel einfach blockierend, weil die simplen Programmbeispiele, die diese Blinder Wichser typischerweise aus dem Netz zusammenkopieren und dann für eigenen Code halten, einfach auch nur genau dies tun... > und Linux systeme > laufen tendentiel besser Quatsch. Windows läuft genau wie Linux immer genau so gut, wie es um die Fähigkeiten des Administrators des Systems bestellt ist. Also laufen in aller Regel beide Systeme beschissen, weil mindestens 99% ihrer User schlicht und einfach keine Ahnung haben... > ABer ich halt mich dann mal raus... ich sag mal so meine Programme > laufen alle optimal.. und Laufzeit optmiert mit polling schon seid 20 > Jahren auch schon ohne Visual C# ... Wenn du die Sprache, in der du deine Programme verfasst, etwa so gut beherrschst wie deine Muttersprache, dann vermag ich das kaum zu glauben...
Von Linux halte ich gar nix.habe seit 16 (2000) Jahren mit Windows zu tuhen. Sorry ganz vergessen zu beantworten ... Thorsten schrieb: > Um deine Anforderungen besser zu verstehen benötigen wir noch ein paar > Informationen bzw. hab ich folgende Dinge verstanden. > > Dein externes Gerät benutzt wirklich die Hardware Pins wie z.b. DTR,...? > Das ist wirklich selten geworden das Geräte die Handshakepins benutzen, > vorallendingen von zweiten von USB to Serial Converter, deshalb noch > eine weitere Frage von mir. > > 1. Reicht es nicht aus einfach zu prüfen, ob ein Byte über die serielle > Schnittstelle angekommen ist? > > 2. Wie sieht dein HW Aufbau aus? Das Gerät ist direkt an deine COM > Schnittstelle am PC angeschlossen? Also ich verwende ein 4x Funk empfänger mit je 4 Ausgängen. Und ein alter kassen PC mit ebenfalls 4 echten onboard seriellen ports. Auf der der Ic nur 1 2 3 4 als zahl sendet mehr nicht.( ausgang 1 sendet nur 1/ ausgang 2 sendet nur 2) da ich aber mit 1 2 3 4 nicht viel anfangen kann wollte ich das ich im Programm was unter Windows 7 64 bit läuft/weiter laufen soll eine optische Möglichkeit haben das ich sehe das der IC mir was mit teilt. Hoffe kommt so einigermaßen rüber. 1: Ehm wie meinst du das ? 2:JA Ich habe den IC besser gesagt densen 4 Ausgänge über 1 Kohm auf CD CTS DSR und gelötet. Strom kommt über USB. Mit den Programm Terminal zeigt es mir auch an das CTS CD DRS richtig sind und leuchten auf sobald der IC sendet. Und Das ich den Port immer nur von einen Programm nutzen kann ist mir seit Monaten bekannt aber danke der info :-) Ich habe jetzt mal: } static void port_PinChanged(object sender, SerialPinChangedEventArgs e) { SerialPort port = sender as SerialPort; //Eingangssignal einlesen switch (e.EventType) { case SerialPinChange.Break: break; case SerialPinChange.CDChanged: Console.WriteLine("CD Signal" + port.CDHolding.ToString()); break; case SerialPinChange.CtsChanged: Console.WriteLine("CTS Signal: " + port.CtsHolding.ToString()); break; case SerialPinChange.DsrChanged: Console.WriteLine("DSR Signal" + port.DsrHolding.ToString()); break; case SerialPinChange.Ring: break; default: break; } Ins Project übernommen und Microsoft visual Studio meldet keine Fehler SCHÖN. Da kommen mir ein paar weite fragen auf was ist oder wo finde ich diese Console ? zb bei >>Console.WriteLine<< Und Welcher code ist für zb Radiobutton zuständig um von deaktiviert auf aktiviert zu wechseln ?? Vielen DANK
DAVID -. schrieb: > Der serielle Port kann immer hin analoge Signale erkennen und selber > ausgeben. Der Username DAVID ------ geistert hier doch schon mehr als 1 Jahr herum - kann man wirklich, unter Mithilfe des Forums, nach einem Jahr immer noch so vollkommen ohne Ahnung sein? Sind wir wirklich so schlecht? Georg
Schade mein Beitrag letzte Nacht hat den Serverausfall nicht überlebt. David, die Vellemannkarte hat zwei analoge Ein- und Ausgänge. Im allgemeinen ist das Ding dank der mitgelieferten DLL sehr einfach zu verwenden, in VB.Net, VC++, C#, sogar ASP.net. Aber zu dir. Du solltest dich mit Grundlagen beschäftigen, d.h ein geeignetes Buch nehmen und dich durcharbeiten. Zuerst wirst Du lernen wie man auf der Konsole zwei Zahlen einliest und addiert, irgendwann gehts Richtung GUI und dann wirst Du lernen wie man GUI dynmaisch zur Luafzeit erzeugt. Wenn Du mal die Grundkonzepte verstanden hast, wird es vielleicht auch mal was mit der seriellen Schnittstelle etc. Immer nur Codeschnipsel zusammen zu kopieren und hoffen das es klappt hat mit Programmieren nichts zu tun und bringt dich nicht weiter!
Ist ja nicht schlimm, wenn er rumgeistert und um Hilfe bittet, natürlich sollte er auch Eigeninitaive zeigen. Bei jedem Menschen ist die Lernkurve und Lernverhalten anders, ich spreche aus Eigenererfahrung, weil ich anders lerne als die meisten Menschen, deshalb sind Bücher und Blogs manchmal recht schwierig. @David: Ok, jetzt verstehe ich deine Aufgabenstellung und deine Hardware. Wenn Du mir und anderen Helfern einen gefallen tun willst, dann packe doch bitte dein VS C# Projekt Ordner als Zip Datei und lad die Datei hier hoch. Andere und ich hätten nochmal die Möglichkeit sich das Projekt anzuschauen, weil deine Methode so kein Fehler aufzeigt muss der Fehler wo anders liegen. Bzgl. Console.WriteLine: Wenn es eine WindowsForm Anwendung ist, dann werden solche Informationen im Ausgabefenster (Default) unten rechts angzeigt. Wenn deine Methoden in der Form selber sind, dann kannst du auf die Eigenschaften der Controls relativ leicht zugreifen. Solltest Du eine eigene Klasse erstellt haben mit Methoden ist es etwas schwieriger aber auch lösbar. Beispiel, verändert mein Radiobuttoneigenschaft im Form_load:
1 | private void Form1_Load(object sender, EventArgs e) |
2 | {
|
3 | radioButton1.Checked = false; // aus |
4 | radioButton1.Checked = true; // an |
5 | }
|
Hallo! Ich würd mal das hier empfehlen: http://www.vb-paradise.de/index.php/Thread/117228-Serielle-COM-Daten-auswerten/ (Auch die links am Ende des Thread beachten) Keine Angst weils VB ist. Code lässt sich hiermit übersetzen: http://codeconverter.sharpdevelop.net/SnippetConverter.aspx Gruß
Das wäre SEHR nett ich habe mich in den letzten tagen auch noch mal intensiver damit befasst und schon teil erfolge gehabt ( in ein andren bereicht der Software) Was aber ein erkennen der Pins angeht leider keinerlei erfolge. Es Passiert einfach nix und da habe ich das pin erkennen erst mal raus genommen und mich andren aufgaben angenommen. Es wäre schön wenn die button DSR CTS RXD und CD (hoffe sind die eingangs Pins) solage leuchten wie daten (egal welche) da empfangen werden. Ich habe die Button mal zensiert da keinen meine passwörter und Inhalte angehen.(hoffe ist ok) Ich musste feststellen das ich das Projekt nur noch mit visual Studio 2015 öffnen kann mit 2010 gehts nicht mehr :-( wer weis was ich da verborgen habe. Network 4.5 ? Vielen Lieben dank für deine/euere Hilfe
Hast Du Dir die links angesehen? Hast Du schon mal eine Beschreibung der ganzen seriellen Schnittstelle durchgelesen? Ich denke es fehlen Dir noch Grundlagen, denn die Schnittstelle erkennt eben keine analogen Signale... Zerteile deine Probleme in kleinere Stücke und dann fang nochmal an.
Hallo, ich hab mir deinen Code angeschaut, aber um ein gleiches Verständnis zu haben hier nochmal was ich verstanden hab. Dein Kassen-PC mit 4x RS232 Schnittstellen sendet ASCII Zeichen 1 auf Comport 1, Zeichen 2 auf Comport 2 etc. und bedingt dabei die Steuerleitungen. Auf einem anderen PC soll die C# Anwendung die einzelnen COMPorts Steuerleitungen abhorchen und den Zustand auf der GUI anzeigen. Richtig? Wenn ja, wieso schaltest Du nicht die events für deine COMPorts ein? Und mittels Invoke gibst du den Zustand auf deine GUI aus? Der Kassen-PC sendet wirklich nur 1 und kein CR + LF?
Hallo Vielen Dank fürs ansehen des codes! Du hast es fast richtig verstanden es geht nicht um 2 PCs sondern um einen funk Empfänger der mir auf seinen 4 Ausgängen je die zahlen 1 auf Ausgang 1 bis 4 sendet für Ausgang 4 sendet. also ZB Pin DSR bekommt vom IC IMMER nur 1 gesendet. CD ZB immer nur die zahl 2 wenn also DSR die 1 bekommt sollte der nennen wir ihn mal Button 1 leuchten. Das mit den analogen Signalen weis ich noch nicht wie ich das anstelle. vorrang hat erst mal der funk empfänger ic da dieser schon signale ausgibt mit einen Pegel um die 3-5 volt. >>Hast Du schon mal eine Beschreibung der ganzen seriellen Schnittstelle >>durchgelesen? nein zum ansehen der links bin ich noch nicht gekommen folgt aber später noch. >>Ich denke es fehlen Dir noch Grundlagen, denn die Schnittstelle erkennt >>eben keine analogen Signale... Offiziell möglicherweise nicht, inoffiziell kann sies woll. Beweis folgt heute Abend sobald ich wieder vor ort bin.
Häää??? Was is los? Ich versteh kein Wort. Wie sieht's mit Schaltplan o. Ä. Aus???
Puh, nun komme ich nicht mehr mit. Bitte zeige das Datenblatt vom Funkempfänger. Hat der Funkempfänger 4 Digitale Outputsignale? Oder gibt er seriellen Text aus? Naja, anhand von dem Beispiel http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners hab ich eine andere Version gebastelt. Sicherlich nicht das beste, aber wenn RTS geschaltet wird, dann wechselt der Radiobutton mit. Und wenn serielle Textdaten empfangen werden, dann werden diese in der Textbox angezeigt.
So mal zu dein verlinkten links: Ich bin mir nicht ganz sicher wie oder an welche ich stelle ich das jetzten muss aber ich versucht es mal. Was die Erkennung analoger Signal angeht so habe ich mal SELBER ein video gemacht wo ich zeigen kann das es geht. Ich habe leider kein Smartphones so mit musste es mein alten nokia n79? tuhen. Nach dem widerstand von 10 Kohm liegen an CTS 4,10 volt an und der strom liegt bei 1,25 mA was ich als unbedenklich abhacke. https://youtu.be/qdSoj7NOaDg Und ein Schaltplan ja sek daran solls nicht liegen. hänge ich gleich an OHHH VIELEN LIEBEN DANK für deine mühe ich gucke es mir gleich an.
:
Bearbeitet durch User
Mensch Trosten du bist ein held. Wenn ich mein CI an CTS anstecke und er ein Signal aus gibt ändert sich genau wie ich das möchte radioButton1 / SET Und habe es auch mit akku versucht (gleich spannung) und selbst das geht SUPER SUPER Leider nur da. wenn ich das jetzt noch auf alle 3 andern pins legen kann so das jeder sein eigenen Radiobutton verändern kann und das auf alle 4 serielle Ports bin ich am ziel!!
WAS hat der Anschluss eines 12V 7Ah Bleiakkus an die Statussignale einer seriellen Schnittstelle mit analogen Signalen zu tun? Wenn man genau zwei Zustände (an/aus) hat, dann sind das binäre/duale Signale. Wenn ich die Spannung vom Akku messe und den Wert an den Rechner übermittel, dann habe ich ein analoges Signal aufgenommen und verarbeitet. Und könntest Du, auch wenn Du dich freust, versuchen wenigstens etwas Rechtschreibung und Grammatik zu verwenden, sodass man deine Sätze auch versteht?
:
Bearbeitet durch User
Schön das es funktioniert und ich konnte mich etwas mit Delegate und Invoke einarbeiten. @Sven: Die Batterie war vermutlich zum testen und ist ganz legetim. @David: Anstatt mit Batterie an deinem PC die Signale zu simulieren, kannst Du so wie ich gestern kurz die Programme installieren. http://www.heise.de/download/product/virtual-serial-port-driver-19450 Damit kannst Du Dir Virtuelle COMPorts erstellen und diese wie ein Kabel miteinander verbinden. http://www.der-hammer.info/terminal/ Damit kannst Du die Signalzustände ändern und anzeigen lassen. Ich hab gestern kurz zwei das Programm gestartet und mit meinen Virtuellen seriellen Schnittstellen geprüft, ob die Steuersignale sich setzen lassen, danach hab ich eine Instanz geschlossen und mein Beispielsprogramm getestet, damit spart man sich den Hardwareaufbau und umgeht erstmal eventuelle Hardwarefehler, den eine Baustelle zur Fehlersuche reicht. Auch wenn mein Code nicht dokumentiert ist, sollte sich nach kurzer Einarbeitung dieser Code leicht erweitern lassen. Falls Du das nicht möchtest, solltest Du einen Studenten bitten deine Software zuprogrammieren gegen etwas Taschengeld.
Thorsten schrieb: > @Sven: > > Die Batterie war vermutlich zum testen und ist ganz legetim. Er meine sicher das "analoge" Signal. > Auch wenn mein Code nicht dokumentiert ist, sollte sich nach kurzer > Einarbeitung dieser Code leicht erweitern lassen. Aber Vorsicht: "The PinChanged event is raised on a secondary thread. Because this event is raised on a secondary thread, and not the main thread, attempting to modify some elements in the main thread, such as UI elements, could raise a threading exception." Ein einfacher Aufruf des Delegaten reicht hier also nicht aus.
Nachtrag: Du hast natürlich Invoke schon verwendet; ich meinte, dass man darauf wirklich achten muss und David nicht bei Änderungen das Ganze vereinfachen darf.
In meinem Beispiel wird delegate und Invoke benutzt, aber wenn ich meine persönliche Meinung kundtun darf ist dieses Delegate und Invoke grausam, fast so schlimm wie C/C++ Kyrto Pointer etc. geschreibe.
Thorsten schrieb: > In meinem Beispiel wird delegate und Invoke benutzt, aber wenn ich > meine persönliche Meinung kundtun darf ist dieses Delegate und Invoke > grausam, fast so schlimm wie C/C++ Kyrto Pointer etc. geschreibe. [Halb OT] Es geht etwas kürzer; du musst im Beispiel z.B. nicht den Namen des jeweiligen Controls benutzen (radioButton1.InvokeRequired, radioButton1.Invoke etc.), sondern nur InvokeRequired / Invoke, da du dich ja ohnehin in der Form befindest. Manchmal geht es auch mit kleinen Hilfsmethoden und Lambdas eleganter. private void InvokeUI(Action action) { BeginInvoke(new MethodInvoker(action)); } ... InvokeUI(() => { label.Text = "Aha"; }); Aber so häufig wie "früher" braucht man das dank TPL bzw. async/await ohnehin nicht mehr (in anderen Szenarien; in deinem Beispiel wird es einem wegen der Framework-"Callbacks" natürlich aufgezwungen). [/Halb OT]
Hallo, @Kunibert Hab mir dein Vorschlag angeschaut und wenn ich es richtig verstehe wird damit ein anoymnus delegate benutzt, richtig? Anbei eine neue Version mit dem Vorschlag von Kunibert und einer zusätzlichen Steuerleitungsanzeige.
Kunibert Kappes schrieb: > Thorsten schrieb: >> @Sven: >> >> Die Batterie war vermutlich zum testen und ist ganz legetim. > > Er meine sicher das "analoge" Signal. richtig, da ja behauptet wurde, die serielle Schnittstelle kann analoge Signale verarbeiten, was sie eben nicht kann! Ansonsten @Thorsten: Finde Klasse das Du Ihm da ein konkretes Bsp. gegeben hast!
Das ist super nett Torsten vielen lieben dank. Sehe ich das richtig das der code streifen : } void PinChanged(object sender, SerialPinChangedEventArgs e) { SerialPinChange SerialPinChange1 = 0; SerialPinChange1 = e.EventType; switch (SerialPinChange1) { case SerialPinChange.CtsChanged: if (theSerialPort.CtsHolding) { InvokeUI(() => { radioButton1.Checked = true; }); } else { InvokeUI(() => { radioButton1.Checked = false; }); } break; case SerialPinChange.DsrChanged: if (theSerialPort.DsrHolding) { InvokeUI(() => { radioButton2.Checked = true; }); } else { InvokeUI(() => { radioButton2.Checked = false; }); } break; } } private void InvokeUI(Action action) { BeginInvoke(new MethodInvoker(action)); } Für das erkennen und anzeigen zuständig ist ?
@Sven Jetzt ist es eine Definitionsache was Analog und Digital bedeutet. Die Schnittstelle kann nicht direkt Spannungen präzise messen, aber innerhalb der Hystherese erkennt die Schnitstelle schon Analogespannungen eben als logisch 0 oder 1.
Aber wir wissen beide wie es gemeint war...
Der Codestreifen ist ein Eventhandler. Der Pinchange- und Datareceivevent wird in der Methode OpenCOMPort eingeschaltet über
1 | theSerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived); |
2 | theSerialPort.PinChanged += new SerialPinChangedEventHandler(PinChanged); |
Und in der Methode CloseCOMPort ausgeschaltet und zwar mit
1 | theSerialPort.DataReceived -= new serialDataReceivedEventHandler(DataReceived); |
2 | theSerialPort.PinChanged -= new SerialPinChangedEventHandler(PinChanged); |
Mit der Switch Case Abfrage wird, welcher Pinchange stattgefunden hat z.B. RTS und dann über die Methode InvokeUI die Controls vom UI geändert. Wieso dieser anoyme delegate und BeginInvoke benutzt wird liegt daran, dass die UI und SerialPort in jeweils einen eignen Thread laufen und das geht wohl nur über delegates und invokes. Wenn Du nun 3 weitere serielle Schnittstellen benutzen willst, erweiterst du es wie in deinem Programm und schaltest für jeden den Pinchange event ein, dann in der Methode vom Eventhandler fragst Du wieder mit der Switch Case Anweisung den Zustand ab und änderst deine UI. Also nur noch ein bisschen Copy&Paste und die Methoden umbnennen.
Habe ich gemacht kannste noch mal drüber gucken? und sagen obs so richtig ist. SerialPinChange SerialPinChange1 = 0; switch (SerialPinChange1) { case SerialPinChange.CtsChanged: if (theSerialPortA.CtsHolding) { InvokeUI(() => { radioButton1.Checked = true; }); } else { InvokeUI(() => { radioButton1.Checked = false; }); } break; case SerialPinChange.DsrChanged: if (theSerialPortA.DsrHolding) { InvokeUI(() => { radioButton2.Checked = true; }); } else { InvokeUI(() => { radioButton2.Checked = false; }); } break; } } void PinChanged(object sender, SerialPinChangedEventArgs e) { SerialPinChange SerialPinChange1 = 0; SerialPinChange1 = e.EventType; switch (SerialPinChange1) { case SerialPinChange.CtsChanged: if (theSerialPortB.CtsHolding) { InvokeUI(() => { radioButton1.Checked = true; }); } else { InvokeUI(() => { radioButton1.Checked = false; }); } break; case SerialPinChange.DsrChanged: if (theSerialPortB.DsrHolding) { InvokeUI(() => { radioButton2.Checked = true; }); } else { InvokeUI(() => { radioButton2.Checked = false; }); } break; } } private void InvokeUI(Action action) { BeginInvoke(new MethodInvoker(action)); SerialPinChange SerialPinChange1 = 0; switch (SerialPinChange1) { case SerialPinChange.CtsChanged: if (theSerialPortC.CtsHolding) { InvokeUI(() => { radioButton5.Checked = true; }); } else { InvokeUI(() => { radioButton5.Checked = false; }); } break; case SerialPinChange.DsrChanged: if (theSerialPortC.DsrHolding) { InvokeUI(() => { radioButton6.Checked = true; }); } else { InvokeUI(() => { radioButton6.Checked = false; }); } break; } switch (SerialPinChange1) { case SerialPinChange.CtsChanged: if (theSerialPortD.CtsHolding) { InvokeUI(() => { radioButton7.Checked = true; }); } else { InvokeUI(() => { radioButton7.Checked = false; }); } break; case SerialPinChange.DsrChanged: if (theSerialPortD.DsrHolding) { InvokeUI(() => { radioButton8.Checked = true; }); } else { InvokeUI(() => { radioButton8.Checked = false; }); } break; } Ich bekomme keine Fehler angezeigt also siehts gut aus testen kann ichs erst später.
:-( Dein programm tut was es soll ! SUPER Mein programm tut was es will nicht so gut. Habe dein Code übernommen und angepasst MVS zeigt mir auch keine Fehler an aber der zustand von den 12 Radiobutton ändert sich nie bei keinen port. Könntes du noch mal Drüber sehen ? Vielen dank
Junge junge, hoffentlich sind die Ferien bald vorbei...
DAVID -. schrieb: > Habe dein Code übernommen und angepasst MVS zeigt mir auch keine Fehler > an aber der zustand von den 12 Radiobutton ändert sich nie bei keinen > port. Wie viele Rechtschreib- und Grammatikfehler sind wohl in diesem einen Satz? Dabei ist der Satz in dieser Hinsicht noch harmlos. Wenn Du so liederlich programmierst wie Du schreibst, dann kann da nichts heraus kommen. Sicher macht jeder Fehler - ich auch. Aber was Du hier ablieferst ist schon eine Zumutung für den Leser. Du machst es den Lesern hier im Forum sehr schwer, Dein Anliegen zu verstehen und Dir zu helfen. Ich denke auch Du solltest Dich erst einmal mit den Grundlagen befassen. Eine serielle Schnittstelle kann keine analogen Signale übertragen. Also befasse Dich erst mal mit den Grundlagen, fange auch beim Programmieren klein an und arbeite Dich Schritt für Schritt nach oben. Du mußt schon verstehen was Du da machst und dann wird auch die Hilfe der Forumsuser bei Dir ankommen. Zeno
Hallo, eventuell deutsch nicht seine Muttersprache. @David Tut mir leid, aber das passt nichtmal Ansatzweise. Du hast selbst die Methoden falsch zusammenkopiert und es hat erhlich gesagt null Sinn und Verstand was Du da treibst. Du schaltest nirgends die Eventhandler an, obwohl ich es oben noch erklärt hab, desweiteren um es einfach zu halten würde ich für jede Schnittstelle einen eignen Pinchangeeventhandler benutzen. Wie ich schon gesagt hatte such Dir einen Studenten der Dir das Programm schreibst gegen Taschengeld oder setze Dich mit der Materie auseinander.
Hallo LANGE hats gedauert aber ich habe es scheinbar mit EUER Hilfe hinbekommen. Torsten wie kann ich mich erkenntlich zeigen ? Da mein Programm immer abstütz wenn ich den pin CDChanged verbinde gehe ich davon aus das es nicht ohne weiteres möglich ist diesen pin wie DSR abzufragen ? Habe es mit case SerialPinChange.CDChanged: if (theSerialPort.CDHolding) { InvokeUI(() => { radioButton3.Checked = true; }); } else { InvokeUI(() => { radioButton3.Checked = false; }); } break; Versucht es verursacht auch keine Fehler bin ich den pin verwende dann beendet sich das Programm ohne Meldung Für Ring gibt es erst gar keine vorgaben in der System.IO.Ports Naja immer hin 2 pins zum abfragen sind schon mal besser wie 0 :-) VIELEN DANK EUCH
Keine Ahnung ob man auch CD nutzen kann. Einzigen gefallen den du mir und anderen tun kannst ist dich hinzusetzen und lernen. Ich haette für dein Problem eher ein FTDI 232RL genommen (USB/Serial Adapter), weil der eine gute DLL, sogar .net bietet und 4 Digitale I/O hat.
Meinst du so was ? http://www.ebay.de/itm/x-10-FT232RL-FTDI-USB-zu-TTL-Serien-Converter-Adapter-Modul-5V-3-3V-Fur-Arduino-/291756391053?var=&hash=item43ee093a8d:m:mpw4cnnQYzOYDJSEdE-2O-A ist nur die frage ob die chips originale oder nachbauten sind die sich beim Treiber installieren abschalten. Ich habe schon ein vor langer zeit gekauft (cp2102) der ist auch USB den bekomme aber keinen com port sondern als silicon labs cp210x usb to uart bridge com 3. Ich kann mit meinen Programm zwar den Port offenen aber auf weiteres reagiert die Chip nicht alle 3 pins (rxd/txd/RST haben 3.3 volt gegen masse und mehr pins gibts bei dem nicht. Und mit dem 2ten dieses mal mit kabel: http://www.ebay.de/itm/USB-zu-RS232-TTL-serieller-UART-Wandler-Adapter-Chip-PL2303HX-l-1met-1St-/272299876167?hash=item3f66565f47 Ist es das selbe. Ich werde woll mal einen dieser FT232RL versuchen. USB wäre schon gut. Kann ich den genau so wie bei seriell ansprechen oder muss ich da was beachten ? Vielen DANK
>Ich habe schon ein vor langer zeit gekauft (cp2102) der ist auch USB den >bekomme aber keinen com port sondern als silicon labs cp210x usb to uart >bridge com 3. Passt. >Ich werde woll mal einen dieser FT232RL versuchen. Entschuldigung ich meinte FT245R, aber aufpassen die Pins können nur 5V/3,3V. Ansonsten, wenn dein Kassen-PC einen Parallelport hat, dann könnte man auch diesen nutzen. stackoverflow.com/questions/4607935/c-sharp-lpt-inpout32-dll
Der FT232R bietet auch ein paar I/O's siehe Seite 4 http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdf
Ja der hat einen parallelenport aber ich lese immer wieder das dieser unter Windows 7 nicht mehr genutzt werden kann und in Windows 10 nicht mehr existiert. Ich würde gerne USB nehmen schon um in Zukunft auf der Sicherung Seite zu sein. So weit ich weis sind serielle Anschlüsse beinah ausgestorben und noch mal ein borad mit >4< stück zu finden wird Woll ein ding von unmöglich. Ich werde schon doch den FT232RL testen da erkenne ich die pins wieder ist mir zum anfangen einfacher würde ich sagen. Danke für deine mühe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.