SerialPort Anfängerfragen



  • Hallo zusammen, ich bin noch totaler C++ Anfänger, ich möchte eine Elektronik per SerialPort mit dem PC kommunizieren lassen.
    Das senden funktioniert soweit einwandfrei, nur das empfangen macht noch Probleme. Wie man dem Code entnehmen kann, habe ich dazu ein Microsoft Beispielprogramm zerstückelt.
    In der Funktion check_controller() versuche ich die Antwort des uc zu empfangen um dessen Betriebsbereitschaft abzufragen.
    Es dauert aber mehrere Schleifendurchläufe bis der Wert überhaupt eingelesen und auf der Console ausgegeben wird. Da ich zusätzlich noch einen Sensor abfragen möchte benötige ich maximale Geschwindigkeit. Was mache ich falsch bzw was muss ich ändern damit der Empfang schneller geht.

    Vielen Dank schonmal

    Grüße Max

    Code

    #include "stdafx.h"
    #include <iostream>
    #include "windows.h"
    using namespace System;
    #using <System.dll>
    using namespace System;
    using namespace System::IO::Ports;
    using namespace System::Threading;
    
    // COMPort Initialisierung
    public ref class COMPORT
    {
    
    private:
        static bool _continue;
        static SerialPort^ _serialPort;
    
    public:
        static void comport_init()
        {		
    
        _serialPort = gcnew SerialPort();
    
    // SerialPort einstellen
    _serialPort->PortName = "COM10";
    _serialPort->BaudRate = 115200;
    _serialPort->Parity = (Parity)Enum::Parse(Parity::typeid, "None");
    _serialPort->DataBits = 8;
    _serialPort->StopBits = (StopBits)Enum::Parse(StopBits::typeid, "One");
    _serialPort->Handshake = (Handshake)Enum::Parse(Handshake::typeid, "None");
    // read/write timeouts setzen
    _serialPort->ReadTimeout = 500;
    _serialPort->WriteTimeout = 500;
    
    _serialPort->Close();
    _serialPort->Open();
    
        }
    
    public:
    	static void close_port ()
    	{
    	_serialPort->Close();
    	}
    
    public:
    	static int check_controller ()
    	{
    	int timeout = 0;
    	_continue = true;
    	Console::WriteLine(L" Überprüfe Controller");
    
    	while(_continue)
    	{
    	try
    	{
    	_serialPort->WriteLine(String::Format("4") ); // Controllerstatus abfragen
    	String^ message	= _serialPort->ReadLine();
    	Console::WriteLine(message);
    	_continue = false;
    	return 1;
    	}
    	catch (TimeoutException ^)
    	{
    		timeout++;
    		if(timeout>10)
    		{
    		Console::WriteLine(L" Fehler: Timeout .... Controller nicht bereit!");
    		return 0;
    		}			
    	}
    	}	
    	}
    };
    
    int main(array<System::String ^> ^args)
    {
    
    	COMPORT::comport_init();
    	COMPORT::check_controller();	 
    COMPORT::close_port(); //SerielPort freigeben
    return 0;
    }
    


  • na du postest hier im Forum von MFC und das was du machst hat nix mit MFC geschweige mit C++ zu tun das ist entweder CLI/.net (was man auch nocht benutzen sollte) oder C#



  • Ich arbeite mit Visual Studio 2010 und programmiere in C++, wie schon gesagt ist der Codeausschnitt von einem Microsoft Beispielprogramm. Ich finde leider kein anderen Beispiel. Hat jemand zufällig ein solches Grundgerüst mit dem ich Daten per ComPort senden und empfangen kann?



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Max1988 schrieb:

    Ich [...] programmiere in C++

    Nein! Was du da programmierst, ist C++/CLI. Das ist was anderes als C++. C++/CLI ist eine Programmiersprache, die als Schnittstelle zwischen C/C++ und .NET-Sprachen wie C# oder VB.NET gedacht ist. Komplette Anwendungen sollte man damit eigentlich eher nicht schreiben. Wenn du bei .NET bleiben willst, kannst du z.B. zu C# wechseln.

    Siehe auch hier: http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/



  • Okay ich dachte ich programmiere in C++ 🙂 Sorry !
    Ich habe das ganze nun zum laufen bekommen, werde aber dennoch auf C# umsteigen, da mir dies schon von mehreren Leuten empfohlen wurde.
    Vielen Dank
    Gruß Max


Log in to reply