Проблем със сериен порт на Java

Опитвам се да включа/изключа релето, но засега не успявам. Опитах програмата Coolterm, за да видя дали драйверите са инсталирани правилно и да, работи и успях да я включа/изключа чрез GUI. Въпреки това имам проблем да изпратя командата чрез java за включване на релето..

Комуникационни параметри: 8 данни, 1 стоп, без паритет Скорост на предаване: 9600

Команди: OFF команда: FF 01 00 (HEX) или 255 1 0 (DEC)

ON команда: 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
импортиране на java.io.FileNotFoundException; импортиране на java.io.IOException; импортиране на quicktime.QTException; импортиране на gnu.io.*; импортиране на java.io.InputStream; импортиране на 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