Java und serielle Schnittstelle

Gast #4597197
Lesenswert?

Hier gibt es einen Beitrag über die Benutzung von JSSC.

Mittlerweile habe ich den Code für das Senden eines Wertes und den 
Empfang der Antwort die aus mehreren Werten bestehen kann, 
umgeschrieben.

Der Ablauf ist dabei folgender:

1. seriellen Buffer Ein- und Ausgang löschen
2. Wert senden
3. auf Antwort warten

Das Programm funktioniert dabei manchmal seht gut und es werden 200 
Ping-Pong Aktionen problemlos ausgeführt.
Wenn es aber einmal einen Timeoutfehler gibt, sind alle folgenden 
Übertragungen auch mit einem Timeout behaftet.

Ich habe alles Mögliche probiert, aber eine zuverlässige Kommunikation 
scheint nicht möglich zu sein.

Hat irgend jemand noch eine Idee?

1
  public int[] ping(int valueToBeSend, int dataLength) throws SerialPortException, SerialPortTimeoutException 
2
  {
3
    int timerout_ms = 500;
4
    int[] data=new int[dataLength];
5
      
6
      try 
7
      {
8
      serialPort.purgePort(SerialPort.PURGE_RXCLEAR);
9
      serialPort.writeInt(valueToBeSend);
10

11
    } catch (SerialPortException e1) 
12
    {
13
      // TODO Auto-generated catch block
14
      e1.printStackTrace();
15
    }
16
    data= serialPort.readIntArray(dataLength, timerout_ms);    
17

18
    return data;
19
  }
Gast #4597277
Lesenswert?

Daran habe ich auch schon gedacht. Ich habe verschiedene Geräte. Einmal 
ein ARM-Board mit FDTI-Chip aber auch einen Arduino Uno.

Der TestCode au dem UNO sieht so aus:
1
//Arduino Serial Echo Code
2
   
3
void setup() 
4
{
5
  Serial.begin(115200);
6
  Serial.println("arduino serial echo ready");
7
}
8

9
void loop() 
10
{
11
  if (Serial.available()) 
12
  {
13
    Serial.write(Serial.read());
14
  }        
15
}
Gast #4597365
Lesenswert?

Mir scheint fast, als wenn der Fehler bei Windows liegt. Es scheint 
nicht möglich eine Ping-Pong Kommunikation mit einem Zeichen über die 
serielle Schnittstelle längere Zeit fehlerfrei zu betreiben.
Gast #4597543
Lesenswert?

ChrisM schrieb:
> Mir scheint fast, als wenn der Fehler bei Windows liegt. Es scheint
> nicht möglich eine Ping-Pong Kommunikation mit einem Zeichen über die
> serielle Schnittstelle längere Zeit fehlerfrei zu betreiben.

Das scheint nur so. Ich betreibe Analysegeräte seit mehr als 20 Jahren 
fehlerfrei im 24h-Betrieb, unter Benutzung des seriellen API von Win32. 
Allerdings mit einem richtigen Protokoll.

Georg
Gast #4597836
Lesenswert?

Danke für eure Antworten.
Ich habe mal eine genauere Analyse gestartet. Bis jetzt habe ich das 
Programm unter Ubuntu auf einer Win10-VM betrieben. So wie es aussieht, 
liegt es wohl an der VM.

Ich habe folgende Tests durchgeführt:

1. Ubuntu 14.03 in VirtualBox auf Win10 => bleibt sporadisch hängen
2. Ubuntu 14.03 native => läuft durch
3. Win10 native => läuft durch

Ich bin ursprünglich davon ausgegangen, dass die serielle Schnittstelle 
über die VM gut läuft, weil z.B. es mit Octave ( Matlab Clone ) gut 
funktioniert hat.
Gast #4597838
Lesenswert?

>> Mir scheint fast, als wenn der Fehler bei Windows liegt.
Georg schrieb:
>Das scheint nur so.

Ich habe den Verdacht nur geäußert, weil ich mit C# schon einmal 
ähnliche Probleme hatte und die serielle Schnittstelle Jahrelang unter 
Windows nicht richtig funktioniert hatte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren