-         

Ergebnis 1 bis 4 von 4

Thema: Problem VisualC++: Einzelnes Zeichen mit serialPort senden!

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Jacob2
    Registriert seit
    26.05.2007
    Ort
    Berlin
    Beiträge
    345

    Problem VisualC++: Einzelnes Zeichen mit serialPort senden!

    Anzeige

    Hi,
    ich möchte von einem µC über RS-232 Daten an den PC schicken, um sie dann weiter zu verarbeiten. Die Daten (drei Integerwerte) sollen immer im Dreierpack versendet werden. Mein Problem liegt bei der PC-Software, die die Datenpakete empfangen soll.

    Aus organisatorischen Gründen soll der PC mit einem definierten Zeichen (char 'O') ein Datenpaket abrufen, das der µC dann abschickt. Mit Hyperterminal funktioniert das alles sehr gut (ich tippe O und ein Datensatz erscheint)!! Die µC-Software müsste daher in Ordnung sein.

    Das Empfangen funktioniert auch mit meiner in Visual C++ geschriebenen Software mittels der serialPort-Klasse gut, Probleme gibts beim Senden des "Anforderungszeichens". Das klappt noch nicht, jedenfalls sendet der µC keine Daten!!!

    Folgenden Code habe ich dafür verwendet:
    Code:
    array<wchar_t, 1>^ Buffer = gcnew array<wchar_t, 1>('O');
    serialPort1->Write(Buffer, 0, 1); //Datensatz anfordern
    Diese Write-Funktion sendet also ein char-Array (mit 'O') über die Schnittstelle. Die etwas eigene Art der Deklaration des Arrays war mir erst etwas fremd, habe das dann mit der Hilfe aber so hingebastelt. Ist da vielleicht etwas falsch? Konnte dazu nicht soviel im Internet finden...

    Achja, falls von Bedeutung: Auf dem µC wird das Zeichen mit uart_getc() aus Fleury's Bibliothek ausgelesen.

    Habt ihr eine Idee, woran das liegen könnte? Wird das Zeichen 'O' vielleicht nicht richtig interpretiert?
    Roboter, CNC Fräse, Elektronik und Basteleien stelle ich auf meiner Website vor...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    warum so kompliziert?

    Wenn du den Buffer ganz normal als char Array deklarierst und mit "O" fütterst, sollte doch ein Typecast auf String der Write Funktion genügen, oder?

    serialPort1->Write(String(Buffer), 0, 1); //Datensatz anfordern

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Jacob2
    Registriert seit
    26.05.2007
    Ort
    Berlin
    Beiträge
    345
    sollte doch ein Typecast auf String der Write Funktion genügen
    Leider nein...

    Mit diesem Code:
    Code:
    char Buffer[1];
    Buffer[0] = 'O';
    serialPort1->Write(String(Buffer), 0, 1); //Datensatz anfordern
    bekomme ich folgenden Fehler:
    Code:
    error C2664: 'void System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> ^,int,int)': Konvertierung des Parameters 1 von 'System::String' in 'cli::array<Type,dimension> ^' nicht möglich
    1>        with
    1>        [
    1>            Type=wchar_t,
    1>            dimension=1
    1>        ]
    1>        Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    Roboter, CNC Fräse, Elektronik und Basteleien stelle ich auf meiner Website vor...

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    array<unsigned char>^ texBufArray = gcnew array<unsigned char>(24);
    Quelle: http://social.msdn.microsoft.com/For...9-3308070be860

    wie du an dem Beispiel sehen kannst, geben die die Anzahl in der Klammer an. Wahrscheinlich interpretiert er dein 'O' (laut meinem Tafelwerk 79dez) als eine Zahl.

    sast

    雅思特史特芬
    开发及研究

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •