Forum: PC-Programmierung RxTx Java Event Listener mit USB Converter Problem


von blackson1c (Gast)


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
}

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.