PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem VisualC++: Einzelnes Zeichen mit serialPort senden!



Jacob2
15.12.2010, 07:32
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:

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?

sast
15.12.2010, 08:16
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

Jacob2
15.12.2010, 11:48
sollte doch ein Typecast auf String der Write Funktion genügen
Leider nein...

Mit diesem Code:

char Buffer[1];
Buffer[0] = 'O';
serialPort1->Write(String(Buffer), 0, 1); //Datensatz anfordern

bekomme ich folgenden Fehler:

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

sast
15.12.2010, 12:04
array<unsigned char>^ texBufArray = gcnew array<unsigned char>(24);
Quelle: http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/9939ead8-29ce-4b7c-abd9-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