lionkid007
Messages postés4Date d'inscriptiondimanche 17 février 2008StatutMembreDernière intervention22 mars 2008
-
19 févr. 2008 à 11:13
dms006gn -
16 mars 2011 à 12:56
Bonjour,
Je dois faire un programme permettant de communiquer sur le port serie RS232 en Java.
Je dois donc pouvoir lire et ecrire. J'ai bien regardé les différents fichiers dispo, mais j'arrive pas à faire ce que je veux.
J'ai relié la patte TX à RX de mon port série et je veux pouvoir avec mon programme java, afficher ce que j'ai envoyé via mon programme en java.
Je suis débutant en java et j'ai du mal...
Si vous pouviez m'aider, merci!!!!
Voilà le code que j'ai déjà utilisé :
import javax.comm.*;
import java.io.*;
import java.util.*;
/*
Cette classe permet de tester les ports séries disponibles
en les listant puis en créant un stream d'entrée et de sortie
*/
public class TesteJavaComm
{
CommPortIdentifier portId;
BufferedReader in;
PrintWriter out;
SerialPort serialPort;
/*
Constructeur de la classe TesteJavaComm qui prend en paramètre le port série à utiliser.
Dans un premier temps on liste les ports disponibles sur le pc
*/
public TesteJavaComm (String com)
{
System.out.println("listage des ports série disponibles:");
listePortsDispo();
try
{
//ouverture du port série:
portId=CommPortIdentifier.getPortIdentifier(com);
serialPort=(SerialPort)portId.open("Envoi",2000);
//on sélectionne tous les paramètres de la connexion série:
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
System.out.println("Ouverture du port "+com);
//pour lire et écrire avec des streams:
in=new BufferedReader(
new InputStreamReader(serialPort.getInputStream()));
out=new PrintWriter(serialPort.getOutputStream());
//Teste de lecture/ecriture sur le port série
String originalText="une chaine de caractere";
outputArray = originalText.getBytes( );
out.write ( outputArray, 0 , length );
int b = in.read()
in.close();
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}//fin constructeur
public void listePortsDispo()
{
System.err.println("recherche...");
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
if (portList==null)
{
System.err.println("Aucun port de communication détecté");
return;
}
while (portList.hasMoreElements())
{
portId=(CommPortIdentifier)portList.nextElement();
System.out.println("* "+portId.getName());
} // while
} //fin de la methode listePortsDispo()
/*
Methode main qui permet de tester notre classe de teste en ouvrant une connexion sur le port COM1.
*/
public static void main(String args[])
{
new TesteJavaComm ("COM1");
}//fin du main
}//fin de la classe
PS : Quand j'ai essayé ce bout de code, j'ai des erreurs comme quoi : OutputArray et length ne sont pas définis?? Il faut faire un String OutputArray et un int length?
lionkid
Messages postés18Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention15 mars 2011 13 mars 2008 à 16:37
Salut!
Après relecture de ton post, le out.write(outputArray,0,outputArray.length); ne fonctionne pas. Que ce soit length() ou bien length d'ailleurs...
La méthode write s'appliquant au type PrintWriter ne supporte que les :
Je suis une débutante en java ,j’ai crée des port serie
virtuel sur mon ordinateur et exécute un code semblable pour lister les port série
existant .mais le code ne les a pas détecte .est ce que le problème est que les
port son virtuel et non physique ?
lionkid
Messages postés18Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention15 mars 2011 13 juil. 2008 à 22:27
3asslama saadia2.
Pour tes ports série. Si tu en as (au moins 1), le programme Java, devrait normalement te le détecter et te l'afficher si biensûr la javaxcomm est bien installée (cela a son importance!).
Pourrais-tu nous en dire un peu plus? S'ils sont virtuels et non physique dans le sens qu'ils n'éxistent pas, alors il est tout à fait normal que le programme Java ne les détecte pas. Pour tester ce code, tu as besoin d'au moins un port.
Quelques infos de plus (erreurs etc...) ne seraient pas de refus si tu souhaites un peu plus d'aide.
saadia2
Messages postés13Date d'inscriptionlundi 5 mars 2007StatutMembreDernière intervention19 avril 2010 14 juil. 2008 à 09:25
Merci j'ai finis par trouver la solution,le probleme etait lié à l'emplacement du driver win32com.dll meme avec des ports virtueles le programme arrive à les detecter
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 31 déc. 2008 à 11:17
Bonjour, étant débutant moi aussi je viens de trouver ce post
en ce qui concerne le port série j'arrive maintenant à le faire communiquer dans l'environement netbeans.
MAIS quand je veux le faire fonctionner
depuis la commande execuert de windows
en tatant pour mon projet la commande
javaw -jar "D:\NetBeansProjects\Meteo1\dist\Meteo1.jar"
je projet bloque
dans mon programme
***
ici J'ai un jLabel1 qui me dit que je suis bien arrivé à cet endroit du programme
ici la commande
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
ici j'ai un jLabe2 qui n'indique rien
****
ALORS tout fonctionne dans l'environement Netbeans
ma question est-ce qu'il faut paramétrer quelque chose dans netbeans ou ailleurs
Merci pour vos réponses
lionkid
Messages postés18Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention15 mars 2011 31 déc. 2008 à 22:02
Bonjour,
Dans votre .jar il ne faut pas oublier d'inclure les autres .jar nécessaires au fonctionnement de votre application.
Vous avez certainement dû intégrer des librairies externes à l'environnement NetBeans (sous windows).
Il faut donc en faire de même avec votre propre .jar et ne pas omettre de préciser les différentes librairies à utiliser dans le fichier MANIFEST.MF
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 1 janv. 2009 à 09:36
Meilleurs voeux pour 2009
Merci pour votre réponse
Je me doutais bien bien qu'il y avait un truc de ce genre mais je ne sait pas comment faire et surtout quels fichiers intégrer
j'utilise RXTXcomm à mon avis c'est lui qui pose problème,
j'ai lu énormément de post et exemples mais tous intègrent beaucoup de classes et j'ai du mal à comprendre
en tout cas si j'arrive à faire fonctionner mon exemple j'essaierai d'en faire profiter tout le monde
(pour info je fait cela juste à titre de loisir pour faire fonctionner mes neurones)
cordiales salutation
PapyDede
lionkid
Messages postés18Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention15 mars 2011 1 janv. 2009 à 14:00
Bonjour,
Meilleurs voeux pour 2009 également ainsi qu'une excellente santé dans ce monde de fous! :p
Pour cette histoire de Java, c'est tout à votre honneur, vous au moins vous faites fonctionner vos neurones! ;-)
Bien, pour maintenant en revenir à nos moutons, je vous propose de faire tout cela sous Eclipse (environnement de développement bien plus pratique, simple, ludique, moins gourmand en mémoire) puisqu'il est recommandé par TOUS. Moi même j'ai eu pas mal de problèmes avec NetBeans et je suis passé à Eclipse.
Telechargez-le, lancez votre application et donnez moi l'ensemble des erreurs détectée par Eclipse. Je me ferai alors un plaisir de vous aider car là... Je ne sais pas d'où vient précisément le problème... D'autant plus que je ne pourrai pas vous dire quelles lignes de "code" ajouter au fichier manifest.mf.
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 1 janv. 2009 à 16:11
Merci
Je vais le télécharger pour faire un essai
question
puis faire un copier coller de netbeans dans eclipse
je joins un petit bout de programme qui me détecte les ports disponnibles
il fonctionne sous netbeans c'est une seule classe donc cela va peut-être vous donner une idée (
PS: l'anglais et moi c'est un peut compliqué
/**
*
* @author ahaile
*/
public class DetecRS232 extends javax.swing.JFrame {
private Enumeration portList;
private CommPortIdentifier portId;
/** Creates new form DetecRS232 */
public DetecRS232() {
initComponents();
jLabel1.setText("choix du port");
}
ClassPort serialP = new ClassPort();
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 3 janv. 2009 à 18:02
Bonjour,
Suivant vos conseils j'ai téléchargé eclipse ainsi que visual editor, je commence à l'utiliser il y a une chose que je ne comprend pas une interface en awt fonctionne mais en swing quand je démarre le programme Run AS java application cela ne donne rien à l'écran RUN AS java bean ça marche mais cela ne fonctionne pas quand j'exporte pour en faire un JAR exécutable
alors qu'avec une interface AWT ça marche
En connaissez-vous la cause
merci
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 5 janv. 2009 à 09:38
Merci de votre réponse
C'est un fait il faut importer des librairie et j'ai trouvé hier soir qu'il faut appeler une classe java bean par une classe "principale" et là j'ai réussi à faire fonctionner cela. Cela demande une rigueur a laquelle je n'était pas habitué en delphi (enfin ça m'occupe pendant cette période de chomage technique)
En tout cas mes neurones et ma connexion internet auront fonctionnés pendant cette période
Mais pour ceux qui comme moi débutent seuls dans leur coin ce n'est pas facile et si j'en ai le temps j'essaierai de faire un exemple simple (quand tout marchera bien)
cordiales salutations de la Bretagne
lionkid
Messages postés18Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention15 mars 2011 5 janv. 2009 à 14:23
Bonjour,
Personnellement, je vous recommande Eclipse. La démarche d'un bon programme en Java commence par l'utilisation d'un seul et unique environnement de développement.
1° Opter pour eclipse, plus leger et facile d'utilisation.
2° Développer votre propre interface graphique très simplement. (je peux vous aider si vous n'y arrivez pas).
3° Faire une classe pour toute l'interface graphique. Dans le main de l'interface graphique vous appelerez la classe RS232. (pensez à faire des public static ... pour plus de lisibilité).
4° Une autre classe pour la communication RS232.
5° Pensez à nommer vos boutons sur l'interface comme tout élement de celui-ci pour faciliter la compréhension et la lecture du programme. Par exemple pour un bouton en Java faites : new JButton bouton_detect_rs232 = new JButton("Detecter ports série!");
Cet exemple simple permet de déclarer, définir et donner un "label" au bouton. (du 3 en 1).
Autrement vous pouvez toujours faire les choses petit à petit comme :
New JButton bouton_detect_rs232; // Déclaration de mon bouton
bouton_detect_rs232.setLabel("Mettre le nom de mon bouton ICI"); // Label pour mon bouton.
Ensuite, il suffit de lui associer un écouteur et donc une action à effectuer via les actionListener();
pour plus d'informations sur les méthodes en java (équivalent des procédure ou fonctions en C) reportez-vous à la javadoc.
Pour les boutons c'est ici que ça se passe :
PS : J'ai lu votre code mais, il ne donne vraiment pas envie de le lire car beaucoup de choses (générées automatiquement par NetBeans sont "inutiles" ou trop lourdes...).
bricolomi
Messages postés23Date d'inscriptiondimanche 15 juin 2003StatutMembreDernière intervention25 juin 2010 5 janv. 2009 à 18:08
Merci pour votre réponse,
J'ai enfin réussi à faire fonctionner mon interface avec eclipse et visual éditor ,
Maintenant je n'ai plus qu'à continuer, je vais être moins assidu derrière mon PC, car mes congés forcés s'arrêtent "chomage technique chez PSA" Le boulot demain matin 4h30 pour 2 ou 3 ans encore avant les GRANDES vacances
Merci à la communauté a
A bientôt sans doute "Sûrement"