Heim > Java > javaLernprogramm > Eine kurze Einführung in die serielle Kommunikation von Java

Eine kurze Einführung in die serielle Kommunikation von Java

高洛峰
Freigeben: 2016-12-19 17:02:56
Original
1908 Leute haben es durchsucht

Einführung in die serielle Java-Kommunikation. Viele Anwendungen und Tests eingebetteter Systeme oder Sensornetzwerke erfordern die Kommunikation mit eingebetteten Geräten oder Sensorknoten über einen PC. Unter diesen sind die am häufigsten verwendeten Schnittstellen der serielle RS-232-Anschluss und der parallele Anschluss (angesichts der Komplexität der USB-Schnittstelle und der Tatsache, dass keine große Datenübertragungsmenge erforderlich ist, ist die USB-Schnittstelle immer noch zu extravagant). Zusätzlich zu SUN gibt es derzeit ein Paket, das USB unterstützt. Ich habe keine anderen Java-Bibliotheken gesehen, die USB direkt unterstützen.

SUNs CommAPI bietet Unterstützung für häufig verwendete serielle RS232-Port- bzw. IEEE1284-Parallelport-Kommunikationen. RS-232-C (auch bekannt als EIA RS-232-C, im Folgenden als RS232 bezeichnet) wurde 1970 von der Electronic Industries Association (EIA) in Zusammenarbeit mit Bell Systems, Modemherstellern und Computerterminalherstellern für die serielle Kommunikation entwickelt. Standards. RS232 ist ein Vollduplex-Kommunikationsprotokoll, das gleichzeitig Daten empfangen und senden kann.

1 Gängige Java-Pakete für serielle Ports

Derzeit umfassen gängige Java-Pakete für serielle Ports die 1998 von SUN veröffentlichte serielle Kommunikations-API: comm2.0.jar (unter Windows), comm3.0. jar (Linux/Solaris); die serielle Kommunikations-API von IBM und eine Open-Source-Implementierung. Da die API von SUN häufig unter Windows verwendet wird und die Implementierung von IBM auf API-Ebene mit der von SUN übereinstimmt, ist die Open-Source-Implementierung nicht so sicher wie die Produkte der beiden großen Hersteller. Hier stellen wir nur die Verwendung der seriellen Port-API von SUN vor Windows-Plattform.

Wenn Sie das Serial-Port-Paket für die serielle Kommunikation verwenden möchten, müssen Sie gemäß den Anweisungen (Readme.html) zusätzlich zum Festlegen der Umgebungsvariablen auch win32com.dll in das Bin-Verzeichnis kopieren Komm. Kopieren Sie jar nach lib; kopieren Sie javax.comm.properties ebenfalls in das lib-Verzeichnis. Wenn Sie jedoch das Paket für die serielle Schnittstelle tatsächlich ausführen und verwenden, reicht es nicht aus, dies einfach zu tun.

Denn normalerweise wird MyApp beim Ausführen von „java MyApp“ von der virtuellen Maschine unter JRE gestartet. Wir kopieren die oben genannten Dateien nur in das entsprechende Verzeichnis von JDK, sodass die Anwendung meldet, dass die serielle Schnittstelle nicht gefunden werden kann. Die Lösung dieses Problems ist sehr einfach. Wir müssen lediglich die oben genannten Dateien im entsprechenden Verzeichnis der JRE ablegen.

Es ist erwähnenswert, dass bei der Verwendung der seriellen Port-API in Netzwerkanwendungen andere komplexere Probleme auftreten. Wenn Sie interessiert sind, können Sie den Beitrag „Über das Problem, dass Applet javacomm20 zum Lesen des seriellen Client-Ports auf der Webseite verwendet“ in der CSDN-Community lesen.

2 Übersicht über die Serial Port API

2.1 javax.comm.CommPort

Dies ist eine abstrakte Klasse, die zur Beschreibung eines Ports verwendet wird, der vom zugrunde liegenden System unterstützt wird. Es enthält einige High-Level-IO-Steuerungsmethoden, die allen verschiedenen Kommunikationsports gemeinsam sind. SerialPort und ParallelPort sind beide Unterklassen. Erstere wird zur Steuerung des seriellen Ports und Letztere zur Steuerung des parallelen Ports verwendet. Beide verfügen über unterschiedliche Steuerungsmethoden für ihre zugrunde liegenden physischen Ports. Hier geht es uns nur um SerialPort.

2.2 javax.comm.CommPortIdentifier

Diese Klasse wird hauptsächlich zur Verwaltung und Einrichtung der seriellen Schnittstelle verwendet. Sie ist die Kernklasse für die Zugriffskontrolle der seriellen Schnittstelle. Dazu gehören hauptsächlich die folgenden Methoden

Bestimmen Sie, ob ein Kommunikationsport verfügbar ist

Öffnen Sie den Kommunikationsport für E/A-Vorgänge

Bestimmen Sie den Besitz des Ports

Behandeln Sie den Streit um den Portbesitz. Verwenden Sie

, um Ereignisse zu verwalten, die durch Änderungen im Portbesitz verursacht werden.

2.3 javax.comm.SerialPort

Diese Klasse wird verwendet, um die unterste Ebene von zu beschreiben eine serielle RS-232-Kommunikationsschnittstelle, die den Mindestsatz an Funktionen definiert, die für die serielle Kommunikation erforderlich sind. Dadurch können Benutzer die serielle Schnittstelle direkt lesen, schreiben und einrichten.

2.4 Beispiel für eine serielle Schnittstelle

Ein langer Textabschnitt ist nicht so klar wie ein kleines Beispiel, das mit dem Paket für die serielle Schnittstelle geliefert wird – ein kurzes Absatz im SerialDemo-Code, um das Verständnis für die Verwendung der Kernklassen der seriellen Port-API zu vertiefen.

2.4.1 Alle verfügbaren seriellen Ports auf diesem Computer auflisten

void listPortChoices() {  
CommPortIdentifier portId;  
Enumeration en = CommPortIdentifier.getPortIdentifiers();  
// iterate through the ports.  
while (en.hasMoreElements()) {  
portId = (CommPortIdentifier) en.nextElement();  
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {  
System.out.println(portId.getName());  
}  
}  
portChoice.select(parameters.getPortName());  
}
Nach dem Login kopieren

Der obige Code kann alle verfügbaren seriellen Portnamen im aktuellen System auflisten. Die Ausgabeergebnisse auf meinem Computer sind COM1 und COM3.

2.4.2 Konfiguration der Parameter der seriellen Schnittstelle

Serielle Schnittstellen verfügen im Allgemeinen über die folgenden Parameter, die vor dem Öffnen der seriellen Schnittstelle konfiguriert werden können: einschließlich Baudrate, Eingabe-/Ausgabeflusskontrolle, Anzahl der Daten Bits, Stop Bitsummen-Paritätsprüfung.

SerialPort sPort;  
try {  
sPort.setSerialPortParams(BaudRate,Databits,Stopbits,Parity);  
//设置输入/输出控制流  
sPort.setFlowControlMode(FlowControlIn | FlowControlOut);  
} catch (UnsupportedCommOperationException e) {}
Nach dem Login kopieren

2.4.3 Lesen und Schreiben über die serielle Schnittstelle

Vor dem Lesen und Schreiben auf die serielle Schnittstelle müssen Sie zuerst eine serielle Schnittstelle öffnen:

CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(PortName);  
try {  
SerialPort sPort = (SerialPort) portId.open("串口所有者名称", 超时等待时间);  
} catch (PortInUseException e) {//如果端口被占用就抛出这个异常  
throw new SerialConnectionException(e.getMessage());  
}  
//用于对串口写数据  
OutputStream os = new BufferedOutputStream(sPort.getOutputStream());  
os.write(int data);  
//用于从串口读数据  
InputStream is = new BufferedInputStream(sPort.getInputStream());  
int receivedData = is.read();
Nach dem Login kopieren

Die Auslesung ist vom Typ int und kann bei Bedarf in andere Typen konvertiert werden.

An dieser Stelle ist zu beachten, dass Sie bei der Konvertierung von Byte nach Int besonders darauf achten sollten, da die Java-Sprache keine vorzeichenlosen Typen hat, d. h. alle Typen sind signiert. Denn wenn das höchste Bit des Bytes 1 ist, wird 1 bei der Konvertierung in den Typ int als Platzhalter verwendet. Auf diese Weise wird die ursprüngliche Bytetypnummer 10000000 zum Typ int und zu 1111111110000000. Dies ist ein sehr ernstes Problem und sollte vermieden werden.

3 gängige Modi der seriellen Port-Kommunikation und ihre Probleme

Endlich sind wir mit dem Gespräch über das Grundwissen fertig, das ich am meisten hasse. Beginnen wir dieses Mal mit unserem Fokus – dem Studium von seriellen Port-Anwendungen. Da das Schreiben von Daten an die serielle Schnittstelle sehr einfach ist, konzentrieren wir uns hier nur auf das Lesen von Daten von der seriellen Schnittstelle.

Normalerweise gibt es zwei Modi für serielle Kommunikationsanwendungen: Der eine besteht darin, die SerialPortEventListener-Schnittstelle zu implementieren, um verschiedene Ereignisse der seriellen Schnittstelle zu überwachen und sie entsprechend zu verarbeiten. Der andere besteht darin, einen unabhängigen Empfangsthread einzurichten, der speziell für den Empfang von Daten verantwortlich ist. Da diese beiden Methoden in einigen Fällen schwerwiegende Probleme haben (was das Problem betrifft, lasse ich es vorerst offen), besteht meine Implementierung darin, dieses Problem mit der dritten Methode zu lösen.


Weitere Artikel, die die serielle Kommunikation von Java kurz vorstellen, finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage