Toon posts:

[Java] Schrijven naar rs232 poort

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb natuurlijk de Java Communications API geinstalleerd. En nu wil ik wat versturen via de com poort. Dit gaat dan naar een microcontroller, en die doet er dan wat mee.

Om het te testen gebruik ik de sample code die bij de API zat. Maar die werkt niet. Het programma geeft geen exceptions, dus ik neem aan dat het programma al niet bij een try in de buurt komt.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private void sendSomething() {
    int sent = 0;
    portList = CommPortIdentifier.getPortIdentifiers();

    while (portList.hasMoreElements()) {
        
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
            // Poort Naam
            if (portId.getName().equals("COM4")) {
                try {
                    serialPort = (SerialPort)
                        portId.open("SerialTest", 2000);
                } catch (PortInUseException e) {System.out.println( "PortInUseException" );}
                try {
                    outputStream = serialPort.getOutputStream();
                } catch (IOException e) {System.out.println( "IOException" );}
                try {
                    // Baud Rate ed.
                    serialPort.setSerialPortParams(19200,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
                        
                } catch (UnsupportedCommOperationException e) 
                {System.out.println( "UnsupportedCommOperationException" );}
                try {
                    outputStream.write(messageString.getBytes());
                    sent = 1; // data verzonden
                } catch (IOException e) {System.out.println( "IOException" );}
            }
        }
    }
                
    if( sent == 1 )
    {
        System.out.println( "Data sent!" );
    } else {
        System.out.println( "Failed..." );
    } 
}


Het programma komt eigenlijk niet verder dan regel 5.
Ik heb op mijn laptop geen seriele poort zitten en gebruik daarvoor een USB to RS232 kabel. Zou hij deze niet kunnen vinden? Ik denk namelijk dat daar de fout zit.

Ik heb al gezocht in de API faq en google, maar ik kon niks vinden over zo'n kabel en de compatibiliteit met de API.

De kabel werkt wel normaal met andere test terminals, en hij staat bij Apparatenbeheer gewoon bij de poorten als COM4.

[ Voor 3% gewijzigd door Verwijderd op 19-10-2004 15:58 . Reden: lay-out ]


  • Marcj
  • Registratie: November 2000
  • Laatst online: 08-05 18:11
Je kunt natuurlijk door middel van println()'s op een aantal regels achterkomen wat hij wel en niet doet. Bijvoorbeeld op de eerste regel in de while-loop. Dan weet je tenminste of hij wel een keertje in de while-loop komt. Dan kun je nog gaan kijken welke poorten hij dan wel vind. Enz...

Verwijderd

Topicstarter
ja dat heb ik ook gedaan. Wanneer je voor en na de while statement een println zet, laat hij alleen die van ervoor zien. Hij vult dus de lijst portList dus niet met poorten.
Hij komt dus niet in de loop.

  • Marcj
  • Registratie: November 2000
  • Laatst online: 08-05 18:11
Dan kan dat programma dus helemaal geen poorten vinden denk ik. Je zult het iig moeten zoeken in dat programma, want zal dan voor de rest wel goed zijn. Of CommPortIdentifier moet een fout in zitten. Hoe initialiseer je de hele boel?

edit: Ik zie net dat CommPortIdentifier een class is met een statische functie getPortIdentifiers. Dus dat moet ook wel goed gaan. Ik zou zeggen: die api kan niet met je windows overweg (waar de fout dan maar mag zitten...)

[ Voor 33% gewijzigd door Marcj op 19-10-2004 18:38 ]


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

probeer dit eens om je hele list uit te lezen

Java:
1
2
3
4
5
6
Enumeration pList = ComPortIdentifier.getPortIdentifiers();

while (pList.hasMoreElements()) {
    ComportIdentifier cpi = (ComportIdentifier)pList.nextElement();
    System.out.println("Port " + cpi.getName());
}

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


Verwijderd

Topicstarter
jAnO! schreef op 19 oktober 2004 @ 18:45:
probeer dit eens om je hele list uit te lezen

Java:
1
2
3
4
5
6
Enumeration pList = ComPortIdentifier.getPortIdentifiers();

while (pList.hasMoreElements()) {
    ComportIdentifier cpi = (ComportIdentifier)pList.nextElement();
    System.out.println("Port " + cpi.getName());
}
Dat werkt ook niet. Want hij zet de com poort hoe dan ook niet in de lijst.

Ik heb het wel aan de praat gekregen met een package van serialio.com. Het was maar een demo helaas (shareware programma), maar ook met decompilen enzo kan je er niks mee.
Wel stond er nadrukkelijk bij op de site dat het zou werken met een usb to rs232 converter. Dus ik denk dat de standaard javax.comm dat helaas niet doet. (wat eigenlijk wel gek is lijkt mij; het is gewoon een com poort voor het OS)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Heb je die comm API correct geinstalleerd ? Er moet een jar en een comm.properties bij in je lib path volgens mij, en een dll bij in je bin path. Check je docs !

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
Gebruik je misschien XP Pro? Zo ja, lees dit maar eens: http://forum.java.sun.com...sp?forum=31&thread=522165

Helaas geen oplossing of je moet iets maken dat eerst die poort opend en dan opnieuw met Java werken (of misschien een andere poort dan com4 gebruiken?)

Verwijderd

Topicstarter
Postman schreef op 19 oktober 2004 @ 20:46:
Gebruik je misschien XP Pro? Zo ja, lees dit maar eens: http://forum.java.sun.com...sp?forum=31&thread=522165

Helaas geen oplossing of je moet iets maken dat eerst die poort opend en dan opnieuw met Java werken (of misschien een andere poort dan com4 gebruiken?)
Hmm, ik gebruik inderdaad XP Pro én COM4 én een USB to UART controller. Maar ik heb hetzelfde resultaat (==geen) als ik bv COM1 gebruik..

portList = CommPortIdentifier.getPortIdentifiers();

Die portList blijft leeg, dus aan een poort openen komt hij niet eens toe.

@farlane
docs zijn gecheckt; comm API is correct geïnstalleerd.

-- edit --

http://forum.java.sun.com...sp?forum=17&thread=460310
http://forum.java.sun.com...sp?forum=31&thread=376506
http://forum.java.sun.com...sp?forum=31&thread=452914

zelfde problemen, maar helaas geen oplossing

[ Voor 15% gewijzigd door Verwijderd op 19-10-2004 22:08 ]


Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
String driverName = "com.sun.comm.Win32Driver";
try{
    CommDriver commdriver = (CommDriver)Class.forName(driverName).newInstance();
    commdriver.initialize();
}
catch (Exception e2)
{
    e2.printStackTrace();
}

moet je in de code zetten voordat hij de getPortIdentifiers() doet, en dan werkt het.
http://groups.google.com/...40nic.grnet.gr%26rnum%3D7

owned = true; :Y)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Als ik dat artikel iets verder doorlees zie ik dat het wel degelijk kwam omdat de comm API niet correct was geinstalleerd.

Dus ook voor jou:
- Welke ontwikkelomgeving gebruik je?
- Waar staat je comm.jar?
- Waar staat je comm.properties?
- Waar staat je ?.dll ?
- Wat is je classpath?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
- JCreator v2.5
- C:\j2sdk1.4.2_06\lib\
- C:\j2sdk1.4.2_06\lib\
- C:\j2sdk1.4.2_06\bin\
- C:\j2sdk1.4.2_06\jre\lib\rt.jar;C:\j2sdk1.4.2_06\lib\dt.jar;
C:\j2sdk1.4.2_06\lib\comm.jar;C:\j2sdk1.4.2_06\lib\systronix_utils.jar;
C:\j2sdk1.4.2_06\lib\tools.jar;C:\j2sdk1.4.2_06\jre\lib\ext\dnsns.jar;
C:\j2sdk1.4.2_06\jre\lib\ext\ldapsec.jar;C:\j2sdk1.4.2_06\jre\lib\ext\localedata.jar;
C:\j2sdk1.4.2_06\jre\lib\ext\sunjce_provider.jar

Ik had gister geen tijd om verder te lezen :) Maar het klopt inderdaad. Ik had hem dus goed in mijn sdk geinstalleerd, maar ik kwam net nog, nadat ik het antwoord had gelezen, een jre tegen nog extra naast mijn sdk. Dus dat moet het euvel wel zijn :P

  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 20:09
YES super die code,

zit al sinds afgelopen vrijdag die spullen aan de praat te krijgen, nergens en dan ook nergens die 9 regels code gevonden

supers!
Pagina: 1