2011-08-23 2 views
3

J'essaie d'activer/de désactiver le relais mais jusqu'à présent, je n'ai pas réussi. J'ai essayé le programme Coolterm pour voir si les pilotes étaient correctement installés et oui ça a marché et j'ai pu l'activer/désactiver via l'interface graphique. Cependant, j'ai un problème pour envoyer la commande via java pour mettre le relais ..Port série Java Problème

Paramètres de communication: 8 données, 1 arrêt, pas de parité Vitesse: 9600

Commandes: commande OFF: FF 01 00 (HEX) ou 255 1 0 (DEC)

commande ON: FF 01 01 (HEX) ou 255 1 1 (DEC)

Mon code est ci-dessous:

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(); 
} 


} 
} 

Merci d'avance ...

+0

Quelles bibliothèques Java sont vous utilisez? – Freiheit

+0

import java.io.FileNotFoundException; import java.io.IOException; import quicktime.QTException; import gnu.io. *; import java.io.InputStream; import java.io.OutputStream; Qt bibliothèque ignorée, j'ai oublié de le supprimer depuis que je travaillais avec avant .. –

+0

La dernière fois que j'ai fait le développement de port série, j'ai fait quelques tests simples de mon application en supprimant l'appareil avec lequel je communiquais. Ainsi, au lieu de tester votre application en attendant qu'elle déclenche le relais, testez votre application en demandant à une autre application d'écouter sur le même ATS et de voir si votre application envoie les bonnes commandes. Après avoir vérifié que votre application envoie les bonnes commandes, présentez le périphérique série. – Freiheit

Répondre

3

Votre programme est en cours d'envoi de la chaîne "FF 01 01" qui est de 8 octets dans un encodage compatible ASCII. Cela semble assez inhabituel, je suppose que votre gadget est vraiment attendu 3 octets comme dans le code suivant:

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

out.write(data); 
+0

Merci beaucoup cela a fonctionné :) –

0

Essayez le code suivant:

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

au lieu de

out.write(dataHex.getBytes()); 
+0

Merci beaucoup cela a fonctionné :) –