Forum: PC-Programmierung Java und serielle Schnittstelle


von ChrisM (Gast)


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
  }

von ChrisM (Gast)


Lesenswert?

Hier noch der Link auf den JSSC-Beitrag
Beitrag "Re: Java serielle Schnittstelle mit JSSC"

von Little B. (lil-b)


Lesenswert?

Was ist denn deine Gegenstelle?
Sicher, dass auch Daten ankommen, und nicht dein externes Gerät 
abstürzt?

von ChrisM (Gast)


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
}

von ChrisM (Gast)


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.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

ChrisM schrieb:
> Mir scheint fast, als wenn der Fehler bei Windows liegt.

Schau mal mit portmon nach ob es irgendwas auffälliges gibt.

von Georg (Gast)


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

von ChrisM (Gast)


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.

von ChrisM (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.