- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: Com Port einlesen per Java

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44

    Com Port einlesen per Java

    Anzeige

    E-Bike
    Ich weiß Java ist für hardwarenahe Anwendungen eigentlich nicht geeignet, aber zur Zeit kann ich noch keine andere Sprache.

    Frage:
    an den com Port gebe ich an Rxd(Pin 2) ein high, wie zählt der Rechner den Impuls denn dann aus?

    Bitte nicht zu kompliziert, ich bin ganz am Anfang und kann noch nichts.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.08.2004
    Beiträge
    159
    ich denke das wird problematisch mit Java...
    C hat ne ähnliche Syntax und wenn du dich durch n paar Tutorials druchgewurschdelt hast, sollte es kein Problem sein, das mit C zu realisieren.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Wie ich es immer wieder empfehle: http://www.rxtx.org/

    Sorry hab grad keine Zeit für details...

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    Dafür brauchst du eine spezielle Libary. Ich kann dir leider nicht verraten, wo man die bekommt, aber ich kann dir sagen wie sie heißt: javax.comm

    Zu dem Thema gibt es in Software, Algorithmen und KI auch einen Thread mit einer ähnlichen Frage. Da geht es um die Steuerung des COM-Ports über eine Website mithilfe eines Applets.

    Hier ist ein Codefetzen (copyright Jochen Steinmann):

    Code:
    class RS232Driver 
    {
    	/**Vector für Dateneinlesen*/
    	public static Vector rs232vector = new Vector();
        /** Port-Identifier*/
        public static CommPortIdentifier portId;
        /**Serielle Schnittstelle*/
        public static SerialPort RS232port;
        /** RS232-Input-Stream*/ 
        public static InputStream RS232in;
        /** RS232-Output-Stream*/
        public static OutputStream RS232out;  	
    	PrintWriter Out;
    	/**Methode zum Testen des Vektors*/
    	public void testvector()
    	{
    		for(int i=0;i<50;i++)
    		{
    			rs232vector.add("test");
    		}
    		checkvector();
    	}
    	/**Port öffnen*/
        public void openport(String comname,PrintWriter Out)
        {
            try
            {
                CommPortIdentifier cpi = CommPortIdentifier.getPortIdentifier(comname);
                if(cpi.getPortType() == cpi.PORT_SERIAL)
                {
                    RS232port = (SerialPort)cpi.open("server",1000);
                    RS232port.setSerialPortParams(9600,RS232port.DATABITS_8,
                                                     RS232port.STOPBITS_1,
                                                     RS232port.PARITY_NONE);
                    RS232port.enableReceiveTimeout(2000);
                    System.out.println("        "+RS232port.getName()+" wurde geöffnet");
                    Out.println("Schnittstelle geoeffnet
    ");
                }
            }
            catch(Exception e)
            {
                Out.println(e);
                System.out.println(e);
            }
            try 
            {
                RS232in = RS232port.getInputStream();
                RS232port.notifyOnDataAvailable(true); 
                RS232out = RS232port.getOutputStream(); 
                RS232port.addEventListener(new commListener());
            }
            catch (Exception e) { System.out.println("Fehler: "+e);}
        }
        /** Serielle Schnittstelle schliessen */
        public static void closeRS232()
        {
            if(RS232port != null)
            {
                RS232port.close();
                //Out.println("        Schnittstelle wurde geschlossen");
            }
        }
        /** STRING auf die RS232 ausgeben*/
        public void writeRS232(String ausgabe,PrintWriter Out)
        {
            if (RS232port != null)
            {
                PrintWriter aus = new PrintWriter(RS232out);
                  aus.println(ausgabe);
                  aus.flush();
                  aus.close();
             } 
        }
        /** CHAR auf die RS232 ausgeben*/
        public void writecharRS232(char ausgabe,PrintWriter Out)
        {
            if (RS232port != null)
            {
                PrintWriter aus = new PrintWriter(RS232out);
                  aus.print(ausgabe);
                  aus.flush();
                  aus.close();
             } 
        }
        /**Vektor auslesen*/
        public void getrs232vector(PrintWriter Out)
        {
        	for(int i=0;i<rs232vector.size();i++)
        	{
        		Out.println("RS232> "+(String)rs232vector.get(i)+"
    ");
        	}
        	Out.println();
        }
        /**Vektor auf Länge überprüfen und trimmen*/
        public void checkvector()
        {
        	if(rs232vector.size()>50)
        	{
        		rs232vector.remove(0);
        	}
        }
      /** Klasse für die permanente Datenaufzeichnung der seriellen Schnittstelle  
       * @author     Jochen Steinmann                                              
       * @version    1.0                                                           
       * @since      1.0                                                           
       */    
      public class commListener implements SerialPortEventListener{
      	int z = 0;
       public void serialEvent(SerialPortEvent event) {
          if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
            byte[] readBuffer = new byte[20];
            try {
              	while (RS232in.available() > 0) {int numBytes = RS232in.read(readBuffer);}
              	String nachricht = new String(readBuffer);
              	rs232vector.add(nachricht);
              	checkvector();
            } 
            catch (IOException e) {System.out.println("Fehler: "+e);}
          }
        }
      }
    Hoffe, ich konnte dir weiterhelfen.

    Gruß
    irOS - independent robot operating system
    www.ir-os.de

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    Achja, hier is auch noch näheres: https://www.roboternetz.de/phpBB2/viewtopic.php?t=6192

    Gruß, Jan
    irOS - independent robot operating system
    www.ir-os.de

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    Das Paket habe ich. Ist auch schon eingebunden. Habe damit einen Analogrechner angesteuert (Jugend forscht / Technik). Probleme habe ich bei dem benutzen des Ports. Ich habe eine Schlatung die mir zu einer bestimmten Zeit High zum RxD gibt, aber ich weiß nicht, woher der Computer weiß, wann das Signal anfängt und in welcher Zeit ich ein Byte rüberschicke. Ich bekomme zwar signale, aber nur bestimmte Zahlen (ist ja logisch).
    Das ganze ist ein Drehzahlmesser.

    Was ich habe:
    1. Stufe: 0000 0000 0001
    2. Stufe: 1000 0000 0001
    3. Stufe: 0100 0000 0001
    4. Stufe: 0010 0000 0001
    ...

    Was ich bekomme:
    1. Stufe: 8xxx
    2. Stufe: 3xx
    3. Stufe: 2xx
    4. Stufe: 2xx
    ...

    wie liest der Port die Daten ein und warum passt dass nicht wirklich mit den Zahlen überein dich haben müsste?

    Außerdem, ich habe gedacht der liest immer nur ein Byte ein, aber in wirklichkeit habe ich Zahlen die Größer sind (1,5 Byte).

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    100
    Wenn hier schon meine Codefetzen gepostet werden, dann will ich auch mal was dazu schreiben. Es dürfte nicht möglich sein den RXD Pin abzufragen, da Java das nicht unterstützt, aber du kannst andere pins benutzen, denn JAVA kann andere Pins auslesen und sogar setzen, nur nicht RXD und TXD.

    Edit: ich meine dass man die Empfangspufferlänge setzen kann, irgendwo setz t du den meistens auf acht, wenn du da dann 12 eingibt, könnte das gehen.

    Code:
    RS232port.setSerialPortParams(9600,RS232port.DATABITS_8,
                                                     RS232port.STOPBITS_1,
                                                     RS232port.PARITY_NONE);
    Wo DATABITS_8 steht, müsste das andere Hin, habe ich aber noch nie gemacht, also nur so eine Idee[/code]

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    @Stoneman: Ich habe ja extra ein Copyright angegeben! Ich selber hab mich mit dem Thema nicht mehr beschäftigt.

    Gruß, Jan.
    irOS - independent robot operating system
    www.ir-os.de

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    100
    @MJA ok, ich habe vergessen die Ironietags einzufügen, mach dir nichts draus

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    Ne ne,
    grade RxD und TxD werden benutzt. Der Rest weiß ich nicht wie man den anspricht. Probiers einfach mal selber aus:
    - an den Pin 2 leg eine Frequenz
    - lies den Port aus
    - aus dem ersten zeichen des strings mach ein bit-code

    wenn du das machst, weist was am Port ankommt.
    außerdem wird der Wert 12 bei Databits nicht unterstützt, es gibt nur 5,6,7 und 8.
    eigentlich wollte ich aber wissen , wie der Port die Signale auswertet.
    rechnert der die takte ab dem ersten high oder bekommt der erst eine bestimmte zeit lang ein (Start) High oder wie geht das?
    ... was isn hier verkehrt? ... mmh ...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen