В этой статье описывается функция последовательной коммуникации, реализованную Java. Поделитесь этим для вашей ссылки, следующим образом:
Для реализации последовательной связи с использованием Java (в рамках системы Windows) вам необходимо использовать пакет последовательного порта Javacomm20-win32.zip, предоставленный Sun. Используются три файла, а конфигурация заключается в следующем:
1.comm.jar помещается в java_home/jre/lib/ext;
2. местоположение win32com.dll to java_home/bin;
3. Javax.comm.properties Оба места должны быть размещены
Jre/lib (то есть Jre под папкой Java)
Java_home/jre/lib
Позвольте мне поговорить о среде, которую я применил. При взвешивании электронного масштаба компьютер отправляет команду «r» на монитор управления взвешиванием через последовательный порт, а монитор управления отправляет данные веса в серийный порт один раз, а затем компьютер считывает данные для отображения их на веб -странице. Это образует систему взвешивания в реальном времени.
Код для чтения и написания серийного порта выглядит следующим образом:
Пакет com.chengzhong.tools; импорт java.io.*; import javax.commmmmportidentifier; Импорт javax.comm.*;/**** Этот бон предоставляет некоторые основные функции для реализации полного обмена информацией через серийный порт. out; public static inputstream in; // Сохранить результат чтения Public Static String result = ";"; public static int opensignal = 1;/**** Конструктор ** @param portid идентификатор последовательного использования. 1 для com1,*2 для Com2, и т. Д. **/Public Serialbean (int portid) {portname = "com" +portid;}/**** Эта функция инициализируйте последовательный порт для связи. Он запускает* нить, которая последовательно контролирует последовательный порт. Любой сигнал, захваченный*из последовательного порта, хранится в буферной области. **/public int initiaze () {opensignal = 1; try {portid = commportientifier.getPortIdentifier (portName); try {serialport = (serialport) portid.open ("serial_communication", 2000); } catch (portinuseexception e) {if (! serialbean.portid.getCurrentOwner (). equals ("serial_communication")) {opensignal = 2; // Этот последовательный порт занят другими программами} else if (serialbean.portid.getcurrentowner (). Equals ("serial_communication")) {opensignal = 1; Возврат OpenSignal; } return OpenSignal; } // Используйте inputStream для чтения из последовательного порта и outputStream // out для записи в последовательный порт. 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 (unsupportedComperationException e) {openSignal = 4; // параметр неверный возврат OpenSignal; }} catch (nosuchportException e) {portid = null; OpenSignal = 5; // нет возврата последовательного порта OpenSignal; } // Когда успешно открыть последовательный порт, создайте новый последовательный буфер, // затем создайте поток, который последовательно принимает входящие сигналы из // последовательный порт. Входящие сигналы хранятся в последовательном буфере .// Вернуть информацию о успехе Return Return OpenSignal;}/**** Эта функция возвращает строку с определенной длиной из входящих*сообщений. ** @param Длина длины строки, подлежащей возвращению. **/Public Static void Readport () {serialbean.Result = "; while (in.aveable ()> 0) {c = in.read (); Символ D = новый символ ((char) c); Serialbean.result = serialbean.result.concat (d.toString ()); }}} catch (ioException e) {// todo автоматически сгенерированный блок улова e.printstacktrace ();}}/**** Эта функция отправляет сообщение через последовательный порт. ** @param msg. Msg.length (); }} catch (ioException e) {return;}}/**** Эта функция закрывает используемый последовательный порт. **/public void closePort () {serialport.close ();}} Таким образом, вы можете получить результат чтения через SerialBean.result .
Что касается размещения данных на веб -странице, то Ajax необходимо использовать. Вот Ajax Framework DWR, DWR Class Put.java используется следующим образом:
пакет com.chengzhong.dwr; import java.io.ioexception; импорт com.chengzhong.tools.arith; import com.chengzhong.tools. // Чтение данных serialbean.readport (); String temp = serialbean.result.trim (); // Я буду температуру здесь, чтобы быть WN125.000 кг данных if (! Temp.equals ("") && temp.length () == 11) {return (изменение (temp)). ToString (); } else {return ""; }} // Запуск ответа Взвешивание открытого веса строки (строка num) {int n = integer.parseint (num.trim ()); Последовательный подставка SB = новый последовательный подход (n); Sb.initialize (); return serialbean.opensignal+""; // Вернуть информацию инициализации} // Остановка ответа Взвешивание void endweight () {try {// Закрыть потоки ввода и вывода Serialbean.in.close (); Serialbean.out.close (); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); } if (serialbean.serialport! = null) {serialbean.serialport.close (); // закрыть последовательный порт} serialbean.serialport = null; Serialbean.portid = null; Serialbean.result = ""; } / ** * Преобразовать вес в формате WN125.000 кг в 125,000 (кг) (округлые, две цифры, сохраняемые после десятичной точки) * / public String изменение (источник строки) {двойной результат = 0,0; Строка S1 = Source.substring (2,9); try {result = double.parsedouble (s1); result = arith.round (результат, 2); } catch (Exception e) {e.printstackTrace (); возвращаться ""; } return result.toString (); }}Примечание: арит. Java-это вариант с высокой конкретной расчетом для Java.
Пакет com.chengzhong.tools; импортировать java.math.bigdecimal;/*** Поскольку простые типы Java не могут точно выполнять операции по номерам с плавающей точкой, этот класс инструментов обеспечивает точные операции с плавающей точкой, включая сложение, вычитание, умножение и разделение и округление. */public class arith {// Точность работы по умолчанию. // Этот класс не может быть создан частным arith () {} /*** обеспечивает точные операции с добавлением. * @param v1 добавлен* @param v2 добавить* @return сумма двух параметров*/ public static double add (double v1, double v2) {bigdecimal b1 = new bigdecimal (double.toString (v1)); BigDecimal B2 = новый BigDecimal (Double.ToString (V2)); возврат b1.add (b2) .doublevalue (); } /*** обеспечивает точные операции вычитания. * @param v1 вычитается* @param v2 вычитается* @return Разница между двумя параметрами*/ public static double (двойной v1, двойной v2) {bigdecimal b1 = new bigdecimal (double.tostring (v1)); BigDecimal B2 = новый BigDecimal (Double.ToString (V2)); return b1.subtract (b2) .doublevalue (); } /*** обеспечивает точные операции умножения. * @param v1 Multiplier* @param v2 Multiplier* @return Продукт двух параметров*/ public Static Double Mul (Double V1, Double V2) {BigDecimal B1 = новый BigDecimal (Double.ToString (v1)); BigDecimal B2 = новый BigDecimal (Double.ToString (V2)); return b1.multiply (b2) .doublevalue (); } /** * обеспечивает (относительно) точную операцию деления, когда нет деления, она точна до * 10 цифр после десятичной точки, а последующие числа округлены. * @param v1 разделитель* @param v2 divider* @return Quotation двух параметров*/ public static double div (двойной v1, двойной v2) {return div (v1, v2, def_div_scale); } /*** обеспечивает (относительно) точную операцию деления. Когда нет конца для завершения разделения, параметр масштаба относится к точности *, а последующие числа округлены. * @param v1 разделитель* @param v2 -дичь* @param Scale означает, что он должен быть точным до нескольких цифр после десятичной точки. * @return Covertient двух параметров*/ public static double div (двойной v1, двойной v2, int scale) {if (scale <0) {бросить новое allosalargumentException («Шкала должна быть положительным целым целом или нулевым»); } BigDecimal B1 = новый BigDecimal (Double.ToString (v1)); BigDecimal B2 = новый BigDecimal (Double.ToString (V2)); return b1.divide (b2, scale, bigdecimal.round_half_up) .doublevalue (); } /*** обеспечивает точное десятичное округление. * @param v Подсчета, которые необходимо округлить* @param Scale, сколько цифр сохраняется после десятичной точки* @return Результат после округления*/ public static double раунд (двойной v, int scale) {if (scale <0) {throw new allogalargumentexception («шкала должна быть положительным целом или ноль»); } BigDecimal B = новый BigDecimal (Double.ToString (v)); BigDecimal One = новый BigDecimal ("1"); возврат b.divide (один, Scale, bigdecimal.round_half_up) .doublevalue (); }}На веб -странице:
<script type = "text/javascript" src = "/chengzhong/dwr/ingin.js"> </script> <script type = "text/javascript" src = "/chengzhong/dwr/util.js"> </script> <script type = 'text/javascript' src = '/chengrhong> dwr/srffection'/javascript 'src ='/chengzong> <script type = 'javascript' = '/chengzong </script> <script type = 'text/javascript'> var id; function begin () {id = window.setInterval ('get ()', 500); // автоматически вызовут get () каждые полсекунды, получайте данные об брутто веса и заполните их в текстовом поле} get () {ss.write (readit); // Вызов метода записи в классе DWR 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 ».
Я надеюсь, что эта статья будет полезна для всех Java Programming.