myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Senden über SerialPort funktioniert nur nach ButtonClick, nicht nach Methodenaufruf
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Senden über SerialPort funktioniert nur nach ButtonClick, nicht nach Methodenaufruf

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 6
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen


wlfmario ist offline

Senden über SerialPort funktioniert nur nach ButtonClick, nicht nach Methodenaufruf

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,
ich beschäftige mich erst seit kurzem mit C# und etwas Java daher nicht gleich schimpfen wenn ich evtl. den falschen Suchbegriff verwendet habe. ;)

Jetzt aber zu meinen kleinen Problemchen !
Ich habe mich etwas mit dem SerialPort beschäftigt und eine kleine Übungsanwendung in der MFC
Umgebung geschrieben.
Wenn ich jetzt etwas über den SerialPort senden möchte, habe ich das meist über Buttons ect. gemacht, was bis jetzt auch immer gut Funktioniert hat.
Nur wenn ich aus dem Programm heraus bsp. einer Funktion etwas senden möchte, bekomme ich werder eine Fehlermeldung noch wird mir das Ergebnis angezeigt.
Es geht genauer um die Zeile "serialPort1.WriteLine("$$");" im Code die nach dem Absenden Einstellungen zurück gibt.
Wenn ich diese in ein Click-Ereignis packe, funktioniert es.
Kann mir jemand erklären warum dies nicht Funktioniert ?
Danke schon Einmal für eure Antworten.

C#-Code:
...
try
                {
                    serialPort1.BaudRate = Convert.ToInt32(ComboBoxBaud.Text);
                    serialPort1.PortName = ComboBoxPort.Text;
                    serialPort1.Parity = Parity.None;
                    serialPort1.StopBits = StopBits.One;
                    serialPort1.DataBits = 8;
                    serialPort1.Handshake = Handshake.None;
                    serialPort1.RtsEnable = true;
                    serialPort1.DtrEnable = true;
                    serialPort1.ReadTimeout = 500;
                    serialPort1.WriteTimeout = 500;
                    serialPort1.Open();
                }
                catch (Exception e) { MessageBox.Show("Fehler !\n" + e.Message, "Verbindungs Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); }

                if (serialPort1.IsOpen)
                {
                    Verbunden();
                        serialPort1.WriteLine("$$");
                }
            }

        }

        private String rxstring;
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxstring = serialPort1.ReadExisting();
            Invoke(new EventHandler(DisplayTxt));
        }
...
09.12.2018 22:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
weismat
myCSharp.de-Mitglied

Dabei seit: 20.09.2005
Beiträge: 869
Entwicklungsumgebung: Vistual Studio 2017, VS Code
Herkunft: Frankfurt am Main


weismat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Probiere mal, ob Dir ein serialPort1.Flush() nach dem WriteLine() hilft.
10.12.2018 08:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 110
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

was wird den in "Verbunden();" ausgeführt?
10.12.2018 09:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 6
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen

Themenstarter Thema begonnen von wlfmario

wlfmario ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In Verbunden() werde nur Buttons Aktiviert oder Deaktiviert!
serial1.Flush(); gibt es leider bei mir nicht bzw. kennt es nicht.
10.12.2018 15:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.393
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
serial1.BaseStream.Flush();
10.12.2018 17:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 6
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen

Themenstarter Thema begonnen von wlfmario

wlfmario ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leider bringt das Flush auch nichts.
Nur wie schon geschrieben im Click Ereignis eines Buttons oder ähnlich funktioniert es !
10.12.2018 20:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.178
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Beschreibung macht nur so alleinstehend wenig sinn, weil ein UI Event nichts mit dem SerialPort zutun haben kann.
Wenn dann ist es ein Seiteneffekt aufgrund eines Programmierfehlers, den wir hier nicht erkennen können, weil wir nur den kleinen Schnipsel Code haben.
10.12.2018 23:07 Beiträge des Benutzers | zu Buddylist hinzufügen
MartinH MartinH ist männlich
myCSharp.de-Mitglied

avatar-1761.gif


Dabei seit: 08.11.2005
Beiträge: 177
Herkunft: Asperg


MartinH ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hast du mal einen Breakpoint gesetzt, ob dein WriteLine überhaupt aufgerufen wird?

Eventuell ist der Port noch nicht offen und serialport1.IsOpen gibt noch false zurück.
11.12.2018 07:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was genau funktioniert da nicht?
Kriegst du keine Antwort im Receive Ereignis oder bist du sicher dass 1. die Zeile ausgeführt wird und 2. nichts beim Empfänger ankommt?
11.12.2018 14:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 6
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen

Themenstarter Thema begonnen von wlfmario

wlfmario ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe jetzt noch einmal getestet und bemerkt das dass

C#-Code:
serialPort1.WriteLine("$$");

noch vor den starten der Gbrl Software auf dem Adruino gesendet wird.
Daher denke ich mal kommt auch weiter keine Antwort vom Adruino.
Ich müsste testen ob die Software auf dem Adruino gestartet ist oder ob die Seriale Schnittstelle fertig ist nach dem ersten Lesen der Daten.

Wie kann man dies am besten bewerkstelligen ?
Wenn der Adruino gestartet ist, erscheint in in einer ComoBox der Text "Gbrl usw." ob es Ratsam ist nach dem Text zu suchen und dann serialPort1.WriteLine("$$"); aufzurufen oder wie könnte ich dies abfragen ?
14.12.2018 15:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wer ändert die Combobox? Dort kannst du dir merken dass der Arduino jetzt bereit ist.
Irgendwelche Texte von GUI Elementen solltest du nicht als Statusinformation hernehmen. Irgendwann änderst du den Text ab und dein ganzes Programm macht nur noch Fehler.
14.12.2018 22:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
wlfmario wlfmario ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2018
Beiträge: 6
Entwicklungsumgebung: Visual Studio Express
Herkunft: Dormagen

Themenstarter Thema begonnen von wlfmario

wlfmario ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mit

C#-Code:
private void DisplayTxt(object sender, EventArgs e)
        {
            RichTextBoxOutput.AppendText(rxstring);
            RichTextBoxOutput.ScrollToCaret();
        }

private String rxstring;
        private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxstring = serialPort1.ReadExisting();
            Invoke(new EventHandler(DisplayTxt));
        }

schreibe ich ich die empfangenden Daten in eine RichTextBox.
Nach dem Start vom Adruino (Reset) gibt die CNC Firmware einen Text aus in etwa "Gbrl V1.x ['$' for Help]"
Diesen Text könnte ich zwar Filtern allerdings wenn dieser mal geändert wird, macht das Programm eben nur Mist.
Daher meine Frage ob man das irgenwie intelligenter abfragen könnte.
14.12.2018 23:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.178
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn es keinen ordentlichen Handshake gibt, dann hast Du keine andere Möglichkeit der automatischen Erkennung.
Übliches Problem beim SerialPort.
15.12.2018 00:10 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 18.11.2019 12:27