Hi
ich hab ein Problem mit der Programierung/abfragen einer Seriellen schnitstelle.
Ich verwende Visual Studio 2015 und dass Projekt wird als C++/CLR konsolenanwendugn geschrieben
Der Verwendete Code: https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived(v=vs.110).aspx
Dass funktioniert auch so weit, allerdings gibt es bei manchen Zeichen Probleme.
Per Definition gibt es immer 17Bytes an Daten zurück, welche mit einem 0xFD beginnen sollten, und in den Letzten 8 BYtes Sensorwerte codieren sollte, welche im Bereich von 0x80-0x95 liegen sollten.
Nun kommen bei mir auch die 17Byte an, allerdings gibt es bei den hohen werten Fehler.
Mein String:
3F 3 23 6 5 3F 0 11 0 7F 7F 7F 7F 7A 3F 7F 7F
Soll String:
FD 03 23 06 05 EC 00 11 00 7E 80 7F 7F 80 80 7B 7F
Richtig sind also die niedrigen Werte (3 23 6 5 11). Bei den hohen werten gibt es allerdings unterschiede welche ich mir nicht erklären kann.
Auf Empfehlung eines Freundes habe ich auch mal mit static_cast<unsigned> versucht die ausgabe zu "korrigieren", allerdings hat sich dadurch die ausgabe nicht verändert.
Da ich nun leider nicht Tief genug in C++ drin stecke, um nachfolziehen zu können was in meinem kopierten Code abgeht, hoffe ich dass mir hier einer helfen kann.
Grüße
M1ch1
ich hab ein Problem mit der Programierung/abfragen einer Seriellen schnitstelle.
Ich verwende Visual Studio 2015 und dass Projekt wird als C++/CLR konsolenanwendugn geschrieben
Der Verwendete Code: https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived(v=vs.110).aspx
Dass funktioniert auch so weit, allerdings gibt es bei manchen Zeichen Probleme.
Per Definition gibt es immer 17Bytes an Daten zurück, welche mit einem 0xFD beginnen sollten, und in den Letzten 8 BYtes Sensorwerte codieren sollte, welche im Bereich von 0x80-0x95 liegen sollten.
Nun kommen bei mir auch die 17Byte an, allerdings gibt es bei den hohen werten Fehler.
Mein String:
3F 3 23 6 5 3F 0 11 0 7F 7F 7F 7F 7A 3F 7F 7F
Soll String:
FD 03 23 06 05 EC 00 11 00 7E 80 7F 7F 80 80 7B 7F
Richtig sind also die niedrigen Werte (3 23 6 5 11). Bei den hohen werten gibt es allerdings unterschiede welche ich mir nicht erklären kann.
Auf Empfehlung eines Freundes habe ich auch mal mit static_cast<unsigned> versucht die ausgabe zu "korrigieren", allerdings hat sich dadurch die ausgabe nicht verändert.
Da ich nun leider nicht Tief genug in C++ drin stecke, um nachfolziehen zu können was in meinem kopierten Code abgeht, hoffe ich dass mir hier einer helfen kann.
Grüße
M1ch1
Code:
ref class PortDataReceived //Quelle:https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived(v=vs.110).aspx
{
public:
static void Main()
{
SerialPort^ mySerialPort = gcnew SerialPort("COM3");
mySerialPort->BaudRate = 115200; //BAudrate von Hterm übernommen
mySerialPort->Parity = Parity::None;
mySerialPort->StopBits = StopBits::One;
mySerialPort->DataBits = 8;
mySerialPort->Handshake = Handshake::None;
mySerialPort->RtsEnable = true;
mySerialPort->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort->Open();
Console::WriteLine("Zum Bendet belibige Taste drücken!");
Console::WriteLine();
Console::ReadKey();
mySerialPort->Close();
}
private:
static void DataReceivedHandler(
Object^ sender,
SerialDataReceivedEventArgs^ e)
{
SerialPort^ sp = (SerialPort^)sender;
int Bytestoread = sp->BytesToRead;
String^ indata = sp->ReadExisting();
for (int i = 0; i < Bytestoread; i++)
{
cout << hex << static_cast<unsigned>(indata[i]);
}
}