この記事では、Javaが実装したシリアル通信機能について説明します。次のように、参照のために共有してください。
Java(Windows Systemの下)を使用してシリアル通信を実装するには、Sunが提供するシリアルポートパッケージjavacomm20-Win32.zipを使用する必要があります。 3つのファイルが使用され、構成は次のとおりです。
1.Comm.jarはJava_home/jre/lib/extに配置されています。
2.win32com.dllをjava_home/binに配置します。
3.javax.comm.properties両方の場所を配置する必要があります
jre/lib(つまり、Javaフォルダーの下のJRE)
java_home/jre/lib
私が適用した環境について話させてください。電子スケールを計量すると、コンピューターはコマンド「R」をシリアルポートを介して計量制御モニターに送信し、コントロールモニターは重量データをシリアルポートに一度送信し、コンピューターはデータを読み取り、Webページに表示します。これにより、リアルタイムの計量システムが形成されます。
シリアルポートを読み書きするためのコードは次のとおりです。
パッケージcom.chengzhong.tools; import java.io。*; inart javax.comm.commportidentifier; import javax.comm。*;/****この豆は、シリアルポートを介してフルデュプレックス*情報交換を実装するための基本的な機能を提供します。 outputStream out; public static inputstream in; Com1の場合は1、com2の場合は*2など。シリアルポートを一貫して監視する*スレッドを開始します。シリアルポートからキャプチャされた*キャプチャされた*は、バッファ領域に保存されます。 try {portid = commportidentifier.getPortidentifier(portname); try {serialport =(serialport)portid.open( "serial_communication"、2000); } catch(portinuseException e){if(!serialbean.portid.getCurrentowner()。 //このシリアルポートは他のプログラムで占められています} else if(serialbean.portid.getCurrentowner()。equals( "serial_communication")){opensignal = 1; OpenSignalを返します。 } opensignalを返します。 } // inputstream inを使用してシリアルポートから読み取り、outputstream // out out out on serialポートに書き込みます。 try {in = serialport.getInputStream(); out = serialport.getOutputStream(); } catch(ioException e){opensignal = 3; //通信パラメーターを9600、8、1、なしに初期化します。 try {serialport.setserialportparams(9600、serialport.databits_8、serialport.stopbits_1、serialport.parity_none); } catch(unsupportedcommoperationexception e){opensignal = 4; //パラメーターは誤った返品ですopensignal。 }} catch(nosuchportexception e){portid = null; opensignal = 5; //シリアルポートリターンはありませんopensignal; } //シリアルポートを正常に開くと、新しいシリアルバッファーを作成し、// //シリアルポートから着信信号を一貫して受け入れるスレッドを作成します。着信信号はシリアルバッファーに保存されます。//戻り成功情報Return OpenSignal;}/****この関数は、着信*メッセージから特定の長さの文字列を返します。 while(in.abailable()> 0){c = in.read();文字D =新しい文字((char)c); serialbean.result = serialbean.result.concat(d.tostring()); }}} catch(ioException e){// todo auto-fenated catch block e.printstacktrace();}/****この関数は、シリアルポートを介してメッセージを送信します。 msg.length(); }} catch(ioexception e){return;}}/****この関数は使用中のシリアルポートを閉じます。このようにして、 SerialBean.resultを介して読み取り結果を取得できます。
Webページにデータを入れるには、Ajaxを使用する必要があります。 AjaxフレームワークDWR、DWRクラスPut.javaは次のように使用されます。
パッケージcom.chengzhong.dwr;インポートjava.io.ioexception;インポートcom.chengzhong.tools.arith; Import com.chengzhong.tools.serialbean; public class put {//2011.9.17 public string write(){// send instruct r、instrums send nest weight data serialbean.writeport; //データserialbean.readport(); string temp = serialbean.result.trim(); //ここでは、データのwn125.000kgの場合は一時です。 } else {return ""; }} //応答は、パブリック文字列StringWeight(string num){int n = integer.parseint(num.trim()); SerialBean Sb = new SerialBean(n); sb.initialize(); serialbean.opensignal+""を返します。 //初期化情報を返します} //応答停止public void endweight(){try {//入力および出力ストリームserialbean.in.close(); serialbean.out.close(); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); } if(serialbean.serialport!= null){serialbean.serialport.close(); //シリアルポートを閉じる} serialbean.serialport = null; serialbean.portid = null; serialbean.result = ""; } / ** * WN125.000kgの形式で重量を125.000(kg)に変換します(小数点の後に丸く、2桁が保持されます)文字列s1 = source.substring(2,9); try {result = double.parsedouble(s1); result = arith.round(result、2); } catch(Exception e){e.printstacktrace();戻る ""; } return result.toString(); }}注:arith.javaは、Javaの高精度計算ファイルです。
パッケージcom.chengzhong.tools; import java.math.bigdecimal;/*** Javaの単純なタイプは浮動小数点数の操作を正確に実行できないため、このツールクラスは、追加、減算、乗算、分割、丸めなど、正確な浮動小数点操作を提供します。 */public class arith {//デフォルトのディビジョン操作精度プライベート静的int def_div_scale = 10; //このクラスにインスタンス化することはできませんprivate arith(){} /***正確な追加操作を提供します。 * @Param V1追加* @Param V2 Add* @Return 2つのパラメーターの合計*/ public static double add(double v1、double v2){bigdecimal b1 = new bigdecimal(double.tostring(v1)); BigDecimal B2 = new BigDecimal(double.Tostring(v2)); return b1.add(b2).doublevalue(); } /***正確な減算操作を提供します。 * @param v1が減算されます* @param v2が減算されます* @return 2つのパラメーターの差*/ public static double sub(double v1、double v2){bigdecimal b1 = new bigdecimal(double.tostring(v1)); BigDecimal B2 = new BigDecimal(double.Tostring(v2)); b1.subtract(b2).doublevalue()を返します。 } /***正確な乗算操作を提供します。 * @Param V1 Multiplier* @Param V2 Multiplier* @return 2つのパラメーターの製品*/ public static double mul(double v1、double v2){bigdecimal b1 = new bigdecimal(double.tostring(v1)); BigDecimal B2 = new BigDecimal(double.Tostring(v2)); b1.multiply(b2).doublevalue()を返します。 } /** *は(比較的)正確な除算操作を提供します。分割がない場合、小数点後の10桁まで正確であり、後続の数値が丸くなります。 * @Param V1 Divider* @Param V2 Divider* @return 2つのパラメーターの引用*/ public static double div(double v1、double v2){return div(v1、v2、def_div_scale); } /***正確な分割操作を(比較的)提供します。分離を完了する終わりがない場合、スケールパラメーターは *の精度を指し、その後の数値は丸みを帯びています。 * @Param V1 Divider* @Param V2 Divider* @Paramスケールは、小数点以降に数桁に正確にする必要があることを意味します。 * 2つのパラメーターの@returnの商*/ public static double div(double v1、double v2、int scale){if(scale <0){throw new IllegalargumentException( "スケールは正の整数またはゼロである必要があります"); } bigdecimal b1 = new bigdecimal(double.tostring(v1)); BigDecimal B2 = new BigDecimal(double.Tostring(v2)); return b1.divide(b2、scale、bigdecimal.round_half_up).doublevalue(); } /***正確な小数の丸めを提供します。 * @param v丸みを帯びている必要がある@param v @param scale小数点の後に数桁数が保持される数* @丸めた後の結果*/ public static double round(double v、int scale){if(scale <0){throw new lealgalargumentexception( "スケールは正の整数またはゼロでなければなりません"); } bigdecimal b = new bigdecimal(double.tostring(v)); bigdecimal one = new bigdecimal( "1"); b.divide(1つ、スケール、bigdecimal.round_half_up).doublevalue(); }}Webページで:
<script type = "text/javascript" src = "/chengzhong/dwr/engine.js"> </script> <スクリプトタイプ= "text/javascript" src = "/chengzhong/dwr/util.js"> </script> <script type = 'text/javascript' src = '/chengong/dwr/</dwr/< type = 'text/javascript'> var id; function begin(){id = window.setInterval( 'get()'、500); // get()を半秒ごとに自動的に呼び出し、総重量データを取得し、テキストボックスに記入} function get(){ss.write(readit); // dwr class put.javaの書き込みメソッド} function readit(data){if(data!= null && data!= ""){document.getElementById( "MZBF")。value = data; }} </script>DWRの使用については話しません
Java関連のコンテンツの詳細については、このサイトのトピックをご覧ください:「Javaソケットプログラミングスキルの概要」、「Javaファイルとディレクトリ操作スキルの概要」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、「Java Operation Dom Nodeスキルの概要」、および「Java Cache Operation Skills」の概要
この記事がみんなのJavaプログラミングに役立つことを願っています。