Проблема с последовательным портом Java

Я пытаюсь включить / выключить реле, но пока мне это не удается. Я попробовал программу Coolterm, чтобы проверить, правильно ли установлены драйверы, и да, она работает, и я смог включить / выключить ее через графический интерфейс. Однако у меня проблема с отправкой команды через java для включения реле.

Параметры связи: 8 данных, 1 остановка, без четности Скорость передачи: 9600

Команды: Команда ВЫКЛ: FF 01 00 (HEX) или 255 1 0 (DEC)

Команда ВКЛ: FF 01 01 (HEX) или 255 1 1 (DEC)

Мой код ниже:

public class Application {

InputStream in;
OutputStream out;
String dataHex = "FF 01 01";

void connect(String portName) throws Exception {

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
System.out.println(portIdentifier);
CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000);
System.out.println(commPort);
SerialPort serialPort = (SerialPort) commPort;
System.out.println(serialPort);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

this.in = serialPort.getInputStream();
this.out = serialPort.getOutputStream();

System.out.println(dataHex.getBytes());
out.write(dataHex.getBytes());

System.out.println("end");


}

InputStream getIn() {
return this.in;
}

OutputStream getOut() {
return this.out;
}

public static void main(String args[]) throws QTException, FileNotFoundException, IOException {
Application app = new Application();
try {

app.connect("/dev/tty.usbserial-A400953X");

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
}

Заранее спасибо...


person Aydin Gorkem Isitan    schedule 23.08.2011    source источник
comment
Какие библиотеки Java вы используете?   -  person Freiheit    schedule 23.08.2011
comment
import java.io.FileNotFoundException; import java.io.IOException; import quicktime.QTException; import gnu.io. *; import java.io.InputStream; import java.io.OutputStream; игнорировать библиотеку Qt, я забыл удалить ее, так как раньше работал с ней ..   -  person Aydin Gorkem Isitan    schedule 23.08.2011
comment
В последний раз, когда я занимался разработкой последовательного порта, я провел простое тестирование своего приложения, удалив устройство, с которым я общался. Поэтому вместо тестирования вашего приложения, ожидая, пока оно отключит реле, протестируйте свое приложение, попросив другое приложение прослушивать тот же TTY и посмотреть, отправляет ли ваше приложение правильные команды. После того, как вы убедились, что ваше приложение отправляет правильные команды, представьте фактическое последовательное устройство.   -  person Freiheit    schedule 23.08.2011


Ответы (2)


Ваша программа в настоящее время отправляет строку «FF 01 01» длиной 8 байт в кодировке, совместимой с ascii. Это кажется довольно необычным, я думаю, ваш гаджет действительно ожидает 3 байта, как в следующем коде:

byte[] data = new byte[] {(byte)0xFF, (byte)0x01, (byte)0x01};

out.write(data);
person Jörn Horstmann    schedule 23.08.2011

Попробуйте следующий код:

byte[] array = { -1, 1, 1 };
out.write(array);

вместо того

out.write(dataHex.getBytes());
person umbr    schedule 23.08.2011