RxTx Java Event Listener mit USB Converter Problem

Gast #1603470
Lesenswert?

Hi, vielleicht könnt ihr mir helfen.

Ich versuche gerade über Java ein Messmodull anzusprechen über die USB 
Schnittstelle. Dabei wird ein ADAM 456^ USB to RS485 verwendet.

Dabei kann ich befehle zur Hardware senden, aber bekomme keine reaktion 
vom Eventlistener.
Wenn ich das ganze über einen RS232 Schnittstelle laufen lasse geht das 
ohne Probleme.
Weiß einer wie man das umgehen kann ?
1
package usb;
2

3
import gnu.io.*;
4

5
import java.io.IOException;
6
import java.io.InputStream;
7
import java.io.OutputStream;
8
import java.util.Enumeration;
9
import java.util.TooManyListenersException;
10

11
//import OeffnenUndSenden.serialPortEventListener;
12

13

14

15
public class Main implements Runnable {
16

17
  /**
18
   * @param args
19
   */
20
  public static void main(String[] args)
21
  {
22
    Runnable runnable = new Main();
23
    new Thread(runnable).start();
24
    System.out.println("main finished");
25
  }
26

27
  /**
28
   *
29
   */
30

31
  CommPortIdentifier serialPortId;
32
  Enumeration enumComm;
33
  SerialPort serialPort;
34
  OutputStream outputStream;
35
  InputStream inputStream;
36
  Boolean serialPortGeoeffnet = false;
37

38
  int baudrate = 460800;
39
  int dataBits = SerialPort.DATABITS_8;
40
  int stopBits = SerialPort.STOPBITS_1;
41
  int parity = SerialPort.PARITY_NONE;
42
        int fluss = SerialPort.FLOWCONTROL_NONE;
43
  String portName = "/dev/ttyUSB0";
44

45
  int secondsRuntime = 60;
46

47
  public Main()
48
  {
49
    System.out.println("Konstruktor: EinfachSenden");
50
  }
51

52
    public void run()
53
    {
54
        Integer secondsRemaining = secondsRuntime;
55
        if (oeffneSerialPort(portName) != true)
56
          return;
57

58
    while (secondsRemaining > 0) {
59
      System.out.println("Sekunden verbleiben: " + secondsRemaining.toString() );
60
      secondsRemaining--;
61
      try {
62
      Thread.sleep(2000);
63
    } catch(InterruptedException e) { }
64
    sendeSerialPort("@128001disc;&");
65
    }
66
  schliesseSerialPort();
67

68

69
    }
70

71
  boolean oeffneSerialPort(String portName)
72
  {
73
    Boolean foundPort = false;
74
    if (serialPortGeoeffnet != false) {
75
      System.out.println("Serialport bereits geöffnet");
76
      return false;
77
    }
78
    System.out.println("Öffne Serialport");
79
    enumComm = CommPortIdentifier.getPortIdentifiers();
80
    while(enumComm.hasMoreElements()) {
81
      serialPortId = (CommPortIdentifier) enumComm.nextElement();
82
      if (portName.contentEquals(serialPortId.getName())) {
83
        foundPort = true;
84
        break;
85
      }
86
    }
87
    if (foundPort != true) {
88
      System.out.println("Serialport nicht gefunden: " + portName);
89
      return false;
90
    }
91
    try {
92
      serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
93
    } catch (PortInUseException e) {
94
      System.out.println("Port belegt");
95
    }
96

97
    try {
98
      outputStream = serialPort.getOutputStream();
99
    } catch (IOException e) {
100
      System.out.println("Keinen Zugriff auf OutputStream");
101
    }
102

103
    try {
104
      inputStream = serialPort.getInputStream();
105
    } catch (IOException e) {
106
      System.out.println("Keinen Zugriff auf InputStream");
107
    }
108
    try {
109
      serialPort.addEventListener(new serialPortEventListener());
110
    } catch (TooManyListenersException e) {
111
      System.out.println("TooManyListenersException für Serialport");
112
    }
113
    serialPort.notifyOnDataAvailable(true);
114
    try {
115
      serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
116
                        serialPort.setFlowControlMode(fluss);
117
    } catch(UnsupportedCommOperationException e) {
118
      System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
119
    }
120

121
    serialPortGeoeffnet = true;
122
    return true;
123
  }
124

125
  void schliesseSerialPort()
126
  {
127
    if ( serialPortGeoeffnet == true) {
128
      System.out.println("Schließe Serialport");
129
      serialPort.close();
130
      serialPortGeoeffnet = false;
131
    } else {
132
      System.out.println("Serialport bereits geschlossen");
133
    }
134
  }
135

136
  void serialPortDatenVerfuegbar() {
137
    try {
138
      byte[] data = new byte[150];
139
      int num;
140
      while(inputStream.available() > 0) {
141
        num = inputStream.read(data, 0, data.length);
142
        System.out.println("Empfange: "+ new String(data, 0, num));
143
      }
144

145
    } catch (IOException e) {
146
      System.out.println("Fehler beim Lesen empfangener Daten");
147
    }
148
  }
149

150
        void sendeSerialPort(String nachricht)
151
  {
152
    System.out.println("Sende: " + nachricht);
153
    if (serialPortGeoeffnet != true)
154
      return;
155
    try {
156
      outputStream.write(nachricht.getBytes());
157
    } catch (IOException e) {
158
      System.out.println("Fehler beim Senden");
159
    }
160
  }
161

162

163
  class serialPortEventListener implements SerialPortEventListener {
164
    public void serialEvent(SerialPortEvent event) {
165
      System.out.println("serialPortEventlistener");
166
      switch (event.getEventType()) {
167
      case SerialPortEvent.DATA_AVAILABLE:
168
        serialPortDatenVerfuegbar();
169
        break;
170
      case SerialPortEvent.BI:
171
      case SerialPortEvent.CD:
172
      case SerialPortEvent.CTS:
173
      case SerialPortEvent.DSR:
174
      case SerialPortEvent.FE:
175
      case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
176
      case SerialPortEvent.PE:
177
      case SerialPortEvent.RI:
178
      default:
179
      }
180
    }
181
  }
182
}

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