「java串口通知」java发送短信接口

博主:adminadmin 2023-01-13 13:42:08 339

本篇文章给大家谈谈java串口通知,以及java发送短信接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

jsp,java串口通信的问题

可以,使用comm,jar

class SerialExample {

public static void main(String[] args) {

//TO DO: Add your JAVA codes here

long curTime = System.currentTimeMillis();

long serialtime = 8000;

boolean state = true;

SerialBean SB = new SerialBean(2);//设置端口号2

String Msg = "AD 01 0D";//发送命令

SB.Initialize(9600);//设置波率

SB.WritePort(Msg);//发送命令

/* for (int i = 5; i 10; i++) {

System.out.println( SB.ReadPort(3));//设置读取个数

}

*/

String readdata = SB.ReadPort("0D",4000);//读取以OD结束的数据,4000ms没有数据就返回空

if (readdata.length() 0) { //System.out.println(readdata.length());//如果有读到数据

System.out.println(readdata);//如果有读到数据

}

while (readdata.length() 1 state) {//如果没有读到数据

readdata = SB.ReadPort("0D",4000);

System.out.println(readdata);

if (System.currentTimeMillis() - curTime serialtime) {

state = false;//设置读取错误超时

}

System.out.println("readdaa:" + state);

System.out.println(System.currentTimeMillis() - curTime);

}

if (!state) {

System.out.println("数据读取超时");

}

SB.ClosePort();//关闭连接

}

}

public class SerialBuffer {

Convents cv = new Convents();

private String Content = "";

private String CurrentMsg, TempContent;

private boolean available = false;

private int LengthNeeded = 1;

String str = "";

byte b;

/**

*

* This function returns a string with a certain length from the incoming

* messages.

*

* @param Length The length of the string to be returned.

*

*/

public synchronized String GetMsg(int Length) {

LengthNeeded = Length;

long timeout=2000;

long curtime=System.currentTimeMillis();

notifyAll();

if (LengthNeeded Content.length()) {

available = false;

while (available == false) {

try {

if(System.currentTimeMillis()-curtimetimeout) wait();

} catch (InterruptedException e) {

}

}

}

CurrentMsg = Content.substring(0, LengthNeeded);

TempContent = Content.substring(LengthNeeded);

Content = TempContent;

LengthNeeded = 1;

notifyAll();

return CurrentMsg;

}

public synchronized String GetMsg(String endstring,long timeout) {

LengthNeeded =Content.indexOf(endstring);

notifyAll();

if (LengthNeeded 0) {

available = false;

while (available == false) {

try {

wait(timeout);

available=true;

} catch (InterruptedException e) {

}

}

return "";

}

if (LengthNeeded 0) {

CurrentMsg = Content.substring(0, LengthNeeded+endstring.length());

TempContent = Content.substring(LengthNeeded+endstring.length());

Content = TempContent;

}

LengthNeeded = -1;

notifyAll();

return CurrentMsg;

}

public synchronized void PutChar(int c) {

Content = Content.concat(cv.byteToHexString(c));

if (LengthNeeded Content.length() Content.length() 0) {

available = true;

}

notifyAll();

}

}

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package common.serial;

/**

*

* @author Jason

*/

import java.io.*;

import java.util.*;

import javax.comm.*;

import common.code.Convents;

public class SerialBean {

Convents cv=new Convents();

String PortName = "";

CommPortIdentifier portId = null;

SerialPort serialPort = null;

OutputStream out;

InputStream in;

SerialBuffer SB;

ReadSerial RT;

int rate=9600;

String endstring ="";

long timeout=2000;

public SerialBean(int PortID) {

PortName = "COM" + PortID;

}

public int Initialize(int rate) {

int InitSuccess = 1;

int InitFail = -1;

try {

portId = CommPortIdentifier.getPortIdentifier(PortName);

try {

serialPort = (SerialPort) portId.open("Serial_Communication", 2000);

} catch (PortInUseException e) {

return InitFail;

}

//Use InputStream in to read from the serial port, and OutputStream

//out to write to the serial port.

try {

in = serialPort.getInputStream();

out = serialPort.getOutputStream();

} catch (IOException e) {

return InitFail;

}

//Initialize the communication parameters to 9600, 8, 1, none.

try {

serialPort.setSerialPortParams(rate,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {

return InitFail;

}

} catch (NoSuchPortException e) {

return InitFail;

}

SB = new SerialBuffer();

RT = new ReadSerial(SB, in);

RT.start();

return InitSuccess;

}

public String ReadPort(int Length) {

String Msg;

Msg = SB.GetMsg(Length);

return Msg;

}

public String ReadPort(String endstring,long timeout) {

String Msg;

Msg = SB.GetMsg(endstring,timeout);

return Msg;

}

public void WritePort(String Msg) {

try {

out.write(cv.hexStringToByte(Msg));

} catch (IOException e) {

}

}

public void ClosePort() {

serialPort.close();

}

}

package common.serial;

import java.io.*;

public class ReadSerial extends Thread {

private SerialBuffer ComBuffer;

private InputStream ComPort;

char[] ch;

public ReadSerial(SerialBuffer SB, InputStream Port) {

ComBuffer = SB;

ComPort = Port;

}

@Override

public void run() {

int c;

try {

while (true) {

c=ComPort.read();

ComBuffer.PutChar(c);

}

} catch (IOException e) {

}

}

}

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package common.serial;

/**

*

* @author Administrator

*/

public class PortOpreate {

private String sendtxt="";

private String recivetxt="";

private int comid = 1;

private int comrate = 9600;

private int timeout = 4000;

private long waittime = 13000;

private String endtxt = "0D";

private boolean pstate=false;

private String massage="";

public void PortOpreate(boolean hasreturn) {

long curTime = System.currentTimeMillis();

long serialtime = getWaittime();

boolean state = true;

int t=0;

SerialBean SB = new SerialBean(getComid());//设置端口号2

t=SB.Initialize(getComrate());//设置波率

if(t0){

SB.WritePort(getSendtxt());//发送命令

if (hasreturn) {

String readdata = SB.ReadPort(getEndtxt(), getTimeout());//读取以OD结束的数据,4000ms没有数据就返回空

if (readdata.length() 0) { //System.out.println(readdata.length());//如果有读到数据

System.out.println(readdata);//如果有读到数据

}

while (readdata.length() 1 state) {//如果没有读到数据

readdata = SB.ReadPort(getEndtxt(), getTimeout());

System.out.println(readdata);

if (System.currentTimeMillis() - curTime serialtime) {

state = false;//设置读取错误超时

}

System.out.println("readdaa:" + state);

System.out.println(System.currentTimeMillis() - curTime);

}

if (!state) {

System.out.println("数据读取超时");

setMassage("数据读取超时");

}

setRecivetxt(readdata);

setPstate(state);

}

SB.ClosePort();//关闭连接

}else{

System.out.println("端口号出现错误");

setMassage("端口号出现错误");

}

}

/**

* @return the sendtxt

*/

public String getSendtxt() {

return sendtxt;

}

/**

* @param sendtxt the sendtxt to set

*/

public void setSendtxt(String sendtxt) {

this.sendtxt = sendtxt;

}

/**

* @return the recivetxt

*/

public String getRecivetxt() {

return recivetxt;

}

/**

* @param recivetxt the recivetxt to set

*/

public void setRecivetxt(String recivetxt) {

this.recivetxt = recivetxt;

}

/**

* @return the comid

*/

public int getComid() {

return comid;

}

public void setComid(int comid) {

this.comid = comid;

}

public int getComrate() {

return comrate;

}

public void setComrate(int comrate) {

this.comrate = comrate;

}

public int getTimeout() {

return timeout;

}

public void setTimeout(int timeout) {

this.timeout = timeout;

}

public long getWaittime() {

return waittime;

}

public void setWaittime(long waittime) {

this.waittime = waittime;

}

public String getEndtxt() {

return endtxt;

}

public void setEndtxt(String endtxt) {

this.endtxt = endtxt;

}

public boolean isPstate() {

return pstate;

}

public void setPstate(boolean pstate) {

this.pstate = pstate;

}

public String getMassage() {

return massage;

}

public void setMassage(String massage) {

this.massage = massage;

}

}

package common.serial;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class PortOperatorServlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

long curTime = System.currentTimeMillis();

long serialtime = 8000;

boolean state = true;

String Msg = "AD 01 0D";//发送命令

SerialBean SB = new SerialBean(10);//设置端口号2

SB.Initialize(9600);//设置波率

SB.WritePort(Msg);//发送命令

/* for (int i = 5; i 10; i++) {

System.out.println( SB.ReadPort(3));//设置读取个数

}

*/

String readdata = SB.ReadPort("0D",4000);//读取以OD结束的数据

if (readdata.length() 0) { //System.out.println(readdata.length());//如果有读到数据

System.out.println(readdata);//如果有读到数据

}

while (readdata.length() 1 state) {//如果没有读到数据

readdata = SB.ReadPort("0D",4000);

System.out.println(readdata);

out.println(readdata);

if (System.currentTimeMillis() - curTime serialtime) {

state = false;//设置读取错误超时

}

System.out.println("readdaa:" + state);

System.out.println(System.currentTimeMillis() - curTime);

}

if (!state) {

System.out.println("数据读取超时");

out.println("数据读取超时");

}

SB.ClosePort();//关闭连接

} finally {

out.close();

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

public String getServletInfo() {

return "Short description";

}

}

package common.code;

public final class Convents {

public final static char[] BToA = "0123456789abcdef".toCharArray();

/**

* 把16进制字符串转换成字节数组A1 01 0D

* @param hex

* @return

*/

public byte[] hexStringToByte(String hex) {

String str[] = hex.split(" ");

int len = str.length;

byte[] result = new byte[len];

char[] achar = hex.toCharArray();

for (int i = 0; i len; i++) {

result[i] = (byte) (toByte(str[i].charAt(0)) * 16 + toByte(str[i].charAt(1)));

}

return result;

}

private static byte toByte(char c) {

byte b = (byte) ("0123456789ABCDEF".indexOf(c));

return b;

}

/**

* 把字节数组转换成16进制字符串

* @param bArray

* @return

*/

public String byteToHexString(int b){

String st="";

st=Integer.toHexString(b);

if (st.length() 2) {

st="0"+Integer.toHexString(b).toUpperCase()+" ";

} else {

st=Integer.toHexString(b).toUpperCase()+" ";

}

return st;

}

public String bytesToHexString(byte[] bArray) {

StringBuffer sb = new StringBuffer(bArray.length);

String sTemp;

for (int i = 0; i bArray.length; i++) {

sTemp = Integer.toHexString(bArray[i]).toUpperCase();

}

return sb.toString();

}

}

如何用java实现多串口通讯

串口的话只能用JAVA调用,然后通过关闭、打开来判断。

另外Java是写不了串口的,需要C才可以

java实现串口通信代码

public static void process() {

try {

Enumeration portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements())

{

CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称

{

if(portId.getName().equals("COM1")){//如果是COM1端口则退出循环

break;

}else{

portId=null;

}

}

}

SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000);//打开串口的超时时间为1000ms

serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//设置串口速率为9600,数据位8位,停止位1们,奇偶校验无

InputStream in = serialPort.getInputStream();//得到输入流

OutputStream out = serialPort.getOutputStream();//得到输出流

//进行输入输出操作

//操作结束后

in.close();

out.close();

serialPort.close();//关闭串口

} catch (PortInUseException e) {

e.printStackTrace();

} catch (UnsupportedCommOperationException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

java 如何向串口发送指令

需要一个包 comm.jar

需要一个配置文件 javax.comm.properties (工程根目录)

(或者放在JDK里)

// 取得端口句柄

CommPortIdentifier id = CommPortIdentifier.getPortIdentifier(portName);

port = (SerialPort) id .open("SerialDemo", 30000);

port .setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

port .notifyOnDataAvailable(true);

port .notifyOnBreakInterrupt(true);

port .enableReceiveTimeout(delayTime);

读取之类的自己写就行了,(port .getInputStream()),完事之后别忘了关掉端口,不然下次就不能用了,只能重启系统

配置文件里就一行:

Driver=com.sun.comm.Win32Driver

----------------------------------

你设个断点单步调试看一下原因,那个SerialBean是你自己写的,谁也不知道里面整啥了,单步调试就知道哪里错误。

抛出异常了Exception in thread "main" java.lang.NullPointerException

at serial.SerialBean.WritePort(SerialBean.java:114)

从这里看,是在SerialBean.java的114行(函数WritePort)的一个东西,它的值是null,所以报错了

在java的web程序中怎么使用串口通讯?

方法如下:

新建eclipse工程,添加comm.jar或者RXTXcomm.jar包。因为javacomm20-win32.zip包里有样例SimpleRead.java,可以通过这个例子测试串口是否正确。

接收数据正确后,根据传送接收双方的协议,采用CRC循环校验,根据传输的一方的校验函数判定是否是正确传输。

把正确结束的数据解析,查看自己指定的通讯规则,然后解析。

插入数据库,jdbc插入。

数据统计,定时统计每小时,每天,每月,每年的平均值,采用quartz服务来实现。

建立web工程,采用hibernate3,spring3,dwr技术把数据库数据动态显示,图表采用jfreechart,以及AJAX的运用

java优点:

java是纯面向对象编程的语言;

平台无关性 (一次编译,到处运行;Write Once,Run Anywhere);

java提供了许多内置的类库,通过这些类库,简化了开发人员的设计工作,同时缩短了项目开发时间;

提供了对Web应用开发的支持,例如,Applet,Servlet,和JSP可以用来开发Web应用程序,,Socket,RMI可以用来开发分布式应用程序的类库;

去除了c++中难以理解,容易混淆的特性(如c++中的多继承,头文件,指针,结构,单元,运算符重载,虚拟基础类,使得程序更加严谨,整洁。

java串口通信

java.comm可以在XP下使用,我用JAVA写过串口程序

下载了comm.jar开发包后,与之一起的还有两个重要的文件,win32com.dll和javax.comm.properties。

1 comm.jar提供了通讯用的java API。

2 win32com.dll提供了供comm.jar调用的本地驱动接口。

3 javax.comm.properties是这个驱动的类配置文件。

首先 将comm.jar复制到JRE_HOME\lib\ext目录。

接着 将win21com.dll复制到你的RS232应用程序运行的目录,即user.dir。

最后 将javax.comm.properties复制到JRE_HOME\lib目录。

我在Eclipse3.2+JDK1.6开发的时候,在项目中包含comm.jar和win32com.dll

java串口通知的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java发送短信接口、java串口通知的信息别忘了在本站进行查找喔。