Go Down

Topic: String vom Serial (RS232) lesen...  (Read 129 times) previous topic - next topic

Basinski

Hallo zusammen!
Ich nutze gerade einen Mega2560 um eine recht simple Aufgabe zu lösen. So dachte ich.
Ich habe einen GSV2 Kraft-Messverstärker von ME-Messtechnik, welcher über die RS232 kontinuierlich Messwerte als ASCII herausgibt.

Da man an dem MV keine Werte direkt ablesen kann wollte ich diese einfach per Arduino visualisieren (LCD-Display). Ein Display habe ich schon mal genutzt also soweit kein Problem.

Da der Mega 4 serielle Schnittstellen besitzt wollte ich auch gleichzeitig den Input vom GSV2 an den USB weiterleiten, um ggf. später auch noch einen PC als Datenlogger mitlaufen zu lassen.

Soweit so gut.

Ich habe den GSV2 mal an die Serial1 vom Mega2560 gehangen und lese dann wie folgt mit:
Code: [Select]

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.setTimeout(100);
}

void loop()
{
  String inStr;
  // read from port 1, send to port 0:
  if (Serial1.available() >0 )
  {
     inStr = Serial1.readString();
     Serial.println("String: "+ inStr);
     Serial1.flush();
  } 
}


Was dabei herauskommt ist aber leider nicht lesbar:
String: i⸮⸮⸮6⸮⸮⸮c⸮⸮
String: i⸮⸮⸮6⸮⸮⸮c⸮⸮
String: i⸮⸮⸮6⸮⸮⸮c⸮⸮
String: i⸮⸮⸮6⸮⸮⸮c⸮⸮
String: i⸮⸮⸮6⸮⸮⸮c⸮⸮

Wenn ich z.B. mal mit Putty auf dem Port mithöre sehe ich als Ergebnis :
-0000.63 N
-0000.63 N
-0000.63 N
-0000.62 N
-0000.63 N

Ist die ReadString() Methode hier nicht korrekt??

Gruß Sascha


HotSystems

Wenn dein GSV2 Kraft-Messverstärker eine echte RS232-Schnittstelle besitzt, darfst du diese nicht direkt an den Arduino anschließen. Die RS232 arbeitet mit +- größer 5 Volt und würde deine serielle Schnittstelle killen.

Du brauchst einen RS232-TTL-Wandler dazwischen.
Daher kommen vermutlich auch die falschen Daten.

Hast du denn auch die Baudrate richtig eingestellt ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

noiasca

von der Hardware abgesehen, arbeite bitte dieses Tutorial durch, dann klappts auch mit der Seriellen Übertragung:

http://forum.arduino.cc/index.php?topic=396450

DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

uxomm

#3
Sep 18, 2018, 04:02 pm Last Edit: Sep 19, 2018, 12:34 am by uxomm
Ist die ReadString() Methode hier nicht korrekt??
Jedenfalls kompliziert.
Falls die Ausgabe des Messverstärkers "menschenlesbar" ist, dann verwende ich einen Sketch wie diesen zum "Durchreichen":
Code: [Select]
void setup()  {
    Serial.begin(9600);
    Serial1.begin(9600);
}

void loop()  {
    if (Serial1.available())  {
        Serial.write(Serial1.read());
    }   
}

Aber zu klären ist ob es RS232 ist oder UART TTL.
RS232 verwendet - wie bereits erwähnt wurde - andere Spannungspegel und ist im Vergleich zu UART/TTL invertiert.

Edit:
Es scheint sich wohl um eine "echte" RS232 Schnittstelle zu handeln.
Zitat von der Website:
Quote
Digital-Messverstärker GSV-2
Die Geräte GSV-2 sind in Ausführungen mit- und ohne Display, mit RS232, mit CANBus (CANopen Protokoll), mit USB, mit Ethernet oder mit SD-Karte als Datenlogger verfügbar.
In diesem Fall ist wohl eine RS232 zu UART TTL Schaltung nötig. Gibt es schon fertig (Beispiel 1, Beispiel 2, Beispiel 3), oder selbst bauen z.B. mit MAX232.
Always decouple electronic circuitry.

Go Up