Serielle Kommunikation - Kodierung · 2018. 3. 21. · rxtxParallel.dll: \bin RXTXcomm.jar: bel....

18
Serielle Kommunikation - Kodierung

Transcript of Serielle Kommunikation - Kodierung · 2018. 3. 21. · rxtxParallel.dll: \bin RXTXcomm.jar: bel....

  • Serielle Kommunikation - Kodierung

  • RXTX – Bibliothek für die serielle Schnittstelle I

    Installation 32-Bit-JDK rxtxSerial.dll: \jre\bin rxtxParallel.dll: \jre\bin RXTXcomm.jar: \jre\lib\ext

    =C:\Program Files (x86)\Java\jdk1.8.0_151\ Nur bei Problemen zusätzlich(!!!):

    rxtxSerial.dll: \bin rxtxParallel.dll: \bin

    Installation 64-Bit-JDK rxtxSerial.dll: \bin rxtxParallel.dll: \bin RXTXcomm.jar: bel. Java Editor

    =C:\Program Files\Java\jdk-9.0.1\

  • RXTX – Bibliothek für die serielle Schnittstelle II

    Installation RXTXcomm.jar für 32/64-Bit-JDK im Java-Editor:

    Menüpunkt „Fenster“ „Konfiguration“:

    Pfad der RXTXcomm.jar wählen

  • RXTX – Bibliothek für die serielle Schnittstelle III

    Installation RXTXcomm.jar für 64-Bit-JDK in BlueJ:

    Menüpunkt „Options“ „Preferences“:

    Pfad der RXTXcomm.jar wählen

  • RXTX - Überblick

    relevant

    SerialPort

    CommPort

    ParallelPort

  • RXTX - Auslesen einer Schnittstelle

    SerialPort serialPort = null;String portName="COM5";CommPortIdentifier serialPortId=null;try {

    serialPortId = CommPortIdentifier.getPortIdentifier(portName); } catch(Exception e) {

    System.out.println(portName+": is not available!"); } try{

    serialPort = (SerialPort)serialPortId.open(portName,1000);System.out.println(portName+": "+serialPort.getBaudRate()+"…");serialPort.close();

    }catch (Exception e){System.out.println("Error reading Port values");

    }

    Definition und Initialisierung der Variablen

    Serielle Port ID – Objekt lesen/erstellenStatische Methode:Klassenname.Methodenname

    Öffnet den Port, gibt ein CommPort Objekt zurück und konvertiert dies in ein SerialPort-Objekt

    01

  • Eigenschaften der seriellen Schnittstelle

    Baudrate = Übertragungsrate

    Anzahl der Datenbits, die nacheinander übertragen werden

    Prüfbit(Ungerade, gerade oder keine Parity)

    Anzahl der Stopbits(1 oder 2)

    Datenflusskontrolle(keine, Hardware oder Xon/Xoff)

  • Abiturklasse Serial

    Serial

    portName: Stringbaudrate: intdataBits: intstopBits: intparity:int

    -----

    Serial(String portName, int baudrate, int dataBits, int stopBits, int parity)open(): booleanclose()dataAvailable(): intread(): intread(b: byte[], len:int):intreadLine(): Stringwrite(value: int) : voidwrite(b: byte[], len:int) : voidwrite(s: String): voidSetRTS(arg:boolean): voidSetDTR(arg:boolean): voidisCTS(): booleanisDSR(): boolean

    C

    ++

    ++++

    ++++++

    02+

  • Nullmodemkabel

    Ein Nullmodemkabel verbindet zwei Computer direkt über die serielle Schnittstelle.

    Intern kreuzt man die Receive- und Transmit- Leitung, um auf kurzer Strecke eine direkte Verbindung mit einem anderen Computer herzustellen.

  • Nullmodemkabelverbindungen - Übersicht

    o

    o

    o

    o

    o

    o

    o

    o

    DTRDSR DCDRTSCTS

    RIRxDTxD

    Data Terminal ReadyData Set Ready

    Data Carrier DetectRequest to Send

    Clear to SendRing IndicatorReceived DataTransmit Data

    o

    o

    o

    o

    o

    o

    o

    o

    DTRDSR DCDRTSCTSRIRxDTxD

    GND: Ground wurde nicht berücksichtigt

  • Nullmodem kabelverbindungen - Details

    o

    o

    o

    o

    RTSCTS

    o

    o

    o

    o

    RTSCTS

    Received Data: EmpfangsdatenTransmit Data: Sendedaten

    RxDTxD

    RxDTxD

    Request to Send: Der Computer signalisiert, dass er Daten senden möchteClear to Send: Das Peripheriegerät signalisiert, dass es Daten entgegennehmen kann

  • Nullmodem kabelverbindungen - Details

    o

    o

    o

    o

    o

    o

    Data Terminal Ready: Der Computer signalisiert, dass er verfügbar ist(eingeschaltet)Data Set Ready: Das Peripheriegerät signalisiert, dass es Daten entgegennehmen kannData Carrier Detect: Das Peripheriegerät signalisiert, dass eine Verbindung hergestellt ist

    DTRDSR DCD

  • Softwarehandshake ETX/ACK I

    Sender Empfänger

    DTR=1

    ACK

    ACK=06hETX=03h

    Daten

    ETX

    ACK

    Daten

    ETX

    ACK

    “Datenbereitschaft”

    Daten können gesendet werden

    Daten fertig gesendet

    Datenerhalt bestätigt

    DSR=?

  • Softwarehandshake ETX/ACK II

    o

    o

    o

    o

    o

    DTRDSR DCDRxDTxD

    o

    o

    o

    o

    o

    DTRDSR DCDRxDTxD

    Sender Empfänger

    .isDSR(…);

    .read(…);.write(…);

    .setDTR(…);

    .read(…);

    .write(…);

  • Softwarehandshake ETX/ACK III – Kodierungstricks

    03

    while(!serial.is???())Thread.sleep(1);

    while(serial.read()!=???)Thread.sleep(1);

    Warten auf Signalleitung

    Warten auf Daten

    final int ACK = 0x06; final int ETX = 0x03;

    Definition von ACK und ETX als Konstante

  • Polling Allgemeine Erklärung

    Sender Empfänger

    Byte

    Sender Empfänger

    BytePoll

    BytePoll

    BytePoll

    BytePoll

    Byte

    Byte

    Byte

    Ohne Polling Mit Polling

  • Polling Senden von Messdaten

    04a

    Sender Empfänger

    Byte

    DTR=1 “Datenbereitschaft”DSR=?

    DTR=0 “Keine Datenbereitschaft”DSR=?

    Byte

    DTR=1 “Datenbereitschaft”DSR=?

    DTR=0 “Keine Datenbereitschaft”DSR=?

    Byte

    DTR=1 “Datenbereitschaft”DSR=?

    DTR=0 “Keine Datenbereitschaft”DSR=?

  • Probleme der Verbindung: Ausgabe des gleichen Wertes

    Lösungsmöglichkeiten in absteigender Priorität(erster Lösungsversuch: höchste Priorität)!

    „Umkehr“ des Empfänger und des Senderports z.B. Vertauschen von COM1 und COM2 im Quellkode

    100 maliger Aufruf der Leseroutine der Daten um evtl. „Datenstau“ zu lösen + Abwechselnder Aufruf von Sender/Empfänger:Starten Sender, dann Empfängerdann umgekehrt!

    Neustart des PCs Neue Einrichtung zweier Ports z.B. Löschen der alten

    Ports und Erstellen von zwei neuen Ports