Dieser Artikel beschreibt die von Java implementierte serielle Kommunikationsfunktion. Teilen Sie es für Ihre Referenz wie folgt weiter:
Um die serielle Kommunikation mit Java (unter Windows System) implementieren zu können, müssen Sie das serielle Port-Paket Javacomm20-Win32.zip von Sun verwenden. Es werden drei Dateien verwendet, und die Konfiguration lautet wie folgt:
1.Comm.jar wird in java_home/jre/lib/ext;
2. Place Win32com.dll an Java_Home/bin;
3.javax.comm.Properties beide Orte müssen platziert werden
Jre/lib (das heißt, Jre unter dem Ordner Java)
Java_home/jre/lib
Lassen Sie mich über die Umgebung sprechen, die ich angewendet habe. Beim Gewicht einer elektronischen Skala sendet der Computer den Befehl "R" über den seriellen Port an den Waage Control Monitor, und der Steuermonitor sendet die Gewichtsdaten einmal an den seriellen Port, und der Computer liest die Daten, um sie auf der Webseite anzuzeigen. Dies bildet ein Echtzeit-Waagesystem.
Der Code zum Lesen und Schreiben des seriellen Ports lautet wie folgt:
Paket com.chengzhong.tools; import Java.io. OutputStream Out; öffentlicher statischer InputStream in; // das Leseergebnis speichern. 1 für com1,*2 für com2 usw. **/public serialbean (int portid) {portname = "com" +portid;}/**** Diese Funktion initialisieren Sie den seriellen Port für die Kommunikation. Es startet einen* Thread, der den seriellen Port konsequent überwacht. Jedes Signal, das*aus dem seriellen Anschluss erfasst wurde, wird in einem Pufferbereich gespeichert. **/public initialize () {openSignal = 1; try {portid = comportIdentifier.getPortIdentifier (portname); try {serialport = (serialport) portid.open ("Serial_Communication", 2000); } catch (portinusexception e) {if (! serialbean.portid.getCurrentOwner (). Equals ("serial_communication")) {openSignal = 2; // Dieser serielle Port wird von anderen Programmen besetzt} else if (serialbean.portid.getCurrentOwner (). Equals ("Serial_Communication") {OpenSignal = 1; Rückkehr openSignal; } return openSignal; } // InputStream verwenden, um aus dem seriellen Anschluss aus zu lesen, und OutputStream // aus, um an den seriellen Port zu schreiben. try {in = serialport.getInputStream (); out = serialport.getOutputStream (); } catch (ioException e) {openSignal = 3; // Initialisieren Sie die Kommunikationsparameter auf 9600, 8, 1, keine. try {serialport.setSerialportParams (9600, serialport.databits_8, serialport.stopbits_1, serialport.parity_none); } catch (nicht unterstütztesCommoperationException e) {openSignal = 4; // Der Parameter ist eine falsche Rückgabe openSignal; }} catch (nosuchportException e) {portid = null; OpenSignal = 5; // Es gibt keinen seriellen Anschlussrückgang openSignal; } // Erstellen Sie bei erfolgreicher Serienport einen neuen seriellen Puffer // und erstellen Sie dann einen Thread, der eingehende Signale aus // dem seriellen Port konsistent akzeptiert. Eingehende Signale werden im seriellen Puffer gespeichert. while (in.available ()> 0) {c = in.read (); Zeichen d = neuer Zeichen ((char) c); Serialbean.result = serialbean.result.concat (d.tostring ()); }}} catch (ioException e) {// todo automatisch generierter Fangblock e.printstacktrace ();}}/**** Diese Funktion sendet eine Nachricht durch den seriellen Port. Msg.length (); }} catch (ioException e) {return;}}/**** Diese Funktion schließt den verwendeten seriellen Port. Auf diese Weise können Sie das Leseergebnis über SerialBean.result erhalten.
Für das Einlegen von Daten auf einer Webseite muss Ajax verwendet werden. Hier ist ein AJAX -Framework DWR, DWR -Klasse put.java wie folgt:
Paket com.chengzhong.dwr; import Java.io.ioxception; import com.chengzhong.tools // Data SerialBean.readport () lesen; String temp = serialbean.result.trim (); // Ich bin Tempo hier, um wn125,000 kg Daten zu sein, wenn (! Temp.equals ("") && temp.length () == 11) {return (ändern (temp)). ToString (); } else {return ""; }} // Antwort starten Sie das Wiegen im öffentlichen String startgewicht (String num) {int n = integer.parseInt (num.trim ()); Serialbean sb = new Serialbean (n); Sb.initialize (); return serialbean.opensignal+""; // Initialisierungsinformationen zurückgeben} // Antwort stoppen Sie, dass public void endWeight () {try {// Eingabe- und Ausgabestreams serialBean.in.close () schließen; Serialbean.out.close (); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } if (serialbean.Serialport! = null) {serialbean.Serialport.close (); // Schließen Sie den seriellen Port} serialbean.Serialport = null; Serialbean.portid = null; Serialbean.result = ""; } / ** * Gewicht im Format von WN125,000 kg auf 125.000 (kg) (abgerundet, zwei Ziffern nach dem Dezimalpunkt beibehalten) * / öffentliche Stringänderung (String -Quelle) {Double Ergebnis = 0,0; String S1 = Source.Substring (2,9); try {result = double.ParSeDouble (S1); result = arith.round (Ergebnis, 2); } catch (Ausnahme e) {e.printstacktrace (); zurückkehren ""; } return result.toString (); }}HINWEIS: Arith.java ist eine hochpräzisen Berechnungsdatei für Java.
Paket com.chengzhong.tools; import Java.math.bigdecimal;/*** Da die einfachen Typen von Java nicht korrekt für Operationen für Gleitkomma-Nummern ausführen können, bietet diese Toolklasse genaue Gleitkommaoperationen, einschließlich Addition, Subtraktion, Multiplikation und Abteilung. */public class arith {// Standard Division Operation Accuracy Private statische endgültige int def_div_scale = 10; // Diese Klasse kann nicht so instanziiert werden, dass private arith () {} /*** genaue Additionsvorgänge liefert. * @param v1 hinzugefügt* @param v2 add* @return die Summe der beiden Parameter*/ public static double add (double v1, double v2) {BigDecimal b1 = neu BigDecimal (double.toString (v1)); BigDecimal B2 = neues BigDecimal (double.toString (v2)); return b1.add (b2) .doubleValue (); } /*** Bietet genaue Subtraktionsvorgänge. * @param v1 wird abtrahiert* @param v2 wird subtrahiert* @return Die Differenz zwischen den beiden Parametern*/ public static double sub (double v1, double v2) {BigDecimal b1 = neu BigDecimal (double.toString (v1)); BigDecimal B2 = neues BigDecimal (double.toString (v2)); return b1.subtract (b2) .doubleValue (); } /*** Bietet genaue Multiplikationsvorgänge. * @param v1 multiplierer* @param v2 multiplierer* @return produkt von zwei parametern*/ public static double mul (double v1, double v2) {bigDecimal b1 = new BigDecimal (double.toString (v1)); BigDecimal B2 = neues BigDecimal (double.toString (v2)); return b1.multiply (b2) .doubleValue (); } /** * liefert (relativ) einen genauen Abteilungsvorgang, wenn es keine Teilung gibt, ist es auf * 10 Ziffern nach dem Dezimalpunkt genau und die nachfolgenden Zahlen abgerundet. * @param v1 Divider* @param v2 Divider* @Return -Zitat von zwei Parametern*/ public static double div (doppelte v1, doppelte v2) {return div (v1, v2, def_div_scale); } /*** liefert (relativ) einen genauen Abteilungsbetrieb. Wenn es kein Ende gibt, um die Trennung abzuschließen, bezieht sich der Skalierungsparameter auf die Genauigkeit von *und die nachfolgenden Zahlen werden abgerundet. * @param v1 Divider* @param v2 Divider* @Param Skala bedeutet, dass er nach dem Dezimalpunkt für mehrere Ziffern genau sein muss. * @Return Quotienten von zwei Parametern*/ public static double div (Doppel v1, doppelte v2, int skala) {if (scale <0) {werfen neuer illegalArgumentException ("Die Skala muss eine positive Ganzzahl oder Null sein"); } BigDecimal b1 = neu BigDecimal (double.toString (v1)); BigDecimal B2 = neues BigDecimal (double.toString (v2)); return b1.divide (b2, scale, bigdecimal.round_half_up) .doubleValue (); } /*** Bietet eine genaue Dezimalrundung. * @param v zählt, die abgerundet werden müssen } BigDecimal b = neu BigDecimal (double.toString (v)); BigDecimal One = New BigDecimal ("1"); return b.divide (eine, scale, bigdecimal.round_half_up) .doubleValue (); }}Auf der Webseite:
<script type = "text/javaScript" src = "/chengzhong/dwr/engine.js"> </script> <script type = "text/javaScript" src = "/chengzhong/dwr/util.js"> </script> <script type type = 'text/javaScript'> var id; Funktion begin () {id = window.setInterval ('get ()', 500); // Ruf automatisch Get () jede halbe Sekunde auf, holen Sie sich die Bruttogewichtsdaten und füllen Sie sie in der Textfeld} Get () {ss.write (readit); // Die Schreibmethode in der DWR -Klasse put.java} Funktion readit (data) {if (data! = Null && daten! }} </script>Ich werde nicht über die Verwendung von DWR sprechen
Weitere Informationen zu Java -verwandten Inhalten finden Sie in den Themen dieser Website: "Zusammenfassung der Java -Socket -Programmierkenntnisse", "Zusammenfassung der Java -Datei- und Verzeichnisbetriebsfähigkeiten", "Tutorial über Java -Datenstruktur und Algorithmus", "Zusammenfassung der Java -Operation DOM -Knotenkompetenz" und "Zusammenfassung der Fähigkeiten der Java -Operation", "Zusammenfassung der Fähigkeiten der Java -Operation" "Zusammenfassung der Fähigkeiten der Java -Operation" und "Zusammenfassung der Fähigkeiten der Java -Operation" "
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.